mcpField
W
WhatsApp Web MCP

WhatsApp Web MCP

ローカル
github.com/pnizerコミュニケーション4667 週間前に更新

WhatsApp Web MCP について

WhatsApp Web MCP は、WhatsApp Web と AI モデルを MCP で接続する Node.js アプリケーションです。AI ワークフローでメッセージ送信やコンタクト、グループの管理を自動化したい開発者を対象としています。README では、本ツールはテスト用途に限られ、本番環境での利用は想定されていないと明記されています。

主な機能

  1. 01テキストとメディアのメッセージ送信
  2. 02コンタクトとグループの検索
  3. 03個別チャットとグループチャットのメッセージ取得
  4. 04グループの作成とメンバー追加
  5. 05SSE とコマンドの転送モードに対応
  6. 06webhook による受信メッセージの取得

活用シーン

  1. 01AI アシスタントからの WhatsApp メッセージの自動送信
  2. 02コンタクト、チャット、グループ情報の照会
  3. 03受信した WhatsApp メッセージの外部 webhook エンドポイントへの転送

MCP 対応

本プロジェクトは MCP サーバーであり、メッセージ送信、グループ検索、チャット履歴の読み取りなどの WhatsApp 関連ツールとリソースを MCP クライアントに提供します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"wweb": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
起動コマンドdocker run -i --rm build

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocibuild

ツール

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

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

詳細

WhatsApp Web MCP

PR Checks

WhatsApp WebをModel Context Protocol(MCP)経由でAIモデルに接続するNode.jsアプリケーションです。このプロジェクトは、WhatsAppとプログラムからやり取りするための標準化されたインターフェースを提供し、AI主導のワークフローを通じて、メッセージの自動送信、連絡先の管理、グループチャット機能を実現します。

概要

WhatsApp Web MCPは、以下の方法でWhatsApp WebとAIモデルをシームレスに統合します。

  • Model Context Protocol(MCP)を通じて標準化されたインターフェースを作成
  • WhatsAppの機能にアクセスするためのMCP サーバーを提供
  • SSEモードまたはコマンドモードによる柔軟なデプロイオプションを提供
  • WhatsAppクライアントとの直接連携と、APIベースの接続の両方をサポート

免責事項

重要:このツールはテスト目的でのみ使用してください。本番環境では使用しないでください。

WhatsApp Webプロジェクトからの免責事項:

このプロジェクトは、WhatsAppまたはその子会社や関連会社と、提携、関連、認可、承認されておらず、また公式に一切関係ありません。WhatsAppの公式ウェブサイトは whatsapp.com にあります。「WhatsApp」および関連する名称、マーク、エンブレム、画像は、それぞれの所有者の登録商標です。また、この方法を使用してもブロックされないことは保証されません。WhatsAppは、プラットフォーム上でボットや非公式クライアントを許可していないため、完全に安全とはみなせません。

学習リソース

実際のシナリオでWhatsApp Web MCPを使用する方法については、以下の記事をご覧ください。

インストール

  1. リポジトリをクローンします。

    git clone https://github.com/pnizer/wweb-mcp.git
    cd wweb-mcp
    
  2. グローバルにインストールするか、npxで使用します。

    # Install globally
    npm install -g .
    
    # Or use with npx directly
    npx .
    
  3. Dockerでビルドします。

    docker build . -t wweb-mcp:latest
    

設定

コマンドラインオプション
オプションエイリアス説明選択肢デフォルト
--mode-m実行モードmcp、whatsapp-apimcp
--mcp-mode-cMCP接続モードstandalone、apistandalone
--transport-tMCPトランスポートモードsse、commandsse
--sse-port-pSSEサーバーのポート-3002
--api-port-WhatsApp APIサーバーのポート-3001
--auth-data-path-a認証データの保存先パス-.wwebjs_auth
--auth-strategy-s認証方式local、nonelocal
--api-base-url-bapiモード使用時のMCP用APIベースURL-http://localhost:3001/api
--api-key-kapiモード使用時のWhatsApp Web REST API用APIキー-''
APIキー認証

APIモードで実行する場合、WhatsApp APIサーバーではAPIキーによる認証が必要です。APIキーはWhatsApp APIサーバーの起動時に自動生成され、ログに表示されます。

WhatsApp API key: 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

MCPサーバーをWhatsApp APIサーバーに接続するには、--api-keyまたは-kオプションを使用して、このAPIキーを指定する必要があります。

npx wweb-mcp --mode mcp --mcp-mode api --api-base-url http://localhost:3001/api --api-key 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

APIキーは認証データディレクトリ(--auth-data-pathで指定)に保存され、WhatsApp APIサーバーを再起動しても保持されます。

