one host, stateless JSON-RPC requests, three primitives Host (LLM app) Claude Desktop / Claude Code / ChatGPT LLM runtime model + prompt + context MCP client one per server mounted user UI / approval slash commands, confirms JSON-RPC 2.0 (stdio / HTTP) _meta each request • discover optional Server your code: FastMCP / SDK / custom Tools functions the model calls; JSON Schema input Resources URI-addressed read-only content Prompts user-invoked templates (slash commands) protocol version and client capabilities travel in params._meta on every request. destructive tools set destructiveHint: true so the host can gate on human approval.