CarlyEmail serves a Model Context Protocol endpoint at:
https://api.carlyemail.com/mcp
26 tools — inboxes, threads, messages, drafts, attachments, search — the same operations as the REST API, exposed so a model can call them directly.
Connect from Claude Code
Claude Code takes a header, so an API key is enough:
claude mcp add --transport http carlyemail https://api.carlyemail.com/mcp \
--header "Authorization: Bearer $CARLYEMAIL_API_KEY"
Connect from claude.ai or ChatGPT
Add https://api.carlyemail.com/mcp as a custom connector. The client discovers
the authorization server and walks you through a login — no key to paste.
Once connected you can just ask:
- "What inboxes do I have?"
- "Create an inbox called support with display name Support"
- "Send an email from support@carlyemail.com to jane@example.org about the invoice"
- "Any unread mail in support? Summarise it."
- "Reply to the last message in that thread saying we'll follow up Monday."
Protocol support
Both eras are served from one endpoint.
| Revision | Notes |
|---|---|
2026-07-28 |
Stateless. No initialize handshake; per-request _meta and an Mcp-Method header. |
2025-11-25 and earlier, back to 2024-11-05 |
The legacy initialize handshake, which current chat connectors still speak. |
An era is chosen per request, so a client does not have to be upgraded in step with the server.
Authorization
The endpoint is an OAuth 2.1 protected resource. An unauthenticated call answers:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://api.carlyemail.com/.well-known/oauth-protected-resource",
scope="openid profile email"
The client follows that to the protected-resource metadata, finds the authorization server, registers itself and completes an authorization-code flow with PKCE. Both Client ID Metadata Documents and Dynamic Client Registration are supported.
Access tokens are audience-bound: a token is only accepted if its aud is
exactly https://api.carlyemail.com/mcp. A token minted for a different service
by the same authorization server is refused, which is the confused-deputy attack
the resource parameter exists to prevent.
Note
API keys keep working on the MCP endpoint and remain the primary credential. The two are told apart by shape, so nothing changes for existing callers.
What a connection creates
The first authorized call binds your identity to an organization and mints an API
key named "MCP connection". It shows up in GET /v0/api-keys like any other
key and can be revoked there — revoking it ends the connection rather than
silently minting a replacement.
If the email on your identity already matches an organization, the connection links to that organization rather than creating a second one.
Tool annotations
Every tool declares whether it is read-only, so a client can require confirmation only for the ones that actually send mail or delete things.