Cook AI

MCP 도구 요청 플로우

앤써니킴 2025. 4. 16. 22:22

Model Context Protocol (MCP)의 도구 요청 플로우는 MCP 호스트(예: Claude Desktop, Cursor)와 클라이언트가 MCP 서버와 상호작용하여 도구를 호출하는 과정을 포함합니다.

아래는 전체 플로우를 단계별로 설명한 내용입니다. 이 설명은 MCP의 클라이언트-서버 아키텍처와 표준화된 통신 방식을 기반으로 하며, Anthropic의 MCP 문서와 관련 정보를 참조하여 작성되었습니다.


MCP 도구 요청 플로우

MCP는 호스트(사용자가 직접 상호작용하는 애플리케이션), 클라이언트(호스트 내에서 서버와 1:1 연결을 관리), 서버(도구, 리소스, 프롬프트를 제공)로 구성됩니다. 도구 요청 플로우는 다음과 같은 단계로 진행됩니다:

  1. 초기화 (Initialization)
    • 호스트 시작: 사용자가 MCP 호스트 애플리케이션(예: Claude Desktop, Cursor)을 실행하면, 호스트는 설정 파일(예: claude_desktop_config.json 또는 .cursor/mcp.json)을 읽어 구성된 MCP 서버 목록을 확인합니다.
      • 예: Claude Desktop은 mcpServers 키에서 서버의 실행 명령(command, args)을 확인합니다.
    • 클라이언트 생성: 호스트는 각 MCP 서버에 대해 1:1 연결을 관리하는 MCP 클라이언트를 생성합니다. 클라이언트는 호스트와 서버 간의 통신을 중개합니다.
    • 서버 실행: 호스트는 설정 파일에 명시된 명령을 실행하여 MCP 서버를 시작합니다(로컬 stdio 서버 또는 원격 SSE 서버). 예를 들어, npx @modelcontextprotocol/server-filesystem 같은 명령이 실행됩니다.
  2. 연결 및 기능 협상 (Capability Negotiation)
    • 핸드셰이크: 클라이언트는 MCP 서버에 초기화 요청을 보내 프로토콜 버전과 지원 가능한 기능을 교환합니다. JSON-RPC 기반의 표준화된 통신을 사용합니다.[
    • 기능 발견 (Discovery): 클라이언트는 서버에 "어떤 도구, 리소스, 프롬프트를 제공할 수 있나?"를 요청합니다. 서버는 사용 가능한 도구 목록(예: get-forecast, search-github)과 설명을 응답으로 반환합니다.
      • 예: 날씨 서버는 get-forecastget-alerts 도구를 제공할 수 있습니다.
    • 기능 등록: 클라이언트는 서버의 도구와 리소스를 호스트에 등록하여 LLM이 이를 사용할 수 있도록 준비합니다.
  3. 사용자 요청 및 도구 선택 (Tool or Resource Selection)
    • 사용자 입력: 사용자가 호스트 애플리케이션에서 요청을 입력합니다. 예: "샌프란시스코의 오늘 날씨를 알려줘" (Claude Desktop에서).
    • LLM 분석: 호스트 내의 LLM(예: Claude 3.7 Sonnet)은 요청을 분석하여 MCP 서버의 도구가 필요한지 판단합니다. LLM은 등록된 도구 목록을 참조하여 적합한 도구(예: get-forecast)를 선택합니다.
    • 도구 호출 결정: LLM은 도구 호출이 필요하다고 판단하면, 호출할 도구의 이름과 매개변수(예: location: San Francisco)를 JSON 형식으로 준비합니다.
  4. 권한 요청 (Permission Request)
    • 사용자 승인: 보안과 투명성을 위해, 호스트는 사용자에게 도구 호출을 승인할지 묻는 메시지를 표시합니다. 예: "Claude가 날씨 도구를 사용하도록 허용하시겠습니까?"
    • 승인 처리: 사용자가 승인하면 클라이언트는 도구 호출을 진행합니다. 사용자가 거부하면 요청은 중단됩니다.
  5. 도구 호출 및 실행 (Invocation and Execution)
    • 요청 전송: 클라이언트는 MCP 서버로 도구 호출 요청을 보냅니다. 요청은 표준화된 JSON-RPC 형식으로, 도구 이름과 매개변수를 포함합니다.
      • 예: { "tool": "get-forecast", "params": { "location": "San Francisco" } }
    • 서버 처리: MCP 서버는 요청을 수신하고, 필요한 작업을 수행합니다. 예: 외부 날씨 API를 호출하거나 로컬 데이터베이스를 조회합니다.
    • 결과 반환: 서버는 처리 결과를 표준화된 형식으로 클라이언트에 반환합니다. 예: { "result": { "temperature": 18, "condition": "cloudy" } }
  6. 결과 통합 및 응답 생성 (Context Integration and Response Generation)
    • 컨텍스트 통합: 클라이언트는 서버로부터 받은 결과를 호스트의 LLM에 전달합니다. LLM은 이 데이터를 대화 컨텍스트에 통합합니다.
    • 응답 생성: LLM은 사용자 요청과 서버 결과를 결합하여 최종 응답을 생성합니다.
      • 예: "샌프란시스코의 오늘 날씨는 18도이며, 흐립니다."
    • 응답 표시: 호스트는 사용자에게 응답을 표시합니다.

예시 플로우: Claude Desktop에서 날씨 도구 호출

  1. 초기화: Claude Desktop이 시작되고, claude_desktop_config.json에서 날씨 MCP 서버(mcp-weather-stdio-server)를 실행합니다.
  2. 연결: 클라이언트가 서버와 연결되고, 서버는 get_forecastget_gridalerts 도구를 제공한다고 알립니다.
  3. 사용자 요청: 사용자가 "샌프란시스코 날씨 어때?"라고 입력합니다.
  4. 도구 선택: Claude는 get-forecast 도구가 필요하다고 판단하고, 매개변수 location: San Francisco를 준비합니다.
  5. 권한 요청: Claude Desktop이 사용자에게 도구 사용 허가를 요청합니다.
  6. 도구 실행: 사용자가 승인하면, 클라이언트가 서버에 요청을 보내고, 서버는 외부 날씨 API를 호출하여 데이터를 가져옵니다.
  7. 응답: 서버가 결과를 반환하면, Claude는 이를 기반으로 "오늘 샌프란시스코는 18도, 흐림"이라는 응답을 생성합니다.

MCP의 도구 요청 플로우는 초기화, 연결, 기능 협상, 사용자 요청, 도구 선택, 권한 요청, 실행, 결과 통합의 단계로 구성됩니다.

Claude Desktop이나 Cursor 같은 호스트는 클라이언트를 통해 MCP 서버와 표준화된 방식으로 상호작용하며, LLM이 외부 데이터와 도구를 활용해 더 풍부한 응답을 제공할 수 있도록 합니다. 이 플로우는 개발자가 일관된 방식으로 AI와 외부 시스템을 연결할 수 있게 해주는 MCP의 핵심 강점입니다.

728x90