Where a term has a page of its own, the definition links to it.
The protocol
- MCP
- The Model Context Protocol. An agreed shape of JSON-RPC message between an AI application and the services it wants to reach β so ten apps and ten services need twenty integrations rather than a hundred.
- host
- The thing that owns the conversation with the model, wrangles several servers, and runs the loop. Claude Code, Cursor and ChatGPT-with-plugins are all hosts. β
- client
- The piece that speaks to exactly one server. In this series it is hand-written β about 200 lines of
fetch. β - server
- Offers tools and waits. Never initiates. β
- protocol era
- Which revision of MCP a connection is speaking. The legacy era negotiates once at
initialize; the modern era (2026-07-28) is selected per request via a_metaenvelope and has no serverβclient channel. β
The five capabilities
- tool
- A verb. Something to do, which the model decides to invoke. β
- resource
- A noun. Something to read, addressed by URI, which the host decides to show the model.
- prompt
- A saved fill-in-the-blank instruction that a human picks from a menu. An offer, never spliced straight into the model's conversation.
- sampling
- The server asking your host to run a model call. It has no API key and no model β it has yours. β
- elicitation
- The server asking your user a question mid-call. Costs no money; spends attention.
The loop
- agent loop
- Send the conversation and the tool list to the model; append its whole reply; if it asked for a tool, run it, paste the result back, and go again. That is all an agent is. β
- iteration
- One trip around that loop β one full API call with a conversation that is bigger than last time. Capped at 10 throughout this series.
- tool_use / tool_result
- The request block the model emits, and the block you send back. Every
tool_useneeds exactly one matchingtool_resultor the API rejects the whole request β including when the answer is βdeniedβ. β - namespacing
- Rewriting every tool name as
server__toolon the way out, so two servers can both offersecret_code. Split it back apart withindexOf, notsplit. β - local tool
- A tool the host implements itself rather than fetching from a server. Runs with your host's privileges, which makes it a security boundary. β
Safety and oversight
- approval gate
- A host-side list of what needs a human before it runs. Reads arguments, not just tool names, and never reads the server's own
destructiveHint. β - destructiveHint
- An annotation a server can set on its own tool. Genuinely useful for a human skimming a list or a UI picking an icon. Not a permission model, because a server that wants to bypass your gate would simply set it to false.
- default-allow
- Unmatched tools run without asking. Deliberately chosen here, because a gate that prompts about
roll_dicetrains you to click Approve within ninety seconds. β - eval
- A prompt plus a check. Never assert on prose; run each case several times and score a pass rate; include a case where the right answer is calling nothing. β
- replay
- Reading a stored run back from its
trace_eventsrows. No model call, nothing re-executed, nothing charged. β
Delegation
- sub-agent
- A tool that happens to think. The model gets one extra tool whose implementation is the loop that is calling it. β
- orchestrator
- The agent that holds the plan and hires the workers. It receives each worker's forty-second investigation as one paragraph in an ordinary
tool_result, and has no idea an agent produced it. - origin
- Who asked, and why β carried up with a bubbled approval so the human is not rubber-stamping a decision they cannot see. β
- partial_results
- Finished siblings' reports, stored so that approving does not re-run the workers that already completed.
- paused_children
- A frozen worker's entire
messagesarray, without which there is nothing left to say yes to.
Money
- TreeBudget
- One token allowance shared by reference across an agent tree, so βthe whole run stops at 600,000 tokensβ is true rather than approximately true. β
- spend gate
- A ceiling on the estimated cost of a sampling request, per server. Refuses synchronously; a human's grant lands on the next attempt. β
- ledger
- A row for every model call a server asked for β allowed and refused. A ledger with no refusals in it is indistinguishable from a gate that is switched off.
- prompt caching
- A prefix match on the unchanging head of your request. One breakpoint on the system block cut project #2's input cost 47%. Interpolate a timestamp into the prefix and every hit silently becomes a miss. β
- cache read / cache write
- A cache read costs about a tenth of a fresh token; a write costs a little more than one. Report both, because
input_tokensis only what you paid full price for. - input_tokens
- Only the uncached remainder. The real prompt size is
input + cache_creation + cache_read, and forgetting that is how two runs get compared on the wrong number.
The wire
- multi-round-trip
- How sampling and elicitation work in the modern era. Round 1 answers
input_required; the host does the work; round 2 calls the same tool again with the answer. Needs no held-open connection, which is exactly why it replaced the push. β - input_required
- The
resultTypea server returns instead of a result, meaning βI need something from you before I can finish.β - requestState
- An opaque string the server mints and the client echoes back. It travels through a boundary you do not control, so the server must integrity-protect it β the SDK does not. β
- β32020 / β32021 / β32022
- Headers and body disagree Β· a capability was not declared Β· unsupported protocol version. β