버전 규약 (Versioning)¶
MCP는 프로토콜 버전을 YYYY-MM-DD 형식의 문자열 식별자로 다뤄요. 이 값은 하위 호환이 깨지는(backwards incompatible) 변경이 마지막으로 이뤄진 날짜를 가리킵니다.
프로토콜에 변경이 생겨도 하위 호환성을 유지하는 한 버전 번호는 올라가지 않아요. 덕분에 상호 운용성을 지키면서도 점진적인 개선이 가능하죠.
개정 (Revisions)¶
개정본은 다음 세 가지 상태로 표시될 수 있어요.
- Draft(초안): 진행 중인 스펙으로, 아직 실제 사용할 준비가 되지 않은 상태예요.
- Current(현재): 현재 프로토콜 버전으로, 바로 사용할 수 있고 하위 호환 변경은 계속 받을 수 있어요.
- Final(확정): 과거의 완성된 스펙으로, 더 이상 변경되지 않아요.
현재 프로토콜 버전은 2026-07-28이에요.
기능 상태 (Feature States)¶
스펙의 개별 기능에는 기능 수명주기 및 폐기 정책에 따라 Deprecated(폐기 예정) 표시가 추가될 수 있어요. 해당 기능은 여전히 스펙의 일부로 남지만, 제거가 예정되어 있다는 뜻이죠. 폐기된 기능은 마이그레이션 경로(또는 필요 없다는 명시)를 문서화하며, 정책의 신속 제거 예외에 따라 최소 12개월, 또는 최소 90일 동안 스펙에 남아 있어야 제거 대상이 될 수 있어요. 이후 미래의 개정에서 Removed(제거) 상태가 될 수 있습니다. 현재 폐기된 기능들은 폐기 기능 레지스트리에서 확인할 수 있어요.
협상 (Negotiation)¶
모든 요청은 자신이 사용하는 프로토콜 버전을 _meta 필드의 io.modelcontextprotocol/protocolVersion 키에 선언하고, 서버는 각 요청을 독립적으로 수락하거나 거부해요. Streamable HTTP에서는 같은 값이 MCP-Protocol-Version 헤더에도 실려 전달됩니다. 클라이언트와 서버는 여러 프로토콜 버전을 동시에 지원할 수 있어요(MAY).
서버가 요청된 버전을 지원하지 않으면, 지원하는 버전들을 나열한 UnsupportedProtocolVersionError로 응답해요. 그러면 클라이언트는 서로 지원하는 버전으로 요청을 다시 보내거나, 공통 버전이 없으면 사용자에게 오류를 보여주면 됩니다.
버전을 미리 골라두고 싶은 클라이언트는 server/discover를 호출할 수 있어요. 이건 필수 RPC로, 서버가 지원하는 프로토콜 버전·능력(capabilities)·신원을 한 번의 요청에 담아 돌려줍니다. 호출은 선택사항이에요 — 클라이언트가 바로 요청을 보내고, 버전 오류가 오면 처리하는 방식도 자유롭습니다.
핸드셰이크 기반 프로토콜 개정(2025-11-25 및 이전)을 구현한 서버·클라이언트와의 상호 운용이 필요하면 하위 호환성을 참고하세요.