Blog / How agents load MCP tools
MCP prompts vs resources vs tools: which ones agents actually see (tested in 5 agent apps)
You wrote a careful MCP prompt that explains your workflow, and a resource with the full guide. The support matrix says the agent app supports both. Then the agent ignores them. Here's why: in our captures, the model never saw a single prompt, and resources only reached it in two apps.
The short answer
An MCP server can send an agent five kinds of thing: server instructions, tools, tool results, prompts and resources. Support matrices tell you which of these an app implements. They don't tell you which ones the model ends up reading, and that's the part that changes what the agent does.
So we checked from the wire. We put a unique marker word in each channel of a test server, connected it to five agent app versions, and searched every model request for each marker.
What reached the model, per agent app
| Channel | Claude Code 2.1.301 | Codex 0.161 | Grok Build 1.0.60 | OpenCode 1.18.34 | OpenCode 2.0.31 |
|---|---|---|---|---|---|
| Server instructions | Yes, in the system prompt, cut at 4,096 chars | Yes, but in front of every tool description, not in the first prompt | Yes, a reminder at session start, cut at ~2,048 chars; once arrived too late | Yes, in full, system prompt | Yes, in full, after the tool catalog |
| Tools | Names first; definitions on search | Searched from code | Searched (BM25) | All loaded | 16 of 99 shown, cheapest first |
| Prompts | No | No | No | No | No |
| Resources | Yes, through list/read tools | Yes | No native access | Listing tools exist, not used | Listing tools exist, not used |
Prompts: built for humans, invisible to the model
Our test server offered one prompt, a short review playbook, with a marker in its description and another in its body. Neither marker appeared in any model request, in any app. That's consistent with the spec: prompts are user-controlled. Apps surface them as slash commands or menu items, and the model only sees the text once a person picks one.
That makes prompts fine for humans and useless for teaching an agent anything. If your workflow guide lives in a prompt, agents never read it.
Resources: only if the model goes looking
Resources are application-controlled data. In Claude Code and Codex the model gets generic tools to list and read them, so it can reach your guide if it decides to look. Grok Build gave it no native way in. OpenCode 1 and 2 exposed listing tools, but the model didn't use them in our runs.
So a resource is a place to keep long reference material that a tool or the instructions can point to. It's not a place for anything the agent must know.
Find where agents fail on your tools. Measure what fixes it.
Bring your MCP server, CLI or API and the jobs your users need done. We run real agents against them, read every call, and hand back measured gaps and fixes.
Instructions: everywhere, but cut or moved
The instructions field from initialize reached the model in all five apps, but not the same way:
- Claude Code puts them in the system prompt and cuts them at 4,096 characters.
- Codex doesn't put them in the first prompt at all. It prepends them to every tool description, so the model sees them only after it searches the tools.
- Grok Build adds them as a reminder at session start, cut at about 2,048 characters. In one of two runs they arrived too late for the model to use.
- OpenCode 1 and 2 include them in full.
A production server we tested sent 5,092 characters of instructions, so Claude Code dropped about 1,000 characters and Grok Build about 3,000. Details and the length to aim for: do agents read MCP server instructions? and how long MCP server instructions should be (coming soon).
Tool results: even here, apps differ
A tool result can carry text content, structuredContent, or both. With a two-marker result (one in each part), the model saw:
| Agent app | What the model saw |
|---|---|
| Claude Code 2.1.301 | structuredContent only |
| OpenCode 1.18.34 | Text content only |
| Codex 0.161, default code mode | Whatever the model's script printed; printing the raw result included both parts, then got truncated |
So a server that sends both pays twice on the wire but not in the model's context. The catch is the opposite: if one part is a summary and the other has the details, some apps show the model only the summary. Make each part complete, or send one. More in tool results and errors for agents.
Where to put what agents need
| Knowledge | Put it in |
|---|---|
| What the product is, when to use this server, rules that must never be missed | Server instructions, first lines, under 2,000 characters |
| Step-by-step playbooks per job | A start-here get_instructions(job) tool |
| What a field means | The description of the tool that returns it |
| What to do next | Hints in tool results |
| The right path after a mistake | Error messages |
| Long reference material | A resource, pointed to from a tool |
| Shortcuts for human users | Prompts |
The start-here tool is the piece we measured most: with a short hint, Claude Code and Codex called it first in 24 of 24 runs each on a mock server. See make the agent read your playbook first.
Go deeper: How agent apps load MCP tools, Onboard agents through your MCP server, 5 ways to optimise your MCP tools.
How we measured
- Server: a local stub serving a production server's recorded list of 99 tools, plus one prompt and one resource. Each channel carried its own marker word: the instructions, the prompt description, the prompt body, the resource description, the resource body, tool descriptions and tool results. The server declared the tools, prompts and resources capabilities.
- Apps: Claude Code 2.1.301, Codex 0.161, Grok Build 1.0.60, OpenCode 1.18.34 and OpenCode 2.0.31, each making real model calls.
- Capture: model traffic was recorded through a temporary intercepting proxy scoped to the agent's own process, and every model request was searched for each marker. A channel counts as visible if its marker appeared in a model request.
- Tool-result test: a separate two-marker server put one marker in
contentand another instructuredContent. The Codex row comes from its transcript and source code. - Limits: one version per app, captured on 16 Oct 2026, so re-check after updates. The Grok timing issue showed up in 1 of 2 runs, which says it can happen, not how often. Cursor and VS Code weren't tested.
More on the method in how to measure MCP server quality.
Sources
- Spirit Room marker-word captures, 16 Oct 2026.
- MCP specification: server features (prompts user-controlled, resources application-controlled, tools model-controlled).
- MCP clients and supported features, the declared-support view.
- Claude Code MCP documentation.
FAQ
Do AI agents use MCP prompts?
Not on their own. In our captures of Claude Code, Codex, Grok Build and OpenCode 1 and 2, no prompt description or body reached the model. Prompts are designed to be user-controlled, surfaced as slash commands, so the model only sees one if a person invokes it.
Do AI agents read MCP resources?
Sometimes. In Claude Code and Codex the model can list and read resources through built-in tools, if it decides to. Grok Build had no native access, and OpenCode had listing tools that the model didn't use in our runs. Don't put anything an agent must know only in a resource.
What is the difference between MCP tools, resources and prompts?
In the MCP spec, tools are model-controlled actions, resources are application-controlled data addressed by URI, and prompts are user-controlled templates. In practice, for agents, only tools and the server instructions reliably reach the model.
Where should I put instructions for AI agents in an MCP server?
In the server instructions (short, under 2,000 characters, most important first), in tool descriptions (essential meaning in the first line), and in tool results and errors (what to do next). A start-here tool that returns a playbook per job also works: see our 24-of-24 test.
Does Claude Code see the text content or the structuredContent of a tool result?
In our capture of Claude Code 2.1.301, when a result had both, the model saw only structuredContent. OpenCode 1.18.34 showed only the text content. Make each part complete on its own, or send one.
Find where agents fail on your tools. Measure what fixes it.
Bring your MCP server, CLI or API and the jobs your users need done. We run real agents against them, read every call, and hand back measured gaps and fixes.