jmap-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@jmap-mcpShow me my unread emails from yesterday."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@bryanberger/jmap-mcp
Local MCP server that exposes a Stalwart mail server's JMAP surface to an AI assistant, with no data leaving your machine except the exchange with your own server.
What it covers
Mail: search, read, fetch attachments, compose, send, file and delete messages, manage folders.
Contacts: search and read cards, write them, manage address books.
Calendar: search and read events, check availability, create, correct, answer and delete.
Files: browse, fetch to disk, upload from disk, organize and delete.
Sieve: list scripts, store one, choose which one filters, manage the vacation response.
Sharing: read who an object is open to, grant and revoke rights, dismiss notifications.
Thirty tools in all, described one by one in the tools reference.
Related MCP server: fastmail-mcp
Quick start with Claude Code
You need the URL of your server's JMAP session and a bearer token it accepts, obtained as the token page describes.
claude mcp add jmap --transport stdio --scope user \
--env JMAP_SESSION_URL=https://mail.example.com/.well-known/jmap \
--env JMAP_BEARER_TOKEN=API_xxx \
-- npx -y @bryanberger/jmap-mcpClaude Desktop and Cursor take the same server through a JSON file; see the documentation.
Write policy
Every call is classified from its arguments into one of four classes: read, draft, send, destroy.
Each class has a level, allow, confirm or deny, and by default send and destroy are confirmed before they run.
A confirmation is a question asked through your MCP client, which must support elicitation; when it does not, the call is refused rather than run silently.
The question names what the call is about to do: the recipients, the messages, the rights, the script.
The write policy page explains the whole mechanism and how to tune it.
Documentation
Page | Answers |
Which bearer the server accepts, and how to check it | |
How to register the server in each client | |
Every key and variable, with its default | |
What each of the thirty tools does, and when it asks | |
Every ceiling, and what happens past it | |
Classes, levels, confirmation, recipient perimeter | |
What a refusal or a startup error means |
The documentation lives on GitHub and is not shipped in the npm package.
Development
Requires Node 24 (nvm use) and pnpm.
pnpm install
pnpm typecheck # tsc, native Go compiler
pnpm test # vitest
pnpm lint # biome
pnpm build # emits dist/Architecture, decisions and the full file tree live in aidd_docs/INSTALL.md. Contribution workflow in CONTRIBUTING.md.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
- Lettio MCPOAutheu.lettio
Private, EU-hosted email for AI agents over JMAP: read, search, reply, organize, send.
- PO6 MailboxOAuthcom.po6
Give AI agents secure access to your email via private aliases with dedicated mailbox storage.
Email inboxes and calendars for AI agents: send, receive, search, draft and schedule.
Email inboxes and calendars for AI agents: send, receive, search, draft and schedule.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage multiple email accounts with secure credentials, local full-text search, thread-aware replies, and automation.3 npmMIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Fastmail email accounts via JMAP, including reading, sending, organizing emails, and handling mailboxes, drafts, and masked emails.43MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to read, send, and manage emails, calendars, and contacts in a Fastmail account via the JMAP protocol.4750 npm1MIT
- AlicenseAqualityAmaintenanceEnables AI assistants to read, organize, and send Proton Mail through the local Proton Bridge, with careful gating for sending and attachment access.341Apache 2.0