Open In Colab 모델 컨텍스트 프로토콜(MCP)은 AI 애플리케이션이 대규모 언어 모델(LLM)과 정보를 교환할 수 있게 해주는 표준화된 통신 프로토콜입니다. 하드웨어 호환성을 변화시킨 범용 커넥터와 유사하게, MCP는 LLM이 각 새로운 서비스에 대한 맞춤형 통합 없이도 다양한 데이터 소스에 접근하고 외부 도구와 상호작용할 수 있는 인터페이스를 제공합니다. Weave 통합을 통해 MCP 클라이언트와 MCP 서버 간의 활동을 추적할 수 있습니다. MCP 기반 시스템 전반에 걸쳐 도구 호출, 리소스 접근 및 프롬프트 생성에 대한 상세한 가시성을 제공합니다.

작동 방식

현재 이 통합은 클라이언트 측과 서버 측 작업을 별도로 캡처하지만, 상호 작용에 대한 엔드투엔드 가시성은 제공하지 않습니다. MCP에 OpenTelemetry 트레이스 지원을 추가하여 엔드투엔드 관찰 가능성을 활성화하는 제안이 진행 중입니다. 자세한 내용은 다음을 참조하세요 GitHub discussion #269.
Weave 통합은 weave.op() 데코레이터로 핵심 메서드를 패치하여 모델 컨텍스트 프로토콜(MCP)의 주요 구성 요소를 자동으로 추적합니다. 구체적으로 mcp.server.fastmcp.FastMCPmcp.ClientSession 클래스의 메서드를 패치합니다. 이 통합을 통해 Weave는 다음과 같은 MCP 구성 요소를 추적합니다: mcp_trace_timeline.png

통합 사용하기

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

전제 조건

시작하기 전에 필요한 패키지를 설치하세요:
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.
# 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를 가져오고 초기화하는 두 가지 변경만 필요합니다. 모든 도구 호출, 리소스 접근 및 프롬프트 요청이 자동으로 추적됩니다.
# 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는 모델 컨텍스트 프로토콜(MCP)과 Weave 간의 추적을 위한 통합을 보여줍니다. 클라이언트와 서버 구성 요소 모두를 계측하여 상호 작용에 대한 상세한 추적을 캡처하는 방법을 보여줍니다.

예제 실행

  1. 다음 weave 저장소를 복제하고 mcp_demo example:
    git clone https://github.com/wandb/weave
    cd weave/examples/mcp_demo
    
    이 예제에는 두 개의 주요 파일이 포함되어 있습니다:
    • example_server.py: FastMCP로 구축된 데모 MCP 서버입니다. 도구, 리소스 및 프롬프트를 정의합니다.
    • example_client.py: 서버에 연결하고 해당 구성 요소와 상호 작용하는 클라이언트입니다.
  2. 필요한 종속성을 수동으로 설치하세요:
    pip install mcp[cli] weave
    
  3. 데모 실행:
    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() 사용 방법 보여주기.
Weave는 모든 클라이언트 측 호출을 추적하여 클라이언트와 서버 간의 상호 작용에 대한 완전한 뷰를 제공합니다.

FAQ

왜 MCP 추적이 필요한가요?

LLM 애플리케이션 개발자로서, 다음 세 가지 범주 중 하나에 속합니다:
  • MCP 서버 측 개발자: MCP 클라이언트에 여러 도구, 리소스 및 프롬프트를 노출하고자 합니다. 기존 애플리케이션의 도구, 리소스 등을 노출하거나, 에이전트를 구축했거나 오케스트레이터 에이전트에 의해 여러 에이전트가 조율됩니다.
  • MCP 클라이언트 측 개발자: 클라이언트 측 애플리케이션을 여러 MCP 서버에 연결하고자 합니다. 클라이언트 측 로직의 핵심 부분은 어떤 도구를 호출하거나 어떤 리소스를 가져올지 결정하기 위해 LLM 호출을 하는 것입니다.
  • MCP 서버 및 클라이언트 개발자: 서버와 클라이언트 모두를 개발하고 있습니다.
처음 두 범주 중 하나에 속한다면, 각 도구가 언제 호출되는지, 실행 흐름이 어떻게 생겼는지, 토큰 수, 서버나 클라이언트 측 로직의 다양한 구성 요소의 지연 시간을 알고 싶을 것입니다. 서버와 클라이언트 모두를 개발하는 경우, 통합된 추적 타임라인을 볼 수 있는 능력은 서버와 클라이언트 측 로직을 모두 빠르게 반복할 수 있도록 도와줍니다. 어떤 경우든, 관찰 가능성 계층을 통해 다음을 수행할 수 있습니다:
  • 애플리케이션을 빠르게 반복
  • 워크플로우 또는 실행 로직 감사
  • 병목 현상 식별