MCP 의 구조는 삼각형이야. 역할 셋, 책임 셋, 그리고 누가 누구한테 말을 걸 수 있는지에 대한 엄격한 규칙.
- Host — user 가 실제로 손에 쥐고 쓰는 application 이야. Claude Desktop, Copilot 을 얹은 VS Code, Cursor, 직접 만든 비서. UX 를 소유하고, LLM 을 (또는 그 API 호출을) 굴리고, tool 을 써도 되는지 user 한테 묻는 보안 판단까지 책임져.
- Client — host 안에서 server 하나와 MCP 로 말을 주고받는 코드 조각이야. MCP server 세 개를 쓰는 host 라면 client 도 세 개. Server 하나에 client 하나로 붙고, 여러 개를 묶어 돌려쓰지 않아.
- Server — client 한테 tool 과 resource, prompt 를 내주는 별도 프로세스 (또는 원격 서비스) 야. 날씨 server, GitHub server, Postgres server. Server 들은 서로의 존재를 몰라. 각자 자기 client 하고만 말해.
규칙은 엄격해. Server 는 다른 server 한테 절대 말을 걸지 않고, host 를 직접 건드리지도 않아. Server 를 가로지르는 일은 전부 host 를 거쳐. 일부러 그렇게 만든 거야. 덕분에 server 하나가 터져도 그 여파가 갇혀 있거든 — 악의적이거나 버그투성이인 server 가 할 수 있는 최악이라고 해봐야 자기 host 한테만 못되게 구는 거야. 보안 경계가 곧 host 고, 그 경계를 topology 자체가 강제해.
여기서 두 가지가 따라 나와. 첫째, capability 를 조합하는 건 host 의 일 이야. User 가 'Postgres 에서 user 찾아서 요약을 Slack 에 올려줘' 라고 하면, host 가 Postgres server 에 한 번, Slack server 에 한 번 호출을 넣고 순서를 잡아. 두 server 는 서로를 모른 채로 있어. 둘째, 권한은 server 마다 따로 야. GitHub server 에 '코드 읽기' 를 허락했다고 filesystem server 까지 같은 권한을 얻는 게 아니고, 반대도 마찬가지야. 삼각형 자체가 신뢰 모델인 셈이지.