How do you give an AI agent tools? (MCP vs direct API)
Giving an agent a tool means handing the model a name, a description, and a JSON Schema for the arguments, then executing whatever it calls. MCP standardizes that list behind a `tools/list` endpoint so one connection works across clients. Either way the model still just picks a name and fills in a schema.
What a tool actually is
A tool is three things: a name, a description, and a JSON Schema for its arguments. That triple goes into the model's context. The model emits a tool_use block naming the tool and filling in the arguments, your runtime executes the call, and the result returns as a tool_result block on the next turn. The model never touches the network itself.
Hand-rolled definitions or MCP
A hand-rolled tool lives in your own code: you write the schema, you write the handler. An MCP server moves that list behind a JSON-RPC endpoint. The client calls tools/list at connect time, gets back the same name plus description plus inputSchema triple, then calls tools/call to run one. MCP buys runtime discovery, a notifications/tools/list_changed signal when the tool set changes, and auth kept outside the model's context. It does not change how the model picks a tool. That mechanism is identical either way.
The cost nobody budgets for
Tool definitions are prompt tokens, billed on every turn. Anthropic's tool-use system prompt costs 286 tokens on Claude Opus 5 before you define anything, and engineers on Hacker News report the GitHub MCP server eating roughly 50,000 tokens just to load. Anthropic's own write-up cut one agent from 150,000 tokens to 2,000 by having it write code against MCP servers instead of calling each tool directly. Connect four servers and accuracy usually drops, because the tool list crowds out the task. Start with 5-10 tools you can justify one by one, and add a discovery layer only after you outgrow that.
Last updated: May 20, 2026