MCP — Model Context Protocol
MCP — Model Context Protocol
Model Context Protocol (MCP) 은 LLM 클라이언트가 외부 데이터·도구·프롬프트와 표준화된 방식으로 연결하기 위한 프로토콜입니다. Anthropic 이 2024 년 11 월에 공개했고 이후 다른 AI 도구·IDE 가 빠르게 채택했습니다.
1. MCP 에 대한 이야기
MCP 는 Anthropic 이 2024 년 11 월 25 일 공개한 오픈 프로토콜입니다. 공식 사이트는 modelcontextprotocol.io, 명세·SDK 는 github.com/modelcontextprotocol 조직. 같은 외부 서비스에 대해 클라이언트마다 다른 통합을 만들지 않도록 표준화하려는 시도가 출발점.
비교 비유로 자주 쓰이는 표현이 "USB-C 같은 인터페이스" — AI 클라이언트 측 한 번의 통합으로 여러 서버에 붙고, 서버 측 한 번의 구현으로 여러 클라이언트에서 쓰일 수 있다는 의미.
2. 구성 요소
| 역할 | 의미 |
|---|---|
| Host | LLM 을 실제로 띄우는 응용프로그램 (Claude Desktop · Cursor). |
| Client | Host 안에서 한 서버와 1:1 로 연결을 유지하는 컴포넌트. |
| Server | 자원·도구·프롬프트를 노출하는 외부 프로세스. |
한 Host 가 여러 Client 를 가질 수 있고, 각 Client 는 한 Server 와 연결.
3. JSON-RPC 2.0 기반
MCP 메시지는 JSON-RPC 2.0 명세를 따릅니다. 요청·응답·통지 (notification) 의 세 가지 메시지 형식, 표준화된 필드 (id · method · params · result · error).
핸드셰이크 흐름:
Client → initialize (프로토콜 버전 · 역량)
Server → initializeResult (지원 기능)
Client → notifications/initialized
…이후 정상 요청·응답 교환
4. 3 대 Primitive
MCP 는 서버가 호스트에게 노출할 수 있는 세 종류의 원시 자원을 정의합니다.
Resources — 읽기 전용 데이터 (파일 · DB row · 문서). URI 로 식별하고 resources/list · resources/read 로 가져옵니다. 모델이 컨텍스트에 직접 넣을 수 있는 자료.
Tools — 호출 가능한 함수. JSON Schema 로 입력 형식을 선언하고 모델이 호출 인자를 생성하면 호스트가 tools/call 로 실행. 부수 효과 (파일 쓰기 · API 호출) 를 포함.
Prompts — 재사용 가능한 프롬프트 템플릿. 인자를 받아 메시지 시퀀스를 만듭니다. 워크플로 단축키.
| Primitive | 통제권 | 메모 |
|---|---|---|
| Resources | 애플리케이션 | 컨텍스트로 어떻게 쓸지 호스트가 결정. |
| Tools | 모델 | 모델이 호출 결정, 호스트가 승인·실행. |
| Prompts | 사용자 | 사람이 명시적으로 선택. |
호스트도 서버에게 sampling (LLM 에 다시 묻기) · roots (접근 가능한 파일 루트) 같은 기능을 제공할 수 있습니다.
5. 트랜스포트
| 트랜스포트 | 위치 | 메모 |
|---|---|---|
| STDIO | 로컬 프로세스 간 | 서버를 자식 프로세스로 띄우고 stdin/stdout 으로 JSON-RPC. |
| Streamable HTTP | 원격 | HTTP + 서버측 스트리밍. 2025 년 도입돼 옛 SSE 방식 점차 대체. |
옛 명세에서는 별도의 SSE 트랜스포트가 있었으나 이후 Streamable HTTP 로 통합됐습니다. 트랜스포트가 달라도 메시지 형식은 같습니다.
6. 다른 길들
MCP 가 자리 잡기 전부터 도구 호출은 다음 모양으로 다뤄지고 있었습니다:
- 함수 호출 — OpenAI · Anthropic · Google 의 모델별 형식. 표준이 다름.
- OpenAPI / REST — 일반 HTTP API 를 LLM 에 직접 연결.
- LangChain Tools — 라이브러리 측 추상화.
- 플러그인 (ChatGPT plugin, 종료) — 단일 호스트 종속.
MCP 는 이 자리 위에 호스트 중립적 표준을 더하려는 시도.
7. 서버 등록 · SDK
대부분의 MCP 클라이언트는 mcp.json 또는 mcpServers 섹션을 통해 서버를 등록합니다.
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
}
}
}
공식 SDK — TypeScript · Python · Java · C# · Go · Rust · Kotlin · Swift. 서버 작성은 보통 수십 줄에서 시작 (도구 정의 + 핸들러 + 실행 진입점).
modelcontextprotocol/servers 저장소에 다양한 레퍼런스 서버 (파일시스템 · git · Postgres · SQLite · fetch · time).
8. 보안 모델
사용자 동의 — 명세는 동의 (consent) 와 통제 (control) 를 강하게 강조. 호스트는 도구 호출·자원 접근에 사용자 승인 인터페이스를 제공해야 하고, 모델 출력만 보고 무조건 실행해서는 안 된다는 권고.
격리 — 서버는 보통 별도 프로세스 (STDIO) 또는 별도 호스트 (HTTP) 에 격리. 서버 자체의 권한·시스템 접근 범위는 호스트와 분리.
인증 — 원격 트랜스포트의 인증은 OAuth 2.0 등 표준 방식. 명세 갱신을 그때그때 확인.
알려진 위협:
- 신뢰되지 않은 서버가 악의적 도구·데이터를 노출할 가능성.
- 도구 결과 안에 숨은 프롬프트 인젝션.
- 환경 변수·자격증명을 서버에 그대로 전달.
- 너무 광범위한 파일시스템 권한.
호스트 측의 권한 화면 · 서버 화이트리스트 · 도구 별 승인이 보완 장치.
9. 자주 걸리는 자리
버전 호환 — 명세가 활발히 바뀌고 있습니다. 호스트·서버·SDK 의 프로토콜 버전이 어긋나면 일부 기능이 동작하지 않을 수 있음.
STDIO 와 환경 변수 — STDIO 서버는 호스트가 시키는 환경에서 켜집니다. 자격증명 전달·로그 위치를 잘 설계.
도구 결과의 인젝션 — 외부 도구가 반환한 텍스트 안에 모델 지시가 숨어 있을 수 있습니다. 호스트의 시스템 프롬프트에 신뢰 경계 명시.
너무 많은 도구 — 컨텍스트가 도구 정의로 가득 차면 모델 성능이 떨어집니다. 작업별 서버 묶음.
HTTP 인증·CORS — 원격 서버는 평범한 웹 보안 이슈가 그대로 적용.
로깅·관측 — JSON-RPC 메시지를 그대로 로그에 남기면 민감 정보가 흘러나갈 수 있음.
에러 경계 — 서버가 죽으면 클라이언트가 매끄럽게 재연결하도록 설계.
하고픈 말
MCP 는 LLM 클라이언트와 외부 도구의 표준 인터페이스로 빠르게 자리 잡고 있습니다. USB-C 비유처럼 한 번의 통합으로 여러 호스트에서 쓰일 수 있다는 점이 매력입니다. 명세가 활발히 바뀌므로 호스트·서버·SDK 의 프로토콜 버전 호환을 운영의 첫 점검 항목으로.
Next
- mcp-clients
- mcp-context7
Model Context Protocol · MCP Specification · MCP GitHub · Anthropic — Introducing MCP (2024-11) · 공식 서버 모음 · TypeScript SDK · Python SDK 를 참고합니다.