Repository navigation
MCP servers run before any Guardian decision: no vetting gate like steps/skillRegister #320
paolocostanzo
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
The gap
Skills have a static vetting gate.
steps/skillRegisterfires before any of the skill's actions execute, andsteps/skillLoadbinds activation to the approved digest. MCP servers have no equivalent.A server first reaches the Guardian in
agbom/snapshot(once per session, aftersessionStart) or inagbom/changed, and themcp_servercomponent already liststools[]. For a stdio server the host has to start the process to learn those tools, so by the time the Guardian can returndeny, the server's code has already run. The component also records anendpointURI but not the file that declared the server or the arguments it was started with, so a Guardian cannot see what was launched or on whose say-so.Why it matters for coding agents
Project-level files such as
.mcp.json,.vscode/mcp.jsonor.cursor/mcp.jsonlet a repository declare servers. Between late September and 9 October 2026 I measured eight AI coding clients against a repository that declared one harmless canary server, each run from a clean VM snapshot:So in most hosts "trust this folder" also means "run these programs", and a Guardian attached to that host first hears about them after they have run.
Possible direction
steps/skillRegister: it fires when a server enters the available set and before the host starts it, and carries the declaration source (user, project, managed), the transport, and for stdio the command and arguments. A Guardian MAY deny; a denied server MUST NOT be started.declaration_digestfor tools in [Bug] Tool declarations have no integrity binding, so a same-version redefinition is invisible to Inspect-Dynamic #38.mcp_servercomponent, so a policy can treat repository-declared servers differently from user-configured ones. Related to the integration path in Tool integration path is not on the wire, so a policy cannot distinguish a built-in from a third-party MCP server #151 / [Proposal] tool_kind: carry the integration path so a policy can tell a built-in from a third-party MCP server #153.On principle 3: the command line and the declaration source are lost once the process is running, and starting it is a trust-boundary crossing.
Against the Current Priority Scope this is deferred work; I am raising it here first, as CONTRIBUTING asks for specification changes, and can turn it into a proposal issue if it is worth tracking.
Limits of the measurement: one OS in a VM, client versions current in late September and re-checked on 9 October, one server per configuration file; repeated runs show stability, not how often this happens in the wild.
Write-up: https://paolocostanzo.github.io/trusting-a-repo-means-trusting-its-mcp-servers/
Lab: https://doi.org/10.5281/zenodo.23300292
All reactions