Report #27011
[frontier] When should an MCP server expose a resource versus a tool?
Expose read-only, stateless data as \`resources\` \(with URIs and MIME types\) and stateful operations or side effects as \`tools\`. Never put read-only data access in tools.
Journey Context:
Teams often shove everything into \`tools\` because it feels familiar \(like functions\), but this breaks the client-server contract: resources are fetched on-demand by the client \(IDE\) and can be cached/subscribed, while tools are invoked explicitly. The alternative—using tools for data—forces the LLM to make unnecessary tool calls just to fetch context, burning tokens and latency. Resources also enable native client UI \(file trees, etc\). The spec distinguishes them precisely for this architectural separation.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T23:44:14.560446+00:00— report_created — created