IT기술/MCP

MCP(Model Context Protocol) 메시지 타입 구조 완전 가이드

후스파 2025. 7. 6. 15:26
반응형

최신 AI·시스템 통합 표준으로 주목받는 MCP(Model Context Protocol)의 메시지 타입 구조에 대해 쉽게 정리해드립니다. MCP는 AI와 외부 시스템이 서로 정보를 주고받을 때, JSON-RPC 2.0 기반의 표준 메시지 포맷을 사용합니다. 핵심 메시지 타입은 요청(Request), 응답(Response), 알림(Notification) 세 가지로 나뉩니다.


1. 요청(Request) 메시지란?

요청 메시지는 AI(혹은 클라이언트)가 서버(또는 외부 도구)에 "이 작업을 해줘!"라고 명령을 보낼 때 사용합니다. MCP에서 가장 기본적이고 중요한 메시지 타입으로, 외부 도구나 리소스에 접근하기 위한 모든 작업이 요청 메시지를 통해 시작됩니다.

구조 예시

{
  "jsonrpc": "2.0",
  "id": "req-001",
  "method": "getWeather",
  "params": {
    "city": "Seoul"
  }
}

핵심 포인트

id: 요청을 구분하는 고유값으로, 나중에 응답과 매칭할 때 사용됩니다. 문자열이나 숫자 모두 가능합니다.
method: 호출할 기능의 이름으로, MCP 서버에서 제공하는 특정 도구나 리소스를 지정합니다.
params: 요청에 필요한 매개변수로, 도시명, 파일 경로, 검색어 등 작업 수행에 필요한 정보를 담습니다.


2. 응답(Response) 메시지란?

응답 메시지는 서버가 요청을 처리한 결과를 다시 클라이언트(혹은 AI)에게 돌려주는 메시지입니다. 요청에 대한 성공 결과나 오류 정보를 포함하며, 반드시 요청의 id와 동일한 값을 가져야 합니다.

성공 응답 예시

{
  "jsonrpc": "2.0",
  "id": "req-001",
  "result": {
    "temp": 22,
    "condition": "맑음",
    "humidity": 65
  }
}

오류 응답 예시

{
  "jsonrpc": "2.0",
  "id": "req-001",
  "error": {
    "code": -32000,
    "message": "Invalid city name",
    "data": {"validCities": ["Seoul", "Busan", "Incheon"]}
  }
}

핵심 포인트

성공 시: result 필드에 실제 데이터나 작업 결과를 담습니다.

실패 시: error 필드에 오류 코드, 메시지, 추가 정보를 포함합니다.

id 매칭: 요청의 id와 동일한 값으로 어떤 요청에 대한 응답인지 명확히 구분합니다.


3. 알림(Notification) 메시지란?

알림 메시지는 서버나 클라이언트가 "이런 일이 발생했어요!"라고 통보만 하고 응답을 기대하지 않을 때 사용합니다. 실시간 상태 변화, 시스템 이벤트, 진행 상황 업데이트 등에 주로 활용됩니다.

구조 예시

{
  "jsonrpc": "2.0",
  "method": "systemAlert",
  "params": {
    "level": "critical",
    "message": "CPU 사용량 95% 초과",
    "timestamp": "2025-07-04T20:45:00Z"
  }
}

핵심 포인트

id 없음: 응답이 필요 없기 때문에 id 필드가 존재하지 않습니다.
실시간 통신: 상태 변화, 이벤트, 로그, 진행률 통보 등에 활용됩니다.
단방향 통신: 발신자는 수신자의 응답을 기다리지 않습니다.


4. 메시지 타입 비교표

요청id, method, paramsO데이터 조회, 도구 실행양방향 통신의 시작점
응답id, result/errorX요청 결과 반환요청에 대한 피드백
알림method, paramsX상태/이벤트 알림실시간 단방향 통신

5. 실제 통신 흐름 예시

요청 → 응답 패턴

// 클라이언트 → 서버 (요청)
{"jsonrpc":"2.0","id":"doc-1","method":"readFile","params":{"path":"/notes.txt"}}

// 서버 → 클라이언트 (응답)
{"jsonrpc":"2.0","id":"doc-1","result":{"content":"회의 내용: 프로젝트 진행 상황..."}}

알림 패턴

// 서버 → 클라이언트 (알림)
{"jsonrpc":"2.0","method":"progress","params":{"taskId":"T-123","percent":75,"status":"processing"}}

복합 통신 시나리오

// 1. 도구 목록 요청
{"jsonrpc":"2.0","id":"tools-1","method":"tools/list","params":{}}

// 2. 도구 목록 응답
{"jsonrpc":"2.0","id":"tools-1","result":{"tools":[{"name":"searchWeb","description":"웹 검색"}]}}

// 3. 도구 실행 요청
{"jsonrpc":"2.0","id":"exec-1","method":"tools/call","params":{"name":"searchWeb","arguments":{"query":"MCP 프로토콜"}}}

// 4. 실행 결과 응답
{"jsonrpc":"2.0","id":"exec-1","result":{"content":"MCP는 AI와 외부 시스템을 연결하는..."}}

6. MCP 메시지 타입의 고급 기능

배치 처리 지원

MCP는 여러 요청을 하나의 메시지로 묶어서 처리할 수 있는 배치 기능을 지원합니다:

[
  {"jsonrpc":"2.0","id":"1","method":"getWeather","params":{"city":"Seoul"}},
  {"jsonrpc":"2.0","id":"2","method":"getWeather","params":{"city":"Busan"}},
  {"jsonrpc":"2.0","id":"3","method":"getWeather","params":{"city":"Incheon"}}
]

스트리밍 응답

대용량 데이터나 실시간 스트림의 경우, 여러 개의 알림 메시지를 통해 점진적으로 데이터를 전송할 수 있습니다:

{"jsonrpc":"2.0","method":"streamData","params":{"chunk":1,"data":"첫 번째 데이터..."}}
{"jsonrpc":"2.0","method":"streamData","params":{"chunk":2,"data":"두 번째 데이터..."}}
{"jsonrpc":"2.0","method":"streamEnd","params":{"totalChunks":2}}

7. 오류 처리 및 보안

표준 오류 코드

MCP는 JSON-RPC 2.0의 표준 오류 코드를 확장하여 사용합니다:

  • -32700: Parse error (구문 분석 오류)
  • -32600: Invalid Request (잘못된 요청)
  • -32601: Method not found (메서드를 찾을 수 없음)
  • -32602: Invalid params (잘못된 매개변수)
  • -32603: Internal error (내부 오류)
  • -32000 ~ -32099: 서버 정의 오류

보안 고려사항

인증 토큰: 요청 헤더나 params에 인증 정보를 포함할 수 있습니다.
권한 검증: 각 메서드별로 접근 권한을 확인합니다.
입력 검증: params의 데이터 타입과 형식을 엄격히 검증합니다.


마무리

MCP 메시지 타입 구조를 이해하면, AI와 외부 시스템을 연동하는 모든 작업이 훨씬 더 쉽고, 확장성과 신뢰성을 갖춘 솔루션을 만들 수 있습니다.
표준화된 구조 덕분에 시스템 간 해석 오류가 줄어들고, 요청-응답-알림 구조로 실시간·양방향 통신, 자동화, 확장성을 모두 지원합니다. 개발자는 복잡한 통합 작업 없이 다양한 AI 도구와 외부 시스템을 안전하게 연결할 수 있으며, JSON-RPC 2.0의 성숙한 생태계를 활용하여 안정적이고 효율적인 AI 서비스를 구축할 수 있습니다.

반응형