仕組み
現在、この統合はクライアント側とサーバー側の操作を個別にキャプチャしますが、それらの相互作用に関するエンドツーエンドの可視性は提供していません。エンドツーエンドの観測可能性を可能にするために、MCP に OpenTelemetry トレースサポートを追加する提案が進行中です。詳細については、GitHub discussion #269.
weave.op()
デコレータでパッチすることにより、Model Context Protocol (MCP) の主要コンポーネントを自動的にトレースします。具体的には、mcp.server.fastmcp.FastMCP
および mcp.ClientSession
クラスのメソッドにパッチを適用します。
この統合を通じて、Weave は以下の MCP コンポーネントをトレースします:

統合を使用する
Weave 統合は MCP サーバーとクライアントの両方で動作します。インストール後、weave
をインポートする行と、それを初期化する行の2行のコードを追加するだけでトレースを有効にできます。
前提条件
始める前に、必要なパッケージをインストールしてください:設定
MCP 統合は環境変数を通じて設定できます:MCP_TRACE_LIST_OPERATIONS
:true
に設定すると、リスト操作(list_tools
、list_resources
、およびlist_prompts
)をサーバー側とクライアント側の両方でトレースします。
サーバー側の統合
MCP サーバーをトレースするには、既存のFastMCP
setup: one to import Weave and one to initialize the client. Once added, tool, resource, and prompt operations will be automatically traced.
クライアント側の統合
クライアント側では、トレースにも2つの変更だけが必要です:Weave をインポートして初期化します。すべてのツール呼び出し、リソースアクセス、プロンプトリクエストが自動的にトレースされます。Tutorial: mcp_demo
例
この mcp_example
は、Model Context Protocol (MCP) と Weave の間のトレース用統合を示しています。クライアントとサーバーの両方のコンポーネントを計測して、それらの相互作用の詳細なトレースをキャプチャする方法を紹介しています。
例を実行する
-
リポジトリをクローンして
weave
リポジトリに移動しますmcp_demo
example:この例には2つの主要ファイルが含まれています:example_server.py
:FastMCP
で構築されたデモ MCP サーバー。ツール、リソース、プロンプトを定義しています。example_client.py
: サーバーに接続してそのコンポーネントと対話するクライアント。
-
必要な依存関係を手動でインストールします:
-
デモを実行します:
このコマンドはクライアントとサーバーの両方を起動します。クライアントは対話型 CLI を開始し、そこでさまざまな機能をテストできます。
クライアント CLI コマンド
クライアントインターフェースは以下のコマンドをサポートしています:コマンド | 説明 |
---|---|
tools | 利用可能なツールを一覧表示 |
resources | 利用可能なリソースを一覧表示 |
prompts | 利用可能なプロンプトを一覧表示 |
add <a> <b> | 2つの数値を加算 |
bmi <weight> <height> | ボディマス指数(BMI)を計算 |
weather <city> | 都市の天気データを取得 |
greeting <name> | パーソナライズされた挨拶を取得 |
user <id> | ユーザープロファイルを取得 |
config | アプリ設定を取得 |
code-review <code> | コードレビュープロンプトを生成 |
debug <error> | デバッグプロンプトを生成 |
demo | 利用可能なすべての機能の完全なデモを実行します。これにより、各機能が順番に実行され、Weave UI に相互作用の完全なトレースタイムラインが生成されます。 |
q | セッションを終了 |
例の理解
このexample_server.py
サーバーは以下を定義しています:
- ツール:
add()
、calculate_bmi()
、fetch_weather()
- リソース:
greeting://{name}
、config://app
、users://{id}/profile
- プロンプト:
review_code()
やdebug_error()
weave.init()
で初期化すると、Weave によって自動的にトレースされます。
この example_client.py
クライアントは以下の方法を示しています:
- MCP サーバーに接続する
- 利用可能なツール、リソース、プロンプトを発見する
- パラメータを使用してツールを呼び出す
- リソース URI から読み取る
- 引数を使用してプロンプトを生成する
- カスタムメソッド/関数での
weave.op()
の使用方法を示す
FAQ
なぜ MCP トレースが必要なのですか?
LLM アプリケーション開発者として、あなたは次の3つのカテゴリのいずれかに該当します:- MCP サーバー側開発者: 複数のツール、リソース、プロンプトを MCP クライアントに公開したい。既存のアプリケーションのツール、リソースなどを公開するか、エージェントを構築したり、オーケストレーターエージェントによって複数のエージェントをオーケストレーションしたりしています。
- MCP クライアント側開発者: クライアント側アプリケーションを複数の MCP サーバーに接続したい。クライアント側ロジックの中核部分は、どのツールを呼び出すか、どのリソースを取得するかを決定するための LLM 呼び出しを行うことです。
- MCP サーバーとクライアントの開発者: サーバーとクライアントの両方を開発しています。
- アプリケーションを迅速に反復する
- ワークフローや実行ロジックを監査する
- ボトルネックを特定する