認証方法
ローカル認証(推奨)
  • QRコードを一度スキャンします
  • 認証情報はセッション間で保持されます
  • 長期運用でもより安定します
認証なし
  • デフォルトの方法です
  • 起動のたびにQRコードのスキャンが必要です
  • テストや開発に適しています
Webhook の設定

認証データディレクトリ(--auth-data-path で指定)に webhook.json ファイルを作成すると、受信する WhatsApp メッセージを受け取る Webhook を設定できます。

Webhook の JSON 形式
{
  "url": "https://your-webhook-endpoint.com/incoming",
  "authToken": "your-optional-authentication-token",
  "filters": {
    "allowedNumbers": ["+1234567890", "+0987654321"],
    "allowPrivate": true,
    "allowGroups": false
  }
}
設定オプション
オプション型説明
urlStringメッセージデータの送信先となる Webhook エンドポイント URL
authTokenString (optional)Bearer トークンとして Authorization ヘッダーに含める認証トークン
filters.allowedNumbersArray (optional)メッセージを受け付ける電話番号のリスト。指定した場合、これらの番号からのメッセージのみが Webhook のトリガーになります
filters.allowPrivateBoolean (optional)Webhook にプライベートメッセージを送信するかどうか。デフォルト:true
filters.allowGroupsBoolean (optional)Webhook にグループメッセージを送信するかどうか。デフォルト:true
Webhook ペイロード

メッセージを受信し、フィルターを通過すると、設定された URL に次の JSON ペイロードを含む POST リクエストが送信されます。

{
  "from": "+1234567890",
  "name": "Contact Name",
  "message": "Hello, world!",
  "isGroup": false,
  "timestamp": 1621234567890,
  "messageId": "ABCDEF1234567890"
}

使用方法

実行モード
WhatsApp API サーバー

WhatsApp の機能を REST エンドポイント経由で提供する、スタンドアロンの WhatsApp API サーバーを実行します。

npx wweb-mcp --mode whatsapp-api --api-port 3001
MCP サーバー(スタンドアロン)

WhatsApp Web に直接接続する MCP サーバーを実行します。

npx wweb-mcp --mode mcp --mcp-mode standalone --transport sse --sse-port 3002
MCP サーバー(API クライアント)

WhatsApp API サーバーに接続する MCP サーバーを実行します。

# First, start the WhatsApp API server and note the API key from the logs
npx wweb-mcp --mode whatsapp-api --api-port 3001

# Then, start the MCP server with the API key
npx wweb-mcp --mode mcp --mcp-mode api --api-base-url http://localhost:3001/api --api-key YOUR_API_KEY --transport sse --sse-port 3002
利用可能なツール
ツール説明パラメーター
get_statusWhatsApp クライアントの接続状態を確認なし
send_messageWhatsApp の連絡先にメッセージを送信number:送信先の電話番号
message:送信するテキストコンテンツ
search_contacts名前または番号で連絡先を検索query:連絡先を検索するための検索語
get_messages特定のチャットからメッセージを取得number:メッセージの取得元となる電話番号
limit(任意):取得するメッセージ数
get_chatsWhatsApp のすべてのチャットの一覧を取得なし
create_group新しい WhatsApp グループを作成name:グループ名
participants:追加する電話番号の配列
add_participants_to_group既存のグループに参加者を追加groupId:グループの ID
participants:追加する電話番号の配列
get_group_messagesグループからメッセージを取得groupId:グループの ID
limit(任意):取得するメッセージ数
send_group_messageグループにメッセージを送信groupId:グループの ID
message:送信するテキストコンテンツ
search_groups名前、説明、メンバー名でグループを検索query:グループを検索するための検索語
get_group_by_id特定のグループの詳細情報を取得groupId:情報を取得するグループの ID
download_media_from_messageメッセージからメディアをダウンロードmessageId:ダウンロードするメディアを含むメッセージの ID
send_media_messageWhatsApp の連絡先にメディアメッセージを送信number:送信先の電話番号
source:URI スキームを含むメディアソース(URL には http:// または https://、ローカルファイルには file:// を使用)
caption(任意):メディアに付けるテキストのキャプション
利用可能なリソース
リソース URI説明
whatsapp://contactsWhatsApp のすべての連絡先の一覧
whatsapp://messages/{number}特定のチャットのメッセージ
whatsapp://chatsWhatsApp のすべてのチャットの一覧
whatsapp://groupsWhatsApp のすべてのグループの一覧
whatsapp://groups/search名前、説明、メンバー名でグループを検索
whatsapp://groups/{groupId}/messages特定のグループのメッセージ
REST API エンドポイント
連絡先とメッセージ
エンドポイントメソッド説明パラメーター
/api/statusGETWhatsApp の接続状態を取得しますなし
/api/contactsGETすべての連絡先を取得しますなし
/api/contacts/searchGET連絡先を検索しますquery:検索語
/api/chatsGETすべてのチャットを取得しますなし
/api/messages/{number}GETチャットのメッセージを取得しますlimit(クエリ):メッセージ数
/api/sendPOSTメッセージを送信しますnumber:宛先
message:メッセージの内容
/api/send/mediaPOSTメディアメッセージを送信しますnumber:宛先
source:URI スキームを含むメディアソース(URL には http:// または https:// を、ローカルファイルには file:// を使用します)
caption(任意):キャプションテキスト
/api/messages/{messageId}/media/downloadPOSTメッセージからメディアをダウンロードしますなし
グループ管理
エンドポイントメソッド説明パラメーター
/api/groupsGETすべてのグループを取得しますなし
/api/groups/searchGETグループを検索しますquery:検索語
/api/groups/createPOST新しいグループを作成しますname:グループ名
participants:電話番号の配列
/api/groups/{groupId}GET特定のグループに関する詳細情報を取得しますなし
/api/groups/{groupId}/messagesGETグループのメッセージを取得しますlimit(クエリ):メッセージ数
/api/groups/{groupId}/participants/addPOSTグループにメンバーを追加しますparticipants:電話番号の配列
/api/groups/sendPOSTグループにメッセージを送信しますgroupId:グループ ID
message:メッセージの内容
AI 統合
Claude Desktop の統合
オプション 1:NPX を使用
  1. WhatsApp API サーバーを起動します:

    npx wweb-mcp -m whatsapp-api -s local
    
  2. WhatsApp モバイルアプリで QR コードをスキャンします

  3. ログに表示された API キーを控えます:

    WhatsApp API key: 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
    
  4. Claude Desktop の設定に以下を追加します:

    {
        "mcpServers": {
            "whatsapp": {
                "command": "npx",
                "args": [
                    "wweb-mcp",
                    "-m", "mcp",
                    "-s", "local",
                    "-c", "api",
                    "-t", "command",
                    "--api-base-url", "http://localhost:3001/api",
                    "--api-key", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
                ]
            }
        }
    }
    
オプション 2:Docker を使用
  1. Docker で WhatsApp API サーバーを起動します:

    docker run -i -p 3001:3001 -v wweb-mcp:/wwebjs_auth --rm wweb-mcp:latest -m whatsapp-api -s local -a /wwebjs_auth
    
  2. WhatsApp モバイルアプリで QR コードをスキャンします

  3. ログに表示された API キーを控えます:

    WhatsApp API key: 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
    
  4. Claude Desktop の設定に以下を追加します:

    {
        "mcpServers": {
            "whatsapp": {
                "command": "docker",
                "args": [
                    "run",
                    "-i",
                    "--rm",
                    "wweb-mcp:latest",
                    "-m", "mcp",
                    "-s", "local",
                    "-c", "api",
                    "-t", "command",
                    "--api-base-url", "http://host.docker.internal:3001/api",
                    "--api-key", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
                ]
            }
        }
    }
    
  5. Claude Desktop を再起動します

  6. Claude のインターフェースから WhatsApp の機能を利用できるようになります

アーキテクチャ

このプロジェクトは、関心事を明確に分離した構成になっています。

コンポーネント
  1. WhatsAppService:WhatsApp とやり取りするための中核となるビジネスロジック
  2. WhatsAppApiClient:WhatsApp API に接続するためのクライアント
  3. API Router:REST API 用の Express ルート
  4. MCP Server:Model Context Protocol の実装
デプロイオプション
  1. WhatsApp API Server:スタンドアロンの REST API サーバー
  2. MCP Server (Standalone):WhatsApp Web への直接接続
  3. MCP Server (API Client):WhatsApp API サーバーへの接続

このアーキテクチャにより、次のような柔軟なデプロイ構成が可能になります。

  • API サーバーと MCP サーバーを別々のマシンで実行する
  • MCP サーバーを既存の API サーバーへのクライアントとして使用する
  • シンプルにするため、すべてを 1 台のマシンで実行する

開発

プロジェクト構成
src/
├── whatsapp-client.ts     # WhatsApp Web client implementation
├── whatsapp-service.ts    # Core business logic
├── whatsapp-api-client.ts # Client for the WhatsApp API
├── api.ts                 # REST API router
├── mcp-server.ts          # MCP protocol implementation
└── main.ts                # Application entry point
ソースからのビルド
npm run build
テスト

このプロジェクトではユニットテストに Jest を使用しています。テストを実行するには:

# Run all tests
npm test

# Run tests in watch mode during development
npm run test:watch

# Generate test coverage report
npm run test:coverage
リントとフォーマット

このプロジェクトでは、コードの品質管理とフォーマットに ESLint と Prettier を使用しています。

# Run linter
npm run lint

# Fix linting issues automatically
npm run lint:fix

# Format code with Prettier
npm run format

# Validate code (lint + test)
npm run validate

リント設定では TypeScript のベストプラクティスを適用し、プロジェクト全体で一貫したコードスタイルを維持します。

公開

このプロジェクトでは、npm への自動公開に GitHub Actions を使用しています。ワークフローでは、以下の処理を実行します。

  1. バージョンの更新(patch、minor、または major)
  2. バージョンの前に「v」を付けて Git タグを作成(例:v0.2.1)
  3. GitHub シークレットを使用して npm に公開

新しいバージョンをリリースするには:

  1. GitHub リポジトリの「Actions」タブに移動します
  2. 「Publish Package」ワークフローを選択します
  3. 「Run workflow」をクリックします
  4. バージョンの更新タイプ(patch、minor、または major)を選択します
  5. 「Run workflow」をクリックして公開プロセスを開始します

このワークフローを使用するには、GitHub リポジトリで NPM_TOKEN シークレットを設定する必要があります。

トラブルシューティング

Claude Desktop の連携に関する問題
  • Claude では wweb-mcp をスタンドアロンのコマンドモードで起動できません。Claude は複数のプロセスを何度も起動し、各 wweb-mcp は同じ WhatsApp 認証を共有できない puppeteer セッションを開く必要があるためです。この制約に対応し、Claude と適切に連携できるよう、アプリを MCP モードと API モードに分割しました。

機能

  • メッセージの送受信
  • メディアメッセージの送信(画像のみ)
  • メッセージからのメディアのダウンロード(画像、音声、ドキュメント)
  • グループチャットの管理
  • 連絡先の管理と検索
  • メッセージ履歴の取得

今後の機能

  • すべてのメディアファイル形式(動画、音声、ドキュメント)の送信に対応
  • よく使われるシナリオ向けのメッセージテンプレートの拡充
  • 高度なグループ管理機能
  • 連絡先の管理(連絡先の追加・削除)
  • エラー処理と復旧機能の強化

コントリビューション

  1. リポジトリをフォークします
  2. 機能ブランチを作成します
  3. 変更をコミットします
  4. ブランチにプッシュします
  5. プルリクエストを作成します

プルリクエストでは、以下を確認してください:

  • 既存のコードスタイルに従っていること
  • 適切なテストが含まれていること
  • 必要に応じてドキュメントが更新されていること
  • 変更内容が詳しく説明されていること

依存関係

WhatsApp Web.js

このプロジェクトでは、WhatsApp Web のブラウザーアプリ経由で接続する、非公式の WhatsApp Web 用 JavaScript クライアントライブラリである whatsapp-web.js を使用しています。詳しくは、whatsapp-web.js の GitHub リポジトリをご覧ください。

ライセンス

このプロジェクトは MIT License の下でライセンスされています。詳細は LICENSE ファイルをご覧ください。

ログ

WhatsApp Web MCP には、Winston で構築された堅牢なログシステムが含まれています。ログシステムでは、以下を利用できます。

  • 複数のログレベル(error、warn、info、http、debug)
  • 色分けされたログのコンソール出力
  • API エンドポイントの HTTP リクエスト/レスポンスのログ記録
  • 構造化されたエラー処理
  • 環境に応じたログレベル(開発環境と本番環境)
  • MCP コマンドモードで実行する場合、すべてのログを stderr に出力
ログレベル

アプリケーションでは、詳細度の高い順に以下のログレベルをサポートしています。

  1. error - アプリケーションの動作を妨げる重大なエラー
  2. warn - アプリケーションは停止しませんが、注意が必要な警告
  3. info - アプリケーションの状態やイベントに関する一般情報
  4. http - HTTP リクエスト/レスポンスのログ記録
  5. debug - 詳細なデバッグ情報
ログレベルの設定

--log-level または -l フラグを使用して、アプリケーションの起動時にログレベルを設定できます。

npm start -- --log-level=debug

グローバルインストールを使用する場合は、以下のように設定できます。

wweb-mcp --log-level=debug
コマンドモードでのログ記録

MCP コマンドモード(--mode mcp --transport command)で実行する場合、すべてのログは stderr に出力されます。これは、stdout をデータ出力に、stderr をログや診断情報に使用するコマンドラインツールで重要です。これにより、stdout を介した MCP プロトコルの通信がログメッセージによって妨げられないようにします。

テスト環境

テスト環境(NODE_ENV=test の場合、または Jest で実行している場合)では、ロガーがテストに適した動作に自動で調整されます。

コメント

MCP は初めてですか?

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

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