mcpField
F
Fwrd SMS Codes

Fwrd SMS Codes

远程服务
fwrdsms.com通信协作02 天前更新

关于 Fwrd SMS Codes

Fwrd SMS Codes 是供 Agent 获取 iPhone 验证码的 MCP 服务。它部署在用户自己的 Cloudflare 账户中,通过 Fwrd 应用接收短信,并保留 15 分钟。

主要功能

  1. 01接收 iPhone 转发的短信
  2. 02等待尚未交付的短信验证码
  3. 03按内容和时间筛选
  4. 04列出近期短信和验证码
  5. 05部署到自己的 Cloudflare 账户

适用场景

  1. 01在 Agent 执行任务时获取登录验证码
  2. 02查找近期短信中的登录链接
  3. 03将转发短信保留在自己的 Cloudflare 账户中

MCP 相关

通过 Streamable HTTP 向 MCP 客户端提供 `wait_for_sms_code` 和 `list_recent_texts` 工具。每个请求都需要 MCP 令牌。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://{worker_host}/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://{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 分钟。

部署

部署到 Cloudflare

此按钮会将此仓库复制到你的 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

  1. 在 Fwrd 中,点按 +,选择 Webhook,然后将 https://fwrd-sms-mcp.<your-subdomain>.workers.dev/fwrd/<FWRD_TOKEN> 粘贴到 Configuration 字段。点按 Send Test Message(测试短信会显示在 list_recent_texts 中),然后点按勾号保存。
  2. 在同一个目的地中,在 Which Texts 下选择 Only Some Texts,并开启 Looks Like a Code。这样只有包含 4 到 8 位验证码的短信才会离开手机。
  3. 在快捷指令中创建 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_codecontains(可选,文本必须包含的词语,例如服务名称)、max_age_seconds(默认值为 120)、timeout_seconds(默认值为 50,最多为 100)返回最新的、尚未发放的验证码,包括在调用前 max_age_seconds 秒内收到的验证码。否则会等待验证码到达或超时。每个验证码只发放一次。超时时会返回普通结果,告知 Agent 尚未收到验证码,并提示其要求网站重新发送。
list_recent_textsminutes(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 许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。