プログラミング
Show HN: Mcpsnoop – MCP(透過型プロキシとライブTUI)のためのWireshark
Show HN: Mcpsnoop – Wireshark for MCP (transparent proxy and live TUI) (github.com)
要約
Mcpsnoopは、AIクライアントとMCPサーバー間の実際のツール呼び出しをリアルタイムでターミナルに表示する透過型プロキシおよびデバッグツールです。従来のデバッガでは見えなかったクライアントとサーバー間の通信を可視化し、問題の特定を容易にします。JSON-RPCフレームのライブストリーム、リプレイ機能、設定不要のゼロコンフィグレーションなどが特徴です。
全文翻訳
MCPのためのWireshark。あなたのAIクライアントとMCPサーバー間の実際のツール呼び出しを、ターミナルでライブ表示する透過型プロキシです。
問題
公式のMCP Inspectorは、独自のクライアントとして接続します。あなたのクライアント(Claude Desktop、Cursor、Claude Code)とサーバー間のトラフィックを見ることはありません。あなた自身のサーバーのブレークポイントは、リクエストが到着したときにのみ発火します。実際には行われなかった呼び出し、または予期しない引数で行われた呼び出しを表示できません。
そのため、ツールがサイレントに呼び出されない場合、機能が一致しない場合、または呼び出しがハングした場合、/tmpのログをtailして推測に戻ることになります。
mcpsnoopは実際のデータパスに配置されるため、クライアントとサーバー間の実際のMCPトラフィックをデバッグできます。
サーバーコマンドをmcpsnoopでラップし、実際のクライアントとサーバーが通信するライブターミナルUIで各JSON-RPCフレームを監視します。
クイックスタート
何も設定せずに、まずそれを見てみませんか? mcpsnoop demoを実行すると、ライブUIに再生されるスクリプトセッションが表示されます。
実際に使用するには、クライアントのMCP設定でサーバーをラップします:
{
"mcpServers": {
"my-server": {
"command": "mcpsnoop",
"args": ["--", "node", "build/index.js"]
}
}
}
--以降は、通常サーバーを起動するコマンドです(ここでは、nodeで実行されるTypeScriptビルド)。python server.py、npx -y @scope/server、またはコンパイル済みバイナリなど、すでに使用しているものに置き換えてください。
通常通りクライアントを使用し、UIを開きます:
mcpsnoop
フラグ、ソケットパス、起動順序を覚える必要はありません。シムとUIは自動的に見つけ合い、UIはディスクから過去のセッションをバックフィルするため、どちらを先に開いても問題ありません。
ストリーミングHTTPサーバーの場合、mcpsnoopをリバースプロキシとして実行し、クライアントをそれにポイントします:
mcpsnoop http --target http://localhost:3000/mcp --listen :7000
テストするサーバーがない場合? docs/DEMO.mdでは、公開されているテストサーバーにClaudeをmcpsnoop経由でポイントする手順を説明しています。
機能
ライブJSON-RPCストリーム。リクエスト、レスポンス、通知、サーバー標準エラー出力が色分けされ、エラーや遅い呼び出しがフラグ付けされます。ツールレベルのresult.isErrorも、JSON-RPCエラーだけでなく表示されます。
リプレイ。キャプチャされた任意のツール呼び出しを、新しく分離されたサーバーコピーに対して再実行します。ツールのイテレーションのための最速ループです。
機能インスペクター (c)。ハンドシェイク時にクライアントとサーバーが合意した内容を正確に確認できます。
フレームインスペクター (enter)。インフレーム検索付きの、フルで pretty-printed されたJSON。
ハングした呼び出しの検出。インフライトリクエストにはライブタイマー付きのPENDINGが表示されるため、スタックしたツールが一目でわかります。
実際のフィルタークエリ。tool:、status:、dir:、kind:、id:またはプレーンテキストでストリームを絞り込みます。
比較
MCP Inspector | mcp-trace | mcpsnoop
---|---|---
実際のクライアント↔サーバーのトラフィックを見る | いいえ | はい | はい
インタラクティブなターミナルUI | いいえ | はい | はい
ゼロコンフィグ、フラグや順序なし | いいえ | いいえ | はい
機能インスペクター | 部分的 | いいえ | はい
キャプチャされた呼び出しをリプレイ | いいえ | いいえ | はい
単一バイナリ、ランタイム依存なし | いいえ | 変化あり | はい
インストール
go install github.com/kerlenton/mcpsnoop/cmd/mcpsnoop@latest
またはHomebrewで:
brew tap kerlenton/mcpsnoop
brew install mcpsnoop
最近のHomebrewはサードパーティのタップをゲートします。拒否された場合は、brew trust kerlenton/mcpsnoopで一度タップを信頼してからインストールを再実行してください。
タップなしのbrew install mcpsnoop(タップなし、信頼なし)は、Homebrew coreを必要とします。これは、ノータビリティバー(スター、フォーク、ウォッチャー)を通過したプロジェクトのみを受け入れます。それが便利だと思うなら、リポジトリのスターが資格を得るのに役立ちます。
または、Releasesページからお使いのプラットフォーム用の事前ビルドバイナリを入手してください。
仕組み
公式のInspectorは、別のクライアントとして横から接続します。mcpsnoopは実際のパイプに配置されるため、クライアントとサーバーが互いに話す内容を正確に把握できます。サーバーが何で書かれていても関係ありません。
1つのバイナリに2つの役割があります:mcpsnoop -- <server>はクライアントが起動する透過型シム(各フレームのコピーを送信しながらバイトをそのまま転送します)、mcpsnoop引数なしはハブとTUIです。
これらは、よく知られたソケットとディスク上のログを通じてペアになるため、どちらかが先に開始する必要はありません。
キーバインド
enter ドリルイン · esc バック · r リプレイ · c 機能 · y コピー · / フィルター · : コマンド · p 一時停止 · f フォロー · ctrl-d 削除。
j/k で移動、ctrl-f/ctrl-b でページ送り、g/G で先頭と末尾、shift+列 でソート。
アプリ内で?を押すと、完全なリストが表示されます。
ストリームのフィルタリング
セッション中に/を押し、スペース区切りのトークン(AND結合)を組み合わせます:プレーンテキストはメソッド、ツール、ID、ペイロードに一致し、tool:、method:、id:、kind:、dir:、status:はフィールドでフィルタリングします。
例:tool:search status:slow は、検索ツールへの遅い呼び出しを表示し、dir:s2c kind:req は、サーバーから開始されたリクエスト(サンプリング、ルート)を表示します。
? ヘルプには、各トークンとその値のリストが表示されます。
セキュリティ
mcpsnoopはラップしたサーバーコマンドを実行するため、信頼できるサーバーのみをラップし、信頼できないものはコンテナで実行してください。
クライアント設定に入れたもの以外は決して実行しません。
貢献
イシューとプルリクエストを歓迎します。開発セットアップとmake checkゲートについては、CONTRIBUTING.mdを参照してください。
mcpsnoopは1.0未満であり、SemVerに従います。0.xの間は、マイナーリリースでユーザーインターフェースの動作が変更される可能性があり、パッチリリースはバグ修正です。
ライセンス
MIT