Skip to main content
Colab で開く Model Context Protocol (MCP) は、AI アプリケーションが大規模言語モデル (LLM) と情報をやり取りするための標準化された通信プロトコルです。MCP は、LLM がデータソースにアクセスしたり外部ツールを操作したりするためのインターフェースを提供するため、新しいサービスごとにカスタムのインテグレーションを用意する必要はありません。 Weave のインテグレーションを使用すると、MCP クライアントと MCP サーバー間のアクティビティをトレースできます。MCP ベースのシステム全体で、ツール呼び出し、リソースへのアクセス、プロンプト生成を詳細に可視化できるため、MCP アプリケーションのデバッグ、監査、最適化に役立ちます。 このガイドでは、インテグレーションの仕組みと、サーバー側およびクライアント側でトレースを有効にする方法を説明します。また、実際にご自身で実行できる完全な例も順を追って紹介します。

仕組み

このインテグレーションはクライアント側とサーバー側の操作をそれぞれ個別に取得しますが、両者間のやり取りをエンドツーエンドで可視化することはできません。エンドツーエンドの可観測性を実現するため、MCP に OpenTelemetry のトレースサポートを追加する提案が現在進められています。詳細については、GitHub discussion #269 を参照してください。
Weave インテグレーションは、コアメソッドにパッチを当てて weave.op() デコレーターを適用することで、Model Context Protocol (MCP) の主要なコンポーネントを自動的にトレースします。具体的には、mcp.server.fastmcp.FastMCP クラスと mcp.ClientSession クラスのメソッドにパッチを当てます。 このインテグレーションにより、Weave は次の MCP コンポーネントをトレースします。 mcp_trace_timeline.png

インテグレーションを使用する

Weave インテグレーションは、MCP サーバーとクライアントの両方で動作します。インストール後は、weave をインポートする行と初期化する行の 2 行を追加するだけで、トレースを有効にできます。

前提条件

始める前に、必要なパッケージをインストールしてください。

設定

MCP インテグレーションは、MCP_TRACE_LIST_OPERATIONS 環境変数で設定します。この変数を true に設定すると、サーバー側とクライアント側の両方で list 操作 (list_tools、list_resources、list_prompts) がトレースされます。

サーバー側インテグレーション

MCP サーバーを構築またはインストルメントする場合は、このセクションを参照してください。MCP サーバーをトレースするには、既存の FastMCP のセットアップに、Weave をインポートする行とクライアントを初期化する行の 2 行を追加します。追加すると、Weave がツール、リソース、プロンプトの操作を自動的にトレースします。

クライアント側のインテグレーション

MCP クライアントを構築またはインストルメントする場合は、このセクションを参照してください。クライアント側でも、トレースに必要な変更は Weave のインポートと初期化の 2 つです。Weave は、すべてのツール呼び出し、リソースへのアクセス、プロンプトのリクエストを自動的にトレースします。

チュートリアル: mcp_demo の例

mcp_demo の例では、MCP と Weave を連携させてトレースを行う方法を紹介します。クライアントとサーバーの両方のコンポーネントをインストルメントし、両者のやり取りの詳細なトレースを取得する方法を示します。このコードを実行すると、MCP アプリケーションのクライアント側とサーバー側の両方のトレースを Weights & Biases UI で確認できます。また、ご自身の project に応用できる具体的な参考例としても活用できます。

サンプルを実行する

  1. docs リポジトリをクローンし、mcp_demo サンプルのディレクトリに移動します。
    このサンプルには、主に次の 2 つのファイルが含まれています。
    • example_server.py: FastMCP で構築したデモ用の MCP サーバーです。ツール、リソース、プロンプトを定義しています。
    • example_client.py: サーバーに接続し、そのコンポーネントを操作するクライアントです。
  2. 必要な依存関係を手動でインストールします。
  3. デモを実行します。
    このコマンドを実行すると、クライアントとサーバーの両方が起動します。クライアントが対話型 CLI を起動するので、そこでさまざまな機能を試せます。

クライアント CLI コマンド

クライアントインターフェースでは、次のコマンドを使用できます。

例の概要

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() の使用例
Weave はクライアント側のすべての Call をトレースするため、クライアントとサーバー間のやり取りを全体的に把握できます。

FAQ

このセクションでは、Weave の MCP トレースを使用する理由とその使い方について、よくある質問にお答えします。

MCP トレースが必要な理由

LLM アプリケーションの開発者は、次の 3 つのタイプのいずれかに該当します。
  • MCP サーバー側の開発者: 複数のツール、リソース、プロンプトを MCP クライアントに公開したい開発者です。既存のアプリケーションのツールやリソースを公開している場合や、エージェントを構築している場合、またはオーケストレーターエージェントで複数のエージェントを連携させている場合が該当します。
  • MCP クライアント側の開発者: クライアント側のアプリケーションを複数の MCP サーバーに接続したい開発者です。クライアント側のロジックの中核は、どのツールを呼び出すか、どのリソースを取得するかを判断するための LLM Call です。
  • MCP サーバーとクライアントの開発者: サーバーとクライアントの両方を開発している開発者です。
最初の 2 つのいずれかに該当する場合は、各ツールがいつ呼び出されたか、実行フローがどうなっているか、トークン数、そしてサーバー側またはクライアント側のロジックにおける各コンポーネントのレイテンシーを把握する必要があります。 サーバーとクライアントの両方を開発している場合は、統合されたトレースのタイムラインを使うことで、サーバー側とクライアント側のロジックを反復的に改善しやすくなります。 いずれの場合も、可観測性レイヤーを導入すると次のことが可能になります。
  • アプリケーションを反復的に改善する。
  • ワークフローや実行ロジックを監査する。
  • ボトルネックを特定する。
最終更新日 2026年9月30日