loading…
Search for a command to run...
loading…
A Model Context Protocol (MCP) server that provides tools for interacting with JMAP (JSON Meta Application Protocol) email servers. Built with Deno and using th
A Model Context Protocol (MCP) server that provides tools for interacting with JMAP (JSON Meta Application Protocol) email servers. Built with Deno and using the jmap-jam client library.
A Model Context Protocol (MCP) server that provides tools for interacting with JMAP (JSON Meta Application Protocol) email servers. Built with Deno and using the @htunnicliff/jmap-jam client library.
Install via the plugin marketplace:
/plugin marketplace add wyattjoh/claude-code-marketplace
/plugin install jmap-mcp@wyattjoh-marketplace
Then configure the required environment variables in your MCP server settings.
Add the following to your agent of choice:
{
"mcpServers": {
"jmap": {
"type": "stdio",
"command": "deno",
"args": [
"run",
"--allow-net=api.fastmail.com",
"--allow-env=JMAP_SESSION_URL,JMAP_BEARER_TOKEN,JMAP_ACCOUNT_ID",
"jsr:@wyattjoh/[email protected]"
],
"env": {
"JMAP_SESSION_URL": "https://api.fastmail.com/jmap/session",
"JMAP_BEARER_TOKEN": "YOUR_API_TOKEN"
}
}
}
}
Replace
api.fastmail.comin--allow-netwith your JMAP server's hostname if not using FastMail.
| Variable | Required | Description |
|---|---|---|
JMAP_SESSION_URL |
Yes | JMAP server session URL (usually ends with /.well-known/jmap) |
JMAP_BEARER_TOKEN |
Yes | Bearer token for authentication |
JMAP_ACCOUNT_ID |
No | Account ID (auto-detected if not provided) |
get_mailboxesList mailboxes/folders with their IDs, names, and metadata. Call this first
to get mailbox IDs needed by search_emails (inMailbox) and move_emails
(mailboxId). Common names: Inbox, Drafts, Sent, Trash, Archive, Spam/Junk.
Parameters:
parentId (optional): Filter by parent mailbox IDlimit (optional): Max results (1-200, default: 100)position (optional): Starting position for paginationsearch_emailsSearch emails with filters. All filters are AND'd together. Returns only
email IDs — use get_emails to fetch content. Results include queryState for
incremental sync via get_search_updates.
Parameters:
query (optional): Text search across all fieldsbody (optional): Search in message body onlyfrom (optional): Filter by sender email addressto (optional): Filter by recipient email addresssubject (optional): Filter by subject textinMailbox (optional): Mailbox ID to search within (get from get_mailboxes)hasKeyword (optional): Filter by keyword (e.g., $seen, $flagged)notKeyword (optional): Exclude by keyword (e.g., $seen, $draft)allInThreadHaveKeyword (optional): All emails in thread must have keywordsomeInThreadHaveKeyword (optional): At least one email in thread must have
keywordbefore (optional): Only emails before date (ISO 8601 datetime)after (optional): Only emails after date (ISO 8601 datetime)limit (optional): Max results (1-100, default: 50)position (optional): Starting position for pagination (default: 0)get_emailsRetrieve specific emails by their IDs. Use properties to request only what you
need — fetching all properties returns large payloads.
Parameters:
ids: Array of email IDs (1-50 IDs)properties (optional): Specific properties to return. Recommended sets:["id", "subject", "from", "to", "receivedAt", "preview"]["id", "subject", "from", "to", "cc", "receivedAt", "bodyValues", "textBody", "htmlBody"]bodyValues AND
textBody/htmlBodyget_threadsGet email threads by their IDs. Thread IDs come from get_emails responses
(threadId property). Returns email IDs per thread — use get_emails on those
IDs to fetch content.
Parameters:
ids: Array of thread IDs (1-20 IDs)get_email_changesGet IDs of emails created, updated, or destroyed since a previous state. Use the
state string from a get_emails response.
Parameters:
sinceState: State string from a previous get_emails responsemaxChanges (optional): Max changes to return (1-500)fetchEmails (optional): Auto-fetch full email details for changed IDs
(default: false)properties (optional): Properties to fetch when fetchEmails is trueget_search_updatesGet changes within a previous search query since its queryState. Must use the
same filter parameters as the original search_emails call.
Parameters:
sinceQueryState: queryState from a previous search_emails responsesearch_emails (must match original query)maxChanges (optional): Max changes to return (1-500)mark_emailsMark emails as read/unread or flagged/unflagged.
Parameters:
ids: Array of email IDs (1-100 IDs)seen (optional): Mark as read (true) or unread (false)flagged (optional): Mark as flagged (true) or unflagged (false)move_emailsMove emails to a different mailbox. Use get_mailboxes to find the target
mailbox ID.
Parameters:
ids: Array of email IDs (1-100 IDs)mailboxId: Target mailbox ID (get from get_mailboxes)delete_emailsDelete emails permanently (cannot be undone). Prefer moving to Trash via
move_emails for recoverable deletion.
Parameters:
ids: Array of email IDs (1-100 IDs)send_emailSend a new email. Requires either textBody or htmlBody (or both).
Parameters:
to: Array of recipients (name optional, email required)cc (optional): Array of CC recipientsbcc (optional): Array of BCC recipientssubject: Email subjecttextBody (optional): Plain text bodyhtmlBody (optional): HTML bodyidentityId (optional): JMAP identity ID to send from (uses server default if
omitted)reply_to_emailReply to an existing email. Automatically sets To/CC, Re: subject prefix, and threading headers (In-Reply-To, References).
Parameters:
emailId: ID of email to reply toreplyAll (optional): Include all original recipients (default: false)subject (optional): Custom reply subject (defaults to Re: <original>)textBody (optional): Plain text bodyhtmlBody (optional): HTML bodyidentityId (optional): JMAP identity ID to send from (uses server default if
omitted)This server should work with any JMAP-compliant email server, including:
just watch # Run with file watching
just start # Run without watching
just test # Run all tests
just check # Format check + lint + type check
just fmt # Auto-format code
The server is built using:
MIT License - see LICENSE file for details.
Add this to claude_desktop_config.json and restart Claude Desktop.
{
"mcpServers": {
"wyattjoh-jmap-mcp": {
"command": "npx",
"args": []
}
}
}Read, send and search emails from Claude
Send, search and summarize Slack messages
No-code MCP client for team chat platforms, such as Slack, Microsoft Teams, and Discord.
A community discord server dedicated to MCP by [Frank Fiegel](https://github.com/punkpeye)