Skip to main content
Glama
lswith

imap-mcp-server

by lswith

imap-mcp

ソース公開・製品ではない。 これは、Cloudflare Workers 上で動作する汎用 IMAP → MCP サーバーです。MIT ライセンスで公開されているため、コードを読んだり、コピーしたり、学んだりすることができます。ただし、これは正確に1つのメールボックス、つまり個人の iCloud アカウントのために構築され、それに対して実行されます。サポートの約束はありません: 問題はトリアージされず、プルリクエストは募集されず、リリースもなく、ここにあるものは他の誰かの使用のためにバージョン管理されていません。役に立つなら、フォークしてください。

設計上、野心によるものではなく汎用性を重視しています — ホスト、ポート、認証情報は定数ではなく設定です — そのため、任意の IMAP サーバーに対して動作するはずです。実際にテストされているのは iCloud だけです。

ステータス: スキャフォールド。 まだ機能的なものは実装されていません。両方のワーカーは、インストール、lint、型チェック、テスト、デプロイのドライランを通過するプレースホルダーです。ロードマップ を参照してください。

機能

メールボックスを Cloudflare のストレージにインデックス化し、それを検索・取得ツールとして MCP クライアントに提供します。これにより、モデルは毎回のクエリでメールボックス自体を介さずに、15年分のメールに対して質問に答えることができます。

   ┌────────────────────┐  IMAP over TLS   ┌──────────────┐
   │  imap-mcp-sync     │ ───────────────▶ │   mailbox    │
   │  packages/sync     │ ◀─────────────── │   (iCloud)   │
   │  cron, owns creds  │                  └──────────────┘
   └─────────┬──────────┘
             │ writes                    ▲ writes proxied over
             ▼                           │ a service binding
   ┌────────────────────┐                │
   │  D1 (+FTS5) and R2 │                │
   └─────────┬──────────┘                │
             │ reads                     │
             ▼                           │
   ┌────────────────────┐────────────────┘   ┌──────────────┐
   │  imap-mcp-server   │  Streamable HTTP   │  MCP client  │
   │  packages/mcp      │ ◀───────────────── │  behind CF   │
   │  stateless, no creds                    │  Access      │
   └────────────────────┘                    └──────────────┘

2つのワーカーがあり、その分割はパッケージングの選択ではなくセキュリティ設計です:

  • packages/sync (imap-mcp-sync) は、システム内で IMAP を話す唯一の部分です。アプリ固有のパスワードを保持します — iCloud では SMTP 送信を含むメールボックス全体へのアクセスを許可します — そのため、その認証情報は正確に1か所に存在します。

  • packages/mcp (imap-mcp-server) はステートレスなリーダーです。インデックスをクエリし、メールボックスには決してアクセスせず、少数の書き込み操作をサービスバインディングを介して sync ワーカーにプロキシします。独自の接続を開くことはありません。

Related MCP server: gmail-mcp

クイックスタート

pnpm install         # installs both packages
pnpm run lint        # biome check (lint + format)
pnpm run typecheck   # wrangler types + tsc --noEmit
pnpm run test        # vitest, inside workerd
pnpm run dead-code   # knip
pnpm run build       # wrangler deploy --dry-run, both workers

各パッケージで、packages/sync または packages/mcp から: pnpm run dev、pnpm run test:watch、pnpm run deploy を実行します。

設定

このリポジトリは公開されているため、デプロイ固有の値はコミットされていません — Cloudflare アカウント ID、ゾーンタグ、Cloudflare Access チームドメインやアプリケーションオーディエンス (AUD)、メールボックスアドレスはありません。wrangler.jsonc のどちらにも account_id は含まれておらず、MCP ワーカーはルートを一切宣言していません。

提供する必要があるものはすべて .env.example に名前と説明があります。それを .env にコピーして記入してください。要約すると:

項目

設定場所

CLOUDFLARE_ACCOUNT_ID

あなたの環境; wrangler が直接読み取ります

MCP ワーカーのルート / ゾーン

packages/mcp/wrangler.jsonc に追加する routes エントリ

ACCESS_TEAM_DOMAIN, ACCESS_AUD

packages/mcp/wrangler.jsonc の vars

IMAP_HOST, IMAP_PORT, IMAP_USER

packages/sync/wrangler.jsonc の vars

IMAP_PASSWORD

wrangler secret put、sync ワーカーのみ — 決して vars エントリにしない

ローカルでは、シークレットはパッケージごとに gitignore された .dev.vars に置きます。各パッケージにはコピー用の .dev.vars.example があります。

両方のワーカーはデフォルトで到達不能

workers_dev と preview_urls は両方の wrangler.jsonc ファイルで false であり、MCP ワーカーはルートを宣言していません。したがって、新規デプロイはインターネットから到達できません。これは意図的です: フォルダフェンスがない場合、MCP エンドポイントは実質的にメールボックス全体への読み取りアクセスになるため、Cloudflare Access が前面に配置される前に到達可能になってはなりません。workers_dev: false がない場合、ワーカーはルートや Access ポリシーに関係なく <name>.<account>.workers.dev で稼働します。

ゼロからの完全なデプロイガイド — シークレット、Access の設定、バインディング、マイグレーション、バックフィル — はまだ書かれていません。システムの残りの部分とともに公開されます。

ロードマップ

このリポジトリの issue として追跡されています:

#2

リポジトリのスキャフォールド — これ

#3

内部インターフェースの背後に IMAP クライアントをベンダー化

#4

D1 スキーマとマイグレーション

#5

トレーサー: 1つのフォルダを D1 に同期

#6

同期パスのためのキュー ファンアウト

#7

MCP サーバーと search_messages

#8

増分同期: ウォーターマークと UIDVALIDITY

#9

R2 への添付ファイル、テキスト抽出付き

#10

Access Managed OAuth で MCP エンドポイントをゲートする

#11

get_message と get_thread

#12

サービスバインディングを介した書き込みツール、監査ログ付き

#13

完全なバックフィルとセットアップガイド

スパイクによって、アーキテクチャ全体が依存していた1つの疑問が解決されました — Cloudflare Worker は iCloud に対して IMAP を話せるのか? できます: TLS と LOGIN をポート 993 で 755 ミリ秒で実行し、フォルダを一覧表示し、メッセージを取得して MIME デコードし、下書きを追加してフラグを立てました。したがって、同期パスは Worker であり、コンテナに移行するものはありません。設計を制約する発見 — CONDSTORE の順序、iCloud での MOVE の欠如、コンテンツに対する SEARCH の使用不可 — は、影響を受けるチケットに書き込まれています。

ライセンス

MIT — LICENSE を参照してください。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects AI agents to self-hosted Stalwart mail servers via a Cloudflare Worker and JMAP, enabling mailbox search, reading, listing, and two-step draft-and-send email operations through MCP.
    129 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables interaction with Gmail through MCP, supporting search, read, send, reply, forward, draft management, labels, and multiple accounts, deployed on Cloudflare Workers.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables connecting Gmail to MCP clients, allowing search, read, send, reply-all, forward, attachments, drafts, labels, and thread management across multiple Google accounts at once via a self-hosted Cloudflare Worker.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables searching, reading full conversations, and sending email across multiple IMAP/SMTP mailboxes from any MCP client, with multi-user support and per-user API tokens.
    MIT