mcpField
J
JMAP mail

JMAP mail

ローカル
github.comコミュニケーション14 日前に更新

JMAP mail について

JMAP mailは、JMAPサーバー上のメールを読み取り、整理、下書き、送信できるセルフホスト可能なMCPサーバーです。メールアドレスからサーバーを検出してOAuthでサインインするため、URLやトークンの手動設定は不要です。

主な機能

  1. 01メールアドレスからJMAPサーバーを検出
  2. 02メールとスレッドの検索・閲覧
  3. 03メール整理と添付ファイル管理
  4. 04下書き作成と確認後の送信
  5. 05休暇返信とSieveルールの管理

活用シーン

  1. 01差出人、件名、日付によるメール検索
  2. 02メールの移動と既読・フラグ状態の更新
  3. 03添付ファイル付き返信の下書き
  4. 04自動休暇返信とフィルタールールの管理

MCP 対応

ローカルstdioまたは保護されたHTTPブリッジを介して、MCPクライアントをJMAPメールボックスに接続します。サーバーがOAuth認証情報を扱い、メールツールとステータスリソースをクライアントに公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
ocighcr.io/kolapsis/jmap-mcp:0.3.0
mcpbjmap-mcp.mcpb

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

jmap-mcp

CI Release Go Reference License

AI アシスタント(Claude.ai、Claude Code、Claude Desktop、または任意の MCP クライアント)に、JMAP サーバー(RFC 8620、RFC 8621)上のメールボックスへのアクセスを提供する MCP サーバーです。特に Stalwart に対応しています。

ユーザーはメールアドレスを入力し、自分のメールサーバーのページでサインインします。それ以外の設定は不要です。サーバー URL、トークン、API キーの設定は必要ありません。

特長

  • データ主権。 メールはお使いのサーバーに保管されます。このブリッジはセルフホスト可能で、メールを保存せず、暗号化された OAuth トークンのみを保持します。
  • 設定不要。 JMAP サーバーはメールアドレスから検出され(DNS SRV、次に /.well-known/jmap)、OAuth サーバーは標準メタデータから検出されます。また、ブリッジは動的に自身を登録します。シークレットは初回起動時に生成されます。
  • 適切な OAuth 処理で、トークンの受け渡しは不要。 MCP クライアントにはブリッジがブリッジ用に発行したトークンが渡されます。メールサーバーのトークンがブリッジの外に出ることはありません。これは MCP 認可仕様の要件です。Client ID を空欄にしたまま、Claude.ai のカスタムコネクターとして使用できます。
  • あらゆる JMAP サーバーに対応。 Stalwart 固有の機能はありません。JMAP と、RFC 8414 メタデータおよび RFC 7591 動的登録に対応した OAuth サーバーを備えるサーバーであれば、どれでも動作します。

既存の JMAP MCP サーバー(mikluko/jmap-mcp、wyattjoh/jmap-mcp、agent-jmap-mcp、fastmail-blade-mcp)は、いずれも設定にサーバー URL と固定トークンが必要で、Claude.ai のコネクターとして追加できるものはありません。

ツール

エージェント向けに設計された小さなインターフェースです。JSON の結果は簡潔で、すべての一覧にページネーションがあり、本文はテキストに変換され、切り詰められた場合は明示的なフラグが付きます。

