메인 콘텐츠로 건너뛰기
Colab에서 열기 Model Context Protocol(MCP)은 AI 애플리케이션이 대규모 언어 모델(LLM)과 정보를 주고받을 수 있게 해주는 표준화된 통신 프로토콜입니다. 범용 커넥터가 하드웨어 호환성을 혁신한 것처럼, MCP는 새 서비스가 추가될 때마다 맞춤형 인테그레이션을 만들지 않아도 LLM이 다양한 데이터 소스에 액세스하고 외부 도구와 상호작용할 수 있는 인터페이스를 제공합니다. Weave 인테그레이션을 사용하면 MCP 클라이언트와 MCP 서버 간 활동을 트레이스할 수 있습니다. 이를 통해 MCP 기반 시스템 전반에서 도구 call, 리소스 액세스, 프롬프트 생성 과정을 상세하게 파악할 수 있습니다.

작동 방식

현재 이 인테그레이션은 클라이언트 측 오퍼레이션과 서버 측 오퍼레이션을 별도로 캡처하며, 둘의 상호작용에 대한 엔드투엔드 가시성은 제공하지 않습니다. 엔드투엔드 옵저버빌리티를 지원하기 위해 MCP에 OpenTelemetry 트레이스 지원을 추가하는 방안이 현재 제안되어 있습니다. 자세한 내용은 GitHub discussion #269를 참조하세요.
Weave 인테그레이션은 핵심 메서드에 weave.op() 데코레이터를 패치하여 Model Context Protocol(MCP)의 주요 컴포넌트를 자동으로 트레이스합니다. 구체적으로는 mcp.server.fastmcp.FastMCPmcp.ClientSession 클래스의 메서드를 패치합니다. 이 인테그레이션을 통해 Weave는 다음 MCP 컴포넌트를 트레이스합니다: mcp_trace_timeline.png

인테그레이션 사용하기

Weave 인테그레이션은 MCP 서버와 클라이언트 모두에서 작동합니다. 설치한 후에는 코드 두 줄만 추가하면 트레이싱을 활성화할 수 있습니다. 한 줄은 weave를 임포트하는 데 사용하고, 다른 한 줄은 초기화에 사용합니다.

사전 요구 사항

시작하기 전에 필수 패키지를 설치하세요.

설정

환경 변수를 사용해 MCP 인테그레이션을 설정합니다:
  • MCP_TRACE_LIST_OPERATIONS: 서버와 클라이언트 양쪽에서 목록 오퍼레이션(list_tools, list_resources, list_prompts)을 트레이스하려면 true로 설정하세요.

서버 측 인테그레이션

MCP 서버를 트레이스하려면 기존 FastMCP 설정에 두 줄만 추가하면 됩니다. 한 줄은 Weave를 임포트하고, 다른 한 줄은 클라이언트를 초기화합니다. 추가한 뒤에는 도구, 리소스, 프롬프트 오퍼레이션이 자동으로 트레이스됩니다.

클라이언트 측 인테그레이션

클라이언트 측에서 트레이싱하려면 두 가지만 하면 됩니다. Weave를 임포트하고 초기화하세요. 모든 도구 call, 리소스 액세스, 프롬프트 요청은 자동으로 트레이스됩니다.

튜토리얼: mcp_demo 예제

mcp_demo 예제는 트레이싱을 위한 Model Context Protocol (MCP)과 Weave의 인테그레이션을 보여줍니다. 이 예제는 클라이언트와 서버 컴포넌트 모두를 계측해 상호작용의 상세한 트레이스를 수집하는 방법을 보여줍니다.

예제 실행

  1. docs 저장소를 복제한 다음 mcp_demo 예제로 이동합니다:
    이 예제에는 두 개의 주요 파일이 있습니다:
    • 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 서버에 연결
  • 사용 가능한 도구, 리소스, 프롬프트 검색
  • 파라미터를 사용해 도구 call
  • 리소스 URI에서 읽기
  • 인수를 사용해 프롬프트 생성
  • 맞춤형 메서드/함수와 함께 weave.op()을 사용하는 방법
Weave는 클라이언트 측의 모든 call을 트레이스하여 클라이언트와 서버 간 상호작용에 대한 전체 뷰를 제공합니다.

FAQ

왜 MCP 트레이싱이 필요한가요?

LLM 애플리케이션 개발자는 다음 세 범주 중 하나에 속합니다.
  • MCP 서버 측 개발자: 여러 도구, 리소스, 프롬프트를 MCP 클라이언트에 노출하려고 합니다. 기존 애플리케이션의 도구와 리소스 등을 노출할 수도 있고, 에이전트를 직접 구축했거나 오케스트레이터 에이전트가 여러 에이전트를 조율하도록 구성했을 수도 있습니다.
  • MCP 클라이언트 측 개발자: 클라이언트 측 애플리케이션을 여러 MCP 서버에 연결하려고 합니다. 클라이언트 측 로직의 핵심은 어떤 도구를 호출할지, 또는 어떤 리소스를 가져올지를 결정하기 위해 LLM call을 수행하는 것입니다.
  • MCP 서버 및 클라이언트 개발자: 서버와 클라이언트를 모두 개발하고 있습니다.
앞의 두 범주 중 하나에 속한다면, 각 도구가 언제 호출되는지, 실행 흐름이 어떻게 전개되는지, 그리고 서버 또는 클라이언트 측 로직의 여러 컴포넌트에서 토큰 수와 지연 시간이 어떠한지 알고 싶을 것입니다. 서버와 클라이언트를 모두 개발하고 있다면, 통합된 트레이스 타임라인을 볼 수 있으면 서버와 클라이언트 측 로직을 모두 빠르게 개선하는 데 도움이 됩니다. 어떤 경우든 옵저버빌리티 계층을 사용하면 다음이 가능합니다.
  • 애플리케이션을 빠르게 개선
  • 워크플로 또는 실행 로직 감사
  • 병목 지점 파악