> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Model Context Protocol (MCP) と Weave

> Weave で MCP クライアントと MCP サーバー間のアクティビティをトレースします

<a target="_blank" href="https://colab.research.google.com/drive/174VzXlU5Qcgvjt4OoIWN-guTxJcOefAh?usp=sharing" aria-label="Google Colab で開く">
  <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Colab で開く" />
</a>

Model Context Protocol (MCP) は、AI アプリケーションが大規模言語モデル (LLM) と情報をやり取りするための標準化された通信プロトコルです。MCP は、LLM がデータソースにアクセスしたり外部ツールを操作したりするためのインターフェースを提供するため、新しいサービスごとにカスタムのインテグレーションを用意する必要はありません。

Weave のインテグレーションを使用すると、MCP クライアントと MCP サーバー間のアクティビティをトレースできます。MCP ベースのシステム全体で、ツール呼び出し、リソースへのアクセス、プロンプト生成を詳細に可視化できるため、MCP アプリケーションのデバッグ、監査、最適化に役立ちます。

このガイドでは、インテグレーションの仕組みと、サーバー側およびクライアント側でトレースを有効にする方法を説明します。また、実際にご自身で実行できる完全な例も順を追って紹介します。

<h2 id="how-it-works">
  仕組み
</h2>

<Warning>
  このインテグレーションはクライアント側とサーバー側の操作をそれぞれ個別に取得しますが、両者間のやり取りをエンドツーエンドで可視化することはできません。エンドツーエンドの可観測性を実現するため、MCP に OpenTelemetry のトレースサポートを追加する提案が現在進められています。詳細については、[GitHub discussion #269](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/269) を参照してください。
</Warning>

Weave インテグレーションは、コアメソッドにパッチを当てて [`weave.op()`](/ja/products/wandb/weave/guides/tracking/ops) デコレーターを適用することで、Model Context Protocol (MCP) の主要なコンポーネントを自動的にトレースします。具体的には、[`mcp.server.fastmcp.FastMCP`](https://github.com/modelcontextprotocol/python-sdk/blob/b4c7db6a50a5c88bae1db5c1f7fba44d16eebc6e/src/mcp/server/fastmcp/server.py#L109) クラスと [`mcp.ClientSession`](https://github.com/modelcontextprotocol/python-sdk/blob/b4c7db6a50a5c88bae1db5c1f7fba44d16eebc6e/src/mcp/client/session.py#L84) クラスのメソッドにパッチを当てます。

このインテグレーションにより、Weave は次の MCP コンポーネントをトレースします。

* [ツール](https://modelcontextprotocol.io/specification/2025-06-18/server/tools)
* [リソース](https://modelcontextprotocol.io/specification/2025-06-18/server/resources)
* [プロンプト](https://modelcontextprotocol.io/specification/2025-06-18/server/prompts)

[<img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/mcp_trace_timeline.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=00b31b1dfc0d87aa8dca183fa8026392" alt="mcp_trace_timeline.png" width="3801" height="2339" data-path="products/wandb/weave/_media/mcp_trace_timeline.png" />](https://forge.coreweave.com/wandb/ayut/mcp_example/weave/traces?filter=%7B%22opVersionRefs%22%3A%5B%22weave%3A%2F%2F%2Fayut%2Fmcp_example%2Fop%2Frun_client%3A*%22%5D%7D\&peekPath=%2Fayut%2Fmcp_example%2Fcalls%2F01966bbe-cc5e-7012-b45f-bf10617d8c1e%3FhideTraceTree%3D0)

<h2 id="use-the-integration">
  インテグレーションを使用する
</h2>

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

<h3 id="prerequisites">
  前提条件
</h3>

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

```bash theme={"system"}
pip install -qq "mcp[cli]" weave
```

<h3 id="configuration">
  設定
</h3>

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

<h3 id="server-side-integration">
  サーバー側インテグレーション
</h3>

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

```python lines theme={"system"}
# Weave をインポート（トレースに必須）
import weave
from mcp.server.fastmcp import FastMCP

# プロジェクト名を指定して Weave を初期化
weave_client = weave.init("my-project")

# MCP サーバーを設定
mcp = FastMCP("Demo")

# ツールを定義（この Call はトレースされます）
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers."""
    return a + b

# リソースを定義（この Call はトレースされます）
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Return a personalized greeting."""
    return f"Hello, {name}!"

# プロンプトを定義（この Call はトレースされます）
@mcp.prompt()
def review_code(code: str) -> str:
    """Return a prompt for reviewing code."""
    return f"Please review this code:\n\n{code}"

# サーバーを起動
mcp.run(transport="stdio")
```

<h3 id="client-side-integration">
  クライアント側のインテグレーション
</h3>

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

```python lines theme={"system"}
# Weave をインポートします（トレースに必須）
import weave
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

# プロジェクト名を指定して Weave を初期化します
weave_client = weave.init("my-project")

# MCP クライアントを設定して実行します
async with stdio_client(server_params) as (read, write):
    async with ClientSession(read, write) as session:
        # セッションを初期化します
        await session.initialize()
        
        # ツールを呼び出します（トレースされます）
        result = await session.call_tool("add", arguments={"a": 1, "b": 2})
        
        # リソースを読み取ります（トレースされます）
        resource = await session.read_resource("greeting://user")
        
        # プロンプトを取得します（トレースされます）
        prompt = await session.get_prompt("review_code", arguments={"code": "print('Hello')"})
```

<h2 id="tutorial-mcp_demo-example">
  チュートリアル: `mcp_demo` の例
</h2>

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

<h3 id="run-the-example">
  サンプルを実行する
</h3>

1. docs リポジトリをクローンし、`mcp_demo` サンプルのディレクトリに移動します。

   ```bash theme={"system"}
   git clone https://github.com/wandb/docs
   cd docs/weave/examples/mcp_demo
   ```

   このサンプルには、主に次の 2 つのファイルが含まれています。

   * `example_server.py`: `FastMCP` で構築したデモ用の MCP サーバーです。ツール、リソース、プロンプトを定義しています。
   * `example_client.py`: サーバーに接続し、そのコンポーネントを操作するクライアントです。

2. 必要な依存関係を手動でインストールします。

   ```bash theme={"system"}
   pip install mcp[cli] weave
   ```

3. デモを実行します。

   ```bash theme={"system"}
   python example_client.py example_server.py
   ```

   このコマンドを実行すると、クライアントとサーバーの両方が起動します。クライアントが対話型 CLI を起動するので、そこでさまざまな機能を試せます。

<h3 id="client-cli-commands">
  クライアント CLI コマンド
</h3>

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

| コマンド | 説明 |
| - | - |
| `tools` | 利用可能なツールを一覧表示します |
| `resources` | 利用可能なリソースを一覧表示します |
| `prompts` | 利用可能なプロンプトを一覧表示します |
| `add <a> <b>` | 2 つの数値を加算します |
| `bmi <weight> <height>` | ボディマス指数 (BMI) を計算します |
| `weather <city>` | 指定した都市の気象データを取得します |
| `greeting <name>` | パーソナライズされた挨拶を取得します |
| `user <id>` | ユーザープロフィールを取得します |
| `config` | アプリの設定を取得します |
| `code-review <code>` | コードレビュー用のプロンプトを生成します |
| `debug <error>` | デバッグ用のプロンプトを生成します |
| `demo` | 利用可能なすべての機能を網羅したデモを実行します。各機能を順番に実行し、インタラクション全体のトレースタイムラインを Weights & Biases UI 上に生成します。 |
| `q` | セッションを終了します |

<h3 id="example-overview">
  例の概要
</h3>

`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()`](/ja/products/wandb/weave/guides/tracking/ops) の使用例

Weave はクライアント側のすべての Call をトレースするため、クライアントとサーバー間のやり取りを全体的に把握できます。

<h2 id="faq">
  FAQ
</h2>

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

<h3 id="why-mcp-tracing-is-needed">
  MCP トレースが必要な理由
</h3>

LLM アプリケーションの開発者は、次の 3 つのタイプのいずれかに該当します。

* *MCP サーバー側の開発者*: 複数のツール、リソース、プロンプトを MCP クライアントに公開したい開発者です。既存のアプリケーションのツールやリソースを公開している場合や、エージェントを構築している場合、またはオーケストレーターエージェントで複数のエージェントを連携させている場合が該当します。

* *MCP クライアント側の開発者*: クライアント側のアプリケーションを複数の MCP サーバーに接続したい開発者です。クライアント側のロジックの中核は、どのツールを呼び出すか、どのリソースを取得するかを判断するための LLM Call です。

* *MCP サーバーとクライアントの開発者*: サーバーとクライアントの両方を開発している開発者です。

最初の 2 つのいずれかに該当する場合は、各ツールがいつ呼び出されたか、実行フローがどうなっているか、トークン数、そしてサーバー側またはクライアント側のロジックにおける各コンポーネントのレイテンシーを把握する必要があります。

サーバーとクライアントの両方を開発している場合は、統合されたトレースのタイムラインを使うことで、サーバー側とクライアント側のロジックを反復的に改善しやすくなります。

いずれの場合も、可観測性レイヤーを導入すると次のことが可能になります。

* アプリケーションを反復的に改善する。
* ワークフローや実行ロジックを監査する。
* ボトルネックを特定する。
