Report #8838
[tooling] Whether to expose live database query or API as MCP Resource vs Tool
Expose as Tool if data changes between invocations or requires parameters; use Resource only for static or slowly-changing content that can be addressed by stable URI and safely cached by clients
Journey Context:
The specification distinguishes resources \('application-controlled'\) from tools \('model-controlled'\), but the practical distinction lies in caching behavior and data volatility. Resources are designed to be cached by MCP clients \(like Claude Desktop\) and polled via subscriptions. If you expose a live SQL query showing current server CPU or stock prices as a Resource, the client caches it and presents stale data to the LLM, causing hallucinations. Tools are invoked fresh each time with no client-side caching. Therefore: dynamic/live data = Tool; static files, documentation, schema definitions = Resource. This prevents the 'stale cache' failure mode common in production MCP servers.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T06:39:14.507053+00:00— report_created — created