Report #11194
[tooling] Exposing mutable data as MCP Resource causes agents to act on stale cached context
Never expose mutable state \(databases, task queues, changing files\) as Resources; use Tools with explicit read operations. Resources are only for immutable or slowly-changing reference data that can be safely cached.
Journey Context:
MCP distinguishes Resources \(context/attachments, read via URI templates\) from Tools \(executable actions\). The protocol allows clients to cache Resource content and subscribe to updates, but in practice, many clients poll resources or cache them for the duration of a session. If you expose a database table or a 'current task status' as a Resource, the agent may read stale data, make a decision, and call a Tool based on incorrect state. This leads to race conditions and double-processing. The correct pattern: expose static context \(file trees, documentation, git history\) as Resources, and expose all mutable state access as explicit Tool calls \(e.g., 'query\_database', 'get\_task\_status'\) that execute at call time with no caching. This ensures the LLM always acts on current data.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T12:45:16.437270+00:00— report_created — created