AIエージェントが「要約」ツールで止まる。2秒溶ける。コードのせいか? APIか? それとも——隠れた——サーバーが委ねたLLMか?
エージェントワークフローを組む開発者にとって、MCPサーバーではこれが日常茶飯事だ。サンプリング呼び出しの可視化ゼロで、パフォーマンスは当てずっぽうの勝負。今? トレースが幽霊を照らし、メトリクスがダッシュボードで真実を晒す。最適化は魔術じゃなくなる。
MCPサンプリングがトレースをぶち壊す理由
MCP仕様ではサーバー——APIキーなしのツールレス——がLLM作業をクライアントに跳ね返す。賢いよな? オーケストレータが「要約」を叩く、サーバーがGPT-4oでテキストを噛み砕く必要、クライアントのLLMをサンプリング。レスポンスが戻る。綺麗な委譲だ。
だがトレース? 無音。ミドルウェアはツール呼び出しをしっかり掴む。サンプリング? ハンドラー奥深くのメソッド呼び出し。スパンなし。2.1秒のツールで1.8秒が生成に消えても——見えねえ。間違った300msをいじくる羽目に。
“ツール呼び出しがLLM呼び出しをトリガーするが、トレース上は見えねえ。記事#7のミドルウェアはtools/call summarizeをトレースする——だが中身のサンプリング呼び出し? 幽霊だ。スパンなし、持続時間なし、モデル名なし。”
前回はそんなブラックボックスをぶち破った。あれはデモ未満だったが、今回はデモ即戦力の続編だ。
見てろよ、こんな映画見たことあるだろ。初期マイクロサービスがトレースなしRPCで詰まった——Zipkin台頭を覚えてるか? MCPサンプリングはエージェントAIのRPCだ。無視すりゃツールは分散ミステリーに。いま直せば、マルチエージェントの大群に先んじる。
幽霊呼び出しを包んだ方法
4つの修正。バカバカしいほどシンプル。
まず、基本のtoadEyeMiddleware——全ツールにスパン。
次に、ctx.mcpReq.requestSampling()をtraceSamplingラッパーで囲む。モデル、トークンを渡す。ドン:SpanKind.CLIENTの”chat gpt-4o”スパン。持続時間(1834ms!)、gen_ai.request.model、mcp.server.nameまでキャプチャ。
ネスト完璧:
tools/call summarize 2.1s └── chat gpt-4o (sampling) 1.8s
実際のロジック? 300ms。それを最適化しろ、幻じゃねえ。
コードはワンライナーインポート。ハンドラ本文:サンプリングをラップすりゃいい。5分で試せる——サーバー起動、クライアントエージェント叩き、トレースがOTelバックエンドに雪崩れ込む。
メトリクスは? ここでBloomberg級の鋭さだ。Prometheusクエリ内蔵。曖昧カウンターじゃねえ。
「何が壊れてる?」に答えるダッシュボード
トップに一目でわかるテーブル:
Tool Call Rate | Avg Duration | Error Rate | Resource Reads 12.4 req/s | 45.2 ms | 2.3% | 3.1 req/s
エラー赤? 掘れ。
ツール別呼び出しレートの時系列。エージェントがcalculateからsearchへシフト? ラインが物語る。ツール別P50/P95持続時間——searchのP95が2sに跳ね? PagerDuty発動だ。
エラー積層:searchのRateLimitError(8.7%)、calculateのValidation(0%)。URI別リソース——熱いデータソースが叫ぶ。
下:ツール別統合テーブル。
| Tool | Rate | Avg (ms) | P95 (ms) | Errors |
|---|---|---|---|---|
| calculate | 8.2 | 12.3 | 24.1 | 0% |
| get-weather | 3.1 | 145.2 | 312.8 | 3.2% |
| search | 1.1 | 890.4 | 2134 | 8.7% |
これ飾りじゃねえ。役員室ビューだ:持続時間にコスト相関、エラーに収益漏れ。エージェントスケール? この4指標に感謝するぞ。
AIエージェントのZipkin瞬間か?
俺の独自見解:誰も口にしねえが、MCPの可観測性はLangChainに遥か及ばねえ——あっちのエコシステムはなんでもトレース、ハイプ抜きで。MCPの純粋仕様は輝くが、ツールがサンプリングの宝石を隠してた。
予測? エージェントがサーバーを連鎖(マルチMCP来る)につれ、このトレースはテーブルステークスだ。無視すりゃ本番エージェントが負荷でブラックアウト。俺の賭け:toad-eye がQ2までにフォークだらけ、標準団体がうなずき、OpenAIクライアントが義務化。
懐疑的? コーポレート詐欺じゃねえ——オープンソース、再現可能。だが見てろ:ベンダーがこれを「エンタープライズエージェントメッシュ」として月1万ドルでリブランドだ。無料版を先に掴め。
フルMCPトレースが君のスタックに何故大事か
ClaudeやGPTエージェントの開発者——MCPはカスタムツールの橋だ。これなしじゃサンプリングは負債:コストが目に見えぬスパイク、チェーンでレイテンシ蓄積。
市場計算:GPT-4oの入力トークン1Mあたり5ドル。要約ツールが1コール500トークンサンプリング? 12 req/sで月3600ドル盲目。トレースが暴き、ダッシュボードが絞る。
実例? インディ開発者がエージェント出荷でスケール痛抱え最初。「俺のマシンでは動く」終わり——トレースが証明。
チーム? SREが安眠。1つのP95アラートで50ユーザー票対応。
クライアント? 速いエージェント、低コスト。勝ち。
ただ——注意——OTel優先。Grafana準備OK? 良し。生Prometheus? セットアップ骨。だがベースラインはゼロ超えだ。
🧬 Related Insights
- Read more: Microsoft’s Top Minds: Agentic AI Is Gutting Junior Developer Ranks
- Read more: Distributed Locks: The GC Pause That Tripled a Customer’s Bill
Frequently Asked Questions
What is MCP sampling?
MCPサーバーがAPIキーなしでLLM呼び出しをクライアントに委譲する仕組み。要約みたいな生成が必要なツールに不可欠だ。
How do you trace MCP server LLM calls?
ctx.mcpReq.requestSampling()をtraceSampling({model: ‘gpt-4o’})でラップ。ミドルウェアが残りを——ツール下にスパンネスト。
Does this dashboard work out-of-box?
ああ、Prometheusクエリ付属。Grafanaに突っ込んでテーブル、チャート、レート・持続時間・エラーのアラート即戦力。