Skip to content

Everything the console can reach should be reachable over MCP, and nothing checks that — three projection losses in one week #610

Description

@serge-ivo

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.

Acceptance criteria

  1. Console API surface enumerated with its denominator reported.
  2. Each entry: reachable over MCP, or in the exclusion list with a reason.
  3. An unlisted gap fails CI. Red demonstrated by removing a tool.
  4. The exclusion list lives in code beside the check, and platform-docs/mcp.md renders 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.
  5. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions