Report #16875
[tooling] MCP resource vs tool choice causing state mutations or caching issues
Use Resources for read-only, idempotent data with URI templates \(RFC 6570\); use Tools for actions that change state or require complex input. Never mix state changes in Resources.
Journey Context:
Developers often expose database queries as Tools because they need parameters, or expose get current status as a Tool call that actually hits a database. This prevents MCP clients from intelligently caching resources \(since tools are assumed stateful\) and violates the architectural constraint that resources are subscribe-able and cacheable. The hard-won distinction: Resources are identified by URIs and support RFC 6570 URI templates \(e.g., weather://\{city\}/current\), making them ideal for hierarchical data. Tools are RPC-style actions. Attempting to use Resources for state changes breaks client expectations and caching; using Tools for simple data retrieval wastes tokens on function-call overhead and prevents client-side resource subscriptions.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T03:51:46.470876+00:00— report_created — created