You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Anything the console can show or do, MCP should reach — and nothing tests that
The console and the MCP server read the same API. So every capability the console has is structurally available to MCP. Where MCP falls short it is either a deliberate exclusion or an accident, and today there is no way to tell which.
The accident that prompted this, measured 2026-08-15
An owner watching a stuck agent in the web UI could see the terminal saying You've hit your weekly limit. Their assistant, connected over MCP, could not:
coding_session_capture(instance_id) → "No active coding session found."
coding_session_capture(instance_id, session_id) → { runState: "ended", pane: "" }
The console shows that session's history; MCP returned an empty pane and, without a session id, denied the session existed. coding_timeline (#581, shipped today) now recovers it — objective, instructions, terminal output and per-tool-call inputs/outputs, defaulting to the most recent session. But that gap existed for months and nothing would have flagged it.
Related accidents already found and fixed this week, all the same shape — the console had it, MCP dropped it:
Three independent projection losses in one week is not bad luck; it is an unguarded boundary.
The deliberate exclusions, which are fine — but are prose, not a test
platform-docs/mcp.md lists them: the credentials vault, API-key values, permission writes on instance state, Stripe checkout/portal, binary routes, arbitrary shell. Each has a stated reason and most are clearly right (secrets, browser redirects, binaries).
But that list lives in a document. Nothing compares it to reality, so a capability can leave the MCP surface — or never arrive — and land in neither the exclusion list nor anyone's attention.
What to build
A test that enumerates the console's API calls and asserts each is reachable over MCP or appears in an enumerated, justified exclusion list.
The console's calls are statically discoverable (store/console/src/**), and MCP's tools declare the routes they proxy — so this is a comparison, not a survey.
Fail on an unlisted gap. A new console feature with no MCP path should fail until someone either exposes it or writes down why not.
Report the gaps found on first run. That number is the real deliverable; the guard only stops it growing.
Verified vs inferred
Verified: both coding_session_capture responses above, called live; that coding_timeline returns the full narrative for the same ended session; the three prior projection losses and their issues.
Inferred: that console calls and MCP tool routes are statically comparable. Both look tractable but no prototype was written — if the mapping needs runtime knowledge, the shape of this check changes and that should be reported rather than forced.
Anything the console can show or do, MCP should reach — and nothing tests that
The console and the MCP server read the same API. So every capability the console has is structurally available to MCP. Where MCP falls short it is either a deliberate exclusion or an accident, and today there is no way to tell which.
The accident that prompted this, measured 2026-08-15
An owner watching a stuck agent in the web UI could see the terminal saying
You've hit your weekly limit. Their assistant, connected over MCP, could not:The console shows that session's history; MCP returned an empty pane and, without a session id, denied the session existed.
coding_timeline(#581, shipped today) now recovers it — objective, instructions, terminal output and per-tool-call inputs/outputs, defaulting to the most recent session. But that gap existed for months and nothing would have flagged it.Related accidents already found and fixed this week, all the same shape — the console had it, MCP dropped it:
coding_session_capturestrippedrunnerConnected/alive/ready/authPrompt(coding_session_capture drops the fields that disambiguate 'idle', advertises two values it cannot emit, and coding_diagnostics scores a refusing engine 0 issues #593)instance_boarddroppedupdatedAt, which existed onBoardItemViewall along (The board shows attempts:1 for a job that ran 9 times, asks for help with no reason or timestamp, and offers takeover of ended sessions #592)instance_boarddroppedreasoningentirely (A ticket's reasoning can be written over MCP and never read back #574)Three independent projection losses in one week is not bad luck; it is an unguarded boundary.
The deliberate exclusions, which are fine — but are prose, not a test
platform-docs/mcp.mdlists them: the credentials vault, API-key values, permission writes on instance state, Stripe checkout/portal, binary routes, arbitrary shell. Each has a stated reason and most are clearly right (secrets, browser redirects, binaries).But that list lives in a document. Nothing compares it to reality, so a capability can leave the MCP surface — or never arrive — and land in neither the exclusion list nor anyone's attention.
What to build
A test that enumerates the console's API calls and asserts each is reachable over MCP or appears in an enumerated, justified exclusion list.
store/console/src/**), and MCP's tools declare the routes they proxy — so this is a comparison, not a survey.Acceptance criteria
platform-docs/mcp.mdrenders from it rather than restating it — a second hand-maintained copy is how list_instance_tools and the published docs still tell operators to audit external reach by filtering on connector — the proxy #584 disproved #585 and Agent-facing docs state four numbers the code disproves, and root AGENTS.md predates the output-schema change its first recipe depends on #602 happened.Verified vs inferred
coding_session_captureresponses above, called live; thatcoding_timelinereturns the full narrative for the same ended session; the three prior projection losses and their issues.