Report #76594
[tooling] When should I expose data as an MCP resource vs a tool?
Use Resources with URI templates \(like \`database://\{table\}/schema\`\) for large, static, or subscription-worthy data that the LLM reads but doesn't modify; use Tools for actions, parameterized queries, and mutations. Resources support native caching and subscription updates; Tools support progressive UI and cancellation.
Journey Context:
Teams often expose database schemas as Tools that return JSON, but this bloats the context window on every call and can't be cached. The spec distinguishes Resources \(nouns\) from Tools \(verbs\). Resources use URI templates \(RFC 6570\) allowing the client to fetch only what it needs \(e.g., \`file:///project/src/main.py\`\) and supports \`resources/subscribe\` for live updates. Tools are for side effects and ephemeral computations. If the data is >1KB and rarely changes, make it a Resource; if it's an action or needs arguments, make it a Tool.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T11:09:03.652483+00:00— report_created — created