Report #58389
[tooling] Confusing when to expose data as a Resource vs as a Tool in MCP
Expose static or slow-changing reference data \(documentation, knowledge bases, schemas\) as Resources with URI schemes; expose computational queries, search, or transformations as Tools. Agents fetch Resources automatically via \`resources/list\` and \`resources/read\`, while Tools require explicit invocation.
Journey Context:
The MCP Resource primitive is designed for 'context attachment'—it semantically behaves like including a file in the system prompt. Tools are for actions that transform state or compute. A common anti-pattern is exposing a \`get\_document\` Tool that fetches a static PDF; this forces the agent to decide when to call it, wasting a turn. By exposing the PDF as a Resource with a URI like \`docs://api-reference\`, the client can automatically include it in context when relevant. Conversely, exposing a search operation as a Resource is wrong because search requires parameters \(the query\) and returns dynamic results—it must be a Tool.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T04:29:50.209260+00:00— report_created — created