ツール機能
list_accounts接続済みアカウントとデフォルトのアカウントを一覧表示します(set_default で変更できます)。
connect_accountローカルモード専用:メールアドレスを使ってアカウントを接続します(ブラウザーまたはデバイスコード)。
list_mailboxesメールボックスを、役割(受信トレイ、送信済み、下書き、ゴミ箱、アーカイブ、迷惑メール)、パス、合計数、未読数とともに一覧表示します。
list_identities送信者の ID を一覧表示します。サーバーが送信機能を通知した場合に登録されます。
search_emailsテキスト、送信者、受信者、件名、メールボックス、日付、未読、フラグ付き、添付ファイル、サイズで検索し、並べ替えと位置、上限を指定します。概要を返します。
get_emailヘッダー、プレーンテキストの本文(テキスト部分がない場合は HTML を変換)、添付ファイルの一覧を取得します。max_body_length。
get_thread会話を順番に、概要または完全なメッセージとして取得します。
get_attachmentテキストと小さな画像はインラインで返し、それ以外は有効期間15分の署名付き URL(HTTP モード)または非公開の一時ファイル(ローカルモード)を返します。
update_emails既読、未読、フラグ付き、フラグなしに更新します。
move_emailsID、役割、または名前で指定したメールボックスに移動します。
delete_emailsデフォルトではゴミ箱に移動します。permanent を指定すると、ユーザーの確認後に完全に削除します。
create_draft新規メッセージまたは返信を作成します:In-Reply-To、References、Re: 件名、引用、全員への返信の受信者、JMAP 経由でアップロードする添付ファイル。
send_email下書きを送信するか、メッセージを作成して送信します。--enable-send が指定されていない限り無効です。すべてのメッセージはユーザーの確認を受けます。
vacation_response不在時の返信を読み取るか変更します(変更には確認が必要です)。サーバーが通知した場合に登録されます。
sieve_scriptsフィルタリングルール(RFC 9661)を一覧表示、読み取り、書き込み、有効化、無効化、削除します。変更には確認が必要です。通知された場合に登録されます。

リソース jmap-mcp://status には、接続済みアカウント、検出されたサーバー、それらが通知する機能が記載されています。

メールの内容は信頼できないデータとして扱われます。モデルにはデータとして返され、解釈されることはありません。また、ツールの説明では、メールに無視すべき指示が含まれている可能性があることをモデルに伝えます。

機密情報ではない選択(アカウント、送信者 ID、送信または完全削除の確認)は、クライアントが対応している場合、MCP エリシテーションを通じて尋ねられます。対応していない場合、ツールは選択肢を列挙したエラーを返し、モデルは引数(account、identity、confirm)を設定して再度呼び出します。認証情報がエリシテーションやツールの引数を通じて渡されることはありません。

仕組み

                         HTTP mode                                     mail server
 ┌──────────────┐  OAuth 2.1 (bridge tokens)  ┌──────────────┐  OAuth (mail tokens)  ┌──────────────┐
 │  MCP client  │ ──────────────────────────▶ │   jmap-mcp   │ ────────────────────▶ │ OAuth server │
 │  Claude.ai…  │ ◀── MCP over HTTP ────────▶ │  (bridge)    │ ◀──── JMAP ─────────▶ │  JMAP API    │
 └──────────────┘                             └──────────────┘                       └──────────────┘

HTTP モード(jmap-mcp serve)では、ブリッジは同時に次の役割を担います。

  1. 保護されたリソース(RFC 9728 のメタデータ、WWW-Authenticate を伴う 401、すべてのリクエストでオーディエンスを検証);
  2. MCP クライアント向けの最小限の認可サーバー(RFC 8414 のメタデータ、PKCE S256、RFC 8707 のリソースインジケーター、RFC 7591 の動的登録、クライアント ID メタデータドキュメント、ローテーションするリフレッシュトークン);
  3. メールサーバーの OAuth クライアント:サインインページでメールアドレスを入力すると、サーバーを検出して、サーバーごとに一度だけ自身を登録し、PKCE を使ったメールサーバーの認可コードフローにユーザーをリダイレクトします。メールサーバーから応答が返ってきた後に限り、ブリッジは独自のコードとトークンを発行します。

1 つのデプロイメントで、異なるメールサーバーを利用するユーザーに対応できます。各ユーザーには分離された MCP サーバーインスタンスが割り当てられ、自分のアカウントにのみアクセスできます。

ローカルモード(jmap-mcp、stdio)では第三者は介在しません。プロセスはメールアプリケーションと同様にメールサーバーの OAuth クライアントになります。パブリッククライアントとして登録し、ループバックリダイレクトでブラウザーを開きます。ブラウザーを開けない場合はデバイスフロー(RFC 8628)にフォールバックし、入力するコードを表示します。

