JMAP MCP
JMAP MCP サーバー
JMAP (JSON Meta Application Protocol) メールサーバーとやり取りするためのツールを提供する Model Context Protocol (MCP) サーバーです。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 (通常 |
| はい | 認証用ベアラートークン |
| いいえ | アカウント 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(オプション): スレッド内の少なくとも 1 つのメールがキーワードを持つ必要がある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レスポンスからのqueryStatesearch_emailsからのすべてのフィルターパラメータ (元のクエリと一致させる必要があります)maxChanges(オプション): 返す変更の最大数 (1-500)
mark_emails
メールを既読/未読、またはフラグ付き/フラグなしにマークします。
パラメータ:
ids: メール ID の配列 (1-100 ID)seen(オプション): 既読 (true) または未読 (false) にマークflagged(オプション): フラグ付き (true) またはフラグなし (false) にマーク
move_emails
メールを別のメールボックスに移動します。ターゲットのメールボックス ID を見つけるには get_mailboxes を使用してください。
パラメータ:
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(オプション): CC 受信者の配列bcc(オプション): BCC 受信者の配列subject: メールの件名textBody(オプション): プレーンテキスト本文htmlBody(オプション): HTML 本文identityId(オプション): 送信元の JMAP ID (省略時はサーバーデフォルトを使用)
reply_to_email
既存のメールに返信します。To/CC、件名の「Re:」プレフィックス、およびスレッドヘッダー(In-Reply-To, References)を自動的に設定します。
パラメータ:
emailId: 返信対象のメール IDreplyAll(オプション): すべての元の受信者を含める (デフォルト: false)subject(オプション): カスタム返信件名 (デフォルトはRe: <元の件名>)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 セキュリティのベストプラクティスに従っています
貢献
リポジトリをフォークする
フィーチャーブランチを作成する
関数型プログラミングスタイルに従って変更を加える
変更を徹底的にテストする
プルリクエストを送信する
ライセンス
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