DocsComing soon

MCP server

Connect Claude, ChatGPT, Cursor or another MCP client to your letr.dev account.

letr.dev runs a hosted MCP server. An assistant can send email, inspect delivery and manage sending domains, webhooks and suppressions with the same rules as the API. There is nothing to install.

Endpoint

https://api.letr.dev/mcp speaks Streamable HTTP, stateless, protocol revision 2025-11-25: JSON-RPC over POST. GET and DELETE answer 405, and the Origin header is validated. Clients on 2025-06-18 or 2025-03-26 are accepted too; a client on a newer revision gets 400 for its MCP-Protocol-Version and falls back to initialize. GET https://api.letr.dev/mcp/server-card answers the server card (application/mcp-server-card+json, no credential): the name dev.letr/letr and this endpoint as its one remote.

Sign in

  • OAuth. Clients such as Claude and ChatGPT sign you in through the browser. A request without a credential answers 401 with a WWW-Authenticate header that points to /.well-known/oauth-protected-resource/mcp, where the client finds the authorization server. The flow is the usual one: PKCE with S256, dynamic client registration or a client ID metadata document, then the token with https://api.letr.dev/mcp as its audience. An OAuth token acts with full_access for your account.
  • API key. Send Authorization: Bearer letr_.... The key's permission decides which tools the client sees at all.

For agents, use a sending_access key limited to one domain.

What it cannot do

No tool returns or accepts a secret: API keys, webhook signing secrets and private keys stay in the dashboard. Every tool runs through the same validation and limits as /v1, so MCP adds no capability. Calls are limited to 120 tool calls a minute per credential, on top of the account's 600 requests a minute. Past the 120, a tool call answers a tool error rate_limited: Too many requests; the X-RateLimit-* headers count the account's 600, not this budget. Billing is not reachable.

Activity

The dashboard lists every tool call of the last 30 days with the tool, the outcome, the credential, the client's name and, for send tools, the recipient count. Addresses and content are never logged.

Safety

Send tools are marked as not read-only and flagged to ask you before they run; clients that honour the flag ask first. Read tools are marked read-only. Send tools require an idempotencyKey: the assistant picks a new one per send (one for a whole batch) and reuses it when it retries, so a repeated call never sends twice. An assistant that reads untrusted content (inboxes, web pages, tickets) and can send email can be tricked into sending. Keep sending keys narrow.

Resources and prompts

The server offers the public API reference (OpenAPI), the same document as letr.dev/docs/openapi.json, as letr://docs/api and a domain's DNS records as letr://domains/{id}/dns-records, plus two prompts: set_up_sending_domain and diagnose_delivery.

Setup

claude mcp add --transport http letr https://api.letr.dev/mcp \
  --header "Authorization: Bearer $LETR_API_KEY"

Tools by permission

The tools a credential sees depend on its permission; an OAuth token sees all of them.

ToolPermissionKind
send_emailsending_accessasks before sending
send_batch_emailssending_accessasks before sending
get_emailread_only, sending_access (own emails)read only
list_emailsread_onlyread only
list_domainsread_onlyread only
get_domainread_onlyread only
add_domainfull_accesschanges data
verify_domainfull_accesschanges data
remove_domainfull_accessdeletes
list_webhooksread_onlyread only
update_webhookfull_accesschanges data
delete_webhookfull_accessdeletes
send_test_webhookfull_accesschanges data
list_suppressionsread_onlyread only
remove_suppressionfull_accessdeletes
get_usageread_onlyread only
get_metricsread_onlyread only