| [Glossary] MCP 완벽 정리 | Model Context Protocol을 쉽게 이해하는 법 |
한 줄 요약: MCP(Model Context Protocol)란, AI 모델이 외부 도구·리소스·데이터 소스에 표준화된 방식으로 접근할 수 있도록 Anthropic이 설계한 오픈 프로토콜이다.
1. MCP란 무엇인가?
스마트폰 충전기를 생각해 보세요. USB-C 표준이 생기기 전에는 제조사마다 다른 단자를 사용해 충전기가 호환되지 않았습니다. AI 에이전트도 비슷한 문제를 겪었습니다. 각 AI 서비스가 각 도구(파일 시스템, 데이터베이스, API)에 맞춤형 연결 코드를 따로 작성해야 했기 때문입니다.
MCP(Model Context Protocol)는 이 문제를 해결하는 AI 세계의 USB-C입니다. 2024년 Anthropic이 오픈소스로 공개한 이 프로토콜은 AI 모델과 외부 도구 사이에 표준 인터페이스를 제공합니다.
공식 정의 (Anthropic, 2024):
“MCP is an open protocol that standardizes how applications provide context to LLMs.”
2. 핵심 개념 이해하기
MCP는 클라이언트-서버 아키텍처를 따릅니다.
┌─────────────────────────────────────────┐
│ MCP Host (Claude 등) │
│ ┌──────────────┐ ┌──────────────────┐ │
│ │ MCP Client │ │ MCP Client │ │
│ └──────┬───────┘ └────────┬─────────┘ │
└─────────┼────────────────────┼───────────┘
│ JSON-RPC 2.0 │
┌─────▼──────┐ ┌──────▼──────┐
│ MCP Server │ │ MCP Server │
│ (파일시스템)│ │ (GitHub API)│
└────────────┘ └─────────────┘
MCP가 제공하는 세 가지 기본 요소
| 요소 | 설명 | 예시 |
|---|---|---|
| Resources | 모델이 읽을 수 있는 데이터 | 파일 내용, DB 레코드 |
| Tools | 모델이 실행할 수 있는 함수 | 파일 쓰기, API 호출 |
| Prompts | 재사용 가능한 프롬프트 템플릿 | 코드 리뷰 템플릿 |
통신 방식
MCP는 JSON-RPC 2.0 기반으로 동작하며 두 가지 전송 방식을 지원합니다:
- stdio: 로컬 프로세스 간 통신 (CLI 도구에 적합)
- HTTP+SSE: 원격 서버와의 통신 (웹 서비스에 적합)
3. 실무 적용 예시
Python으로 간단한 MCP 서버를 구현하는 예시입니다.
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp import types
app = Server("my-file-server")
@app.list_resources()
async def list_resources() -> list[types.Resource]:
return [
types.Resource(
uri="file:///workspace/notes.txt",
name="작업 노트",
description="현재 작업 중인 메모 파일",
mimeType="text/plain"
)
]
@app.read_resource()
async def read_resource(uri: str) -> str:
if uri == "file:///workspace/notes.txt":
with open("/workspace/notes.txt", "r") as f:
return f.read()
raise ValueError(f"Unknown resource: {uri}")
@app.list_tools()
async def list_tools() -> list[types.Tool]:
return [
types.Tool(
name="write_note",
description="노트 파일에 내용을 추가합니다",
inputSchema={
"type": "object",
"properties": {
"content": {"type": "string", "description": "추가할 내용"}
},
"required": ["content"]
}
)
]
@app.call_tool()
async def call_tool(name: str, arguments: dict) -> list[types.TextContent]:
if name == "write_note":
with open("/workspace/notes.txt", "a") as f:
f.write(arguments["content"] + "\n")
return [types.TextContent(type="text", text="노트에 추가했습니다.")]
async def main():
async with stdio_server() as (read_stream, write_stream):
await app.run(read_stream, write_stream, app.create_initialization_options())
if __name__ == "__main__":
import asyncio
asyncio.run(main())
Claude Desktop의 claude_desktop_config.json에 등록:
{
"mcpServers": {
"my-file-server": {
"command": "python",
"args": ["/path/to/server.py"]
}
}
}
4. MCP vs 유사 개념 비교
| 구분 | MCP | 일반 API | 플러그인 |
|---|---|---|---|
| 표준화 | ✅ 오픈 프로토콜 | ❌ 각자 다름 | ❌ 플랫폼 종속 |
| AI 최적화 | ✅ 컨텍스트 인식 | ❌ 범용 설계 | 부분적 |
| 양방향 통신 | ✅ 지원 | 제한적 | 제한적 |
| 재사용성 | ✅ 어떤 MCP 호스트도 사용 가능 | ❌ 서비스별 통합 필요 | ❌ 특정 플랫폼만 |
| 오픈소스 | ✅ | 혼합 | 혼합 |
5. 마치며
MCP는 AI 에이전트 생태계에서 표준 인터페이스 레이어 역할을 합니다. 한 번 MCP 서버를 만들면 Claude, Cursor, Zed 등 MCP를 지원하는 모든 AI 호스트에서 재사용할 수 있습니다. 이어서 MCP 서버(MCP Server), 툴 콜링(Tool Calling), 에이전틱 AI(Agentic AI)를 함께 학습하면 MCP 생태계 전체를 이해할 수 있습니다.
참고 자료
- MCP 공식 문서 — Anthropic 공식 MCP 소개 및 사양
- MCP GitHub 저장소 — 오픈소스 MCP 서버 컬렉션
함께 읽으면 좋은 용어
이 개념과 함께 알아두면 이해가 깊어지는 관련 용어들입니다.
댓글 남기기