Report #75332
[gotcha] Using MCP resources when tools are needed or vice versa — wrong abstraction loses protocol features
Use MCP resources for data the model reads \(file contents, static records, URI-addressable data\). Use MCP tools for actions that change state or require complex computation \(writing files, executing queries, API calls with side effects\). If you need parameterized data access, use resource templates \(URI templates\) rather than tools. If the operation has side effects, always use a tool.
Journey Context:
MCP defines two distinct primitives: resources \(data sources identified by URIs, read via resources/read\) and tools \(model-invoked actions with structured parameters\). A common mistake is exposing a 'read\_file' tool when the file should be a resource, or exposing a 'query\_database' resource when the query requires complex parameters and has side effects. Resources support subscriptions \(resource change notifications\) and are indexed by URI; tools support progress notifications and structured error reporting. Using the wrong primitive means losing the protocol features designed for that use case. Resources are also cached differently by clients — treating a mutating operation as a resource leads to stale cached results being served.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T09:02:30.934681+00:00— report_created — created