すべての記事
AnthropicClaudeAItool use

Anthropic のツール使用をローカルで:Claude 向けトンネル

Claude のツール使用は Webhook ではありません。バックエンドがメッセージを送り、Claude が応答し(場合によってはツール呼び出しの要求を伴い)、あなたのコードがツールを実行して結果を返します。すべてあなたのマシンからのアウトバウンド HTTPS で行われます。ではなぜこの記事はトンネルの話なのでしょうか。

Claude で本格的なもの — コーディングエージェント、サポート自動化、MCP サーバー、長時間ワークフロー — を作り始めた瞬間に、インバウンド接続が必要になるからです。ブラウザクライアントのため。他アプリへ公開する MCP サーバーのため。モデルが呼び出すサードパーティツールからの Webhook のため。

トンネルが実際に役立つ場面

Claude アプリのブラウザフロントエンド

OpenAI Realtime のセットアップと同じ形です。フロントエンドは Anthropic の API キーを保持できないため、バックエンドと話し、バックエンドが Anthropic と話します。ストリーミング応答をきれいに描画するにはフロントエンドに HTTPS が必要で(一部のブラウザは平文 HTTP で SSE 処理を劣化させます)、フロントエンドが HTTPS ならバックエンドにも HTTPS が必要です。トンネルが両方を解決します。

ローカルで動く MCP サーバー

Model Context Protocol により、Claude(および他のクライアント)は MCP サーバーとして公開したツールに接続できます。stdio ではなく HTTP トランスポートの MCP サーバーでは、クライアントがあなたのサーバーへ到達する必要があります。MCP サーバーを試作し Claude Desktop など別のリモートクライアントでテストしたいなら、ローカルの MCP サーバーをトンネルで公開するのが最も抵抗の少ない道です。

computer use のコールバック

Claude の computer use ベータを使い、モデルがあなたのマシンへ Webhook を返すサービスとやり取りするなら、それは Webhook の領域です。どのプロバイダーとも同じパターンで、捕捉・再送・検証(該当する場合)を行います。

トンネルがしないこと

ローカルスクリプトから Claude を呼ぶだけならトンネルは不要です。curl https://api.anthropic.com/v1/messages はどのマシンからも動きます。Python と TypeScript の SDK も問題なく動きます。ツール使用自体はアウトバウンドのやり取りで、Claude がツールを使いたいときにあなたのマシンを呼ぶのではなく、Claude の応答に基づいてあなたのコードが呼び出します。

初めてだとここでつまずく人がいます。パターンはこうです。

  1. あなたのコードが、利用可能なツールの一覧とともにユーザーメッセージを Claude に送ります。
  2. Claude が応答し、呼び出すツールを記述した tool_use ブロックを含むことがあります。
  3. あなたのコードがローカルシステムに対してツールを実行します。
  4. あなたのコードがツール結果をフォローアップメッセージとして Claude に返します。
  5. 完了までループします。

5 つのステップはすべて 1 つの Python または TypeScript プロセス内で起こります。インバウンドトラフィックなし。トンネルなし。

トンネルが Claude ワークフローを助ける本当の理由

Claude 開発中に結局トンネルを動かすことになる理由は、モデルそのものではありません。その周辺のすべてです。エージェントの進捗を見せるダッシュボード、ツール出力をストリームするフロントエンド、テスト用に公開した MCP サーバー、エージェントが呼び出したサードパーティツールからの Webhook(「Slack にメッセージを送る」「Linear に課題を作る」)。エージェントが連鎖反応を引き起こし、その連鎖のどこかで外部サービスが最終的にあなたのマシンに到達したくなります。

MCP サーバー開発ループのセットアップ

  1. HTTP トランスポートで MCP サーバーを実装します。
  2. 選んだポートでローカルに起動します。
  3. npx portpreview 3000(またはあなたのポート)。
  4. Claude Desktop または他の MCP クライアントで、トンネルを指すリモートサーバー URL を設定します。
  5. コマンドを発行します。トンネル内のリクエスト捕捉と、サーバーが返す応答を観察します。

MCP サーバーが stdio トランスポートなら、これは当てはまりません。stdio サーバーはプロセスパイプで通信し、設計上ローカルにとどまります。

ストリーミング応答とトンネル

Claude は SSE で応答をストリームします。トンネルは長寿命のストリーミング応答を正しく扱う必要があります。多くは扱えますが、一部の古い HTTP プロキシは応答をバッファして最後にだけフラッシュするため、ストリーミングの意味が失われます。PortPreview、Cloudflare、ngrok はバッファなしで SSE を扱います。長い待機の後にフロントエンドが応答全体を一度に受け取るなら、トンネルがバッファしています。それは Claude の問題ではなくトンネルの問題です。

エージェントループのデバッグ

Claude のツール使用開発で最も難しいのは API ではありません。各ステップでモデルが何を決めたかを理解することです。実行前にすべての tool_use ブロックをログに残します。Claude へ返す前にすべてのツール結果をログに残します。フロントエンドとバックエンドの間にトンネルがあれば、リクエスト捕捉はユーザーメッセージの記録にもなり、プロンプトを打ち直さずにエージェントの実行を再生するのに役立ちます。

この先の方向

Anthropic のツール使用エコシステムは速く動いています。MCP、computer use、長いコンテキストウィンドウ、低いレイテンシ。Webhook をローカルでデバッグの Webhook パターンと、署名検証ガイドの署名の計算は、エージェントが呼び出す外部ツールがあなたのマシンへコールバックを発したときに当てはまります。

捕捉・再送・SSE セーフな転送を内蔵したトンネルは PortPreview のウェイトリストから。

よくある質問

Claude のツール使用にトンネルは必要ですか?
コア API には不要です。Claude のツール使用はアウトバウンドのやり取りで、あなたのコードが Anthropic を呼び、Claude がツール要求で応答し、あなたのコードが実行し、結果を返します。すべてアウトバウンドです。トンネルが必要なのは、外部サービスがあなたのマシンを呼ぶときだけです。ブラウザフロントエンド、リモート公開した MCP サーバー、Webhook を返すサードパーティツールなどです。
Claude で MCP サーバーをローカルにテストするには?
HTTP トランスポートの MCP サーバーなら、サーバーをローカルで動かしトンネルで公開します。Claude Desktop(または他のリモート MCP クライアント)にトンネル URL を設定します。stdio の MCP サーバーはプロセスパイプで通信するためトンネルは不要です。
トンネルは Claude のストリーミング応答を壊しますか?
最近のトンネルの多くはバッファなしで SSE ストリーミングを扱います。長い遅延の後にフロントエンドが応答全体を一度に受け取るなら、トンネルがバッファしてストリーミングを壊しています。PortPreview や他の最近のトンネルはこれを避けます。