JMAP MCP
JMAP MCP 服务器
一个模型上下文协议 (MCP) 服务器,提供用于与 JMAP (JSON Meta Application Protocol) 电子邮件服务器交互的工具。使用 Deno 构建,并使用 @htunnicliff/jmap-jam 客户端库。
功能
电子邮件管理工具
搜索邮件:通过文本查询、发件人/收件人过滤器、日期范围和关键字搜索邮件。所有过滤器均为“与”(AND) 关系。
获取邮件:通过 ID 获取特定邮件,并可配置属性选择
获取会话:获取电子邮件会话(对话链)
标记邮件:将邮件标记为已读/未读、加星标/取消星标
移动邮件:在邮箱之间移动邮件
删除邮件:永久删除邮件
邮箱管理
获取邮箱:列出所有支持层级结构的邮箱/文件夹。使用此工具查找其他工具所需的邮箱 ID。
增量同步
获取邮件变更:获取自上次状态以来创建、更新或销毁的邮件 ID(基于状态的增量跟踪)
获取搜索更新:获取自上次查询状态 (queryState) 以来搜索查询结果中的添加或移除项
邮件撰写
发送邮件:撰写并发送支持纯文本和 HTML 的新邮件
回复邮件:回复现有邮件,支持自动处理邮件头和“全部回复”
关键能力
通过 jmap-jam 完全符合 JMAP RFC 8620/8621 标准
使用 Zod 模式进行全面的输入验证
支持所有列表操作的分页
基于状态的增量同步,实现高效轮询
丰富的错误处理和连接管理
基于能力的工具注册(只读、提交)
强类型的 TypeScript 支持
Related MCP server: bare-mcp
安装
Claude Code 插件(推荐)
通过插件市场安装:
/plugin marketplace add wyattjoh/claude-code-marketplace
/plugin install jmap-mcp@wyattjoh-marketplace然后在 MCP 服务器设置中配置所需的环境变量。
前置要求
Deno v1.40 或更高版本
符合 JMAP 标准的电子邮件服务器(例如 Cyrus IMAP、Stalwart Mail Server、FastMail)
有效的 JMAP 身份验证凭据
设置
将以下内容添加到您选择的代理中:
{
"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/jmap-mcp@0.6.3"
],
"env": {
"JMAP_SESSION_URL": "https://api.fastmail.com/jmap/session",
"JMAP_BEARER_TOKEN": "YOUR_API_TOKEN"
}
}
}
}如果不使用 FastMail,请将
--allow-net中的api.fastmail.com替换为您 JMAP 服务器的主机名。
使用方法
环境变量
变量 | 必需 | 描述 |
| 是 | JMAP 服务器会话 URL(通常以 |
| 是 | 用于身份验证的 Bearer 令牌 |
| 否 | 账户 ID(如果未提供则自动检测) |
可用工具
get_mailboxes
列出邮箱/文件夹及其 ID、名称和元数据。请先调用此工具以获取 search_emails (inMailbox) 和 move_emails (mailboxId) 所需的邮箱 ID。常见名称:收件箱 (Inbox)、草稿 (Drafts)、已发送 (Sent)、废纸篓 (Trash)、归档 (Archive)、垃圾邮件 (Spam/Junk)。
参数:
parentId(可选):按父邮箱 ID 过滤limit(可选):最大结果数(1-200,默认:100)position(可选):分页的起始位置
search_emails
使用过滤器搜索邮件。所有过滤器均为“与”(AND) 关系。 仅返回邮件 ID — 使用 get_emails 获取内容。结果包含用于通过 get_search_updates 进行增量同步的 queryState。
参数:
query(可选):跨所有字段的文本搜索body(可选):仅在邮件正文中搜索from(可选):按发件人电子邮件地址过滤to(可选):按收件人电子邮件地址过滤subject(可选):按主题文本过滤inMailbox(可选):要在其中搜索的邮箱 ID(从get_mailboxes获取)hasKeyword(可选):按关键字过滤(例如$seen,$flagged)notKeyword(可选):按关键字排除(例如$seen,$draft)allInThreadHaveKeyword(可选):会话中的所有邮件必须包含该关键字someInThreadHaveKeyword(可选):会话中至少有一封邮件包含该关键字before(可选):仅限该日期之前的邮件(ISO 8601 日期时间)after(可选):仅限该日期之后的邮件(ISO 8601 日期时间)limit(可选):最大结果数(1-100,默认:50)position(可选):分页的起始位置(默认:0)
get_emails
通过 ID 获取特定邮件。使用 properties 仅请求您需要的字段 — 获取所有属性会返回大量数据。
参数:
ids:邮件 ID 数组(1-50 个 ID)properties(可选):要返回的特定属性。推荐组合:摘要:
["id", "subject", "from", "to", "receivedAt", "preview"]完整读取:
["id", "subject", "from", "to", "cc", "receivedAt", "bodyValues", "textBody", "htmlBody"]注意:要获取正文内容,请同时包含
bodyValues和textBody/htmlBody
get_threads
通过 ID 获取邮件会话。会话 ID 来自 get_emails 的响应(threadId 属性)。返回每个会话中的邮件 ID — 使用这些 ID 调用 get_emails 以获取内容。
参数:
ids:会话 ID 数组(1-20 个 ID)
get_email_changes
获取自上次状态以来创建、更新或销毁的邮件 ID。使用 get_emails 响应中的 state 字符串。
参数:
sinceState:来自先前get_emails响应的状态字符串maxChanges(可选):返回的最大变更数(1-500)fetchEmails(可选):自动获取已变更 ID 的完整邮件详情(默认:false)properties(可选):当fetchEmails为 true 时要获取的属性
get_search_updates
获取自上次 queryState 以来搜索查询中的变更。必须使用与原始 search_emails 调用相同的过滤器参数。
参数:
sinceQueryState:来自先前search_emails响应的queryState来自
search_emails的所有过滤器参数(必须与原始查询匹配)maxChanges(可选):返回的最大变更数(1-500)
mark_emails
将邮件标记为已读/未读或加星标/取消星标。
参数:
ids:邮件 ID 数组(1-100 个 ID)seen(可选):标记为已读 (true) 或未读 (false)flagged(可选):标记为加星标 (true) 或取消星标 (false)
move_emails
将邮件移动到不同的邮箱。使用 get_mailboxes 查找目标邮箱 ID。
参数:
ids:邮件 ID 数组(1-100 个 ID)mailboxId:目标邮箱 ID(从get_mailboxes获取)
delete_emails
永久删除邮件(无法撤销)。建议通过 move_emails 移动到废纸篓以实现可恢复的删除。
参数:
ids:邮件 ID 数组(1-100 个 ID)
send_email
发送新邮件。需要 textBody 或 htmlBody(或两者)。
参数:
to:收件人数组(name可选,email必需)cc(可选):抄送收件人数组bcc(可选):密送收件人数组subject:邮件主题textBody(可选):纯文本正文htmlBody(可选):HTML 正文identityId(可选):发送邮件所用的 JMAP 身份 ID(如果省略,则使用服务器默认值)
reply_to_email
回复现有邮件。自动设置收件人/抄送、Re: 主题前缀以及会话邮件头(In-Reply-To, References)。
参数:
emailId:要回复的邮件 IDreplyAll(可选):包含所有原始收件人(默认:false)subject(可选):自定义回复主题(默认为Re: <original>)textBody(可选):纯文本正文htmlBody(可选):HTML 正文identityId(可选):发送邮件所用的 JMAP 身份 ID(如果省略,则使用服务器默认值)
JMAP 服务器兼容性
此服务器应适用于任何符合 JMAP 标准的电子邮件服务器,包括:
Cyrus IMAP 3.0+
FastMail (商业)
Apache James (支持 JMAP)
开发
在开发模式下运行
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架构
该服务器基于以下技术构建:
Deno:现代 JavaScript/TypeScript 运行时
@modelcontextprotocol/sdk:MCP 服务器框架
jmap-jam:轻量级、类型化的 JMAP 客户端
Zod:运行时类型验证
安全性
所有输入均使用 Zod 模式进行验证
环境变量用于敏感配置
响应中不会记录或暴露任何机密信息
遵循 JMAP 安全最佳实践
贡献
Fork 本仓库
创建功能分支
遵循函数式编程风格进行更改
彻底测试您的更改
提交 Pull Request
许可证
MIT 许可证 - 详情请参阅 LICENSE 文件。
相关项目
jmap-jam - JMAP 客户端库
Model Context Protocol - MCP 规范
JMAP RFC 8620 - JMAP 核心协议
JMAP RFC 8621 - 用于邮件的 JMAP
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceLocal MCP server for multi-account IMAP/SMTP email (iCloud + Gmail via app-specific passwords). Never marks mail read. Cross-folder search, idempotent sends, TLS verified.8MIT
- AlicenseNot gradedqualityDmaintenanceA minimal, general-purpose implementation of the Model Context Protocol (MCP) for Node.js and Bare runtime, enabling creation of AI-interactive servers with tools, resources, and multiple transport options.72MIT
- AlicenseNot gradedqualityBmaintenanceUnified MCP server for Fastmail email (JMAP), calendar (CalDAV), and contacts (CardDAV). Enables sending emails, managing events, and syncing contacts through natural language.MIT
Related MCP Connectors
MCP server for interacting with the Supabase platform
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Remote MCP server for The Colony — a social network for AI agents (posts, DMs, search, marketplace).
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wyattjoh/jmap-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server