> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-feature-automate-reference-docs-generation.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Mcp

<a target="_blank" href="https://colab.research.google.com/drive/174VzXlU5Qcgvjt4OoIWN-guTxJcOefAh?usp=sharing">
  <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab" />
</a>

모델 컨텍스트 프로토콜(MCP)은 AI 애플리케이션이 대규모 언어 모델(LLM)과 정보를 교환할 수 있게 해주는 표준화된 통신 프로토콜입니다. 하드웨어 호환성을 변화시킨 범용 커넥터와 유사하게, MCP는 LLM이 각 새로운 서비스에 대한 맞춤형 통합 없이도 다양한 데이터 소스에 접근하고 외부 도구와 상호작용할 수 있는 인터페이스를 제공합니다.

Weave 통합을 통해 MCP 클라이언트와 MCP 서버 간의 활동을 추적할 수 있습니다. MCP 기반 시스템 전반에 걸쳐 도구 호출, 리소스 접근 및 프롬프트 생성에 대한 상세한 가시성을 제공합니다.

## 작동 방식

<Warning>
  현재 이 통합은 클라이언트 측과 서버 측 작업을 별도로 캡처하지만, 상호 작용에 대한 엔드투엔드 가시성은 제공하지 않습니다. MCP에 OpenTelemetry 트레이스 지원을 추가하여 엔드투엔드 관찰 가능성을 활성화하는 제안이 진행 중입니다. 자세한 내용은 다음을 참조하세요 [GitHub discussion #269](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/269).
</Warning>

Weave 통합은 [`weave.op()`](../tracking/ops.mdx) 데코레이터로 핵심 메서드를 패치하여 모델 컨텍스트 프로토콜(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/docs/concepts/tools)
* [리소스](https://modelcontextprotocol.io/docs/concepts/resources)
* [프롬프트](https://modelcontextprotocol.io/docs/concepts/prompts)

[![mcp\_trace\_timeline.png](https://mintlify.s3.us-west-1.amazonaws.com/wb-21fd5541-feature-automate-reference-docs-generation/ko/guides/integrations/imgs/mcp/mcp_trace_timeline.png)](https://wandb.ai/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)

## 통합 사용하기

Weave 통합은 MCP 서버와 클라이언트 모두에서 작동합니다. 설치 후에는 `weave`를 가져오는 한 줄과 이를 초기화하는 또 다른 한 줄, 단 두 줄의 코드만으로 추적을 활성화할 수 있습니다.

### 전제 조건

시작하기 전에 필요한 패키지를 설치하세요:

```bash
pip install -qq "mcp[cli]" weave
```

### 구성

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.

```python
# Import Weave (required for tracing)
import weave
from mcp.server.fastmcp import FastMCP

# Initialize Weave with your project name
weave_client = weave.init("my-project")

# Set up the MCP server
mcp = FastMCP("Demo")

# Define a tool (this call will be traced)
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers."""
    return a + b

# Define a resource (this call will be traced)
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Return a personalized greeting."""
    return f"Hello, {name}!"

# Define a prompt (this call will be traced)
@mcp.prompt()
def review_code(code: str) -> str:
    """Return a prompt for reviewing code."""
    return f"Please review this code:\n\n{code}"

# Start the server
mcp.run(transport="stdio")
```

### 클라이언트 측 통합

클라이언트 측에서도 추적은 Weave를 가져오고 초기화하는 두 가지 변경만 필요합니다. 모든 도구 호출, 리소스 접근 및 프롬프트 요청이 자동으로 추적됩니다.

```python
# Import Weave (required for tracing)
import weave
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

# Initialize Weave with your project name
weave_client = weave.init("my-project")

# Set up and run the MCP client
async with stdio_client(server_params) as (read, write):
    async with ClientSession(read, write) as session:
        # Initialize the session
        await session.initialize()
        
        # Call a tool (this will be traced)
        result = await session.call_tool("add", arguments={"a": 1, "b": 2})
        
        # Read a resource (this will be traced)
        resource = await session.read_resource("greeting://user")
        
        # Get a prompt (this will be traced)
        prompt = await session.get_prompt("review_code", arguments={"code": "print('Hello')"})
```

## Tutorial: `mcp_demo` 예제

이 [`mcp_example`](https://github.com/wandb/weave/tree/master/examples/mcp_demo)는 모델 컨텍스트 프로토콜(MCP)과 Weave 간의 추적을 위한 통합을 보여줍니다. 클라이언트와 서버 구성 요소 모두를 계측하여 상호 작용에 대한 상세한 추적을 캡처하는 방법을 보여줍니다.

### 예제 실행

1. 다음 `weave` 저장소를 복제하고 `mcp_demo` example:

   ```bash
   git clone https://github.com/wandb/weave
   cd weave/examples/mcp_demo
   ```

   이 예제에는 두 개의 주요 파일이 포함되어 있습니다:

   * `example_server.py`: `FastMCP`로 구축된 데모 MCP 서버입니다. 도구, 리소스 및 프롬프트를 정의합니다.
   * `example_client.py`: 서버에 연결하고 해당 구성 요소와 상호 작용하는 클라이언트입니다.

2. 필요한 종속성을 수동으로 설치하세요:

   ```bash
   pip install mcp[cli] weave
   ```

3. 데모 실행:

   ```bash
   python example_client.py example_server.py
   ```

   이 명령은 클라이언트와 서버를 모두 시작합니다. 클라이언트는 다양한 기능을 테스트할 수 있는 대화형 CLI를 시작합니다.

### 클라이언트 CLI 명령

클라이언트 인터페이스는 다음 명령을 지원합니다:

| 명령                      | 설명                                                                                   |
| ----------------------- | ------------------------------------------------------------------------------------ |
| `tools`                 | 사용 가능한 도구 나열                                                                         |
| `resources`             | 사용 가능한 리소스 나열                                                                        |
| `prompts`               | 사용 가능한 프롬프트 나열                                                                       |
| `add <a> <b>`           | 두 숫자 더하기                                                                             |
| `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()`](../tracking/ops.mdx) 사용 방법 보여주기.

Weave는 모든 클라이언트 측 호출을 추적하여 클라이언트와 서버 간의 상호 작용에 대한 완전한 뷰를 제공합니다.

## FAQ

### 왜 MCP 추적이 필요한가요?

LLM 애플리케이션 개발자로서, 다음 세 가지 범주 중 하나에 속합니다:

* *MCP 서버 측 개발자*: MCP 클라이언트에 여러 도구, 리소스 및 프롬프트를 노출하고자 합니다. 기존 애플리케이션의 도구, 리소스 등을 노출하거나, 에이전트를 구축했거나 오케스트레이터 에이전트에 의해 여러 에이전트가 조율됩니다.

* *MCP 클라이언트 측 개발자*: 클라이언트 측 애플리케이션을 여러 MCP 서버에 연결하고자 합니다. 클라이언트 측 로직의 핵심 부분은 어떤 도구를 호출하거나 어떤 리소스를 가져올지 결정하기 위해 LLM 호출을 하는 것입니다.

* *MCP 서버 및 클라이언트 개발자*: 서버와 클라이언트 모두를 개발하고 있습니다.

처음 두 범주 중 하나에 속한다면, 각 도구가 언제 호출되는지, 실행 흐름이 어떻게 생겼는지, 토큰 수, 서버나 클라이언트 측 로직의 다양한 구성 요소의 지연 시간을 알고 싶을 것입니다.

서버와 클라이언트 모두를 개발하는 경우, 통합된 추적 타임라인을 볼 수 있는 능력은 서버와 클라이언트 측 로직을 모두 빠르게 반복할 수 있도록 도와줍니다.

어떤 경우든, 관찰 가능성 계층을 통해 다음을 수행할 수 있습니다:

* 애플리케이션을 빠르게 반복
* 워크플로우 또는 실행 로직 감사
* 병목 현상 식별