インストール

1. Traefik の背後で Docker を使用する

イメージは ghcr.io/kolapsis/jmap-mcp です(linux/amd64 と linux/arm64、distroless、非 root、データは /data ボリューム内)。websecure エントリーポイントと ACME リゾルバーがすでに設定された Traefik を使用している場合は、docker-compose.yml をコピーし、ホスト名、リゾルバー、ネットワークを設定して起動します。

curl -O https://raw.githubusercontent.com/kOlapsis/jmap-mcp/main/docker-compose.yml
# edit mcp.example.com, the certresolver name and the network
docker compose up -d
curl https://mcp.example.com/healthz

Traefik は X-Forwarded-* ヘッダーを設定し、ブリッジはそこから公開 URL を導出します。プロキシがこれらのヘッダーを送信しない場合に限り、JMAP_MCP_PUBLIC_URL を設定してください。

イメージタグ:リリース用は X.Y.Z、X.Y、X、latest、main ブランチの最新ビルド用は main と sha-<commit> です。いずれも GitHub Actions でビルドされ、ghcr.io にプッシュされます。

Traefik を使用しない場合は、deploy/caddy に証明書を自動取得する Caddy の設定があります。

cd deploy/caddy   # edit mcp.example.com in the Caddyfile
docker compose up -d

MCP アドレスは https://mcp.example.com/mcp です。

2. Claude.ai に追加する

設定 › コネクター › カスタムコネクターを追加。名前と URL https://mcp.example.com/mcp を入力します。詳細設定の クライアント ID と クライアントシークレット は空欄のままにしてください。Claude.ai は自身を動的に登録します(リダイレクト URI は https://claude.ai/api/mcp/auth_callback です)。[接続]をクリックし、ブリッジのページでメールアドレスを入力してから、メールサーバーにサインインします。

無料プランではカスタムコネクターは 1 つに制限されています。Team および Enterprise プランでは、オーナーが組織の設定 › コネクターからコネクターを追加します。

3. リモートブリッジで Claude Code を使用する
claude mcp add --transport http mail https://mcp.example.com/mcp

続いて Claude Code で /mcp を実行し、ブラウザーで認証するサーバーを選択します。

4. Claude Code と Claude Desktop、ローカル(stdio)

リリースからバイナリをインストールします。 Homebrew(brew install --cask kolapsis/tap/jmap-mcp、macOS と Linux)または Go を使用します。

go install github.com/kOlapsis/jmap-mcp@latest

Claude Code:

claude mcp add mail -- jmap-mcp

または .mcp.json に記述します。

{
  "mcpServers": {
    "mail": { "command": "jmap-mcp", "args": ["stdio"] }
  }
}

Claude Desktop:リリースから jmap-mcp.mcpb をインストールします(ダブルクリックするか、「Settings › Extensions」から操作します)。または、claude_desktop_config.json にバイナリのフルパスを追加します。

{
  "mcpServers": {
    "mail": { "command": "/usr/local/bin/jmap-mcp", "args": ["stdio"] }
  }
}

初回使用時に、アシスタントにメールボックスへの接続を依頼します。メールアドレスを尋ねられ(エリシテーション、または connect_account ツールを使用)、メールサーバーのサインインページがブラウザーで開き、アカウントの準備が完了します。グラフィカルセッションを利用できない場合(SSH)は、任意のデバイスで入力できる URL とコードが表示されます。トークンはデータディレクトリ(Linux では ~/.config/jmap-mcp)に保存され、OS のキーリングに保管されたキーで暗号化されます。キーリングを利用できない場合は、0600 のキーファイルに保存されます。複数のアカウントを接続できます。

ローカルモードでメールを送信するには、サーバーエントリーに "env": {"JMAP_MCP_ENABLE_SEND": "true"} を追加します。

