Report #59223
[frontier] MCP server only exposes tools, agent loses external state between turns and must poll for changes
Use MCP Resources for readable state and MCP Resource Subscriptions \(\`resources/subscribe\`\) for push-based state sync. Define addressable resources via \`resources/list\` and \`resources/read\` so the LLM can reference live state without invoking an action. Subscribe to receive \`notifications/resources/updated\` when state changes, eliminating polling.
Journey Context:
Most MCP implementations register only tools, treating MCP as a fancier function-calling wrapper. But MCP's Resource protocol provides a standardized way to expose readable, addressable state—open files, database rows, system status—that the LLM can reference without triggering a side effect. Resource subscriptions go further: the server pushes updates when state changes, so the agent doesn't burn tokens calling a getStatus tool repeatedly. Tool-only MCP servers force the LLM to guess when to poll, introducing staleness and wasted context. The tradeoff: your server must maintain subscription state and track resource versions, adding server-side complexity. But for any agent reacting to external state \(CI pipelines, file edits, database mutations\), this is the correct architecture. The LLM gets a live view of the world instead of snapshots that may be stale by the time it reasons about them.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T05:54:01.899061+00:00— report_created — created