글 / LangGraph·MCP

MCP의 호스트·클라이언트·서버

호스트는 서버마다 클라이언트를 하나씩 생성하고, 서버는 도구·리소스·프롬프트를 JSON-RPC로 제공한다.

작성일 · 읽는 시간 2분 · MCP 2026-07-28 기준

MCP의 목적

LLM 애플리케이션에 외부 데이터와 기능을 연결할 때 애플리케이션마다 연결 코드를 별도로 작성하면, 조합의 수만큼 작업량이 증가한다. MCP(Model Context Protocol)는 이 연결을 하나의 규약으로 통일한다. 이를 위해 MCP는 먼저 역할을 세 가지로 구분한다.

세 역할

  • 호스트(host): LLM을 사용하는 애플리케이션이다. 클라이언트를 생성하고, 연결할 서버와 사용자 동의를 관리한다.
  • 클라이언트(client): 호스트 내부에서 연결을 담당하는 구성 요소이다. 클라이언트 하나는 서버 하나와만 통신한다.
  • 서버(server): 데이터와 기능을 제공하는 프로그램이다. 같은 장비의 프로세스일 수도 있고 원격 서비스일 수도 있다.

서버 세 개에 연결하면 호스트 내부에 클라이언트가 세 개 생성된다. 대화 전체는 호스트에만 유지되고, 서버는 다른 서버의 내부를 볼 수 없다.

호스트 내부 클라이언트와 서버의 일대일 연결 구성

서버의 제공 기능

종류 내용 사용 여부의 결정 주체
도구(tools) 모델이 호출하는 함수 모델
리소스(resources) 맥락에 포함할 읽기 전용 데이터 애플리케이션
프롬프트(prompts) 사전에 정의한 프롬프트 템플릿 사용자

서버의 세 가지 제공 기능과 사용 여부의 결정 주체

JSON-RPC 메시지

메시지는 JSON-RPC 2.0 형식이다. 도구 목록은 tools/list로, 도구 실행은 tools/call로 요청한다.

jsontools/call 요청
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "read_temperature",
    "arguments": { "sensor_id": "T-101" },
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}

2026-07-28 개정부터는 요청마다 _meta에 프로토콜 버전과 클라이언트 기능을 포함하여 전송한다. 이전 개정에서 연결 시작 시점에 하던 initialize 핸드셰이크는 제거되었고, 서버의 지원 기능은 server/discover로 조회한다.

tools/call 요청 메시지의 필드 배치