5. systemd でのバイナリ
sudo install -m 755 jmap-mcp /usr/local/bin/
sudo cp deploy/systemd/jmap-mcp.service /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now jmap-mcp

このユニットは、動的ユーザーを使用して 127.0.0.1:8080 でリッスンし、状態を /var/lib/jmap-mcp に保存します。前段に TLS リバースプロキシを配置するか(X-Forwarded-Proto と X-Forwarded-Host を送信する任意のプロキシ)、JMAP_MCP_PUBLIC_URL を設定します。

メールサーバーの準備

ディスカバリー。 RFC 8620 §2.2 の説明に従い、メールドメインから JMAP サーバーを特定します。SRV レコード _jmap._tcp.example.com が JMAP ホストを指している場合はそれを使用し、そうでない場合は https://example.com/.well-known/jmap を使用します。ウェブサイトがメールサーバーでホストされていない場合は、SRV レコードを追加します。

_jmap._tcp.example.com. 3600 IN SRV 0 1 443 mail.example.com.

OAuth サーバーは JMAP ホストから特定します。RFC 9728 のリソースメタデータ、次に RFC 8414 と OpenID Connect のディスカバリーを使用します。JMAP ホストと同じ登録可能ドメイン内に配置する必要があります(例: jmap.example.com と auth.example.com)。それ以外の場合、ブリッジはサーバーを拒否します。

Stalwart でのクライアント登録。 デフォルト設定では何もする必要はありません。ブリッジは PKCE を使用するパブリッククライアントとして自らを登録し、Stalwart は匿名での登録を受け入れます(anonymousClientRegistration。Stalwart 0.16 ではデフォルトで有効です)。Stalwart は認証済みの呼び出し元にのみ機密クライアントを発行するため、この方法ではブリッジはクライアントシークレットを取得しません。代わりに、PKCE が認可コードを保護します。

匿名登録がオペレーターによって無効にされている場合は、クライアントを静的に宣言します。

  1. Stalwart の「Management › Directory › OAuth Clients」で、リダイレクト URI https://mcp.example.com/callback を指定してクライアントを作成します(機密クライアントにする場合はシークレットも設定します)。
  2. ブリッジの管理者トークンを取得します:docker compose exec jmap-mcp /jmap-mcp admin-token(または jmap-mcp admin-token --data-dir /var/lib/jmap-mcp)。
  3. https://mcp.example.com/admin を開き、任意のユーザー名とトークンをパスワードとしてログインします。メールサーバー(メールアドレスまたはその URL)、クライアント ID、シークレット、認証方式を入力します。これらは暗号化されてブリッジのデータベースに保存されます。

ローカルモードでは、パブリッククライアントの動的登録が必要です。これは Stalwart のデフォルトです。

設定

すべてのオプションは任意で、デプロイにのみ関係します。各フラグは環境変数 JMAP_MCP_<FLAG> でも設定できます(例:JMAP_MCP_ENABLE_SEND=true)。

フラグデフォルト目的
--listen:8080HTTP のリッスンアドレス(serve)。
--data-dir$XDG_CONFIG_HOME/jmap-mcp(イメージ内では /data)データベースとマスターキー。
--public-urlX-Forwarded-Proto、X-Forwarded-Host、X-Forwarded-Prefix から取得ブリッジの公開ベース URL。
--log-levelinfodebug、info、warn または error。ログにシークレット、コード、メール本文が含まれることはありません。
--enable-sendfalsesend_email を登録します。
--allow-private-networksfalseプライベートアドレスまたはループバックアドレス上のメールサーバー(同じ LAN 上など)を許可します。これにより、SSRF 保護の一部が無効になります。

コマンド:jmap-mcp または jmap-mcp stdio(ローカルモード)、jmap-mcp serve(HTTP モード)、jmap-mcp admin-token、jmap-mcp healthcheck、jmap-mcp version。

公開エンドポイント

以下のすべてに、同じホスト名でリバースプロキシ経由でアクセスできる必要があります。

