JSON-RPC란?

고동수·2025년 3월 26일

MCP

목록 보기
4/5

JSON-RPC는 JSON(JavaScript Object Notation) 포맷을 사용하는 원격 프로시저 호출(Remote Procedure Call) 프로토콜입니다.

즉, 클라이언트가 서버에게 "이 함수 호출해줘"라고 JSON 메시지로 요청을 보내는 규격입니다.


왜 JSON-RPC를 쓰나요?

  • 가볍고 단순함: XML 필요 없음, JSON만 사용
  • 양방향 통신 지원: Client → Server 뿐 아니라 Server → Client도 가능
  • 표준화된 구조: method, params, id 등 정해진 필드로 구성됨
  • 네트워크 전송 독립: HTTP, WebSocket, stdin/stdout 등 다양한 전송 방식 사용 가능

기본 메시지 형식

1. Request (요청 메시지)

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "add",
  "params": {
    "a": 3,
    "b": 5
  }
}
필드설명
jsonrpc버전 (무조건 "2.0")
id요청 고유 ID (응답 매칭용)
method호출할 함수 이름
params함수에 전달할 인자 (object or array)

2. Response (응답 메시지)

성공 시:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": 8
}

에러 시:

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32601,
    "message": "Method not found"
  }
}
필드설명
result함수 실행 결과
error에러 코드, 메시지, 추가 정보

resulterror는 동시에 존재할 수 없습니다.


3. Notification (알림 메시지)

{
  "jsonrpc": "2.0",
  "method": "ping",
  "params": { "time": "now" }
}
  • id 없음 → 응답도 없음
  • 단순 알림 or 이벤트 전송용

JSON-RPC는 어떻게 동작하나요?

  1. 클라이언트가 서버에게 methodparams를 포함한 JSON 메시지를 보냄
  2. 서버는 해당 메서드를 실행하고 result 또는 error로 응답
  3. id를 기준으로 응답을 원래 요청과 매칭

Claude MCP에서의 JSON-RPC 활용

Claude MCP에서는:

  • Claude가 MCP 서버에게 initialize, listFiles, readFile 같은 메서드를 호출
  • 메시지는 전부 JSON-RPC 2.0 포맷
  • 연결은 stdio, HTTP, 또는 커스텀 transport로 수행됨

예:

{
  "jsonrpc": "2.0",
  "id": 7,
  "method": "getFileList",
  "params": {
    "path": "/Documents"
  }
}

보안 이슈는?

JSON-RPC 자체는 보안 기능이 없습니다.
→ 암호화/인증은 별도로 Transport 계층에서 처리해야 함 (예: HTTPS, 인증 토큰 등)


정리 요약

항목설명
프로토콜JSON 기반 RPC
주요 메시지request, response, notification
장점경량, 명확한 구조, 다양한 transport 지원
Claude MCP전면적으로 JSON-RPC 2.0 사용

0개의 댓글