https://www.claudemcp.com/docs/protocol 의 내용을 번역 및 정리했습니다
모든 메시지는 JSON-RPC 2.0 포맷을 따르며, LLM과 외부 자원 간의 안정적이고 명확한 통신을 가능하게 합니다.
→ JSON-RPC 정리
MCP는 총 3가지 메시지 타입을 정의합니다:
| 메시지 종류 | 설명 |
|---|---|
request | 요청 메시지 (Client → Server or Server → Client) |
response | 응답 메시지 (request에 대한 응답) |
notification | 알림 메시지 (단방향, 응답 없음) |
{
"jsonrpc": "2.0",
"id": "123",
"method": "getData",
"params": {
"type": "file"
}
}
id: 필수 (중복 불가), 문자열 또는 숫자 method: 실행할 메서드 params: 선택 (요청 인자){
"jsonrpc": "2.0",
"id": "123",
"result": {
"data": "example"
}
}
또는 에러 발생 시:
{
"jsonrpc": "2.0",
"id": "123",
"error": {
"code": 400,
"message": "Invalid request"
}
}
id: 요청과 동일해야 함 result 또는 error 중 하나만 포함 
{
"jsonrpc": "2.0",
"method": "log",
"params": {
"level": "info",
"message": "Server started"
}
}
id 없음 MCP는 세 단계를 가진 명확한 세션 구조를 가집니다:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {
"roots": { "listChanged": true },
"sampling": {}
},
"clientInfo": {
"name": "MyClient",
"version": "1.0.0"
}
}
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"logging": {},
"prompts": { "listChanged": true },
"resources": { "subscribe": true },
"tools": { "listChanged": true }
},
"serverInfo": {
"name": "MyServer",
"version": "1.0.0"
}
}
}
{
"jsonrpc": "2.0",
"method": "initialized"
}
MCP는 2가지 전송 방식을 공식 지원합니다:
특징
필요한 엔드포인트
1. SSE endpoint (서버 → 클라이언트)
2. HTTP POST endpoint (클라이언트 → 서버)
단, MCP 명세의 세션 흐름과 메시지 형식을 반드시 준수해야 함
| 항목 | 설명 |
|---|---|
| 프로토콜 기반 | JSON-RPC 2.0 |
| 메시지 유형 | request / response / notification |
| 세션 단계 | initialize → operate → close |
| 통신 방식 | stdio / HTTP(SSE) / 커스텀 가능 |
| 기능 협상 | capabilities 필드 사용 |