:)
[MCP] Introduction to Model Context Protocol 본문
Introduction to Model Context Protocol (MCP)
문제점
- 기존 LLM은 학습 데이터에 의존해 최신 정보를 반영하지 못함. 날씨, 환율처럼 실시간 변화에는 제대로 대응하지 못하는 문제.
해결책: MCP
- Model Context Protocol은 LLM이 외부 도구나 실시간 데이터에 접근할 수 있도록 연결 인터페이스 역할 → 결과적으로 LLM의 실용성, 정확성 향상
Key Concepts and Terminology
- 기존 방식(M×N): 각 모델, 툴마다 전부 따로 연결해야 함 → 연결 개수가 너무 많아짐
- MCP 방식(M+N): 모델은 MCP 한 번만 연결하고, 툴도 MCP만 연결 → 모든 연결이 하나의 표준으로 통합됨
단일 모델과 tool 간의 개별 연결

⇒ 모델이 Database, Filesystem, Calculator에 직접 연결되어 있음. 각 툴마다 다른 방식의 API로 연결하고 있어서 각각 고유한 API로 연결되어야 함. 여기서는 툴이 3개뿐이지만, 이 모델이 다른 툴과도 연결하려면 그때마다 새로운 방식으로 또 연결해야 함 → 유지보수 어려움
여러 모델 ↔ 여러 툴 연결

⇒ 이렇게 연결이 늘어나면: 각각 인터페이스도 다르고 개발/테스트/유지보수가 매우 복잡해짐. 툴 하나만 바꿔도 3개 모델 다 수정해야 함

⇒MCP라는 표준 허브만 연결하면 다양한 도구를 통합적으로 사용할 수 있게 됨
MCP 도입 후 M+N 구조

⇒ 표준 인터페이스(MCP)를 중간에 둠. Model 2 → MCP만 연결. Database / Filesystem / Calculator → MCP 서버로만 연결
⇒ M×N 방식 → M+N 구조로 단순화
Components

| Host | 사용자가 직접 상호작용하는 앱 |
| Client | Host 내부에서 MCP Server와 메시지를 주고받는 중계자 역할 |
| Server | 외부 도구/데이터/서비스를 MCP 프로토콜로 제공하는 프로그램 |
⇒ Host와 Client는 종종 혼용되지만 Host ⊃ Client 관계
구성 요소

1. Host
- 사용자와 상호작용하는 메인 애플리케이션. 전체 박스는 "Host". 안에는 Client가 2개.
- 예시) Claude, Cursor
2. Client
- 각각의 Client는 하나의 MCP Server와 연결되어있음.
- Client는 MCP 프로토콜에 따라 요청을 만들고, 서버와 데이터를 주고받음.
3. Server
- Server는 실제 외부 도구(ex: 날씨 API, 계산기, 파일시스템 등)를 MCP 프로토콜을 통해 제공하는 역할.
- 그림 속에서는 두 개의 MCP Server가 각각 하나의 Tool을 감싸고 있음.
메시지 전달 방식

| → Request | 클라이언트가 서버에 작업을 요청할 때 |
| ← Response | 서버가 응답할 때 |
| ← Notification | 서버가 응답 없이 클라이언트에게 알림을 보낼 때 |
MCP는 모든 메시지를 JSON-RPC 2.0 형식으로 주고받음. 읽기 쉽고, 언어에 상관없이 쓸 수 있는 표준 메시지 형식.
- MCP 메시지 전송 방식
- stdio: 표준 입출력 방식 (Client와 Server가 같은 컴퓨터에서 동작할 때)
- HTTP + SSE (Server-Sent Events): Client와 Server가 다른 컴퓨터에서 동작할 때 HTTP 요청으로 시작 → SSE로 실시간 알림/스트리밍
MCP 제공 기능
MCP 서버가 외부 기능을 AI 모델에게 제공하는 네 가지 방식
| Capability | 제어 | 방향 | 사용자 승인 | 주용도 |
| Tools | 모델(LLM) | Client → Server | 필요 | 메시지 전송, API 호출 등 실행형 기능 |
| Resources | 애플리케이션 | Client → Server | 필요 X | 문서 읽기, DB 조회 등 정보 제공 |
| Prompts | 사용자 | Server → Client | 필요 X | 작업 유도 템플릿 제공 |
| Sampling | 서버 | Server → Client → Server | 필요 | LLM에게 추가 처리 요청 (에이전트 행동) |
1. Tools: LLM이 직접 "행동"을 요청할 수 있는 기능들
2. Resources: AI가 읽기 전용 정보를 불러올 수 있는 기능들
3. Prompts: 사용자 UI에서 선택 가능한 작업 템플릿
4. Sampling: 서버가 클라이언트에게 “LLM을 호출해달라”고 요청
예시) LLM이 “날씨 알려줘”라고 판단하면 → MCP Client가 tools/call을 서버에 보내고 결과를 받아서 LLM이 사용자에게 알려줌
def get_weather(location: str) -> dict:
return {
"temperature": 72,
"conditions": "Sunny"
}
MCP SDK, Clients
- MCP SDKPython SDK 예시: FastMCP
- MCP 서버를 쉽게 만드는 공식 개발 도구
- MCP Clients구성: mcp.json 파일로 서버 연결 방식 지정 (stdio, sse)
- Host 안에 존재하며, MCP 서버와 통신을 중계
Recap
- MCP는 AI와 외부 툴을 연결하는 표준 인터페이스
- 주요 구성 요소: Host / Client / Server
- 메시지 방식: JSON-RPC (Request, Response, Notification)
- 기능 유형: Tool / Resource / Prompt / Sampling
- 적용: Gradio로 서버 구현 + Client 연결
'AI' 카테고리의 다른 글
| [LLM] LLM Fine-tuning: Unsloth 개요 (1) | 2025.10.04 |
|---|---|
| [Gen AI] Stable Diffusion (0) | 2025.09.07 |
| [BE] ElasticSearch 개념 정리 (0) | 2025.02.07 |
| [CV] YOLO v3 (0) | 2025.02.07 |
| [Gen AI] Diffusion-based Video Generative Models (2) | 2025.01.09 |