パス目的
/mcpMCP Streamable HTTP エンドポイント(ベアラートークンが必要)。
/.well-known/oauth-protected-resource、/.well-known/oauth-protected-resource/mcp保護対象リソースのメタデータ(RFC 9728)。
/.well-known/oauth-authorization-server、/.well-known/oauth-authorization-server/mcp認可サーバーのメタデータ(RFC 8414)。
/register動的クライアント登録(RFC 7591)。
/authorize認可エンドポイント、およびメールアドレスの入力を求めるページ。
/callbackメールサーバーへのサインイン後の戻り先。
/tokenトークンエンドポイント(認可コード、リフレッシュトークン)。
/revokeトークンの失効(RFC 7009)。
/attachments/{token}署名付きの短期間有効な添付ファイルのダウンロード。
/admin静的なクライアント宣言(管理者トークンが必要)。
/healthzヘルスチェック。
/簡単な説明ページ。

セキュリティ

  • ブリッジが発行したトークンのみが受け入れられ、ブリッジ自身のリソース URL に対してのみ使用できます。メールサーバーのトークンがブリッジの外に出ることはありません。発行されるトークンは、キー付きハッシュとして保存される不透明なランダム値です。アクセストークンの有効期間は 1 時間です。リフレッシュトークンは使用するたびにローテーションされ、そのクライアントでのみ機能します。古いトークンを再利用すると、チェーン全体が取り消されます。認可コードを再利用すると、そのコードから発行されたトークンが取り消されます。
  • PKCE S256 は必須です。リダイレクト URI は HTTPS、ループバック HTTP、またはプライベート使用スキームである必要があり、登録内容と完全に一致しなければなりません(ループバックの場合は任意のポートを使用できます)。state はそのまま返され、iss パラメーター(RFC 9207)が送信され、検証されます。メールサーバーとの通信では、state、iss、ID トークンの nonce が検証され、フローは Cookie によってブラウザーに紐付けられます。
  • JMAP ホストは、自身と同じ登録可能ドメインの認可サーバーにのみユーザーを誘導できます。そのため、悪意のあるドメインが別のメールサーバーから発行されたトークンを収集することはできません。ユーザーの識別には、JMAP サーバーから報告された内容ではなく、発行者と ID トークンの sub を使用します(nonce、発行者、対象者を検証します)。メールトークンは、要求されたホストにのみ送信され、別のホストへのリダイレクト後に送信されることはありません。
  • すべての送信リクエスト(ディスカバリー、OAuth、JMAP、クライアントメタデータ文書)は、HTTPS のみを許可するガードを通過します。このガードは名前を解決し、接続時にプライベート、ループバック、リンクローカルのアドレスを拒否し、リダイレクトを制限します。
  • シークレットは初回起動時に生成されます。データディレクトリ内のマスターキー(ローカルモードでは OS のキーリング)から、データベース暗号化キー(AES-GCM)、トークンハッシュキー、添付ファイル URL キーが派生します。メールサーバーのトークンとクライアントシークレットは、保存時に暗号化されます。
  • OAuth エンドポイントでは、クライアント IP ごとにレート制限が適用されます。X-Forwarded-For は、リクエストがプライベートアドレス、つまりリバースプロキシから送信された場合にのみ信頼されます。HTML ページは JavaScript を使用せず、厳格な Content Security Policy、X-Frame-Options: DENY、Referrer-Policy: no-referrer を送信します。添付ファイルは常にダウンロードとして配信されます(application/octet-stream、sandbox CSP)。
  • メールの送信はデフォルトで無効です。有効にした場合、すべてのメッセージ(本文全体と添付ファイル名)、完全削除、Sieve の変更、不在通知の変更についてユーザーの確認が必要です。承認の対象となるのは、表示された正確な内容のみです。ローカルモードでは、モデルから取得したアドレスのアカウントへの接続にも確認が必要です。確認を促せないクライアントでは、仕様で求められているとおり、ユーザーに確認した後でモデルが confirm=true を渡す必要があります。プロンプトインジェクションを受けたモデルがこれを設定する可能性があるため、そのようなクライアントではツールの承認を有効にしておいてください。

