MCP 아키텍처 — 호스트·클라이언트·서버와 두 계층
MCP 아키텍처
MCP는 클라이언트-서버 구조를 따르는데, 실제 참여자는 세 가지예요. AI 애플리케이션이 '호스트'가 되고, 호스트가 각 서버마다 '클라이언트'를 하나씩 만들어 연결하는 방식이에요.
참여자
- MCP Host — 하나 이상의 MCP 클라이언트를 조정·관리하는 AI 애플리케이션 (예: Visual Studio Code)
- MCP Client — MCP 서버에 연결을 유지하고, 호스트가 쓸 컨텍스트를 가져오는 구성 요소
- MCP Server — 클라이언트에 컨텍스트를 제공하는 프로그램
각 클라이언트는 특정 서버와 일대일 전용 연결을 유지해요.
두 계층
MCP는 데이터 계층과 전송 계층, 두 개의 계층으로 구성돼요.
- Data layer — JSON-RPC 기반 클라이언트-서버 통신 프로토콜. 연결 수명주기 관리와 tools·resources·prompts·notifications 같은 핵심 프리미티브를 정의해요.
- Transport layer — 실제 통신 채널. 연결 수립, 메시지 프레이밍, 인증을 다뤄요.
개념적으로 데이터 계층이 안쪽, 전송 계층이 바깥쪽이에요. MCP는 Streamable HTTP와 stdio 두 가지 전송 방식을 지원해요.
설계 원칙
- 서버는 아주 쉽게 만들 수 있어야 — 복잡한 오케스트레이션은 호스트가, 서버는 구체적·특정 기능에 집중
- 서버는 조합성이 높아야 — 각 서버는 필요한 컨텍스트만 받고, 교차 서버 상호작용은 호스트가 통제
- 기능은 점진적으로 추가 — 핵심은 최소 기능만, 추가 능력은 필요할 때 협상(negotiation)
능력 협상
MCP는 능력 기반 협상(capability negotiation)을 써요. 클라이언트와 서버가 요청마다 지원하는 기능을 서로 선언해서 그 합의된 범위 안에서만 통신해요. 상태 없는(stateless) 프로토콜이라 모든 요청이 프로토콜 버전과 능력을 스스로 담고 있어요.