whoami
Show which mailbox this connection uses and whether it may send.
account
eu.lettioPublished by lettio.euOfficial publisherv0.5.0Updated Nov 3, 2026
Private, EU-hosted email for AI agents over JMAP: read, search, reply, draft, organize, send.
Lettio's hosted MCP server (mcp.lettio.eu), published by lettio.eu; OAuth sign-in required; Streamable HTTP; 20 tools.
No AI overview yet: these facts come from the registry entry and the server itself.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/eu.lettio%2Fmcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.
{
"mcpServers": {
"lettio": {
"type": "http",
"url": "https://mcp.lettio.eu/mcp"
}
}
}Let your AI assistant read, search and send email from a private, EU-hosted mailbox.
Lettio MCP is a Model Context Protocol server that connects an AI agent (Claude, Cursor, and any other MCP client) to a Lettio mailbox over JMAP. Your assistant can triage your inbox, find a message, and send a reply.
Prefer nothing to install? Lettio also runs as a hosted, OAuth‑secured MCP server at
https://mcp.lettio.eu/mcp— add that URL in your client and sign in. This npm package is the local / self‑hosted option for people who want to run it on their own machine.
The hosted server at https://mcp.lettio.eu/mcp adds three tools that open interactive cards in clients that support MCP Apps, such as Claude:
show_emails: the inbox, a folder or search results as a list you can open, archive and flagshow_email: a whole conversation, with Reply, Reply all, Archive and Trashpreview_email: a drafted message you can edit, preview in your brand and sendSending from a card always needs your click, even when the connection doesn't allow the agent to send on its own. One connection can cover up to 10 mailboxes; searches run across all of them.
Messages are written in Markdown and rendered as a styled email: headings, tables, quotes (end with > — Name), callouts (> [!NOTE] Title), code blocks, numbered steps and buttons ([Label](https://url "button")). The mailbox signature is added automatically; set it with set_signature.
To match your brand, set LETTIO_BRANDS to JSON (or a path to a JSON file) keyed by domain:
Formatted mail goes out as HTML with a plain-text version. Pass format: "plain" to send text as written. Bulk tools take up to 100 ids.
Attachments can be base64 content, a local path, or from_email_id with attachment_id to reuse a file from another message.
Add this to your claude_desktop_config.json:
Restart Claude Desktop; the Lettio tools appear in the tools menu.
Configured entirely through environment variables.
Set LETTIO_ACCOUNTS to a JSON array and omit the single‑account variables:
Then pass account: "work" to any tool to choose which mailbox to use.
Sending is deliberately constrained. Before it sends, the server asks the mail host for the
identities the signed‑in mailbox is allowed to use and requires one that matches the login
address. The From header and the SMTP envelope MAIL FROM are both pinned to that
address. There is no parameter for choosing a different sender, so an agent can never send
"from" a foreign or arbitrary mailbox. Credentials are read from the environment, kept only in
memory, and never logged.
MIT © Valmia Solutions s.r.o.
Source: README.md at commit 41ad3bb
Show which mailbox this connection uses and whether it may send.
accountList the mailboxes this server can use.
Takes no parameters.
List folders with message and unread counts.
accountList the most recent emails in a folder, newest first.
limitoffsetaccountmailboxunread_onlySearch email. Combine free text with filters; all given filters must match. With several mailboxes and no account, searches them all.
tofromafterlimitquerybeforeoffsetaccountmailboxsubjectunread_onlyhas_attachmentRead one email: its text and a list of attachments. HTML mail is converted to text.
idrequiredaccountRead the whole conversation an email belongs to, oldest first.
idrequiredaccountOpen an attachment. Text and PDF come back as text, images as images, other files as a binary resource. Give save_to to write it to a local file instead.
accountsave_toemail_idrequiredattachment_idrequiredSend an email from this mailbox. This really sends, and the sender is always this mailbox. Write in Markdown; recipients get formatted HTML with a plain-text version.
cctorequiredbccbodyrequiredformataccountsubjectrequiredsignatureattachmentsReply in the same conversation and send it. Replies to the sender, or to everyone with reply_all.
idrequiredbodyrequiredformataccountreply_allsignatureattachmentsSave a new message to Drafts without sending it.
cctorequiredbccbodyrequiredformataccountsubjectrequiredsignatureattachmentsSave a reply to Drafts, in the same conversation, without sending it.
idrequiredbodyrequiredformataccountreply_allsignatureattachmentsSend a draft that is already in Drafts. This really sends.
idrequiredaccountShow the signature that is added to outgoing mail.
accountSet the signature added to outgoing mail. Stored on the mailbox, so it applies to every client that reads it.
htmltextrequiredaccountMark emails read or unread.
idsrequiredreadrequiredaccountFlag (star) or unflag emails.
idsrequiredaccountflaggedrequiredAdd or remove a label on emails.
addidsrequiredlabelrequiredaccountMove emails to a folder. Use "archive", "trash" (reversible), "inbox", or a folder name.
idsrequiredaccountmailboxrequiredCreate a mail folder, optionally inside another.
namerequiredparentaccount100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
{ "example.com": { "primary": "#231F47", "accent": "#D8093A", "font": "Lexend, Arial, sans-serif" } }{ "mcpServers": { "lettio": { "command": "npx", "args": ["-y", "@lettio/mcp"], "env": { "LETTIO_USERNAME": "[email protected]", "LETTIO_PASSWORD": "your-app-password" } } }}[ { "name": "work", "username": "[email protected]", "password": "app-password" }, { "name": "sales", "username": "[email protected]", "password": "app-password" }]npm installnpm run build[email protected] LETTIO_PASSWORD=app-password npm start