Complete the key fields in a tools/list tool object and a tools/call request
A tools/list tool carries name, description, and inputSchema; a tools/call request sends name plus arguments and gets back a content array with optional isError.
Think of a restaurant menu. Each dish has a name, a short description so you know what it is, and a list of choices you can customize, like spice level or sides. That menu is what tools/list returns: every tool's name, its description, and its inputSchema describing valid options. When you order, you don't recite the whole menu. You just say the dish name plus your choices, which is exactly what tools/call sends: name and arguments. The kitchen then hands back your plate, the content array, and if something went wrong it tells you, the isError flag. The menu lets you browse; the order form lets you act.
Detailed answer & concept explanation~7 min readEverything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example.
Everything important, quickly.
4 min: discovery vs invocation split, the three list fields, the two call fields, the content array result, and the isError versus JSON-RPC error contract.
| Aspect | tools/list | tools/call |
|---|---|---|
| Direction | Host asks, server answers | Host invokes, server runs |
| Key fields | name, description, inputSchema | name, arguments |
| Returns | Array of tool descriptors | content array (+ optional isError) |
| When called | Once at discovery time | Every time the model picks a tool |
| Failure signal | JSON-RPC error if not supported | isError true inside the result |
Real products, models, and research that use this idea.
- Claude Code calls `tools/list` on every configured MCP server at session start, then maps each descriptor into an Anthropic tool definition.
- The official filesystem MCP server publishes tools like `read_file` with an `inputSchema` requiring a `path` string argument.
- The mcp-inspector debugging tool shows raw `tools/list` and `tools/call` JSON-RPC traffic, including the `content` array and `isError` flag.
What an interviewer would ask next. Try answering before peeking at the approach.
QWhy does MCP put tool execution failures in the result via isError instead of the JSON-RPC error channel?
QHow does a host map an MCP tool descriptor onto a specific model's function-calling format?
Don't say thisRed flags and common mistakes that signal junior thinking. Click to expand.
Red flags and common mistakes that signal junior thinking. Click to expand.
Confusing the list shape with the call shape. tools/list returns descriptors; tools/call sends only name plus arguments, then receives a content array.
The night-before-the-interview bullets. Scan these on the way to the call.
Primary sources. Skim if you want the original framing.
Same topic, related formats. Practice these next.