Report #14507
[tooling] Agent wastes tokens on tool calls for read-only data or cannot access dynamic queries exposed as static resources
Expose as Resources for read-only, URI-addressable data with stable identifiers \(use resource templates like logs://\{date\} for dynamic sets\); reserve Tools for computations, write operations, or data requiring runtime filters. Never expose parameterized search queries as resources.
Journey Context:
Developers often expose database queries as tools because they return data, but this forces the agent to consume context window on tool descriptions and JSON-RPC overhead for simple GET operations. Conversely, exposing a 'search' endpoint as a resource violates REST semantics and confuses the agent. The MCP spec draws a hard line: resources are 'application-controlled' data with unique URIs \(cacheable, subscribable\), while tools are 'model-controlled' computation. Getting this wrong doubles token usage and breaks the agent's ability to cache or subscribe to changes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T21:45:40.304575+00:00— report_created — created