---
title: MCP Prompts vs Resources vs Tools: What Agents Actually See
description: Support matrices say which MCP features an app supports. We captured what reaches the model: prompts in 0 of 5 apps, resources in 2, instructions in all 5.
canonical: https://spiritroom.app/blog/mcp-prompts-resources-tools-which-agents-use/
published: 2026-10-21
updated: 2026-10-21
---

> Markdown version of https://spiritroom.app/blog/mcp-prompts-resources-tools-which-agents-use/ for agents. Index: /llms.txt

[Blog](/blog/) / [How agents load MCP tools](/guides/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.

Leonid Bugaev · Published 21 Oct 2026

**TL;DR**

- **Prompts reached the model in 0 of 5 agent apps.** They're slash commands for the human. The model never saw the prompt's description or body unless a user invoked it.
- **Resources reached the model only in Claude Code and Codex**, and only if the model chose to list and read them. Grok Build had no native access; OpenCode had listing tools it didn't use.
- **Server instructions reached the model in all 5**, but cut (Claude Code at 4,096 characters, Grok Build at about 2,048) or moved (Codex puts them in front of every tool description).
- **Tools are the channel that always works.** Put what agents need in instructions, tool descriptions and tool results, not prompts.
- **Even tool results differ:** Claude Code showed the model only `structuredContent`, OpenCode 1 only the text `content`.
[The short answer](#short-answer)[What reached the model, per app](#matrix)[Prompts](#prompts)[Resources](#resources)[Instructions](#instructions)[Tool results](#results)[Where to put agent knowledge](#where-to-put)[How we measured](#how-we-measured)[FAQ](#faq)

## 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

Model-visible MCP channels, captured 16 Oct 2026

| 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 |

Server instructions

*5 of 5 (cut or moved in 3)*

Tools

*5 of 5*

Resources

*2 of 5*

Prompts

*0 of 5*

## 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.

[Test your MCP →](/#contact)

## 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?](/blog/do-agents-read-mcp-server-instructions/) and [how long MCP server instructions should be](/blog/mcp-server-instructions-length/).

## 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:

Which part of a CallToolResult reached the model, 16 Oct 2026

| 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](/guides/tool-results-and-errors-for-agents/).

## Where to put what agents need

A home for each kind of agent knowledge

| 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](/blog/get-instructions-first-24-of-24/).

**Go deeper:** [How agent apps load MCP tools](/guides/how-agents-load-mcp-tools/), [Onboard agents through your MCP server](/guides/onboard-agents-through-mcp/), [How to optimise your MCP tools](/blog/optimise-mcp-tools-for-agents/).

## 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 `content` and another in `structuredContent`. 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](/blog/measure-mcp-server-quality/).

## Sources

- Spirit Room marker-word captures, 16 Oct 2026.
- [MCP specification: server features](https://modelcontextprotocol.io/specification/2025-06-18/server) (prompts user-controlled, resources application-controlled, tools model-controlled).
- [MCP clients and supported features](https://modelcontextprotocol.io/clients), the declared-support view.
- [Claude Code MCP documentation](https://code.claude.com/docs/en/mcp).

## 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.

[Test your MCP →](/#contact)

## Keep reading

- Up[How agent apps load MCP tools: what the model sees (guide)](/guides/how-agents-load-mcp-tools/)
- Related[Do AI agents read your MCP server instructions? Tested in Claude Code, Codex, Grok and OpenCode](/blog/do-agents-read-mcp-server-instructions/)
- Related[Make the agent read your playbook first: 24 of 24 runs in Claude Code and Codex](/blog/get-instructions-first-24-of-24/)
- Related[How to onboard AI agents through your MCP server (guide)](/guides/onboard-agents-through-mcp/)
