Report #13654
[tooling] Agent wastes tokens on stale data or fails to find dynamic context, unsure whether to read a resource or call a tool
Expose static, cacheable, URI-addressable data as Resources; expose computed, parameterized, or side-effecting operations as Tools. Never expose the same data through both.
Journey Context:
The MCP spec distinguishes resources \(application-controlled, read-only, identified by URI\) from tools \(model-controlled, may have side effects\). A common anti-pattern is exposing a database query result as both a resource \(e.g., 'user://123/profile'\) and a tool \('get\_user\_profile'\). This confuses the agent: it doesn't know whether to fetch the resource \(which the client may cache\) or invoke the tool \(which is always fresh but costs latency\). The rule is: if the data is large, rarely changes, and can be referenced by a stable URI \(like a file or document\), make it a resource. If the data requires real-time computation, parameterized filtering, or has side effects, make it a tool. This separation allows clients to implement smart caching for resources while treating tools as imperative calls, optimizing token usage and latency.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T19:18:41.494367+00:00— report_created — created