Skip to content

Model Context Protocol(MCP) JSON-RPC 사양 분석과 도구 오케스트레이션

1. 개요 및 연구 배경

대형 언어 모델(LLM)이 독자적인 애플리케이션에 갇히지 않고 실제 데이터베이스 조회, 파일 시스템 조작, 외부 API 호출, 브라우저 자동화 등 실제 비즈니스 작업을 수행하기 위해서는 도구 호출(Tool Calling) 표준 인터페이스가 필수적입니다.

기존의 독자적 Function Calling 방식은 각 LLM 제공자(OpenAI, Anthropic, Google)마다 스키마가 상이하여 벤더 종속성을 유발했습니다. Model Context Protocol(MCP)은 클라이언트와 도구 서버 간의 통신 규격을 JSON-RPC 2.0 기반으로 표준화하여, 에이전트가 단일한 방식으로 다양한 엔터프라이즈 리소스와 도구를 탐색하고 호출할 수 있도록 지원합니다.


2. MCP 아키텍처 및 3대 핵심 프리미티브

MCP 사양은 세 가지 주요 프리미티브를 정의합니다:

  1. Tools (실행 도구):
    • 클라이언트(에이전트)가 매개변수를 전달하여 부수 효과(Side-Effect)를 일으키는 호출 가능한 인터페이스입니다.
    • 예: run_playwright_test, create_database_table, crawl_page.
  2. Resources (리소스):
    • 파일, 데이터베이스 스키마, 로그 스트림 등 읽기 전용 컨텍스트 데이터를 제공합니다.
    • URI 스킴(file://, postgres://, sync://) 기반으로 접근합니다.
  3. Prompts (프롬프트 템플릿):
    • 사용자와 에이전트 간의 상호작용을 유도하는 재사용 가능한 워크플로우 템플릿입니다.

3. JSON-RPC 2.0 프로토콜 메시지 흐름

도구 목록 조회 (tools/list)

클라이언트가 서버가 지원하는 도구와 JSON Schema 매개변수 규격을 질의합니다.

json
// Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}

// Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "run_regression_test",
        "description": "지정된 시나리오 ID에 대해 Playwright E2E 회귀 테스트를 실행합니다.",
        "inputSchema": {
          "type": "object",
          "properties": {
            "scenarioId": { "type": "string" },
            "headless": { "type": "boolean", "default": true }
          },
          "required": ["scenarioId"]
        }
      }
    ]
  }
}

도구 실행 요청 (tools/call)

json
// Request
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "run_regression_test",
    "arguments": {
      "scenarioId": "scn-checkout-flow",
      "headless": true
    }
  }
}

// Response
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "테스트 통과: 12개 스텝 중 12개 성공 (0건 오류, 소요시간 2.4s)"
      }
    ],
    "isError": false
  }
}

4. 트랜스포트 레이어 비교: Stdio vs HTTP SSE

MCP는 두 가지 표준 트랜스포트를 규정하고 있습니다.

비교 항목Stdio (표준 입출력)HTTP with SSE (Server-Sent Events)
동작 환경단일 머신 로컬 프로세스 간 통신분산 네트워크 및 컨테이너 환경
적용 사례SyncEta 데스크톱 내부 Playwright 프로세스 제어SyncVerse 중앙 관제탑과 원격 도메인 에이전트 연동
통신 프로토콜stdin/stdout 파이프HTTP POST (요청) + SSE (단방향 스트리밍)
보안 및 인증OS 사용자 프로세스 권한 격리Bearer JWT, mTLS, IP 화이트리스트
확장성로컬 머신 자원에 한정로드밸런서 기반 수평적 스케일 아웃 가능

5. SyncSeries 멀티 에이전트 오케스트레이션 적용

SyncVerse 관제탑은 MCP를 통해 도메인 에이전트(SyncBoot, SyncCMS, SyncEta)를 오케스트레이션하며 다음과 같은 엔터프라이즈 패턴을 내재화했습니다:

  1. 도구 레지스트리 동적 탐색: 각 도메인 에이전트 기동 시 SyncVerse 게이트웨이에 MCP 엔드포인트를 등록하고, 가용 도구를 동적으로 수집하여 LLM 시스템 프롬프트에 주입합니다.
  2. Human-in-the-Loop (HITL) 사전 승인 게이트: 데이터베이스 스키마 변경, 결제 데이터 수정, 프로덕션 배포 등 위험도가 높은 도구 호출의 경우 즉시 실행하지 않고 status: WAITING_APPROVAL 상태로 전환하여 관리자 승인을 대기합니다.
  3. Saga 보상 트랜잭션 연동: 다단계 워크플로우(예: API 스키마 생성 ➔ CMS 배포 ➔ E2E 테스트) 중 특정 단계 실패 시, 이전 단계의 보상 도구(rollback_schema, unpublish_cms)를 순서대로 역실행하여 데이터 정합성을 보장합니다.