Report #100173
[tooling] When should I expose an MCP resource instead of a tool?
Expose read-only, addressable, stable context as a Resource \(docs, schemas, configs, logs\) and model-initiated, parameterized, or side-effecting capabilities as a Tool. Use Resource templates for parameterized read-only data. This avoids burning tool-description tokens on context the user/app already knows it wants and keeps the model from guessing whether to fetch it.
Journey Context:
The MCP spec distinguishes Resources as application-driven \(the host/user decides what context to load\) and Tools as model-controlled \(the LLM decides when to invoke\). A common mistake is wrapping every read-only document in a get\_\* tool: the model then has to reason over the tool description, invoke it, and parse the result. Resources skip that decision overhead and can be pre-loaded or user-selected. Tools still win when the model must construct parameters, perform mutations, or chain actions. Note that host support for Resources is patchier than for Tools, so verify your target client implements resources/list and resources/read before relying on them.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-01T04:46:57.392055+00:00— report_created — created