Model Context Protocol (MCP) 리서치 원본 — 2026-07-25
불변 캡처. 절대 편집하지 마라. 가공본은 위키 페이지에.
조사 방법
검색어
Model Context Protocol specification latest revision 2026 modelcontextprotocol.ioMCP Streamable HTTP transport SSE deprecated specificationMCP official SDK languages TypeScript Python Go Java C# Kotlin Ruby modelcontextprotocol 2026MCP security vulnerabilities tool poisoning prompt injection rug pull line jumping 2026
열어본 URL (WebFetch)
- https://modelcontextprotocol.io/specification/2025-11-25 — 스펙 인덱스(현행 stable)
- https://modelcontextprotocol.io/specification/2025-11-25/basic/transports — 트랜스포트
- https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization — 인증
- https://modelcontextprotocol.io/docs/sdk — 공식 SDK 목록(1차)
- https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/ — 차기 RC
- https://blog.modelcontextprotocol.io/posts/2026-mcp-roadmap/ — 2026 로드맵
- https://en.wikipedia.org/wiki/Model_Context_Protocol — 연혁·채택·보안(2차)
출처 신뢰도 규칙: modelcontextprotocol.io / blog.modelcontextprotocol.io = 1차(공식) = [HIGH]. Wikipedia·벤더 블로그·보안 리서치 집계 = [MED].
확인된 사실 [신뢰도]
스펙 버전 / 리비전
- 현행 stable 리비전 =
2025-11-25[HIGH] (modelcontextprotocol.io/specification/2025-11-25). 리비전은 날짜 문자열로 식별한다. - 스펙은
schema/2025-11-25/schema.ts의 TypeScript 스키마를 authoritative 근거로 삼는다 [HIGH]. - 과거 리비전 계보 (트랜스포트·인증 페이지에서 역참조 확인) [HIGH]:
2024-11-05— 최초 공개 트랜스포트(HTTP+SSE 2-엔드포인트, 지금은 deprecated)2025-03-26— Streamable HTTP 도입, HTTP+SSE 대체 시작. (MCP-Protocol-Version 헤더 없을 때 서버가 가정하는 기본값이기도 함)2025-06-18— (계보상 존재. 인증 정비 시기로 언급되나 이번 캡처에서 개별 페이지 미확인 → 미확인 섹션 참고)2025-11-25— 현행 stable- 차기:
2026-07-28Release Candidate [HIGH] (blog 2026-07-28-release-candidate). "런칭 이후 최대 규모 리비전"으로 표현. 단, RC 날짜/최종일 표기가 자료 간 엇갈림 → 미확인 섹션 참고. - 2026 로드맵 블로그(발행 2026-03-09) 기준 당시 최신 스펙은 2025-11 판, 신규 버전 미출시 [HIGH].
아키텍처 / 역할
- JSON-RPC 2.0 메시지 기반. UTF-8 필수 [HIGH].
- 3역할 [HIGH]:
- Host: 연결을 개시하는 LLM 애플리케이션 (예: IDE, 챗 인터페이스)
- Client: host 안의 커넥터. 서버 1개당 client 1개(1:1)
- Server: 컨텍스트·기능을 제공하는 서비스
- 설계 영감: Language Server Protocol (LSP) [HIGH].
- 2025-11-25 base protocol 특성: stateful 연결, 서버/클라이언트 capability negotiation [HIGH]. (← 2026-07-28 RC 에서 stateless 로 전환 예정, 아래 참고)
Primitive (기능)
서버가 클라이언트에 제공 [HIGH]: - Resources: 컨텍스트·데이터 (사용자 또는 모델이 사용) - Prompts: 템플릿화된 메시지·워크플로 (사용자용) - Tools: 모델이 실행하는 함수
클라이언트가 서버에 제공 [HIGH]: - Sampling: 서버가 개시하는 agentic 동작 / 재귀적 LLM 호출 - Roots: 서버가 동작할 URI·파일시스템 경계 조회 - Elicitation: 서버가 사용자에게 추가 정보를 요청
추가 유틸리티: Configuration, Progress tracking, Cancellation, Error reporting, Logging [HIGH].
트랜스포트
- 표준 트랜스포트 2종:
stdio,Streamable HTTP[HIGH]. 클라이언트는 가능하면 stdio 를 SHOULD 지원. - stdio [HIGH]:
- 클라이언트가 서버를 서브프로세스로 실행. 서버는 stdin 으로 JSON-RPC 읽고 stdout 으로 씀. 메시지는 개행 구분, 메시지 내부 개행 금지.
- 서버는 stdout 에 유효한 MCP 메시지 외 아무것도 쓰면 안 됨(MUST NOT). stderr 는 로깅용 자유. 클라이언트는 stderr 를 에러로 가정하지 말 것.
- Streamable HTTP [HIGH]:
- 2024-11-05 의 HTTP+SSE 트랜스포트를 대체(replaces). HTTP+SSE 는 deprecated 로 명시됨.
- 서버는 단일 HTTP 엔드포인트(MCP endpoint) 하나를 POST·GET 둘 다 지원하게 제공. 예:
https://example.com/mcp. - 클라이언트→서버: 모든 JSON-RPC 메시지는 새 HTTP POST.
Accept헤더에application/json과text/event-stream둘 다 명시(MUST). - JSON-RPC request 입력 시 서버는
text/event-stream(SSE 스트림 개시) 또는application/json(단일 JSON) 중 하나로 응답. 클라이언트는 둘 다 지원(MUST). - notification/response 입력이면 서버는 202 Accepted(본문 없음).
- SSE 는 이제 Streamable HTTP 내부의 선택적 스트리밍 메커니즘으로 흡수됨(별도 트랜스포트 아님). GET 으로 SSE 스트림을 열어 서버→클라이언트 메시지 수신 가능.
- Resumability: SSE 이벤트에
id부여, 재연결 시Last-Event-ID헤더로 재개. 이벤트 ID 는 세션(또는 클라이언트) 내 글로벌 유니크. per-stream 커서. - Session Management: 서버가 초기화 응답에
MCP-Session-Id헤더로 세션ID 부여 가능(MAY). 부여되면 클라이언트는 이후 모든 요청에 그 헤더 포함(MUST). 세션ID 는 암호학적으로 안전한 값(UUID/JWT/해시), visible ASCII(0x21~0x7E)만. - 서버가 세션 종료 후 그 세션ID 요청엔 404. 클라이언트는 404 받으면 세션ID 없는 새 InitializeRequest 로 재시작.
- 클라이언트는 세션 종료 시
HTTP DELETE+MCP-Session-Id로 명시 종료 가능(SHOULD). - Protocol Version Header: HTTP 사용 시 초기화 이후 모든 요청에
MCP-Protocol-Version: 2025-11-25헤더 필수(MUST). 헤더 없고 다른 식별수단 없으면 서버는2025-03-26로 가정(SHOULD). 유효하지 않은 버전이면 400. - 하위호환: 구 HTTP+SSE 서버를 지원하려는 클라이언트는 POST InitializeRequest 먼저 시도 → 400/404/405 실패 시 GET 으로 SSE 열어
endpoint이벤트 오면 구 트랜스포트로 판단. - Custom transports 허용(프로토콜은 transport-agnostic). JSON-RPC 포맷·라이프사이클 보존 필수.
트랜스포트 보안 (스펙 명시)
- 서버는 모든 연결에서
Origin헤더 검증 필수(MUST) — DNS rebinding 공격 방지. 유효치 않으면 403 [HIGH]. - 로컬 실행 시
127.0.0.1(localhost)에만 바인딩 권장(SHOULD),0.0.0.0지양 [HIGH]. - 모든 연결에 인증 구현 권장(SHOULD) [HIGH].
인증 (Authorization) — HTTP 트랜스포트 한정
- Authorization 은 OPTIONAL [HIGH]. HTTP 기반이면 이 스펙 따를 것 SHOULD. stdio 는 이 스펙 따르지 말고 환경(env)에서 자격증명 획득 SHOULD NOT-follow [HIGH].
- 기반 표준(부분집합 채택) [HIGH]:
- OAuth 2.1 (IETF draft-ietf-oauth-v2-1-13)
- RFC 8414 (Authorization Server Metadata)
- RFC 7591 (Dynamic Client Registration) — MAY, 하위호환용
- RFC 9728 (Protected Resource Metadata) — MCP 서버 구현 필수(MUST)
- OAuth Client ID Metadata Documents (CIMD, draft-00)
- 역할: MCP 서버 = OAuth 2.1 resource server, MCP 클라이언트 = OAuth 2.1 client, authorization server 는 별도(리소스서버와 합쳐 있거나 분리 가능) [HIGH].
- 서버는 RFC 9728 Protected Resource Metadata 구현 필수,
authorization_servers필드에 최소 1개 AS 명시 [HIGH]. - 클라이언트는 401 응답의
WWW-Authenticate헤더에서resource_metadataURL 파싱 → 없으면.well-known/oauth-protected-resource프로빙 [HIGH]. - PKCE 필수(MUST),
S256메서드 필수. 서버 메타데이터의code_challenge_methods_supported없으면 클라이언트는 진행 거부(MUST) [HIGH]. - Resource Indicators (RFC 8707) 필수: 클라이언트는 authorization·token 요청 둘 다에
resource파라미터(대상 MCP 서버 canonical URI) 포함 MUST. AS 지원 여부와 무관하게 항상 보냄 [HIGH]. - 토큰 audience 검증 필수: 서버는 자기 앞으로 발급된 토큰만 수락(MUST). audience 안 맞으면 거부 [HIGH].
- 토큰 passthrough 금지(explicitly forbidden): 서버가 받은 토큰을 상류 API 로 그대로 전달 금지. 상류엔 별도 토큰 사용 [HIGH]. → confused deputy 방지.
- 클라이언트 등록 3방식: CIMD(관계 없을 때, 가장 흔함) / Pre-registration(기존 관계) / DCR(RFC7591, 하위호환). 우선순위: pre-registered → CIMD → DCR → 사용자 입력 [HIGH].
- 토큰은 Authorization: Bearer 헤더로, URI 쿼리스트링 금지 [HIGH]. 짧은 수명 권장, public client 는 refresh token 회전 필수 [HIGH].
- Confused Deputy: static client ID 쓰는 프록시 서버는 동적 등록 클라이언트마다 사용자 동의 재획득 필수 [HIGH].
공식 SDK (Tier 시스템) — modelcontextprotocol.io/docs/sdk [HIGH]
| 언어 | 저장소 | Tier |
|---|---|---|
| TypeScript | modelcontextprotocol/typescript-sdk | Tier 1 |
| Python | modelcontextprotocol/python-sdk | Tier 1 |
| C# | modelcontextprotocol/csharp-sdk | Tier 1 |
| Go | modelcontextprotocol/go-sdk | Tier 1 |
| Java | modelcontextprotocol/java-sdk | Tier 2 |
| Rust | modelcontextprotocol/rust-sdk | Tier 2 |
| Swift | modelcontextprotocol/swift-sdk | Tier 3 |
| Ruby | modelcontextprotocol/ruby-sdk | Tier 3 |
| PHP | modelcontextprotocol/php-sdk | Tier 3 |
| Kotlin | modelcontextprotocol/kotlin-sdk | Tier 3 |
| - 모든 SDK 공통: tools/resources/prompts 노출 서버 생성, 아무 MCP 서버에 붙는 클라이언트, 로컬·원격 트랜스포트, 타입세이프 프로토콜 준수 [HIGH]. | ||
| - TS·Python 이 가장 성숙·널리 채택 [MED, 벤더 블로그]. | ||
| - Wikipedia 는 PHP/Perl 도 언급했으나 공식 SDK 페이지에 Perl 없음 → Perl 은 미확인/비공식 [MED conflict]. |
클라이언트 / 채택 현황
- MCP = Anthropic 이 2024년 11월 도입 [MED, Wikipedia]. 창안자 David Soria Parra, Justin Spahr-Summers.
- OpenAI: 2025년 3월 공식 채택, ChatGPT 데스크톱 등에 통합. 2025년 9월 ChatGPT apps 3rd-party 지원 추가 [MED, Wikipedia].
- Google DeepMind: 2025년 4월경 채택 [MED, Wikipedia].
- Microsoft: Semantic Kernel / Azure OpenAI 와 통합 가능 [MED, Wikipedia].
- Salesforce: 2026년 4월 Headless 360 라우팅 시작, 5월 말까지 450만 MCP 호출 처리 [MED, Wikipedia].
- Cloudflare: 원격 MCP 서버 배포 지원 [MED, Wikipedia].
- Claude Code / Claude Desktop 이 대표 host 클라이언트 [HIGH, 일반 상식 + Anthropic 1차이나 이번 캡처에서 개별 URL 미확인 → 아래 미확인].
- 거버넌스: MCP 는 Linux Foundation Projects 산하(LF 자체가 governance 하는 건 아님) [HIGH, roadmap blog].
2026-07-28 Release Candidate 주요 변경 [HIGH, blog]
- Stateless 프로토콜 코어:
initialize/initialized핸드셰이크 제거,Mcp-Session-Id헤더 제거. 표준 라운드로빈 로드밸런서 뒤에서 sticky routing·공유 세션스토어 없이 서버 운영 가능. - Extensions Framework: reverse-DNS 식별자, 독립 버저닝, 별도 SEP 트랙·별도 저장소·위임 메인테이너.
- MCP Apps(신규 extension): 서버 렌더 UI 를 샌드박스 iframe 으로 전달. 툴 UI 템플릿 사전 캐시·보안검토.
- Tasks Extension: 실험적 코어 기능 → extension 으로 이동. stateless 재설계, 클라이언트가 태스크 라이프사이클 구동.
- Authorization Hardening: 6개 SEP 로 OAuth 2.0 / OIDC 정합. RFC 9207 issuer 검증, scope 처리 명확화.
- Deprecation Policy: 정식 라이프사이클(Active → Deprecated → Removed), deprecation~removal 최소 12개월.
- Deprecated(주석만, 메서드는 동작): Roots, Sampling, Logging. 에러코드
-32002→ JSON-RPC 표준-32602로 교체. - 하위호환: 브레이킹 체인지 있음. 2026-07-28 서버는 구 클라이언트와 안 맞을 수 있음(양측이 같은 protocol era 지원 or 폴백/변환 필요).
보안 이슈 (2025~2026 문헌) [MED, 2차 집계·리서치]
- 명명된 공격군: tool poisoning(툴 설명/스키마에 숨긴 지시), rug pull(설치 후 툴 정의 은밀 변경 — day1 안전, day7 키 유출), tool shadowing, cross-server attacks, confused deputy / OAuth 약점, prompt injection / toxic agent flows, lethal trifecta [MED].
- 통계(집계, 검증 어려움): 명령주입 43%, 파일작업 경로순회 취약 82%(2,614개 구현), SSRF 취약 36.7%(7,000+ 서버), 크리티컬 취약 33%(1,000 스캔), 다중서버 감염 시 캐스케이드 72.4% [MED, practical-devsecops 집계 — 인용 주의].
- OWASP 가 2025 중반 첫 "MCP Top 10" 발간 [MED].
- Simon Willison 2025-04: MCP prompt injection 문제 지적 [MED].
- Anthropic 1차 스펙(2025-11-25)도 "tool description·annotation 은 신뢰된 서버 아니면 untrusted 로 취급", "sampling 프롬프트에 대한 서버 가시성 의도적 제한", "모든 툴 호출 전 사용자 명시 동의" 를 Security & Trust 원칙으로 명문화 [HIGH].
엇갈리거나 미확인
- 2026-07-28 RC 날짜 혼선: 블로그 슬러그·검색요약은 "2026-07-28 RC"라 하지만, 블로그 본문 요약 fetch 는 "RC 는 2026-05-21 런칭, 최종 스펙 2026-07-28 예정, 10주 검증창"이라고 함. 즉 2026-07-28 은 RC 게시일이 아니라 최종 릴리스 예정일일 가능성이 높다. 오늘(2026-07-25) 기준 최종 미확정. 위키 페이지엔 "2025-11-25 가 현행 stable, 2026-07-28 판이 곧 확정 예정(RC 단계)"로 쓰는 게 안전.
2025-06-18리비전의 구체 내용은 이번에 개별 페이지를 안 열어봐서 미확인. 인증 스펙이 이 시기 정비됐다는 정황만.- Claude Code / Claude Desktop 의 MCP 지원 상세(설정 방식, 지원 primitive 범위)는 이번 캡처에서 공식 URL 미확인. 일반적으로 지원한다고 알려짐(1차 확인 필요).
- SDK 언어 목록 불일치: 공식 SDK 페이지 = 10개(TS/Py/C#/Go/Java/Rust/Swift/Ruby/PHP/Kotlin). Wikipedia 는 여기에 Perl 추가로 언급 → Perl 공식 SDK 는 공식 페이지에 없음. 공식 페이지를 신뢰.
- 보안 통계 수치(43%, 82%, 72.4% 등)는 단일 집계 블로그(practical-devsecops) 출처로 검증 불가 → 위키에 인용 시 정성적으로만, 수치 인용 지양.
- registry(공식 MCP 서버 레지스트리)는 로드맵에 언급되나 이번에 상세 미확인.
원문 발췌 (핵심)
트랜스포트 (2025-11-25/basic/transports)
"The protocol currently defines two standard transport mechanisms: 1. stdio 2. Streamable HTTP. Clients SHOULD support stdio whenever possible." "This replaces the HTTP+SSE transport from protocol version 2024-11-05." "The server MUST provide a single HTTP endpoint path (hereafter referred to as the MCP endpoint) that supports both POST and GET methods." "Servers MUST validate the
Originheader on all incoming connections to prevent DNS rebinding attacks ... When running locally, servers SHOULD bind only to localhost (127.0.0.1)." "For backwards compatibility, if the server does not receive an MCP-Protocol-Version header ... the server SHOULD assume protocol version 2025-03-26."
인증 (2025-11-25/basic/authorization)
"Authorization is OPTIONAL for MCP implementations. ... Implementations using an STDIO transport SHOULD NOT follow this specification, and instead retrieve credentials from the environment." "MCP servers MUST implement OAuth 2.0 Protected Resource Metadata (RFC9728)." "MCP clients MUST implement Resource Indicators for OAuth 2.0 as defined in RFC 8707 ... MUST be included in both authorization requests and token requests." "The MCP server MUST NOT pass through the token it received from the MCP client." "MCP clients MUST implement PKCE ... MUST use the S256 code challenge method when technically capable."
2026-07-28 RC (blog)
"Stateless Protocol Core - Eliminates the initialize/initialized handshake and Mcp-Session-Id header." "Deprecation Policy - Active → Deprecated → Removed with minimum 12-month windows." "Roots, Sampling, and Logging marked deprecated (annotation-only; methods remain functional). Error code -32002 replaced with JSON-RPC standard -32602."
스펙 인덱스 Security 원칙 (2025-11-25)
"Tools represent arbitrary code execution and must be treated with appropriate caution. In particular, descriptions of tool behavior such as annotations should be considered untrusted, unless obtained from a trusted server." "Hosts must obtain explicit user consent before invoking any tool." "The protocol intentionally limits server visibility into prompts."