Fwrd SMS Codes について
Fwrd SMS Codesは、iPhoneに届いた認証コードをエージェントに渡すMCPサーバーです。ユーザー自身のCloudflareアカウントにデプロイし、Fwrdアプリ経由で受け取ったメッセージを15分間保持します。
主な機能
- 01iPhoneから転送されたSMSの受信
- 02未受け渡し認証コードの待機
- 03内容と経過時間による絞り込み
- 04最近のメッセージとコードの一覧
- 05Cloudflareアカウントへのデプロイ
活用シーン
- 01エージェントのタスク中にログインコードを取得
- 02最近のSMSからログインリンクを確認
- 03転送されたSMSを自身の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
AI エージェントが iPhone に届いた SMS 認証コードを受け取れる MCP サーバーです。Fwrd の iPhone アプリが各メッセージをサーバーに転送し、サーバーはお客様自身の Cloudflare アカウントにデプロイします。
仕組み: メッセージが iPhone に届く → Fwrd が Worker に送信する → エージェントが wait_for_sms_code を呼び出してコードを受け取る。
Fwrd にサーバーやアカウントはありません。iPhone から各メッセージが直接 Worker に送信され、Worker はそのメッセージを 15 分間保持します。
デプロイ
ボタンを押すと、このリポジトリが GitHub アカウントにコピーされ、Durable Object を含めてデプロイされます。.dev.vars.example に記載された 2 つのシークレットを入力するよう求められます。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 桁のコードを含むメッセージだけが iPhone から送信されます。
- 各メッセージを Fwrd に渡す Message オートメーションを Shortcuts で作成します。 オートメーションガイドを参照してください。 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 によると、一部の組織のみが利用できるベータ機能)がある場合は、値を
Bearer <MCP_TOKEN> とする authorization ヘッダーを追加します。ない場合は、代わりに URL として
https://<worker>/mcp/<MCP_TOKEN> を入力します。これらのコネクターは、お使いのコンピューターではなく、Anthropic のクラウドから Worker に接続します。
Streamable HTTP に対応するクライアント:Authorization: Bearer <MCP_TOKEN> ヘッダーを付けて
https://<worker>/mcp に接続します。ヘッダーを送信できない場合は、
https://<worker>/mcp/<MCP_TOKEN> を使用し、この URL をパスワードと同じように厳重に管理してください。
エージェントスキル
skills/sms-verification-codes は、いつこれらのツールを呼び出すか、またこれらすべてをどのように設定するかをコーディングエージェントに教えます。
skills を使って Claude Code、Cursor、Codex などのエージェントにインストールできます。
npx skills add alanwtom/fwrd-sms-mcp
stdio 経由
node glama/stdio.mjs(または Dockerfile)を実行すると、wrangler dev で Worker をローカルに起動し、標準入力/標準出力経由で MCP と通信します。MCP ディレクトリでは、ツールの一覧表示に使用されます。メッセージは受信しないため、実際に使用する場合は Worker をデプロイし、https://<worker>/mcp に接続してください。
ツール
| ツール | 引数 | 説明 |
|---|---|---|
wait_for_sms_code | contains(テキストに含まれている必要がある任意の語。サービス名など)、max_age_seconds(デフォルトは 120)、timeout_seconds(デフォルトは 50、最大 100) | まだ渡されていない最新のコードを返します。呼び出しの max_age_seconds 秒前までに届いたコードも対象です。該当するコードがない場合は、コードが届くかタイムアウトするまで待機します。各コードが渡されるのは 1 回だけです。タイムアウト時は、コードが届かなかったことと、サイトに再送信を依頼するようエージェントに伝える通常の結果を返します。 |
list_recent_texts | minutes(1~15、デフォルトは 10)、contains(任意) | 直近数分間に届いたテキストを新しい順に返します。送信者(Fwrd が送信する場合)、時刻、コードが含まれます。ログインリンクや数字のコードではないメッセージに使用します。 |
デフォルトの待機時間は 50 秒です。Claude Code と公式 TypeScript
SDK で構築されたクライアントは、設定を変更しない限り、60 秒を過ぎるとリクエストの待機を終了するためです。claude.ai と Claude
Desktop では、ツール呼び出しごとに 240 秒まで待機できます。Claude Code では、サーバーの設定項目に
timeout フィールド(ミリ秒単位)を指定すると制限を引き上げられ、その後はエージェントが最大 100 秒まで待機を要求できます。
Fwrd が送信する内容
配布済みの Fwrd 1.2.1 および 1.3.1 のソースで確認済みです。
| リクエスト | 転送されるテキストごとに、公開ホスト名上の https:// URL へ 1 回の POST を送信します。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、または接続が切断された場合、最大 2 回まで Retry-After に従って再試行します。リダイレクトには従いません。このサーバーは、同じ Idempotency-Key を受け取っても 1 回だけ保存します。 |
| 対象となるテキスト | 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 仕様では、DNS リバインディング対策としてサーバーが Origin ヘッダーを確認するよう求めています。wrangler.jsonc の ALLOWED_ORIGINS にカンマ区切りのリストを設定してください。リストにない Origin を含むリクエストには 403 が返されます。Origin のないリクエスト(デスクトップアプリやサーバーからのリクエスト)は影響を受けません。リストが空の間は、すべての Origin が受け入れられます。
プライバシー
- Cloudflare アカウント内で動作します。Fwrd がテキストを見ることはありません。
- テキストは到着から 15 分後に削除されます。削除は、Webhook とツールの呼び出しごとに行われ、何も届かない場合は Durable Object のアラームによって行われます。より早く削除するには
KEEP_SECONDSを小さく設定してください。 - 保存するのは Fwrd が送信した内容(メッセージと、送信された場合は送信者)、到着時刻、メッセージ内で見つかったコード、
Idempotency-Key、およびコードが渡されたかどうかだけです。 - Worker 自身のログ行にメッセージ本文やトークンが含まれることはありません。各 URL、ひいてはトークンを記録する Cloudflare のリクエストログとトレースは、
wrangler.jsoncで無効になっています。DEBUGを"true"に設定すると、ローカルでのデバッグ用にメッセージ本文がログに記録されます。
責任を持って使用してください
ご自身が所有している、または自動化する許可を得ているアカウントでのみ使用してください。サービスで API トークン、認証アプリ、またはパスキーが利用できる場合は、SMS コードよりもそちらを優先してください。一部の銀行では利用規約によりワンタイムコードの共有が禁止されているため、転送する前に確認してください。メッセージ本文は SMS の送信者が作成したものです。ツールの説明では、エージェントに対し、これを指示ではなくデータとして扱うよう伝えています。
開発
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 件すべて成功し、CLI モードの公式 MCP Inspector 2.12.0(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 は、転送する場所の数にかかわらず、1 件として数えるテキストを月 15 件まで無料で利用できます。Fwrd Pro は月額 $4.99、または年額 $29.99 です(米国価格、2026 年 10 月)。
fwrdsms.com · App Store の Fwrd · Webhook の使用例 · AI エージェントに SMS 認証コードを読み取らせる
MIT ライセンスです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。