Home / 에이전트 프로토콜 / MCP 프로토콜
Note

MCP 프로토콜

클라이언트/서버 아키텍처, Streamable HTTP, FastMCP, 보안

⏱ 40분 119 / 189

MCP 프로토콜

클라이언트/서버 아키텍처, Streamable HTTP, FastMCP, 보안

연결의 표준화

에이전트 ↔ 도구, 에이전트 ↔ 에이전트, 에이전트 ↔ 사용자

MCP

Tools · Resources · Prompts — 에이전트의 손과 눈

PART 2 · MCP

MCP

에이전트가 도구를 호출하고 데이터를 읽는 표준 — Host·Client·Server 3계층

Host · Client · Server

JSON-RPC 2.0 위에서 3계층 구조가 도구·데이터·템플릿을 표준 인터페이스로 연결합니다.

  • 3계층 아키텍처 — Host · Client · Server
  • 3가지 Primitive — Tools · Resources · Prompts
  • 전송 2종 — stdio(로컬) · Streamable HTTP(원격)
  • FastMCP — 데코레이터로 서버 구현
takeaway

아키텍처 → Primitive → 전송 → 코드 순으로 내려갑니다 — 서버 하나를 만들면 모든 MCP 클라이언트가 같은 도구를 씁니다.

개정 예고 — 2026-07-28 대규모 스펙 개정 최종화 예정(RC 공개): 프로토콜 stateless화 · Tasks 정식 확장 · Roots/Sampling/Logging 단계적 폐기(12개월 유예). 본문 서술은 현행 스펙(2025-11-25) 기준이며 확정 시 반영 예정입니다.

PART 2 · MCP

MCP 아키텍처

Host → Client → Server 3계층 구조 — JSON-RPC 2.0 위에서 동작

  1. 1
    Host
    • AI 애플리케이션 (Kiro, Claude Code, Cursor 등)
    • 사용자의 요청을 받아 Client에 전달
    • 모델 추론과 UI를 담당
  2. 2
    Client
    • Host 안에서 MCP 서버와 1:1 연결 유지
    • JSON-RPC 요청을 서버에 전송
    • 도구 목록 조회 (tools/list) + 도구 실행 (tools/call)
  3. 3
    Server
    • 3가지 Primitive를 노출하는 프로세스
    • Tools: 모델이 호출할 수 있는 함수
    • Resources: 모델이 읽을 수 있는 데이터
    • Prompts: 재사용 가능한 템플릿
  4. 4
    외부 시스템
    • API, DB, 파일시스템, SaaS 등
    • Server가 래핑하여 표준 인터페이스 제공
    • 에이전트는 외부 시스템 구현을 모름
takeaway

에이전트는 외부 시스템 구현을 모른 채 Server가 노출한 표준 인터페이스만 호출합니다 — 이 계층 분리가 N×M 문제를 끊는 지점입니다.

PART 2 · MCP

3가지 Primitive

MCP 서버가 노출하는 3종류의 능력 — 도구·데이터·템플릿

Tools (도구)

모델이 호출할 수 있는 함수 — 부작용(side-effect) 가능
예: 이메일 전송, DB 쿼리, 파일 생성

Resources (데이터)

모델이 읽을 수 있는 정적/동적 데이터
예: 파일 내용, DB 레코드, API 응답

Prompts (템플릿)

사전 정의된 프롬프트 템플릿
예: 코드 리뷰 프롬프트, 번역 프롬프트

takeaway

Tools만 부작용이 가능하고 Resources는 읽기 전용, Prompts는 사용자가 선택합니다 — 제어 주체(model·application·user)가 세 Primitive를 가르는 기준입니다.

PART 2 · MCP

전송 방식

로컬(stdio)과 원격(Streamable HTTP) — 환경에 맞게 선택

stdio

로컬 프로세스

  • CLI 프로세스를 stdin/stdout으로 통신
  • 인증 불필요 — 로컬 프로세스 권한 상속
  • 개발 환경에 최적 (설치 즉시 사용)
  • uvx, npx로 MCP 서버 바로 실행

로컬 개발 환경에서 MCP 서버를 가장 빠르게 시작하는 방법입니다. IDE(Kiro, Cursor)가 서버 프로세스를 직접 실행합니다.

Streamable HTTP

원격 서버

  • HTTP 엔드포인트로 연결 — 팀 공유 가능
  • OAuth 2.1 인증 지원
  • AgentCore Gateway로 관리형 배포
  • SSE(deprecated) → Streamable HTTP로 전환

프로덕션 환경에서 여러 클라이언트가 동일 MCP 서버에 접속합니다. 인증·관측·스케일링을 Gateway가 관리합니다.

takeaway

개발은 stdio로 즉시 시작하고, 팀 공유·프로덕션은 OAuth 2.1 인증이 가능한 Streamable HTTP로 전환합니다.

PART 2 · MCP

MCP 서버 코드

FastMCP로 3줄이면 완성되는 MCP 서버

python
from mcp.server.fastmcp import FastMCP

# 서버 생성 — 이름이 클라이언트에 노출됩니다
mcp = FastMCP("weather-server")

# 도구 등록 — 데코레이터만 붙이면 함수가 Tool이 됩니다
@mcp.tool()
def get_weather(city: str) -> str:
    """도시의 현재 날씨를 조회합니다."""
    # 외부 API 호출
    return f"{city}: 맑음, 24°C"

@mcp.resource("config://settings")
def get_settings() -> str:
    """서버 설정을 반환합니다."""
    return '{"unit": "celsius", "lang": "ko"}'

# 실행 — streamable-http로 원격 클라이언트 접속 허용
if __name__ == "__main__":
    mcp.run(transport="streamable-http")
도구는 MCP로, 에이전트는 A2A로, 사용자는 AG-UI로 연결합니다.

각 프로토콜의 역할을 구분하면 아키텍처가 명확해집니다.