脆弱性の報告については、SECURITY.md の説明をご覧ください。

データ

データディレクトリには、master.key(OS のキーリングを使用しない場合)と jmap-mcp.db(SQLite)が保存されます。データベースはキーなしでは復号できないため、両方を一緒にバックアップしてください。これらを削除すると、すべてのアカウントの接続が解除されます。ユーザーは再度サインインするだけで済みます。

開発

go test ./...                                  # unit tests, including replayed Stalwart exchanges
go test -tags integration ./...                # starts Stalwart in Docker
golangci-lint run ./...

統合テストでは stalwartlabs/stalwart を起動し、その API を通じてセットアップを完了し、アカウントを作成し、サンプルメッセージをインポートして、実際の OAuth フロー(ブラウザー、デバイス、MCP SDK クライアントを使用した HTTP ブリッジ)を実行します。ユニットテストでは、これらの実行で記録された JMAP のやり取りを再生します。次のコマンドで記録を更新します:JMAP_MCP_RECORD=$PWD/internal/tools/testdata/read go test -tags integration -run TestStalwartReadTools ./internal/tools(write / TestStalwartWriteTools も同様です)。

ディレクトリ構成:internal/jmapc(JMAP クライアントとディスカバリー)、internal/mailauth(メールサーバーの OAuth クライアント)、internal/mailview(コンパクトなメール表示)、internal/tools(MCP ツール)、internal/stdio と internal/httpd(2 つのモード)、internal/store(暗号化された SQLite)、internal/netguard(SSRF ガード)。

CONTRIBUTING.md をご覧ください。

JMAP ライブラリの選定

ライブラリ評価
git.sr.ht/~rockorager/go-jmapaerc で使用されており、core、mail、push をカバーしています。最終リリースは 2025 年 2 月の v0.5.3 で、Sieve には対応していません。
github.com/mikluko/jmap上記のライブラリを保守しているフォークです(v0.26.0、2026 年 2 月)。同じ範囲をカバーしており、EmailSubmission、Identity、VacationResponse に加え、Sieve スクリプト(RFC 9661)にも対応しています。採用しました。
github.com/rhyselsmore/go-jmap新しく、設計も優れていますが、「まだ実用できない」と発表されており、EmailSubmission と Identity にも対応していません。

mikluko/jmap はメソッドとオブジェクトの型を提供します。フォークせずに internal/jmapc でトランスポートを補完しています。このライブラリのアップロードでは誤った Content-Type が送信され、ダウンロードでは名前と型がハードコードされており、セッションのデコードでは未対応の機能があると失敗するためです。

決定事項

