MCP란?

2025. 8. 4. 04:15·Study/MCP
반응형

회사에서 MCP를 사용한 큰 시스템 구축에 참여할 것 같아서,

같이 작업을 하게 될 한 분과 같이 우선 MCP 스터디를 만들어서 진행해 보기로 했다.

 

막상 시작하려니 뭘 할까.. 하다가 우선 뭐라도 만들어보기로 했다.

뭐라도 만들어 보려니, MCP의 동작 원리에 대해 이론적으로 아는 게 없어서 주제도 못 정하는 상황.

그래서 우선 MCP에 대해 이론적인 부분부터 공부해 보려고 한다.


MCP 정의

MCP: Model Context Protocol: 2024년 11월 Anthropic이 발표
LLM 기반 AI 애플리케이션과 외부와의 통합을 표준화 하는 프로토콜

  • AI와 외부 데이터 간의 USB-C 포트 역할 담당
  • JSON-RPC 2.0 기반

MCP 구성 요소

  • Host: Claude Desktop, Cursor IDE, Claude Code, …
  • Client: 호스트 내부의 프로토콜 커넥터, 서버와 1:1 상태유지 연결
  • Server: 특정 기능을 MCP 인터페이스로 노출하는 프로그램

MCP 핵심 설계 원칙

  • Protocol-agnostic
    • 특정 전송 프로토콜(HTTP, WebSocket 등)에 종속되지 않아 다양한 통신 방식 위에서 동작할 수 있다.
  • Stateful Connections
    • 상태 기반으로, LLM과 서버 간 맥락을 지속적으로 유지 가능
  • Capability-based negotiation
    • LLM과 MCP가 서로 제공하는 기능들에서, 필요한 기능을 협상하여 사용 가능한 기능을 동적으로 결정한다.
  • Modular Design
    • 각 구성요소 (Server, Client, Tool, Authority, etc)가 독립적으로 설계되어 확장, 교체, 테스트에 용이

JSON-RPC 2.0 기반 메시지 시스템

  • Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "weather",
    "arguments": {"location": "서울"}
  }
}
  • Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {"temperature": "22°C", "humidity": "65%"},
}

// OR

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Invalid params"
  }
}
  • Notification
{
  "jsonrpc": "2.0",
  "method": "initialized",
  "params": {}
}

MCP의 3단계 생명주기 관리

  1. Initialization
    • 프로토콜 버전 협상, capability 교환이 이루어짐
    • 클라이언트가 initialize 요청 → 서버는 자신의 capabilities와 정보로 응답. 버전 협상 완료됨
  2. Operation
    • 클라이언트가 initialized 알림을 전송한 후 시작
    • 협상됨 capabilities에 따른 메시지 교환이 이루어짐
  3. Shutdown
    • 연결의 Graceful Termintation

클라이언트는 initialize 응답 전까지 ping 외 다른 요청을 금지하며,
서버는 initialized 알림 전까지 ping과 logging 외 다른 요청을 금지한다.

MCP의 핵심 구성 요소

  1. Tools (Model-controlled)
    • LLM이 제어하는 함수
    • 외부 시스템과의 상호작용 담당
  2. Resources (Application-controlled)
    • 애플리케이션이 제어하는 데이터
    • LLM에게 추가 context를 제공하는 읽기 전용 인터페이스
  3. Prompts (User-controlled)
    • 사용자가 제어하는 템플릿

Tool이란?

LLM이 특정 기능을 수행할 수 있도록 해주는 함수형 인터페이스

MCP 서버는 LLM이 호출 가능한 함수들을 노출한다.

(e.g. DB 조회, 외부 API 호출, 파일 시스템 탐색, …)

각 tool은 name, description, inputSchema, outputSchema 등의 metadata로 정의되며,

이를 통해 모델은 해당 tool에 대해 이해하게 된다.

  • Tool의 구성 요소
구성 요소 설명
name tool을 유일하게 식별하는 식별자
title 사람에게 보여줄 수 있는 읽기 쉬운 이름 (optional)
description tool의 기능을 설명하는 문장
inputSchema JSON Schema 형식으로 입력 매개변수를 정의
outputSchema (optional) 예상되는 출력 구조를 정의
annotations 추가적 설명이나 행위 관련 메타정보 (예: audience, priority)

이러한 tool을 통해 LLM이 외부 시스템과 통신하거나, 특정 작업을 위한 맞춤형 기능을 수행할 수 있게 된다.

TypeScript 기반 타입 안정성

MCP는 TypeScript 스키마를 SOT로 사용하여 타입 안정성을 보장한다.

schema.ts에 정의된 인터페이스들은 JSON Schema로도 자동 생성된다.


Reference

https://modelcontextprotocol.io/specification/2025-06-18

https://www.claudemcp.com/specification

https://www.philschmid.de/mcp-introduction

반응형

'Study > MCP' 카테고리의 다른 글

MCP를 통한 LLM의 행동 유도  (2) 2025.08.04
'Study/MCP' 카테고리의 다른 글
  • MCP를 통한 LLM의 행동 유도
g-hyeong
g-hyeong
  • g-hyeong
    Ghyeong
    g-hyeong
  • 전체
    오늘
    어제
  • 인기 글

    • 전체보기 (4)
      • Productivity (1)
        • Task Managemant (1)
        • AI utilization (0)
      • Projects (0)
      • Study (2)
        • MCP (2)
      • Personal (1)
  • 반응형
  • hELLO· Designed By정상우.v4.10.4
g-hyeong
MCP란?
상단으로

티스토리툴바