# 用于消息服务的MCP：AI智能体如何安全地发送短信和WhatsApp

> MCP服务器将消息API转换为AI智能体可以调用的工具。这既强大又充满风险：拥有发送工具的智能体可以直接给真实客户发送消息。本文将介绍MCP在短信和WhatsApp中的工作原理、如何连接到BroadNet的服务器，以及首先需要建立的防护机制。

- 规范网址: https://www.broadnet.me/zh/blog/mcp-server-sms-whatsapp-ai-agents
- 语言: zh
- 最后更新: 2026-10-10
- 发布方: BroadNet (https://www.broadnet.me)

- 发布日期: 2026-09-26
- 作者: BroadNet Engineering

用于消息服务的MCP服务器通过Model Context Protocol将消息API暴露为工具，以便AI智能体可以发现并调用，从而使助手能够根据请求发送短信或WhatsApp消息。BroadNet在https://mcp.broadnet.me/mcp 运行这样一个服务器，使用Streamable HTTP传输方式和Bearer令牌，并运行在与服务WhatsApp、短信、RCS、Telegram、推送、电子邮件、Messenger和Instagram相同的API之上。本指南将解释其工作原理，更重要的是，如何防止智能体向错误的人发送消息。

## 核心要点

- MCP是一种基于JSON-RPC 2.0构建的开放协议，允许AI应用发现并调用外部工具。消息MCP服务器将发送、模板和报告端点转换为工具。
- 远程服务器使用可流式传输的HTTP传输方式：一个HTTPS端点，每个客户端消息均为一个HTTP POST请求。本地服务器通常使用stdio。
- BroadNet MCP服务器位于https://mcp.broadnet.me/mcp，并会拒绝任何不带Authorization: Bearer请求头的请求。
- 令牌是一种发送凭据。智能体根据其权限进行操作，其行为与您自己的代码完全一致。
- MCP规范指出，应当始终由人工介入以拒绝工具调用，且服务器必须对工具调用进行速率限制。请针对每个发送工具建立授权机制、静默时间、上限限制和审批流程。

## 什么是Model Context Protocol？

[MCP规范](https://modelcontextprotocol.io/specification/latest)将MCP描述为“一种能够实现LLM应用与外部数据源及工具之间无缝集成的开放协议”。它在三种角色之间使用JSON-RPC 2.0消息：宿主（AI应用）、客户端（宿主内部的连接器）和服务器（提供工具、资源和提示词的服务）。截至2026年9月26日，该规范的最新修订版本日期为2026-07-28。

工具是消息服务中至关重要的部分。客户端通过tools/list列出工具，模型选择其中一个，然后客户端通过tools/call调用该工具。规范将工具称为“模型控制”：由模型决定何时使用它们。这正是为什么发送工具需要模型无法通过对话绕过的防护栏的原因。

## 用于短信和WhatsApp的MCP服务器是如何工作的？

请求路径包含五个跳数。设计要点在于，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)。

## 可流式传输的HTTP或stdio：使用哪种传输方式？

规范定义了两种标准传输方式。您使用哪一种取决于服务器运行的位置，它还决定了您的身份验证方式。

|  | stdio | 可流式传输的HTTP |
|---|---|---|
| 服务器运行位置 | 作为由客户端启动的子进程，运行在同一台机器上 | 作为通过HTTPS访问的独立服务 |
| 消息传输方式 | 通过标准输入和输出传输以换行符分隔的JSON-RPC | 每个客户端消息都是向单个MCP端点发送的HTTP POST请求；回复则以JSON或服务器发送事件（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（MCP集成）即可获取临时密钥；永久密钥需由您的账户管理员或主账户提供。
2. 将服务器添加到您的MCP客户端。大多数客户端使用如下所示的JSON配置。由于不同客户端的字段名称略有不同，请查阅您所用客户端的文档。
3. 请勿将令牌保存在您提交的代码文件中。请使用您客户端的环境变量支持，如以下配置所示。
4. 打开工具列表，关闭智能体不需要的所有工具。
5. 在让智能体接触客户数据之前，请先向您拥有的号码发送一条测试消息。

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

若要在没有客户端的情况下测试连接，请自行发送初始化请求：

```
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"}}}'
```

如果没有请求头，服务器将在协议层面拒绝调用。这是针对未经身份验证的初始化请求，经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."}}
```

## 将消息服务API密钥交给AI智能体是否安全？

只有在设有限制的情况下才安全。该令牌是一种发送凭证：任何持有它的用户或智能体都可以通过您的账户发送消息，且每次发送都会产生费用并触达真实用户。此外，智能体根据自然语言指令进行操作，而部分文本可能来自外部：例如，一条入站客户消息或一个网页可能包含模型可能会尝试执行的指令。MCP规范对此有明确说明。它指出，在调用任何工具之前，宿主必须获得用户的明确同意；应当始终有“人在回路”以具备拒绝工具调用的能力；且除非来自受信任的服务器，否则客户端必须将工具注解视为不可信。

## 哪些防护措施可以防止智能体向客户发送垃圾信息？

将控制措施设置在模型无法绕过的位置：即在客户端配置、您自己的中间件或账户设置中，而不是在提示词（prompt）中。

| 风险 | 控制 | 存放位置 |
|---|---|---|
| 向未同意接收消息的用户发送消息 | 在任何发送工具运行前，请检查同意状态和退订状态 | 您的中间件或CRM |
| 在深夜或错误的日期发送 | 根据收件人时区和市场规则设定的静默时间 | 您的中间件 |
| 使用任务并不需要的工具 | 仅启用所需的工具；禁用模板、入驻和账户工具 | MCP客户端工具设置 |
| 失控循环与群发 | 每个智能体的发送上限与速率限制；规范要求服务器对工具调用进行速率限制 | 您的中间件与服务器 |
| 重试后的重复消息 | 保留返回的消息ID，并在重新发送前检查其状态 | 您的智能体逻辑（参见幂等性指南） |
| 未经审核发送的营销消息 | 任何营销或多接收者发送均需人工审批 | MCP客户端确认提示 |
| 隐藏在入站消息中的指令 | 将入站文本视为数据；严禁在未经用户请求的情况下触发发送 | AI宿主中的提示词设计与审批规则 |
| 令牌泄露 | 用于实验的临时密钥、环境变量；一旦泄露，立即撤销并重新签发 | BroadNet账户管理员 |
| 无审计追踪 | 记录每次工具调用的输入与结果 | MCP客户端；规范要求客户端应记录工具使用情况 |

BroadNet API没有幂等性请求头，因此超时后的重试可能会导致重复发送。安全的模式是存储API返回的消息ID，并在重新发送前检查送达状态；我们的 [幂等性](https://www.broadnet.me/developers/idempotency) 和 [重试](https://www.broadnet.me/developers/retries) 指南中说明了具体操作方法。

## 哪些消息服务操作需要人工审批？

| 操作 | 建议默认值 | 原因 |
|---|---|---|
| 读取状态报告，列出模板 | 自动 | 只读；不会触达客户 |
| 向一位已请求该信息的已知客户发送一条交易类消息 | 在发送限额内自动发送，或一键确认 | 低风险、高价值、易于审计 |
| 任何营销消息 | 始终需要人工审批 | 存在同意（授权）、内容及成本风险 |
| 向多个收件人发送 | 始终需要人工审核 | 错误会被放大 |
| 创建或提交WhatsApp模板 | 人工审核 | 模板将由Meta进行审核，并代表您的品牌 |
| 账户、账单或入驻工具 | 已禁用 | 智能体不应更改其运行的账户 |

## MCP或普通的REST API：智能体应该使用哪一种？

两者都连接到同一个平台。区别在于由谁来决定发起哪个调用。

|  | BroadNet MCP服务器 | BroadNet REST 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、告警、营销活动 |

合理的划分方式：在由人引导AI智能体且可以接受确认提示的场景下，使用MCP；对于必须每次都以相同方式运行的流程，请使用REST API，并参考[快速入门](https://www.broadnet.me/developers/quickstart)和[curl生成器](https://www.broadnet.me/tools/curl-generator)。我们的[API参考](https://www.broadnet.me/developers/api)记录了MCP工具背后的端点。

## 常见问题

### 什么是消息服务的MCP服务器？

一种将消息API（例如发送短信、发送WhatsApp消息或获取状态报告）作为工具，通过Model Context Protocol暴露给AI智能体，使其能够发现并调用的服务器。

### 什么是BroadNet MCP服务器URL？

https://mcp.broadnet.me/mcp. 它使用MCP Streamable HTTP传输，并且要求在每个请求中包含带有您BroadNet令牌的Authorization: Bearer请求头。

### 哪些AI客户端可以连接到它？

任何可以通过Streamable HTTP连接到远程服务器并发送自定义Authorization请求头的MCP客户端。BroadNet演示录像使用的是Cursor。

### 智能体可以发送真实的消息吗？

可以。这些工具会以您令牌的权限进行操作，完全等同于您自己的API调用。请将每一次发送都视为真实操作：仅启用智能体所需的工具，并在发送前要求确认。

### Bearer身份验证在MCP中是如何工作的？

对于HTTP传输，客户端在每个请求中都会发送Authorization: Bearer后跟令牌，即使在同一个会话中也是如此，且绝不会将其放在URL查询字符串中。BroadNet的服务器会拒绝没有该请求头的请求。

### stdio与Streamable HTTP有什么区别？

stdio将服务器作为本地子进程运行，并通过标准输入和输出交换以换行符分隔的JSON-RPC。Streamable HTTP将服务器作为Web服务运行，每个客户端消息都是向单个端点发送的HTTP POST请求。

### 如何防止AI智能体向客户发送垃圾信息？

在模型之外强制执行同意检查、静默时间及发送限额，仅启用您需要的工具，对营销和多接收者发送要求人工审批，并记录每一次工具调用。

### 我应该使用MCP还是REST API？

当人员使用自然语言引导智能体时，请使用MCP。对于固定的生产流程（例如OTP验证码和警报），请使用REST API或TypeScript SDK，因为在这些场景中是由您的代码而非模型来决定发送内容。

## 来源

- Model Context Protocol，[规范概览（修订日期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)。
