Jmap MCP logo

Jmap MCP

by wyattjoh

MCP tools for searching, reading, organizing, syncing, and sending email through JMAP-compatible servers.

Install Jmap MCP

Pick your client, then add it in one click or paste the config.

Streamable HTTP (Remote)
Server URL
https://api.fastmail.com/jmap/session

Remote servers are added in the app, not the config file: Customize → Connectors → Add custom connector, then paste this URL.

Overview

wyattjoh/jmap-mcp MCP server exposes JMAP email operations as MCP tools for compatible agents. It connects to a JMAP session URL with bearer-token authentication and can auto-detect the account ID. Use it to list mailboxes, search and retrieve messages, manage threads and labels, track changes, or send and reply to email. It runs as a Deno stdio server and requires a JMAP-compliant email service.

Use cases

  • Search a mailbox using sender, subject, date, or keyword filters
  • Retrieve selected message fields and body content
  • Organize messages by moving or changing mailbox memberships
  • Poll for new or changed messages with state tokens
  • Send new email or reply to an existing message

Key features

  • JMAP email access over MCP
  • Mailbox discovery and hierarchy support
  • Filtered search with pagination
  • Incremental email and search synchronization
  • Message, thread, mailbox, and flag management
  • Email composition and replies

Tools12

What Jmap MCP lets your agent do. Expand a tool for its parameters.

Self-reported~261 tokens of context

Security & health

What it can reach and how reliably it runs — from our own checks, not the maintainer’s claims.

ActiveLast checked 1d ago

Recent health check succeeded.

7/8 checks healthy over the last 78d

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks — not a rating.

GitHub stars178Stargazers on the source repository.
Last commit5d agoMost recent push to the default branch.
Tools exposed12Callable tools this server registers over MCP.
Directory activity2 viewsConfig copies, upvotes, and views on AllMCPs.

How Jmap MCP works

What wyattjoh/jmap-mcp MCP server does

The wyattjoh/jmap-mcp MCP server connects an MCP client to a JMAP-compliant email service. It supports common mailbox and message workflows without requiring the agent to construct JMAP requests directly. Supported services include JMAP deployments such as Cyrus IMAP, Stalwart Mail Server, and FastMail, provided valid JMAP credentials are available.

Mailbox discovery is the starting point for many operations. get_mailboxes returns folder IDs, names, hierarchy information, and other metadata. Those IDs can then be used to constrain searches or select a destination for moved messages.

How it works

The server is implemented in Deno and uses the jmap-jam client library for protocol access. MCP tools adapt typed JMAP operations and validate inputs with Zod schemas. Run it over stdio from an MCP client, using Deno permissions for network access and environment-variable access.

Search results contain email IDs rather than complete messages. Call get_emails with those IDs and request only the properties needed for the task. Body content requires the appropriate body-related properties. Thread lookup is a separate step: get_threads returns the message IDs associated with supplied thread IDs, after which get_emails can retrieve their content.

The server also supports state-based polling. get_email_changes reports message IDs created, changed, or destroyed since a previous email state. get_search_updates reports additions and removals for an earlier search, but the original filter parameters must be supplied again.

Setup and configuration

The wyattjoh/jmap-mcp MCP server requires Deno 2 or later, access to a JMAP server, and valid authentication credentials. Configure these environment variables:

  • JMAP_SESSION_URL: Required JMAP session endpoint, normally the server’s well-known JMAP URL.
  • JMAP_BEARER_TOKEN: Required bearer token used for authentication.
  • JMAP_ACCOUNT_ID: Optional account identifier; the client can detect it when omitted.

A stdio configuration invokes deno run with network permission for the JMAP host and environment permission for these variables. Replace the example FastMail hostname with the hostname of the selected JMAP service. The project also documents installation as a Claude Code plugin through its marketplace.

Tools and capabilities

The wyattjoh/jmap-mcp MCP server provides tools for:

  • Searching by text, sender, recipient, subject, mailbox, keywords, and date range. Filters are combined with AND behavior, and results support pagination.
  • Fetching selected email properties, retrieving thread membership, and managing read or flagged status.
  • Moving messages, adding or removing mailbox memberships, and permanently deleting messages. Permanent deletion cannot be undone; moving mail to Trash is the recoverable alternative.
  • Sending new messages with plain-text or HTML bodies, and replying with automatic recipient and subject handling, including reply-all support.
  • Tracking email changes and updates to an earlier search query.

Operations accept bounded batches and pagination parameters where documented. Capability-based registration distinguishes read-only and submission functionality.

Reviews

No reviews yet — be the first to share how it worked for you.

Frequently Asked Questions about Jmap MCP

wyattjoh/jmap-mcp is an MCP server that connects AI agents to JMAP-compliant email servers. Its main tools list mailboxes, search and retrieve emails, inspect threads, track changes, mark or move messages, delete mail, and send or reply to emails through a Deno stdio process.

Install it by running the published JSR package with Deno in an MCP server configuration, or use the documented Claude Code marketplace plugin. Deno 2 or later is required, along with a JMAP server and valid credentials.

Set JMAP_SESSION_URL and JMAP_BEARER_TOKEN. JMAP_SESSION_URL identifies the JMAP session endpoint, while JMAP_BEARER_TOKEN supplies authentication. JMAP_ACCOUNT_ID is optional because the account can be detected when it is not provided.

Call get_mailboxes first. It returns mailbox and folder IDs with names and metadata; use those IDs in search_emails, move_emails, or patch_email_mailboxes. The tool also supports parentId filtering and pagination.

Yes. Save the queryState returned by search_emails and pass it to get_search_updates along with the same filter parameters. For broader mailbox changes, use the state from get_emails with get_email_changes.

Related MCP servers

Add a badge to your READMEShow it’s listed — live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewJmap MCP AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/wyattjoh-jmap-mcp?style=directory)](https://allmcps.com/mcp/wyattjoh-jmap-mcp)
HTML Embed
<a href="https://allmcps.com/mcp/wyattjoh-jmap-mcp"><img src="https://allmcps.com/api/badge/wyattjoh-jmap-mcp?style=directory" alt="Jmap MCP on AllMCPs" /></a>