Echtpost MCP connector
OAuth 2.1/DCRCommunicationAutomationConnect to Echtpost MCP. Send physical postcards and letters programmatically via the Echtpost API.
Echtpost MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'echtpostmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Echtpost MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'echtpostmcp_get_me',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "echtpostmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Echtpost MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="echtpostmcp_get_me",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Update group, contact — Update a contact group
- Fit preview — Check if a message fits on a postcard with the given font settings
- List templates, motives, groups — List available card templates for the account
- Get template, motive, me — Get details of a specific template by ID
- Delete group, contact — Delete a contact group
- Create group, contact, card from template — Create a new contact group
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
echtpostmcp_cancel_card#Cancel a scheduled postcard. Only cards where "cancelable" is true can be cancelled. Cancellation is asynchronous and may take a few minutes.1 param
Cancel a scheduled postcard. Only cards where "cancelable" is true can be cancelled. Cancellation is asynchronous and may take a few minutes.
idstringrequiredUUID of the card to cancel.echtpostmcp_create_card#Create a postcard with custom message and font. Validates that text fits on the card. Use preview_fit first to check if your message fits. Specify recipients via existing contact IDs, group IDs, or inline recipient objects (combinable). For simpler creation from a saved template, use create_card_from_template instead.15 params
Create a postcard with custom message and font. Validates that text fits on the card. Use preview_fit first to check if your message fits. Specify recipients via existing contact IDs, group IDs, or inline recipient objects (combinable). For simpler creation from a saved template, use create_card_from_template instead.
contentstringrequiredMain message text to print on the postcard.deliver_atstringrequiredDelivery date. Accepted values: today, tomorrow, YYYY-MM-DD, or N-days-from-now.motive_idintegerrequiredNumeric ID of the motive (front image design) to use on the card.content_psstringoptionalOptional postscript line printed after the main message (P.S.).content_verticalstringoptionalOptional text printed in the vertical side panel of the card.font_colorstringoptionalFont color for the card text. Accepted values: black, blue.font_familystringoptionalFont family for the card text. Accepted values: architects_daughter, reenie_beanie, special_elite.font_sizeintegeroptionalFont size in pt. Allowed ranges: architects_daughter 12–14, reenie_beanie 15–17, special_elite 11–13.group_idsarrayoptionalArray of contact group IDs. All members of each group receive the card.notification_emailstringoptionalEmail address to receive delivery notifications.notification_send_onstringoptionalDate to send the notification (ISO 8601, YYYY-MM-DD). Defaults to the delivery date.notification_typestringoptionalWhen to send a delivery notification. Accepted values: before_send, after_sent.qr_code_urlstringoptionalURL to encode as a QR code printed on the card.recipient_idsarrayoptionalArray of existing contact IDs to send the card to.recipientsarrayoptionalArray of inline recipient objects. Each requires last_name, street, zip, city, and country_code.echtpostmcp_create_card_from_template#Create a postcard from an existing template. The template provides the message, font, and motive. Specify recipients via existing contact IDs, group IDs, or inline recipient objects (combinable). Use list_templates to find templates.5 params
Create a postcard from an existing template. The template provides the message, font, and motive. Specify recipients via existing contact IDs, group IDs, or inline recipient objects (combinable). Use list_templates to find templates.
deliver_atstringrequiredDelivery date. Accepted values: today, tomorrow, YYYY-MM-DD, or N-days-from-now.template_idintegerrequiredNumeric ID of the template to use for this card.group_idsarrayoptionalArray of contact group IDs. All members of each group receive the card.recipient_idsarrayoptionalArray of existing contact IDs to send the card to.recipientsarrayoptionalArray of inline recipient objects. Each requires last_name, street, zip, city, and country_code.echtpostmcp_create_contact#Create a new contact for the account. At minimum, provide last_name and a postal address (street, zip, city, country_code). Optionally assign to groups via group_ids or group_names (group_names auto-creates groups if they do not exist).17 params
Create a new contact for the account. At minimum, provide last_name and a postal address (street, zip, city, country_code). Optionally assign to groups via group_ids or group_names (group_names auto-creates groups if they do not exist).
citystringrequiredCity for the recipient's postal address.country_codestringrequiredISO 3166-1 alpha-2 country code (e.g. DE for Germany).last_namestringrequiredRecipient's last name.streetstringrequiredStreet name and house number.zipstringrequiredPostal code for the recipient's address.birthdatestringoptionalContact's birthdate in ISO 8601 format (YYYY-MM-DD).company_namestringoptionalCompany name for the recipient.custom_salutationstringoptionalCustom greeting line. Use when greeting_style is set to custom.departmentstringoptionalDepartment within the company.external_idstringoptionalYour own reference ID for this record.first_namestringoptionalRecipient's first name.genderstringoptionalGender identifier. Accepted values: male_user, female_user, diverse_user.greeting_stylestringoptionalGreeting style for the card. Accepted values: formal, informal, custom.group_idsarrayoptionalArray of contact group IDs. All members of each group receive the card.group_namesarrayoptionalArray of group names. Groups are created automatically if they do not exist.state_codestringoptionalState or province code (e.g. BY for Bavaria).titlestringoptionalAcademic or professional title (e.g. Dr., Prof.).echtpostmcp_create_group#Create a new contact group. Provide a name; optionally an external_id for your own reference.2 params
Create a new contact group. Provide a name; optionally an external_id for your own reference.
namestringrequiredGroup name.external_idstringoptionalYour own reference ID for this record.echtpostmcp_delete_contact#Delete a contact by ID. This is permanent and cannot be undone.1 param
Delete a contact by ID. This is permanent and cannot be undone.
idintegerrequiredNumeric ID of the contact to delete.echtpostmcp_delete_group#Delete a contact group. Fails if the group has attached workflows.1 param
Delete a contact group. Fails if the group has attached workflows.
idintegerrequiredNumeric ID of the group to delete.echtpostmcp_get_card#Get details of a specific postcard by its ID. Returns status, content, font, delivery date, and whether the card is cancelable.1 param
Get details of a specific postcard by its ID. Returns status, content, font, delivery date, and whether the card is cancelable.
idstringrequiredUUID of the card to retrieve.echtpostmcp_get_contact#Get details of a specific contact by their ID. Returns all fields including first_name, last_name, greeting, address, and group_ids.1 param
Get details of a specific contact by their ID. Returns all fields including first_name, last_name, greeting, address, and group_ids.
idintegerrequiredNumeric ID of the contact to retrieve.echtpostmcp_get_group#Get details of a specific contact group by ID. Returns name, external_id, and recipient count.1 param
Get details of a specific contact group by ID. Returns name, external_id, and recipient count.
idintegerrequiredNumeric ID of the group to retrieve.echtpostmcp_get_me#Get account info, user email, API key metadata, and current credit balance. Use this to verify the connection and check available credits.0 params
Get account info, user email, API key metadata, and current credit balance. Use this to verify the connection and check available credits.
echtpostmcp_get_motive#Get details of a specific motive (postcard design) by its ID.1 param
Get details of a specific motive (postcard design) by its ID.
idintegerrequiredNumeric ID of the motive (postcard design) to retrieve.echtpostmcp_get_template#Get details of a specific template by ID. Returns content, font, motive, and QR code URL.1 param
Get details of a specific template by ID. Returns content, font, motive, and QR code URL.
idintegerrequiredNumeric ID of the template to retrieve.echtpostmcp_list_cards#List postcards for the account. Returns id, status (pending/scheduled/sent/canceled), content, font, delivery date, and whether the card is cancelable. Supports status filter.3 params
List postcards for the account. Returns id, status (pending/scheduled/sent/canceled), content, font, delivery date, and whether the card is cancelable. Supports status filter.
pageintegeroptionalPage number for paginated results. Defaults to 1.per_pageintegeroptionalNumber of results per page. Defaults to 50, maximum 100.statusstringoptionalFilter cards by status. Accepted values: pending, scheduled, sent, canceled.echtpostmcp_list_contacts#List contacts for the account. Returns id, first_name, last_name, address, greeting, and other fields. Supports search and pagination (50 per page).3 params
List contacts for the account. Returns id, first_name, last_name, address, greeting, and other fields. Supports search and pagination (50 per page).
pageintegeroptionalPage number for paginated results. Defaults to 1.per_pageintegeroptionalNumber of results per page. Defaults to 50, maximum 100.searchstringoptionalSearch term to filter results by name or company.echtpostmcp_list_credits#Show the current credit balance, how many local/foreign postcards can be sent, and the price per card in EUR.0 params
Show the current credit balance, how many local/foreign postcards can be sent, and the price per card in EUR.
echtpostmcp_list_groups#List contact groups for the account. Groups can be used as recipients when creating cards.2 params
List contact groups for the account. Groups can be used as recipients when creating cards.
pageintegeroptionalPage number for paginated results. Defaults to 1.per_pageintegeroptionalNumber of results per page. Defaults to 50, maximum 100.echtpostmcp_list_motives#List available postcard motives (designs). Returns id, name, orientation, and feature flags. Supports search by name/description. Use the motive id when creating cards.3 params
List available postcard motives (designs). Returns id, name, orientation, and feature flags. Supports search by name/description. Use the motive id when creating cards.
pageintegeroptionalPage number for paginated results. Defaults to 1.per_pageintegeroptionalNumber of results per page. Defaults to 50, maximum 100.searchstringoptionalSearch term to filter results by name or company.echtpostmcp_list_templates#List available card templates for the account. Templates contain pre-configured message, font, and motive — use create_card_from_template to send one.2 params
List available card templates for the account. Templates contain pre-configured message, font, and motive — use create_card_from_template to send one.
pageintegeroptionalPage number for paginated results. Defaults to 1.per_pageintegeroptionalNumber of results per page. Defaults to 50, maximum 100.echtpostmcp_preview_fit#Check if a message fits on a postcard with the given font settings. Returns fits (true/false), lines used, max lines, and a suggested smaller font size if it overflows. Use this before create_card to iterate on message length.4 params
Check if a message fits on a postcard with the given font settings. Returns fits (true/false), lines used, max lines, and a suggested smaller font size if it overflows. Use this before create_card to iterate on message length.
contentstringrequiredMessage text to check for fit on the postcard.font_familystringoptionalFont family for the card text. Accepted values: architects_daughter, reenie_beanie, special_elite.font_sizeintegeroptionalFont size in pt. Allowed ranges: architects_daughter 12–14, reenie_beanie 15–17, special_elite 11–13.sample_greetingstringoptionalSample greeting string used to expand the {anrede} placeholder when checking fit.echtpostmcp_update_contact#Update one or more fields on an existing contact. Optional fields not provided are left unchanged. To clear an optional field, pass an empty string. group_ids replaces all memberships; group_names additively assigns groups (auto-creating).18 params
Update one or more fields on an existing contact. Optional fields not provided are left unchanged. To clear an optional field, pass an empty string. group_ids replaces all memberships; group_names additively assigns groups (auto-creating).
idintegerrequiredNumeric ID of the contact to update.birthdatestringoptionalContact's birthdate in ISO 8601 format (YYYY-MM-DD).citystringoptionalCity for the recipient's postal address.company_namestringoptionalCompany name for the recipient.country_codestringoptionalISO 3166-1 alpha-2 country code (e.g. DE for Germany).custom_salutationstringoptionalCustom greeting line. Use when greeting_style is set to custom.departmentstringoptionalDepartment within the company.external_idstringoptionalYour own reference ID for this record.first_namestringoptionalRecipient's first name.genderstringoptionalGender identifier. Accepted values: male_user, female_user, diverse_user.greeting_stylestringoptionalGreeting style for the card. Accepted values: formal, informal, custom.group_idsarrayoptionalArray of contact group IDs. All members of each group receive the card.group_namesarrayoptionalArray of group names. Groups are created automatically if they do not exist.last_namestringoptionalRecipient's last name.state_codestringoptionalState or province code (e.g. BY for Bavaria).streetstringoptionalStreet name and house number.titlestringoptionalAcademic or professional title (e.g. Dr., Prof.).zipstringoptionalPostal code for the recipient's address.echtpostmcp_update_group#Update a contact group. Only provided fields are changed.3 params
Update a contact group. Only provided fields are changed.
idintegerrequiredNumeric ID of the group to update.external_idstringoptionalYour own reference ID for this record.namestringoptionalGroup name.