MCP primitive 가 trio 둘로 깔끔히 나뉨. Server 쪽 은 host 가 쓸 capability publish. Client 쪽 은 server 가 요청 가능한 capability publish. 의도적 대칭이고, 어떤 primitive 파고 들기 전에 짚어둘 가치 있어.
| Server feature (server → host) | Client feature (host → server) |
|---|---|
| Resources — host 가 가져올 수 있는 read-only 데이터 | Sampling — server 가 host LLM 한테 자기 대신 생각해달라고 요청 |
| Prompts — user 가 호출 가능한 templated workflow | Roots — server 가 host 한테 어떤 directory/URI 가 scope 안인지 물음 |
| Tools — side effect 있을 수 있는 callable function | Elicitation — server 가 host 한테 user 에게 input 묻게 요청 |
분리가 책임을 명확히 함. Server 는 자기가 소유한 capability 노출; client 는 host 만 fulfill 가능한 capability 노출. Server 는 LLM 못 돌려 (없으니까) — sampling 은 server 가 요청 하는 client capability 여야 함. Client 는 본 적 없는 DB 의 table enumerate 못 함 — resource 는 client 가 fetch 하는 server capability 여야 함.
Trio 분리 외워두고 표는 잊어. 기억할 건 '이 기능 있으면 어디 살아?' 야. Read-only 데이터 → Resource. User 가 호출하는 workflow → Prompt. Side effect 액션 → Tool. Server 가 요청한 LLM 호출 → Sampling. Filesystem 경계 → Roots. User 한테 질문 → Elicitation.