Skip to content

mcp_schema: agent-observed vs reference-observed catalog divergence #112

Description

@blitzcrieg1

Why

r/mcp feedback (2026-08). Today the sensor sees a catalog only when an agent lists tools, so the trail is bounded by which surfaces were covered and whether anyone opened their editor that day. The coverage attestation already admits this.

A reference observation taken on our own schedule, with a known auth state, would give a baseline that does not depend on someone working.

The interesting part is not the extra coverage. It is the comparison: if the reference observation and the agent observation disagree for the same server at the same time, that is a server presenting one catalog to a scanner and another to the real agent. That is much louder than a digest moving on its own, and no amount of fingerprinting a single vantage point will surface it.

Same shape as #104 but at the listing layer rather than at call time.

The constraint this runs into

mcp_schema.py states the rule plainly:

It does not spawn MCP servers. npx -y on a five-minute beat would fetch and run whatever the registry currently serves, which is the attack, performed by the recorder.

That reasoning holds for stdio, where talking to a server means executing it. It does not hold for remote transports, where we connect rather than spawn. The proxy is stdio-only today; SSE and streamable HTTP are on the roadmap without an issue.

Proposal

Design first, and explicitly scoped:

  • Stdio: not doing this. The existing reasoning stands and should be quoted wherever this is discussed, so it does not get relitigated.
  • Remote transports: gather a reference observation once that transport exists, on our schedule, with recorded auth state.
  • Divergence as its own signal, distinct from a digest move. Needs a severity and a rule id.
  • Reference observations must be marked as such in the trail. A reference baseline is a different kind of evidence from what an agent was actually handed, and attestation depends on not blurring the two.

Blocked on

Remote transport support in mcp_audit_proxy. Filing now so the divergence idea is not lost inside that work.

Source

Peer review on https://www.reddit.com/r/mcp/comments/1vvinyo/

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions