# メッセージングのためのMCP：AIエージェントがいかにしてSMSとWhatsAppを安全に送信できるか

> MCPサーバーは、メッセージングAPIをAIエージェントが呼び出し可能なツールへと変換します。これは強力であると同時にリスクも伴います。送信ツールを持つエージェントは、実際の顧客にメッセージを送信できてしまうからです。ここでは、SMSおよびWhatsAppにおけるMCPの仕組み、BroadNetのサーバーへの接続方法、そして事前に導入すべきガードレールについて解説します。

- 正規URL: https://www.broadnet.me/ja/blog/mcp-server-sms-whatsapp-ai-agents
- 言語: ja
- 最終更新日: 2026-10-10
- 発行者: BroadNet (https://www.broadnet.me)

- 公開日: 2026-09-26
- 著者: BroadNet Engineering

メッセージング用のMCPサーバーは、メッセージングAPIを、AIエージェントがModel Context Protocolを通じて発見・呼び出し可能なツールとして公開します。これにより、アシスタントは要求に応じてSMSまたはWhatsAppメッセージを送信できるようになります。BroadNetは、WhatsApp、SMS、RCS、Telegram、Push、Email、Messenger、Instagramにサービスを提供しているものと同じAPI上で、Streamable HTTPトランスポートとBearerトークンを使用し、https://mcp.broadnet.me/mcp でこれを実行しています。本ガイドでは、その仕組みと、より重要な点として、エージェントが誤った相手にメッセージを送信するのを防ぐ方法について説明します。

## 主なポイント

- MCPは、JSON-RPC 2.0に基づいて構築された、AIアプリケーションが外部ツールを発見し呼び出すことを可能にするオープンプロトコルです。メッセージングMCPサーバーは、送信、テンプレート、およびレポートのエンドポイントをツールへと変換します。
- リモートサーバーはStreamable HTTPトランスポートを使用します：1つのHTTPSエンドポイントに対し、クライアントからの各メッセージがHTTP POSTとなります。ローカルサーバーは通常stdioを使用します。
- BroadNet MCPサーバーはhttps://mcp.broadnet.me/mcpにあり、Authorization: Bearerヘッダーのないリクエストはすべて拒否します。
- トークンは送信資格情報です。エージェントは、お客様自身のコードと全く同じように、その権限に基づいて動作します。
- MCP仕様では、ツール呼び出しを拒否できる人間が常に介在（human in the loop）すべきであり、サーバーはツール呼び出しに対してレート制限を適用しなければならない（MUST）と定めています。すべての送信ツールにおいて、同意、送信禁止時間帯、上限設定、および承認プロセスを構築してください。

## Model Context Protocolとは何ですか？

[MCP仕様](https://modelcontextprotocol.io/specification/latest)では、MCPを「LLMアプリケーションと外部データソースおよびツールとのシームレスな統合を可能にするオープンプロトコル」と定義しています。これは、ホスト（AIアプリケーション）、クライアント（ホスト内のコネクタ）、サーバー（ツール、リソース、プロンプトを提供するサービス）の3つのロール間で、JSON-RPC 2.0メッセージを使用します。2026年9月26日現在、仕様の最新リビジョンは2026-07-28付です。

メッセージングにおいて重要なのはツールです。クライアントがtools/listでツールをリスト化し、モデルがその中から1つを選択し、クライアントがtools/callでそれを呼び出します。仕様では、ツールは「モデル制御」と呼ばれます。つまり、モデルが使用時期を決定するのです。だからこそ、送信ツールにはモデルが言葉巧みに回避できないガードレールが必要なのです。

## SMSおよびWhatsAppのためのMCPサーバーはどのように機能しますか？

リクエストパスには5つのホップがあります。設計のポイントは、MCPサーバーが新しい送信能力を追加するのではなく、既存のAPIを、同じトークンと同じ制御下で公開することにあります。

1. ユーザーはAIホストに対して、例えば次のように指示します。「WhatsAppでこの顧客に配送状況の更新を送信して」。
2. モデルは、MCPクライアントが取得したリストから、WhatsApp送信ツールなどのツールを選択し、その引数を入力します。
3. MCPクライアントは、Bearerトークンを使用して、HTTP POSTとしてhttps://mcp.broadnet.me/mcpにtools/callリクエストを送信します。
4. BroadNetのMCPサーバーはトークンを検証し、対応するBroadNet APIエンドポイントを呼び出します。
5. APIはメッセージをWhatsAppまたはモバイルネットワークにルーティングし、結果を返します。この結果はツール実行結果としてモデルに送り返されます。

プロダクトチームのデモ録画では、クライアントは380個のBroadNetツールをリストアップしており、その中にはsend_message、post_sms_send、post_whatsapp_message_send、get_whatsapp_template_list、post_whatsapp_template_send、post_rcs_message_send、get_report_deliveryが含まれています。正確なリストはサーバーのバージョンやアカウントによって異なります。詳細は[MCPサーバードキュメント](https://www.broadnet.me/developers/mcp)を参照してください。

## Streamable HTTPかstdioか：どちらのトランスポートを使用しますか？

仕様では2つの標準トランスポートが定義されています。どちらを使用するかはサーバーの実行場所によって決まり、それによって認証方法も決まります。

|  | stdio | ストリーマブルなHTTP |
|---|---|---|
| サーバーの実行場所 | クライアントによって起動されるサブプロセスとして、同一マシン上で実行 | HTTPSを介してアクセスする独立したサービスとして実行 |
| メッセージの伝送経路 | 標準入出力による、改行区切りのJSON-RPC | 各クライアントメッセージは、単一のMCPエンドポイントへのHTTP POSTとして送信されます。レスポンスはJSONまたはServer-Sent Events（SSE）ストリームとして返されます。 |
| 認証情報の仕組み | 仕様では、stdioサーバーは環境変数から認証情報を読み込む必要があります | すべてのリクエストにAuthorization: Bearerヘッダーを含める必要があります。トークンをクエリ文字列に含めてはいけません。 |
| 一般的な用途 | ローカル開発者ツール | メッセージングAPIなど、多くのクライアントによって共有されるホスト型サービス |
| BroadNet | 提供なし | https://mcp.broadnet.me/mcp |

HTTPサーバーの場合、仕様の2025-06-18改訂版では、サーバーにOriginヘッダーの検証を求めるほか、すべての接続に対して認証を行うことを推奨しています。最新の改訂版（2026-07-28）では、各リクエストが自己完結型となり、独自のメタデータにプロトコルバージョンとクライアントの機能が含まれます。以前の改訂版では、初期化ハンドシェイクによってセッションを開始していましたが、クライアントはサーバーがどのリビジョンを使用しているかを検出し、フォールバックを行います。

## AIエージェントをBroadNetのMCPサーバーに接続するにはどうすればよいですか？

1. BroadNetアカウントからトークンを取得してください。BroadAdminポータルのIntegrationsからMCP Integrationを選択すると、一時的なキーが発行されます。永続的なキーは、アカウント管理者またはマスターアカウントから取得してください。
2. MCPクライアントにサーバーを追加します。ほとんどのクライアントでは、以下のようなJSON設定を使用します。フィールド名はクライアントによって若干異なる場合があるため、クライアントのドキュメントを確認してください。
3. トークンをコミットするファイルに含めないでください。以下の設定例のように、クライアントの環境変数サポートを利用してください。
4. ツールリストを開き、エージェントに必要のないすべてのツールをオフにします。
5. エージェントを顧客データにアクセスさせる前に、自身が所有する番号に対してメッセージを1通送信してテストを行ってください。

```
{
  "mcpServers": {
    "broadnet": {
      "type": "http",
      "url": "https://mcp.broadnet.me/mcp",
      "headers": {
        "Authorization": "Bearer ${BROADNET_TOKEN}"
      }
    }
  }
}
```

クライアントを使用せずに接続をテストするには、自身でinitializeリクエストを送信してください：

```
curl -X POST https://mcp.broadnet.me/mcp \
  -H "Authorization: Bearer $BROADNET_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize",
       "params":{"protocolVersion":"2025-06-18","capabilities":{},
                 "clientInfo":{"name":"curl","version":"1.0"}}}'
```

ヘッダーがない場合、サーバーはプロトコルレベルで呼び出しを拒否します。これは、認証されていないinitializeリクエストに対するサーバーの実際の応答です（2026年9月26日に確認）：

```
event: message
data: {"jsonrpc":"2.0","id":1,"error":{"code":-32001,
  "message":"Authorization bearer token is required. Connect with an
  'Authorization: Bearer <BroadNet token>' header."}}
```

## AIエージェントにメッセージングAPIキーを渡すのは安全ですか？

制限を設けている場合に限られます。トークンは送信資格情報です。これを持つ人やエージェントは誰でも、お客様のアカウントからメッセージを送信でき、送信のたびにコストが発生し、実在の個人に届きます。また、エージェントは自然言語の指示に基づいて動作しますが、そのテキストの一部は外部から提供されます。受信した顧客メッセージやウェブページに、モデルが従おうとする指示が含まれている可能性があるためです。MCP仕様では、この点について明確に規定されています。ホストはツールを呼び出す前にユーザーの明示的な同意を得なければならず、ツールの呼び出しを拒否できる人間が常に「Human in the loop（人間による介在）」として存在すべきであり、クライアントは信頼できるサーバーからのものでない限り、ツールの注釈を信頼できないものとして扱う必要があります。

## エージェントによる顧客へのスパム送信を防ぐガードレールにはどのようなものがありますか？

モデルが回避できない場所に制御機能を配置してください。プロンプト内ではなく、クライアントの設定、独自のミドルウェア、またはアカウント設定に配置します。

| リスク | 制御 | 配置場所 |
|---|---|---|
| オプトインしていない相手へのメッセージ送信 | 送信ツールを実行する前に、同意状況およびオプトアウト状況を確認する | ミドルウェアまたはCRM |
| 夜間または不適切な日に送信すること | 受信者のタイムゾーンおよび市場ルールに基づいた送信禁止時間帯（Quiet hours） | お客様のミドルウェア |
| タスクに不要なツールを使用すること | 必要なツールのみを有効にする。テンプレート、オンボーディング、およびアカウントツールは無効にする | MCPクライアントツール設定 |
| 制御不能なループとSMS一斉送信 | エージェントごとの送信上限およびレート制限。仕様により、サーバーはツール呼び出しのレート制限を行う必要があります | お客様のミドルウェアとサーバー |
| リトライ後のメッセージの重複 | 返却されたメッセージIDを保持し、再送前にそのステータスを確認してください | エージェントのロジック（冪等性ガイドを参照） |
| レビューなしで送信されるマーケティングメッセージ | マーケティングメッセージまたは複数宛先への送信に対する人の承認 | MCPクライアント確認プロンプト |
| 受信メッセージ内に隠された指示 | 受信テキストはデータとして扱い、ユーザーの要求なしに送信をトリガーさせないこと | AIホストにおけるプロンプト設計および承認ルール |
| 漏洩したトークン | 実験用のテンポラリキー、環境変数。漏洩した場合は失効および再発行を行うこと | BroadNetアカウント管理者 |
| 監査証跡なし | 入力と結果を含むすべてのツール呼び出しをログに記録する | MCPクライアント。仕様ではクライアントがツールの使用をログに記録すべきとされています |

BroadNet APIにはべき等性ヘッダーがないため、タイムアウト後のリトライによって二重送信される可能性があります。安全なパターンは、APIが返すメッセージIDを保存し、再送前に配信ステータスを確認することです。方法は当社の[べき等性（idempotency）](https://www.broadnet.me/developers/idempotency)および[リトライ（retries）](https://www.broadnet.me/developers/retries)ガイドで解説しています。

## どのメッセージングアクションに人間の承認が必要ですか？

| アクション | 推奨されるデフォルト | 理由 |
|---|---|---|
| 配信レポートの読み取り、テンプレート一覧 | 自動 | 読み取り専用。顧客には何も届きません |
| リクエストを行った既知の顧客1名に対し、1件のトランザクションメッセージを送信 | 送信上限内であれば自動、またはワンクリックで承認 | 低リスク、高価値、監査が容易 |
| あらゆるマーケティングメッセージ | 常に人の承認が必要 | 同意、コンテンツ、およびコストのリスク |
| 複数の受信者への送信 | 常に人の承認が必要 | ミスが拡大する |
| WhatsAppテンプレートの作成または提出 | 人間による承認 | テンプレートはMetaによって審査され、お客様のブランドを象徴するものです |
| アカウント、請求、またはオンボーディングツール | 無効 | エージェントは、実行中のアカウントを変更すべきではありません |

## MCPまたはプレーンなREST API：エージェントはどちらを使用すべきか？

どちらも同じプラットフォームに接続します。違いは、どのAPI呼び出しを行うかを誰が決めるかです。

|  | BroadNet MCPサーバー | BroadNet REST API |
|---|---|---|
| どのAPI呼び出しを行うかを決める主体 | ツールリスト内のモデル | お客様のコード |
| エンドポイント | https://mcp.broadnet.me/mcp | https://api.broadnet.me（例：POST /sms/sendSms） |
| 認証 | Authorization: Bearer token | Authorization: Bearer token |
| クライアントライブラリ | リモートサーバーおよびカスタムAuthorizationヘッダーをサポートする任意のMCPクライアント | 公式のSDK、@broadnet/cpaas-sdk (TypeScript/Node.js)。OpenAPI仕様から他のクライアントを生成可能 |
| 最適な活用シーン | アシスタント、オペレーション・コパイロット、自然言語によるアドホックなタスク | 固定ロジックによる本番フロー：OTP、アラート、キャンペーン |

合理的な使い分け：人がエージェントを操作し、確認プロンプトが許容される場合はMCPを使用してください。常に同じ方法で実行する必要があるフローには、[クイックスタート](https://www.broadnet.me/developers/quickstart)と[curlジェネレーター](https://www.broadnet.me/tools/curl-generator)を備えたRESTのAPIを使用してください。当社の[APIリファレンス](https://www.broadnet.me/developers/api)には、MCPツールの背後にあるエンドポイントが記載されています。

## よくある質問

### メッセージング用MCPサーバーとは何ですか？

AIエージェントがModel Context Protocolを通じて発見し、呼び出すことができるツールとして、SMSの送信、WhatsAppメッセージの送信、または配信レポートの取得などのメッセージングAPIを公開するサーバーのことです。

### BroadNet MCPサーバーURLとは何ですか？

https://mcp.broadnet.me/mcp です。MCP Streamable HTTPトランスポートを使用し、すべてのリクエストにBroadNetトークンを含むAuthorization: Bearerヘッダーが必要です。

### どのAIクライアントが接続できますか？

Streamable HTTPを介してリモートサーバーに接続し、カスタムAuthorizationヘッダーを送信できるMCPクライアントであれば、どれでも可能です。BroadNetのデモ録画ではCursorを使用しています。

### エージェントは実際のメッセージを送信できますか？

はい。ツールは、お客様自身のAPIコールと全く同じように、お客様のトークンの権限に従って動作します。すべての送信を実運用として扱ってください。エージェントが必要とするツールのみを有効にし、送信前に確認を求めるように設定してください。

### MCPにおけるBearer認証の仕組みは？

HTTPトランスポートの場合、クライアントは同じセッション内であっても、すべてのリクエストにおいてAuthorization: Bearerに続いてトークンを送信します。決してURLクエリ文字列には含めません。BroadNetのサーバーは、これがないリクエストを拒否します。

### stdioとStreamable HTTPの違いは何ですか？

stdioはサーバーをローカルのサブプロセスとして実行し、標準入出力経由で改行区切りのJSON-RPCを交換します。Streamable HTTPはサーバーをウェブサービスとして実行し、すべてのクライアントメッセージが単一のエンドポイントへのHTTP POSTとなります。

### AIエージェントによる顧客へのスパム行為を防ぐにはどうすればよいですか？

モデルの外側で同意確認、送信禁止時間、および送信上限を強制してください。必要なツールのみを有効にし、マーケティング目的や複数人への送信には人間の承認を必須とし、すべてのツール呼び出しをログに記録してください。

### MCPを使用すべきですか、それともREST APIを使用すべきですか？

人間が自然言語でエージェントを操作する場合はMCPを使用してください。モデルではなくコードが送信内容を決定するOTPやアラートなどの固定された本番用フローには、REST APIまたはTypeScript SDKを使用してください。

## 出典

- Model Context Protocol, [仕様概要 (revision 2026-07-28)](https://modelcontextprotocol.io/specification/latest), 2026年9月26日閲覧。
- Model Context Protocol、[Transports (2025-06-18)](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports)および[Transports (2026-07-28)](https://modelcontextprotocol.io/specification/2026-07-28/basic/transports)、2026年9月26日閲覧。
- Model Context Protocol、[Authorization (2025-06-18)](https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization)、2026年9月26日閲覧。
- Model Context Protocol、[Tools (2026-07-28)](https://modelcontextprotocol.io/specification/2026-07-28/server/tools)、2026年9月26日閲覧。
- BroadNet、[MCPサーバードキュメント](https://www.broadnet.me/developers/mcp)、および2026年9月26日時点のhttps://mcp.broadnet.me/mcpのライブプローブ。

関連記事：[カスタマーメッセージングにおけるAIエージェント](https://www.broadnet.me/blog/ai-agents-customer-messaging-agentic-cpaas-2026)および[法人向けエージェンティックAIプラットフォームの選び方](https://www.broadnet.me/blog/enterprise-agentic-ai-platform-2026)。