初期仕様が不正確だと判明した点、または実際のソフトウェアを確認して選択する必要があった点を、2026 年 10 月時点で以下に示します。

  1. Stalwart のクライアント登録。 Stalwart のリファレンスでは、anonymousClientRegistration のデフォルト値は true とされています(別のページでは false と記載されています)。Stalwart 0.16.27 は匿名登録を受け付けますが、パブリッククライアントに限られます。コンフィデンシャルクライアントには、oauthClientRegistration 権限を持つ認証済みの呼び出し元が常に必要です。そのため、ブリッジはコンフィデンシャルクライアントを要求し、失敗した場合は PKCE を使用するパブリッククライアントにフォールバックします。また、静的に宣言されたクライアント用に /admin ページを提供します。
  2. Stalwart の OAuth サーバーの検出。 Stalwart は JMAP セッションを匿名で提供し(HTTP 200)、API 呼び出しに対してのみ認証を要求します。また、メールドメインから検出したセッションホストと OAuth 発行者は異なる場合があります(example.com と mail.example.com など)。ブリッジは、RFC 8414 と OpenID のディスカバリーを試す前に、セッションのオリジンにある RFC 9728 ドキュメントを読み取ります。
  3. MCP 2026-07-28 でのエリシテーション。 Go SDK v1.8.0 は 2026-07-28 プロトコルを実装しています。このプロトコルでは、ツールの呼び出し中にサーバーが開始するエリシテーション要求は禁止されています。サーバーは結果に質問を含めて返し、クライアントが再試行する必要があります(SEP-2322、複数回のラウンドトリップを伴う要求)。ツールはこの仕組みを使用し、古いバージョンのクライアントには従来の elicitation/create にフォールバックします。
  4. レジストリ名。 レジストリは GitHub のオーナー名の大文字と小文字をそのまま使った io.github.<owner>/* を許可し、名前を大文字と小文字を区別して比較します。そのため、サーバーは io.github.kolapsis/jmap-mcp ではなく、io.github.kOlapsis/jmap-mcp として公開されます。
  5. レジストリ内のバイナリ。 レジストリには、通常のバイナリパッケージ種別がありません。バイナリは MCP バンドル(.mcpb:macOS ユニバーサル版と Windows x64 版、Claude Desktop 用)として、イメージは OCI パッケージ(永続ボリュームを使用するローカルモード、デバイスフローでサインイン)として公開されます。
  6. デフォルトアカウント。 呼び出しのたびに使用するアカウントを尋ねると、複数のアカウントが使いにくくなります。複数のアカウントが接続されていて、デフォルトが設定されていない場合に限り、アカウントを一度尋ねます。その回答がデフォルトになり(list_accounts で変更できます)。
  7. ローカルのトークン保存。 ローカルモードでは、HTTP モードと同じ暗号化された SQLite ストアを使用します。OS のキーチェーンには、個々のトークンではなくマスターキーを保存します。
  8. 発行トークン。 署名付き JWT ではなく、キー付きハッシュとして保存される不透明なトークンを使用します。これにより、トークンを取り消せるほか、リフレッシュトークンの再利用を検出できます。
  9. Sieve と不在時の自動応答。 フィルタリングルールの作成や有効化によってメールが転送または破棄される可能性があり、自動応答によってメールを送信した全員にテキストが送信されます。どちらにも、メール送信時と同じ確認が必要です。
  10. 同一ドメインの認可サーバー。 JMAP ホストのメタデータに従って任意の認可サーバーに接続すると、悪意のあるドメインが別のサーバー発行のトークンを受け取れるようになり(HTTP モードでは、別のユーザーの ID を名乗ることもできます)。JMAP ホストと発行者は同じ登録可能ドメインを共有する必要があり、ユーザー ID は ID トークンから取得します。そのため、JMAP ホストと OAuth サーバーが無関係のドメインにあるプロバイダーはサポートされません。

リリース

main へのプッシュごとにイメージをビルドし、ghcr.io/kolapsis/jmap-mcp:main にプッシュします(ワークフロー image.yml)。メンテナーは vX.Y.Z タグをプッシュしてバージョンを公開します。リリースワークフローでは GoReleaser を実行し(アーカイブ、チェックサム、SBOM、 GHCR 上の semver および latest タグ付きマルチアーキテクチャイメージ、デプロイキーが HOMEBREW_TAP_DEPLOY_KEY シークレットに保存された状態で kOlapsis/homebrew-tap にプッシュする Homebrew cask)、jmap-mcp.mcpb をビルドしてアップロードした後、 GitHub OIDC を使用して server.json を MCP レジストリに公開します。

初回のみ必要な設定:最初のリリース後に、組織の GitHub packages で jmap-mcp パッケージを公開に設定してください(レジストリは公開イメージのみを検証します)。その後、 mcp-registry ジョブを再実行してください。Glama などのディレクトリから見つけられるよう、リポジトリのトピックを設定します:

gh repo edit kOlapsis/jmap-mcp --description "MCP server giving AI assistants OAuth access to JMAP mailboxes (Stalwart and others)" \
  --homepage https://github.com/kOlapsis/jmap-mcp --add-topic mcp,mcp-server,jmap,stalwart,email

ライセンス

Apache-2.0

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。