MCP lifecycle
One tool callTool useFunction calling gives the model hands: it asks, and code does the work.Opens in a new tab has three beats, the same as ordering at a restaurant: the menu, the order, the delivery. In MCP terms the client asks what tools exist, asks for one to run, and gets the result back.
The menu
The client sends tools/list and the server answers with each tool’s name, description and inputSchema, a JSON Schema for the arguments. The model reads that and decides what it can order. The menu is not a file on disk. The server answers it on request, and it can change: a server that declares listChanged can notify the client, which then asks again. The file-style version of this idea does exist in A2A, as the Agent Card (see A2A, ACP and AG-UIA2A, ACP and AG-UIThe other three protocols: agent to agent, the one that merged, and agent to user.Opens in a new tab).
The order
POST /mcp HTTP/1.1Content-Type: application/jsonAccept: application/json, text/event-streamMCP-Protocol-Version: 2026-07-28Mcp-Method: tools/callMcp-Name: get_weather { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "get_weather", "arguments": { "city": "Colombo" }, "_meta": { "io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientInfo": { "name": "ExampleClient", "version": "1.0.0" }, "io.modelcontextprotocol/clientCapabilities": {} } }}The order is a POST to the MCP endpoint, carrying a JSON-RPC tools/call with the tool’s name and arguments that match the menu’s schema. The Mcp-Method and Mcp-Name headers repeat what is in the body, so gateways can route without parsing it. The _meta block on every request is covered below.
The delivery
{ "jsonrpc": "2.0", "id": 3, "result": { "resultType": "complete", "content": [{ "type": "text", "text": "Sunny in Colombo" }], "isError": false }}The answer comes back in content. A tool that fails still returns a result, with isError: true, so the model can read the message and retry. A protocol problem, such as an unknown tool, is a JSON-RPC error instead. Between the menu and the order, the host is the place to ask a person to confirm (see human in the loopHuman in the loopA pause in the agent's decision, where a person approves before a high-risk action runs.Opens in a new tab).
Before the first order
Revisions up to 2025-11-25 opened with a handshake: the client sent initialize with its protocol version and capabilities, the server replied, and the client followed with notifications/initialized. Revision 2026-07-28 removed it. Every request now carries its own protocol version and client capabilities in _meta, and an optional server/discover returns the server’s versions, capabilities and identity in one call.
A client that must reach both kinds of server has to detect which one it is talking to, then fall back to initialize for the older kind.
Sources
- Tools, Model Context Protocol specification · accessed October 5, 2026
- Streamable HTTP, Model Context Protocol specification · accessed October 5, 2026
- Versioning and Compatibility, Model Context Protocol specification · accessed October 5, 2026
- Lifecycle (2025-11-25), Model Context Protocol specification · accessed October 5, 2026
- Discovery, Model Context Protocol specification · accessed October 5, 2026