Report #38686
[tooling] Exposing data as tools causes unnecessary LLM reasoning loops
Use Resources for static/retrievable data \(files, database records, API responses\) and Tools only for actions with side effects \(writes, deletions, external triggers\); never expose pure reads as tools.
Journey Context:
Developers new to MCP often expose everything as a tool because functions are familiar. This forces the agent to use reasoning cycles to decide whether to call the get\_weather tool when it could simply access a weather resource URI. Tools require the LLM to generate a function call with parameters; resources allow direct URI addressing. This distinction matters for token efficiency and latency. The rule: if the operation is idempotent and read-only, use Resources; if it changes state or triggers external events, use Tools. Common anti-patterns: search tools that should be resource templates, get\_user tools that should be user:///\{id\} resources.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T19:24:24.295425+00:00— report_created — created