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内に留まり、サードパーティのストレージには送信されません。

デプロイ手順 – ゼロから動作するエンドポイントまで

  1. 前提条件: Workers有料プランのCloudflareアカウント、Node.js 20以上、WhatsAppがインストールされた電話。
  2. クローンとインストール:
    git clone https://github.com/finereli/whatsapp-mcp
    cd whatsapp-mcp
    npm install
    
  3. OAuthトークン用のKV名前空間を作成:
    npx wrangler kv namespace create OAUTH_KV
    
  4. 強力なオーナーパスワードを設定(12文字以上):
    npx wrangler secret put OWNER_PASSWORD
    
  5. デプロイ:
    npm run deploy
    
    Wranglerはhttps://whatsapp-mcp.<your-name>.workers.devのようなURLを出力します。
  6. WhatsAppをリンク: URLを開き、WhatsApp → 設定 → リンク済みデバイスからQRコードをスキャンします。最初のリンクで、WhatsAppが提供する履歴がインポートされます。
  7. 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
  • プロジェクト
  • プロジェクト
  • プロジェクト