Weave MCP Server + Client Linked Traces: について
MCPクライアントとサーバーのエンドツーエンドトレースを示すサンプルで、トレースをwandb/weaveに出力するよう改変されています。MCPコンポーネント間のリクエスト経路や遅延を調べる開発者向けに、クライアントとサーバー間でトレースコンテキストを連携します。
主な機能
- 01MCP間でのOpenTelemetryコンテキスト伝播
- 02クライアントとサーバーのスパン連携
- 03リクエスト経路と遅延の追跡
- 04wandb/weaveへのトレース出力
活用シーン
- 01クライアントとサーバー間のMCPリクエスト追跡
- 02リクエスト各段階の遅延確認
- 03サービス境界をまたぐ問題のデバッグ
MCP 対応
MCPクライアントとサーバーの両方に計装を行い、OpenTelemetryのトレースコンテキストを伝播させます。これにより境界をまたぐリクエストを一続きに確認できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Weave MCP サーバーとクライアントのリンクされたトレース:
このリポジトリは、Arize-ai/phoenix のサンプルをもとに、wandb/weave にエクスポートするように適合させたものです。 注:競合状態により、OpenAI の呼び出しステップでツールの実行に失敗することがあります。このバグは元のサンプルにも存在しており、weave によって発生したものではありません。
環境をセットアップする:
まず cp .env.example .env を実行します。
手順に従って、新しい環境ファイルに関連するキーを設定します。
依存関係をインストールする:
- uv:
uv sync - pip:
pip install -r requirements.txt
クライアントを実行してトレースをエクスポートする
- uv:
uv run client.py - python:
python client.py
(Arize より)MCP クライアント・サーバーアプリケーション向けエンドツーエンドトレーシングの実装方法
このチュートリアルでは、完全な可観測性を実現するために、MCP クライアントとサーバー間で OpenTelemetry(OTEL)コンテキストを伝播させる方法を紹介します。openinference-instrumentation-mcp パッケージは、クライアントとサーバーの両コンポーネントに計装機能を提供することで、これを可能にします。
MCP とは何か、なぜ分散トレーシングが必要なのか?
Anthropic の Model Context Protocol(MCP)アーキテクチャの主な利点の 1 つは、異なるサービス、マシン、プログラミング言語にまたがる情報と AI モデルを接続できることです。この分散型のアプローチには、次のような利点があります。
- AI の機能拡張:モデルを、学習データ以外の専門知識やデータソースに接続できます
- プラグアンドプレイのコンポーネント:モデルを再トレーニングせずに、新しいコンテキストプロバイダーを追加できます
- 複数の言語のサポート:互換性を維持しながら、任意のプログラミング言語でコンテキストプロバイダーを実装できます
課題は何でしょうか?リクエストが複数のサービスを経由すると、デバッグが難しくなります。問題が発生した場所を特定するために、リクエストの全行程をどのように追跡すればよいでしょうか?
MCP トレーシングに OpenTelemetry を使用する方法
OpenTelemetry は、次の方法でサービス間のトレーシングに関する課題を解決します。
- サービス間でコンテキストを保持:異なるコンポーネント間でトレース ID と関連性を維持します
- ネットワーク境界を越えて動作:ネットワークリクエスト内のコンテキストを自動的に処理します
- 複数の言語をサポート:あらゆるプログラミング言語と互換性のある標準形式を使用します
適切に計装されたクライアントがサーバーを呼び出すと、次のようになります。
- クライアントが操作を追跡するスパンを作成します
- OTEL コンテキストが MCP リクエストとともに自動的に送信されます
- サーバーが中断することなく同じトレースを継続します
- すべてのコンテキストプロバイダーがこのトレースコンテキストを継承します
- Phoenix では、すべてのやり取りを 1 つにつながったトレースとして確認できます
この可視性は、複雑な AI システムのトラブルシューティング、パフォーマンスのボトルネックの最適化、さまざまなコンポーネントがアプリケーションの動作に与える影響の把握に欠かせません。
セットアップ
適切に計装すると、トレースコンテキストは MCP クライアントとサーバーの境界を越えて自動的に伝播され、次のことが可能になります。
- クライアントからサーバーまでのリクエストを 1 つのトレースで追跡する
- リクエストのライフサイクルの各段階でレイテンシーを確認する
- サービス境界をまたぐ問題をデバッグする
環境のセットアップ
-
このディレクトリに移動します:
cd tutorials/mcp/tracing_between_mcp_client_and_server -
必要な依存関係をインストールします:
pip install -r requirements.txt
サンプルの実行
-
Phoenix をローカルで実行するか、オンラインのインスタンスに接続します
-
.envファイルを更新し、OPENAI_API_KEYとPHOENIX_COLLECTOR_ENDPOINTを設定します。オンラインの Phoenix インスタンスを使用する場合、または認証が有効になっている場合は、PHOENIX_API_KEYも設定します。 -
MCP クライアントを実行します。クライアントのコードは、実行時に別プロセスでサーバーを起動します。
python client.py -
エージェントに質問します。
-
Phoenix でトレースを確認します:

仕組み
openinference-instrumentation-mcp パッケージは、以下を自動的に行います。
- MCP クライアントの操作に対するスパンを作成します
- MCP リクエストにトレースコンテキストを注入します
- サーバー側でトレースコンテキストを抽出して引き継ぎます
- サーバー側で作成された OTEL スパンにコンテキストを関連付けます
これにより、サービスの境界を越える場合でも、リクエストの流れ全体を単一のトレースとして確認できます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。