# Lettr — MCP server on mcp.ai > Connect your Lettr account and use 60 tools for transactional email straight from your AI agent. Connect with your own API key. Lettr is an email and messaging platform for transactional delivery, templates, audiences, campaigns, domains, and webhooks. By: mcp.ai · official Page: https://mcp.ai/lettr ## Connect (MCP protocol) Remote MCP endpoint (HTTP, streamable): https://api.mcp.ai/p_lettr?ms=1787293560000 Add it as a custom/remote MCP connector, then authenticate when prompted. ## REST API (no MCP client required) Every tool is also a REST endpoint, authed with a workspace API key. Discover: GET https://api.mcp.ai/api/lettr/_endpoints # public; lists every endpoint Call: POST https://api.mcp.ai/api/lettr/ Authorization: Bearer sk_live_… # create one at https://mcp.ai/settings/api-keys Content-Type: application/json Body: { …args } → { "ok": true, "tool": "", "result": { … } } ## Developer docs How to use (MCP or REST), markdown: https://mcp.ai/lettr/skill.md Postman collection (v2.1): https://mcp.ai/lettr/postman.json ## Tools - lettr_attach_contacts_to_lists(list_ids: string[], contact_ids: string[]) — Attach every combination of 1-1000 contacts and 1-50 audience lists, processing up to 50,000 contact-list pairs and reporting new and existing memberships. - lettr_bulk_create_audience_contacts(emails: string[], list_id?: string, properties?: object) — Create or recognize up to 1000 normalized, deduplicated contacts. Shared properties affect only newly created contacts; list_id applies to all contacts, including those that already exist. - lettr_cancel_scheduled_email(transmission_id: string) — Cancel a scheduled email before its delivery time; cancellation is unavailable once processing has begun. - lettr_create_audience_contact(email: string, list_id?: string, properties?: object) — Create one audience contact with optional properties and list membership. - lettr_create_audience_contact_with_double_opt_in(email: string, list_id?: string, properties?: object, double_opt_in: object) — Create an unverified audience contact and irreversibly send an external confirmation email; the contact becomes subscribed only after confirming. - lettr_create_audience_list(name: string) — Create a uniquely named audience list for grouping contacts. - lettr_create_audience_property(name: string, property_type: string, fallback_value?: string) — Define a custom contact property with an immutable name and value type. Changing either later requires deleting and recreating the property. - lettr_create_audience_segment(name: string, list_id?: string, conditions: object) — Create a dynamic audience segment whose condition groups are ANDed while conditions inside each group are ORed. - lettr_create_audience_topic(name: string, visibility?: string, description?: string, default_subscription?: string) — Create a public or private subscription topic with an immutable opt-in or opt-out default. - lettr_create_domain(domain: string) — Register a sending domain and return the DNS configuration needed to verify it. - lettr_create_template(html?: string, name: string, folder_id?: integer, project_id?: integer, editor_json?: string) — Create and publish an email template from either custom HTML or Topol editor JSON, extracting its merge tags. - lettr_create_webhook(url: string, name: string, events?: string[], auth_type: string, events_mode: string, auth_password?: string, auth_username?: string, oauth_client_id?: string, oauth_token_url?: string, oauth_client_secret?: string) — Create an active event webhook using no authentication, HTTP Basic credentials, or OAuth 2 client credentials. - lettr_delete_audience_contact(contact_id: string) — Permanently delete one audience contact and its associated memberships. - lettr_delete_audience_lists(list_ids: string[]) — Permanently delete between 1 and 50 audience lists in one request. - lettr_delete_audience_property(property_id: string) — Permanently delete a custom contact-property definition. - lettr_delete_audience_segment(segment_id: string) — Permanently delete one dynamic audience segment. - lettr_delete_audience_topic(topic_id: string) — Permanently delete one audience subscription topic. - lettr_delete_domain(domain: string) — Permanently remove a sending domain from Lettr and SparkPost so it can no longer send email. - lettr_delete_template(project_id?: integer, template_slug: string) — Permanently delete an email template and all of its versions. - lettr_delete_webhook(webhook_id: string) — Permanently remove a webhook so Lettr stops delivering events to it. - lettr_detach_contacts_from_lists(list_ids: string[], contact_ids: string[]) — Detach every combination of 1-1000 contacts and 1-50 audience lists, reporting removed and absent memberships. - lettr_get_audience_contact(contact_id: string) — Retrieve one contact's email, status, custom properties, list memberships, and topic subscriptions by ID. - lettr_get_audience_list(list_id: string) — Retrieve one audience list and its current contact count by ID. - lettr_get_audience_property(property_id: string) — Retrieve one custom contact-property definition and its fallback value. - lettr_get_audience_segment(segment_id: string) — Retrieve one dynamic segment's list restriction, complete AND-of-OR condition definition, and cached contact count. - lettr_get_audience_topic(topic_id: string) — Retrieve one subscription topic's defaults, visibility, and current contact count. - lettr_get_campaign(campaign_id: string) — Retrieve one campaign's name, subject, sender and reply-to configuration, schedule, rendered HTML, lifecycle state, recipient counts, and engagement statistics. The campaign's audience definition is n - lettr_get_domain(domain: string) — Retrieve one sending domain's send readiness, DNS records, provider detection, and verification status. - lettr_get_email(to_date?: string, from_date?: string, request_id: string) — Retrieve a sent email's delivery state, recipients, schedule metadata, and events by request ID. The configurable event date range defaults to the last 10 days, not the email's complete event history. - lettr_get_scheduled_email(transmission_id: string) — Retrieve a scheduled email's current state and events by transmission ID, including after it has been processed. - lettr_get_template(project_id?: integer, template_slug: string) — Retrieve an email template's metadata, active HTML or editor JSON content, and version counts by slug. - lettr_get_template_merge_tags(version?: integer, project_id?: integer, template_slug: string) — Return required and optional merge tags for a template's active or specified version before sending with substitution data. - lettr_get_webhook(webhook_id: string) — Retrieve one webhook's target, enabled state, event selection, authentication mode, and latest delivery status. - lettr_list_audience_contacts(cursor?: string, search?: string, status?: string, list_id?: string, per_page?: integer, segment_id?: string) — Return one cursor-controlled page of contacts, optionally filtered by search text, status, list, or segment. - lettr_list_audience_lists(cursor?: string, per_page?: integer) — Return one cursor-controlled page of audience lists with each list's contact count. - lettr_list_audience_properties(cursor?: string, per_page?: integer) — Return one cursor-controlled page of custom contact-property definitions and fallback values. - lettr_list_audience_segments(cursor?: string, list_id?: string, per_page?: integer) — Return one cursor-controlled page of dynamic audience segments, including their complete AND-of-OR condition definitions, optionally filtered by list. - lettr_list_audience_topics(cursor?: string, per_page?: integer) — Return one cursor-controlled page of subscription topics with defaults, visibility, and contact counts. - lettr_list_campaign_events(email?: string, limit?: integer, cursor?: string, end_date?: string, event_type?: string, start_date?: string, campaign_id: string) — Return one cursor-controlled page of a campaign's delivery and engagement events, with event, recipient, and time filters. An empty items page can still have a next_cursor; continue until next_cursor - lettr_list_campaigns(cursor?: string, status?: string, per_page?: integer) — Return one cursor-controlled page of campaigns with complete delivery and engagement statistics, optionally filtered by lifecycle status. - lettr_list_domains() — Return all sending domains with approval, DNS verification, and send-readiness status. - lettr_list_email_events(cursor?: string, to_date?: string, per_page?: integer, from_date?: string, recipients?: string[], event_types?: string[], bounce_classes?: integer[], transmission_id?: string) — Return one cursor-controlled page of delivery and engagement events across sent emails, with event, recipient, transmission, bounce, and date filters. - lettr_list_emails(cursor?: string, to_date?: string, per_page?: integer, from_date?: string, recipient?: string) — Return one cursor-controlled page of sent emails, optionally filtered by recipient and date range. - lettr_list_projects(cursor?: string, per_page?: integer) — Return one cursor-controlled page of Lettr projects and their IDs for use with template operations. - lettr_list_templates(cursor?: string, per_page?: integer, project_id?: integer) — Return one cursor-controlled page of email templates for a project or the team's default project. - lettr_list_webhooks() — Return all event webhooks with target, enabled state, event selection, authentication mode, and latest delivery status. - lettr_publish_template_version(html?: string, name?: string, project_id?: integer, editor_json?: string, template_slug: string) — Create and activate a new version of an existing email template from exactly one of HTML or Topol editor JSON, optionally renaming the template atomically. - lettr_schedule_campaign(campaign_id: string, scheduled_at: string) — Schedule a campaign for future delivery or reschedule it. The campaign dispatches automatically at that time unless it is unscheduled first. - lettr_schedule_email(cc?: string[], to: string[], bcc?: string[], tag?: string, html?: string, text?: string, headers?: object, options?: object, subject?: string, amp_html?: string, metadata?: object, reply_to?: string, from_name?: string, from_email: string, project_id?: integer, attachments?: object[], scheduled_at: string, reply_to_name?: string, template_slug?: string, template_version?: integer, substitution_data?: object) — Create a transactional email scheduled 5 minutes to 3 days in the future; it remains cancellable until processed. - lettr_send_campaign(campaign_id: string) — Immediately and irreversibly start sending a sendable draft campaign to its resolved audience. Only call after confirming the campaign's audience, subject, sender email, and content. A successful 202 - lettr_send_email(cc?: string[], to: string[], bcc?: string[], tag?: string, html?: string, text?: string, headers?: object, options?: object, subject?: string, amp_html?: string, metadata?: object, reply_to?: string, from_name?: string, from_email: string, project_id?: integer, attachments?: object[], reply_to_name?: string, template_slug?: string, template_version?: integer, substitution_data?: object) — Immediately queue a transactional email to up to 50 recipients using inline content or a Lettr template. This is an irreversible external send. - lettr_unschedule_campaign(campaign_id: string) — Cancel a scheduled campaign send and return the campaign to draft. The campaign must still be scheduled; this cannot stop one already preparing or sending. - lettr_update_audience_contact(email?: string, status?: string, contact_id: string, properties?: object) — Change a contact's email, subscribed or unsubscribed status, or selected custom property values. Provide at least one of email, status, or properties; a null value inside properties removes that prope - lettr_update_audience_list(name: string, list_id: string) — Rename an audience list while preserving its contacts. - lettr_update_audience_property(property_id: string, fallback_value: string) — Set or clear a custom contact property's fallback value. Its name and data type cannot be changed. - lettr_update_audience_segment(name?: string, list_id?: string, conditions?: object, segment_id: string) — Change a dynamic segment's name, optional audience-list restriction, or complete AND-of-OR condition definition. Provide at least one of these mutable fields; setting list_id to null removes the list - lettr_update_audience_topic(name?: string, topic_id: string, visibility?: string, description?: string) — Change a subscription topic's name, description, or public/private visibility. Provide at least one of these mutable fields; setting description to null clears it. Its default subscription behavior ca - lettr_update_template(name: string, project_id?: integer, template_slug: string) — Rename an email template's metadata without publishing a new version. - lettr_update_webhook(url?: string, name?: string, active?: boolean, events?: string[], auth_type?: string, webhook_id: string, auth_password?: string, auth_username?: string, oauth_client_id?: string, oauth_token_url?: string, oauth_client_secret?: string) — Partially update a webhook's name, callback URL, authentication, selected events, or active state. Provide at least one field to update. - lettr_verify_domain(domain: string) — Run Lettr's DNS verification for a registered domain and return DKIM, CNAME, DMARC, SPF, and ownership results. ## Example prompts - "What can I do in Lettr?" - "Show me a summary of my Lettr account" ## Links Docs: https://mcp.ai/docs/mcps/lettr Website: https://mcp.ai/mcps/lettr