关于 Fwrd SMS Codes
Fwrd SMS Codes 是供 Agent 获取 iPhone 验证码的 MCP 服务。它部署在用户自己的 Cloudflare 账户中,通过 Fwrd 应用接收短信,并保留 15 分钟。
主要功能
- 01接收 iPhone 转发的短信
- 02等待尚未交付的短信验证码
- 03按内容和时间筛选
- 04列出近期短信和验证码
- 05部署到自己的 Cloudflare 账户
适用场景
- 01在 Agent 执行任务时获取登录验证码
- 02查找近期短信中的登录链接
- 03将转发短信保留在自己的 Cloudflare 账户中
MCP 相关
通过 Streamable HTTP 向 MCP 客户端提供 `wait_for_sms_code` 和 `list_recent_texts` 工具。每个请求都需要 MCP 令牌。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://{worker_host}/mcpclaude mcp add --transport http alanwtom-fwrd-sms https://{worker_host}/mcp{"mcpServers":{"alanwtom-fwrd-sms":{"type":"http","url":"https://{worker_host}/mcp"}}}在 Cursor 中打开{"servers":{"alanwtom-fwrd-sms":{"type":"http","url":"https://{worker_host}/mcp"}}}在 VS Code 中打开{"mcpServers":{"alanwtom-fwrd-sms":{"type":"http","url":"https://{worker_host}/mcp"}}}{"mcpServers":{"alanwtom-fwrd-sms":{"serverUrl":"https://{worker_host}/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://{worker_host}/mcp需要授权工具
详细介绍
fwrd-sms-mcp
一个 MCP 服务,可将发送到你 iPhone 的短信验证码交给你的 AI Agent。它需要使用 Fwrd iPhone 应用,该应用会将每条短信转发到服务;你需要将服务部署到自己的 Cloudflare 账户。
**工作原理:**短信到达你的 iPhone → Fwrd 将短信发送到你的 Worker → 你的 Agent 调用
wait_for_sms_code 并获取验证码。
Fwrd 没有服务器,也不需要账户。iPhone 会将每条短信直接发送到你的 Worker,Worker 会将其保留 15 分钟。
部署
此按钮会将此仓库复制到你的 GitHub 账户并进行部署,其中也包括 Durable Object。它会要求提供 .dev.vars.example 中列出的两个密钥。分别使用 openssl rand -hex 32 生成,并使用两个不同的值:
FWRD_TOKEN:你粘贴到 Fwrd 中的 URL 末尾部分。MCP_TOKEN:AI 客户端发送的令牌。
也可以使用 wrangler(Node 22 或更高版本):
git clone https://github.com/alanwtom/fwrd-sms-mcp && cd fwrd-sms-mcp
npm install
npx wrangler login
npx wrangler deploy # prints https://fwrd-sms-mcp.<your-subdomain>.workers.dev
npx wrangler secret put FWRD_TOKEN # paste a value from: openssl rand -hex 32
npx wrangler secret put MCP_TOKEN # a different value
在设置好两个密钥之前,端点会返回错误,并说明缺少哪个密钥。
在 iPhone 上设置 Fwrd
- 在 Fwrd 中,点按 +,选择 Webhook,然后将
https://fwrd-sms-mcp.<your-subdomain>.workers.dev/fwrd/<FWRD_TOKEN>粘贴到 Configuration 字段。点按 Send Test Message(测试短信会显示在list_recent_texts中),然后点按勾号保存。 - 在同一个目的地中,在 Which Texts 下选择 Only Some Texts,并开启 Looks Like a Code。这样只有包含 4 到 8 位验证码的短信才会离开手机。
- 在快捷指令中创建 Message 自动化,将每条短信发送给 Fwrd: 自动化指南。Webhook 指南 详细介绍了目的地设置。
连接 AI 客户端
将 <worker> 替换为你的 fwrd-sms-mcp.<your-subdomain>.workers.dev 地址。
Claude Code
claude mcp add --transport http fwrd-sms https://<worker>/mcp --header "Authorization: Bearer <MCP_TOKEN>"
Cursor:在 ~/.cursor/mcp.json 中(或项目中的 .cursor/mcp.json)。${env:FWRD_MCP_TOKEN}
会从环境变量中读取令牌;你也可以直接粘贴令牌。
{
"mcpServers": {
"fwrd-sms": {
"url": "https://<worker>/mcp",
"headers": { "Authorization": "Bearer ${env:FWRD_MCP_TOKEN}" }
}
}
}
claude.ai 和 Claude Desktop:Customize → Connectors → + Add → Add custom connector(在 Team
和 Enterprise 计划中,Owner 可在 Organization settings → Connectors 下添加)。输入 URL
https://<worker>/mcp,并将 Authentication 设为 No sign-in。如果对话框中有 Request
headers(Anthropic 表示目前只有部分组织可用的 beta 功能),请添加一个 authorization 标头,
值为 Bearer <MCP_TOKEN>。如果没有此选项,则改用 URL
https://<worker>/mcp/<MCP_TOKEN>。这些连接器会从 Anthropic 云端连接到你的 Worker,而不是从你的电脑连接。
任何支持 Streamable HTTP 的客户端:使用 https://<worker>/mcp,并设置标头
Authorization: Bearer <MCP_TOKEN>。如果客户端无法发送标头,则使用
https://<worker>/mcp/<MCP_TOKEN>,并像保护密码一样妥善保管此 URL。
Agent 技能
skills/sms-verification-codes 会指导编码 Agent 何时调用这些工具,以及如何与你一起完成所有设置。通过
skills 为 Claude Code、Cursor、Codex 和其他 Agent 安装:
npx skills add alanwtom/fwrd-sms-mcp
通过 stdio 运行
node glama/stdio.mjs(或 Dockerfile)会通过 wrangler dev 在本地运行 Worker,并通过 stdin/stdout
传输 MCP。MCP 目录会使用它来列出工具。它不会接收短信,因此实际使用时,请部署 Worker 并连接到 https://<worker>/mcp。
工具
| 工具 | 参数 | 功能 |
|---|---|---|
wait_for_sms_code | contains(可选,文本必须包含的词语,例如服务名称)、max_age_seconds(默认值为 120)、timeout_seconds(默认值为 50,最多为 100) | 返回最新的、尚未发放的验证码,包括在调用前 max_age_seconds 秒内收到的验证码。否则会等待验证码到达或超时。每个验证码只发放一次。超时时会返回普通结果,告知 Agent 尚未收到验证码,并提示其要求网站重新发送。 |
list_recent_texts | minutes(1 到 15,默认值为 10)、contains(可选) | 返回最近几分钟内的短信,按时间从新到旧排列,并附上发件人(如果 Fwrd 发送了该信息)、时间和验证码。适用于登录链接和非数字验证码的消息。 |
默认等待时间为 50 秒,因为 Claude Code 和基于官方 TypeScript SDK 构建的客户端会在 60 秒后停止等待请求,除非另行配置。claude.ai 和 Claude Desktop 的每次工具调用最长可等待 240 秒。在 Claude Code 中,可以在服务器的配置项中设置 timeout 字段(以毫秒为单位)来提高限制,此后 Agent 最多可以请求等待 100 秒。
Fwrd 发送的内容
已检查随附的 Fwrd 1.2.1 和 1.3.1 源代码:
| 请求 | 每条转发的短信发送一个 POST 请求,发送至公共主机名上的 https:// URL:不能是 localhost、IP 地址、.local、.lan、.internal 或 .test;不能包含 user:pass@,也不能包含 #fragment。workers.dev 地址可用。 |
| 标头 | Content-Type: application/json 和 Idempotency-Key: <UUID>,重试时使用相同的键。不包含身份验证标头,因此密钥保存在 URL 中。 |
| 请求正文 | {"content": "<message exactly as it arrived>", "text": "<the same message again>"};只有在 Fwrd 的 Settings 中启用了 Include Who Sent It,且在 Fwrd 的 Shortcuts 操作中设置了 Sender 字段时,才会额外包含 "sender": "<who sent it>"。 |
| 成功 | 15 秒内收到任意 2xx 响应。此服务会立即回复 200 {"ok":true}。 |
| 重试 | 遇到 429、5xx 或连接中断时,最多重试两次,并遵循 Retry-After。不会跟随重定向。此服务只会存储一次重复的 Idempotency-Key。 |
| 短信筛选 | 仅接收与 Shortcuts 自动化匹配的新短信,以及符合 Fwrd 目标端筛选条件的短信:Looks Like a Code、特定词语和一天中的特定时段。 |
如果令牌错误,Webhook 会返回 401;如果请求正文不是 JSON 格式或缺少 content,会返回 400;如果请求正文超过 64 KB,会返回 413;如果请求方法不是 POST,会返回 405。令牌可以通过 /fwrd/<FWRD_TOKEN> 或 /fwrd?token=<FWRD_TOKEN> 传入。
协议
MCP Streamable HTTP,路径为 /mcp:无状态、使用 JSON 响应、不使用 SSE,也不使用会话。支持 2026-07-28(无需握手:server/discover,每个请求都包含版本号),以及握手版本 2025-11-25、2025-06-18、2025-03-26 和 2024-11-05(initialize、notifications/initialized、ping)。tools/list 和 tools/call 在两种模式下均可使用。GET /mcp 会返回 405。
每个请求都需要 MCP_TOKEN。MCP 规范要求服务器检查 Origin 标头以防止 DNS 重绑定:在 wrangler.jsonc 中将 ALLOWED_ORIGINS 设置为以逗号分隔的列表;如果请求的 Origin 不在列表中,则返回 403。不含 Origin 的请求(桌面应用、服务器)不受影响。列表为空时,接受任意 Origin。
隐私
- 它运行在你的 Cloudflare 账户中。Fwrd 不会看到你的短信。
- 每条短信会在收到 15 分钟后删除:每次 Webhook 和工具调用时都会删除;如果没有新消息到达,则由 Durable Object 闹钟触发删除。将
KEEP_SECONDS设得更低可缩短保留时间。 - 仅存储 Fwrd 发送的内容(消息,以及发送了发件人信息时的发件人)、收到时间、从消息中找到的验证码、
Idempotency-Key,以及验证码是否已发放。 - Worker 自身的日志行不会包含消息文本或令牌。Cloudflare 的请求日志和追踪会记录每个 URL,因此也会记录令牌;这些功能在
wrangler.jsonc中处于关闭状态。将DEBUG设为"true"会记录消息文本,便于本地调试。
请负责任地使用
仅用于你拥有或获准自动化操作的账户。如果服务提供 API 令牌、身份验证器应用或通行密钥,请优先选择这些方式,而不是 SMS 验证码。有些银行的条款禁止分享一次性验证码,因此转发前请先确认。短信内容来自发送者;工具描述会告知 Agent 将其视为数据,而非指令。
开发
cp .dev.vars.example .dev.vars # then fill in both tokens
npm run dev # http://localhost:8787
npm test # end-to-end tests against wrangler dev
npm run test:inspector # the official MCP Inspector, both protocol eras
npm run typecheck
测试日期为 2026-10-26,使用 wrangler dev 4.152.0:npm test 通过了全部 30 项端到端检查;官方 MCP Inspector 2.12.0 在 CLI 模式下(npm run test:inspector)会列出这两个工具,并通过 wait_for_sms_code 获取等待中的验证码;使用 --protocol-era legacy(协商 2025-11-25)和 --protocol-era modern(2026-07-28)均可。各版本对应的 Inspector 命令:
npx @modelcontextprotocol/[email protected] --cli http://127.0.0.1:8787/mcp --transport http \
--protocol-era modern --header "Authorization: Bearer $MCP_TOKEN" --format json \
--method tools/call --tool-name wait_for_sms_code --tool-arg contains=Inspector --tool-arg timeout_seconds=5
使用相同命令并加上 --method tools/list,会列出 wait_for_sms_code, list_recent_texts;--strict 则报告没有架构可移植性问题。
Fwrd
Fwrd 每月免费转发 15 条短信(无论转发到多少个地方,每条短信只计一次)。 Fwrd Pro 的价格为每月 $4.99 或每年 $29.99(美国价格,2026 年 10 月)。
fwrdsms.com · App Store 上的 Fwrd · Webhook 示例 · 让 AI Agent 读取 SMS 验证码
采用 MIT 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。