Cloudflare Workers上のWhatsApp MCP – 読み取り専用AI搭載メッセージアクセス
TL;DR – WhatsApp MCPの機能と重要性
WhatsApp MCPは、Cloudflare Workers上で動作するセルフホスト型の読み取り専用サーバーで、AIエージェント(例:Claude Code)が自分のWhatsAppチャットを検索・閲覧できるようにします。メッセージはDurable Object内のプライベートなSQLiteデータベースに保存され、データを自分の管理下に置きながら、標準のMCPインターフェースを公開します。
コア機能 – AIエージェントがチャット履歴を照会可能
- 検索と閲覧: エージェントは全チャットまたは特定の会話内で
search_messagesを実行でき、get_messagesでチャットをページ送りできます。 - チャット検出:
list_chatsは最近のチャットを返し、名前や番号でフィルタリング可能です。 - 名前付け支援:
unnamed_chatsは電話番号しかないチャットを抽出します。エージェントはset_contact_namesを呼び出して、人間が読める名前を添付できます。 - オンデマンド同期:
sync_nowは、保存済みコピーが10分以上古い場合にWhatsAppから即時プルを強制します。 - 読み取り専用保証: サーバーはメッセージを送信せず、リンクされたデバイスにWhatsAppが提供するものだけを読み取ります。
アーキテクチャ – プライバシーと軽量性を保つ仕組み
- Durable Objectを単一の情報源に: すべてのメッセージ、連絡先、Baileys認証データは、単一のDurable Object(
WhatsAppStore)内のSQLite DBに保存されます。 - ステートレスなCloudflare Worker: WorkerはHTTP/MCPルーティング、OAuth、日次cron(プルをトリガー)を処理します。メッセージデータ自体は保持しません。
- Baileysライブラリ: オープンソースのWhatsApp Webクライアントライブラリを使用して、リンクされたデバイスをエミュレートします。コードには、BaileysをCloudflareの
workerdランタイムで動作させるための3つのシム(ws-shim.ts、vendor-bridge.mjs、polyfills.ts)が含まれています。 - OAuth保護: パスワード(
OWNER_PASSWORD)またはオプションのメールベースのログインで/mcpエンドポイントを保護します。トークンはKV名前空間(OAUTH_KV)に保存されます。 - 外部ストレージなし: OAuthトークン用のCloudflare KVを除き、すべてのデータはDurable Object内に留まり、サードパーティのストレージには送信されません。
デプロイ手順 – ゼロから動作するエンドポイントまで
- 前提条件: Workers有料プランのCloudflareアカウント、Node.js 20以上、WhatsAppがインストールされた電話。
- クローンとインストール:
git clone https://github.com/finereli/whatsapp-mcp cd whatsapp-mcp npm install - OAuthトークン用のKV名前空間を作成:
npx wrangler kv namespace create OAUTH_KV - 強力なオーナーパスワードを設定(12文字以上):
npx wrangler secret put OWNER_PASSWORD - デプロイ:
Wranglerはnpm run deployhttps://whatsapp-mcp.<your-name>.workers.devのようなURLを出力します。 - WhatsAppをリンク: URLを開き、WhatsApp → 設定 → リンク済みデバイスからQRコードをスキャンします。最初のリンクで、WhatsAppが提供する履歴がインポートされます。
- MCPクライアントを接続(例:Claude Code):
その後、claude mcp add --transport http whatsapp https://<your-url>/mcp/mcpを実行してパスワードでサインインします。
運用上の注意 – プロジェクトを使用・変更する前に知っておくべきこと
- 利用規約のリスク: このプロジェクトはWhatsApp Webと同じリバースエンジニアリングされたプロトコルを使用しており、WhatsAppのTOSに違反します。読み取り専用のリンクデバイスでは実際のリスクは低いですが、ゼロではありません。
- インポート制限: 最初の履歴インポートはWorkersのデフォルトのCPU制限を超える可能性があります。リポジトリの
wrangler.jsoncで制限を引き上げており、有料プランが必要です。 - データの完全性: WhatsAppは新しいデバイスに適切と判断した履歴のみを送信します。ギャップを埋めるには、デバイスを再リンクする必要があります。
- 名前のないチャット: 多くの単発連絡先は電話番号としてのみ表示されます。エージェントは
unnamed_chatsを呼び出し、その後set_contact_namesを自分の連絡先ストアのデータで呼び出すことで解決できます。 - メディアの処理: メディアファイルはダウンロードされず、
[image]や[voice note 12s]のようなプレースホルダーとして表示されます。 - シングルユーザー設計: 各デプロイは1つのWhatsAppアカウントに紐づいています。マルチユーザー対応にはDurable Objectのキー設計の再設計が必要です。
サーバーの拡張 – ツールの追加や認証の変更
- 新しいMCPツールを追加:
src/mcp.tsで登録し、必要なSQLをsrc/store.tsで実装します。読み取り専用ツールは冪等に保ちます。 - 認証モードの切り替え:
src/auth.tsはパスワードまたはメールベースのログインをサポートしています。別のIDプロバイダを追加するには、新しいモードとコールバックルートが必要なだけで、他のコードは不透明なベアラートークンとして扱います。 - マルチユーザー対応: 固定のDurable Object名(
owner)を、サインインしたIDから派生したユーザーごとの識別子に置き換え、OAuthペイロードを調整します。 - カスタム名前の取り込み:
{ jid, name }行を生成できる外部プロセスは、store.setCustomNamesを呼び出せます。これにより、CSVアップロード、CardDAV同期、スケジュールジョブが可能になり、サーバーに資格情報を公開しません。 - メッセージ送信: このプロジェクトは意図的に書き込み機能を省いています。追加する場合は、リンクされたデバイスが完全に機能するボットになり、アカウント停止のリスクが高まるため、慎重なセキュリティレビューが必要です。
デバッグとテスト – 組み込み診断
オプションのPINシークレットを設定すると、以下のエンドポイントがトラブルシューティング用のJSONを返します(ヘッダーx-pin: <PIN>を含めてください):
/debug– セッションフェーズ、リンク状態、最近のイベントを表示。/debug/pull– 即時プルを強制。/debug/*– さまざまな読み取り専用クエリ(chats、messages、search、unnamed、sql)。/debug/logout–relinkと同じフローをトリガー。
ローカル開発はnpm run devとOWNER_PASSWORDを含む.dev.varsファイルで実行できます。これにより、空のストレージでローカルDurable Objectが起動し、本番デプロイに影響を与えずにQRペアリングフローをテストできます。
コミュニティの反応 – Hacker Newsの議論から
「AIが私のために、テキストメッセージを送受信できるAndroidゲートウェイを構築してくれた…ソフトウェア構築後は、SaaSもサードパーティも購入もゼロ。」 – @pizzafeelsright
「気になるのは、会話の相手側をサードパーティのAI企業にさらすことだ…メッセージを送っている相手は決して同意していない。」 – @SchemaLoad
「WhatsApp Webのハックを試したことがあるが、時々BANされる。WAがユニバーサルな連絡チャネルなら、それは不便だ。」 – @taldo
「無料プランでは不十分かもしれない。リポジトリは初期インポートに有料プランが必要と記載している。」 – @calmingsolitude
「セカンダリデバイスをリンクした後にBANされた。非公式のリンクデバイスを追加すると、WhatsAppがアカウントを永久にブロックすることがある。」 – @lgleason
これらのコメントは、非公式のWhatsApp統合に伴うプライバシー、法的、信頼性の懸念を浮き彫りにしています。
結論
WhatsApp MCPは、個人用の読み取り専用AIアシスタントをCloudflare Workers上に構築でき、データを外部に保存しないことを実証しています。MCPプロトコル、Baileys、Cloudflare Durable Objectsを組み合わせてAIエージェントに自分のメッセージへの文脈的なアクセスを提供する具体例であり、同時にリバースエンジニアリングされたWhatsApp統合の法的・運用上のトレードオフも示しています。
Sources
関連
- プロジェクト
- Dispatch
- プロジェクト
- プロジェクト
- プロジェクト