MCP 의 Tool 은 어떤 provider tool-calling API 의 tool 과 동일해 보임: name, description, input schema. Resource 와 핵심 차이는 tool 이 일을 함 — 세상에 side effect 있을 수 있어. Protocol 이 이걸 — 각 tool description 의 optional annotation (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) — 으로 인정하고, host 가 user 에게 승인 요청할 때 surface 가능.
Flow: client tool list → host 가 LLM tool list 에 통합 → LLM 이 tool call emit → host 가 server tools/call → server 실행하고 구조화된 result 반환 → host 가 LLM 에 result 다시 → LLM 이 더 부르거나 끝냄. Server 는 인자 검증, retry 시 idempotency, 구조화된 error 반환 책임; host 는 user 한테 destructive 의도 surface 책임.
한 가지 미묘함: tool 결과는 단순 문자열이 아니라 구조화된 content. Result 는 text, image, audio, resource 참조일 수 있는 content item list. Tool 이 chart image + text summary 동시 반환하거나 host 가 read 할 resource URI list 반환 가능. Tool result 를 monomorphic string 으로 다루면 capability 버리는 거.