본문 바로가기
C.W.K.
Stream
Lesson 01 of 05 · published

6 Primitive 지도

~18 min · primitives, overview, server-side, client-side

Level 0호기심 많은 독자
0 XP0/48 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

MCP 의 primitive 는 셋씩 두 묶음으로 깔끔하게 갈려. Server 쪽 은 host 가 갖다 쓸 capability 를 내놓고, client 쪽 은 server 가 부탁할 수 있는 capability 를 내놔. 일부러 대칭으로 만든 거고, 개별 primitive 를 파기 전에 한 번 짚어둘 값을 해.

Server feature (server → host)Client feature (host → server)
Resources — host 가 가져다 읽는 읽기 전용 데이터Sampling — server 가 host 의 LLM 한테 대신 생각해달라고 부탁
Prompts — user 가 불러 쓰는, 틀이 잡힌 workflowRoots — server 가 host 한테 어디까지가 자기 영역인지 물음
Tools — side effect 가 있을 수 있는, 부를 수 있는 함수Elicitation — server 가 host 를 통해 user 한테 입력을 받음

이렇게 갈라놓으면 책임이 또렷해져. Server 는 자기가 가진 것 을 내놓고, client 는 host 만 해줄 수 있는 것 을 내놓아. Server 한테는 LLM 이 없으니까 sampling 은 server 가 부탁하는 client capability 여야 하고, client 는 본 적도 없는 DB 의 table 을 훑을 수 없으니까 resource 는 client 가 가져가는 server capability 여야 하는 거지.

Trio 두 묶음만 기억하고 표는 잊어버려도 돼. 남길 건 '이 기능은 어디에 사는가' 라는 질문 하나야. 읽기 전용 데이터면 Resource, user 가 부르는 workflow 면 Prompt, side effect 가 있는 동작이면 Tool, server 가 부탁하는 LLM 호출이면 Sampling, filesystem 경계면 Roots, user 한테 던지는 질문이면 Elicitation.

Code

Capability 광고 — 양쪽 다·json
// Server capability (server 가 제공)
{
  "tools":     { "listChanged": true },
  "resources": { "listChanged": true, "subscribe": true },
  "prompts":   { "listChanged": true }
}

// Client capability (server 가 host 한테 요청 가능)
{
  "sampling":    {},
  "roots":       { "listChanged": true },
  "elicitation": {}
}

External links

Exercise

가상의 'project-manager' MCP server 가 내놓을 만한 capability 를 다섯 개 적어봐. 각각이 여섯 primitive 중 어디에 속하는지 정해. 재미있는 건 애매한 것들이야 ('처리 안 된 작업 목록' 은 Resource 일까 Tool 일까?). 각각을 한 문장으로 변호해봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.