メインコンテンツへスキップ
Open In Colab Model Context Protocol (MCP) は、AI アプリケーションが大規模言語モデル (LLM) と情報を交換できるようにする標準化された通信プロトコルです。ハードウェアの互換性を変革した汎用コネクタと同様に、MCP は LLM が様々なデータソースにアクセスし、外部ツールと対話するためのインターフェースを提供します。これらはすべて、新しいサービスごとにカスタム統合を必要としません。 Weave 統合により、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_toolslist_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 の間のトレース用統合を示しています。クライアントとサーバーの両方のコンポーネントを計測して、それらの相互作用の詳細なトレースをキャプチャする方法を紹介しています。

例を実行する

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

クライアント CLI コマンド

クライアントインターフェースは以下のコマンドをサポートしています:

例の理解

この example_server.py サーバーは以下を定義しています:
  • ツール: add()calculate_bmi()fetch_weather()
  • リソース: greeting://{name}config://appusers://{id}/profile
  • プロンプト: review_code()debug_error()
などのテンプレート。サーバー側のすべての操作は、クライアントを weave.init() で初期化すると、Weave によって自動的にトレースされます。 この example_client.py クライアントは以下の方法を示しています:
  • MCP サーバーに接続する
  • 利用可能なツール、リソース、プロンプトを発見する
  • パラメータを使用してツールを呼び出す
  • リソース URI から読み取る
  • 引数を使用してプロンプトを生成する
  • カスタムメソッド/関数での weave.op() の使用方法を示す
Weave はすべてのクライアント側の呼び出しをトレースして、クライアントとサーバー間の相互作用の完全なビューを提供します。

FAQ

なぜ MCP トレースが必要なのですか?

LLM アプリケーション開発者として、あなたは次の3つのカテゴリのいずれかに該当します:
  • MCP サーバー側開発者: 複数のツール、リソース、プロンプトを MCP クライアントに公開したい。既存のアプリケーションのツール、リソースなどを公開するか、エージェントを構築したり、オーケストレーターエージェントによって複数のエージェントをオーケストレーションしたりしています。
  • MCP クライアント側開発者: クライアント側アプリケーションを複数の MCP サーバーに接続したい。クライアント側ロジックの中核部分は、どのツールを呼び出すか、どのリソースを取得するかを決定するための LLM 呼び出しを行うことです。
  • MCP サーバーとクライアントの開発者: サーバーとクライアントの両方を開発しています。
最初の2つのカテゴリのいずれかに該当する場合、各ツールがいつ呼び出されるか、実行フローがどのように見えるか、トークン数、サーバーまたはクライアント側ロジックのさまざまなコンポーネントのレイテンシーを知りたいと思うでしょう。 サーバーとクライアントの両方を開発している場合、統一されたトレースタイムラインを見る能力は、サーバーとクライアント側のロジックの両方を迅速に反復するのに役立ちます。 いずれの場合も、観測可能性レイヤーにより以下が可能になります:
  • アプリケーションを迅速に反復する
  • ワークフローや実行ロジックを監査する
  • ボトルネックを特定する