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
The auditing surface still tells an operator to use the proxy #584 proved wrong
#584 established that "names a connector" is not "reaches outside the platform", and shipped a
server-sent reach: "platform" | "machine" | "internet" field (workers/api/src/lib/tool-reach.ts, 31194df). The advice that field replaced is still published in two places.
1. The MCP tool description an operator reads.workers/mcp/src/instance-tools/base.ts:133,
final sentence of list_instance_tools:
To audit reach into EXTERNAL systems specifically, filter on connector.
2. The published docs.platform-docs/mcp.md:394:
To audit reach into external systems specifically, filter on connector.
Why this is a defect and not stale prose
connector is wrong in both directions, both measured by #584:
Under-reports.fetch_url has no connector and takes a caller-chosen method. Filtering on connector hides it — which is why 10 of 34 instances were told they had no tool reaching
outside the platform while fetch_url was allowed:true on all ten.
Over-reports. Every supervision tool names a connector and never leaves the platform.
Filtering on connector reports external access to a system that does not exist.
So an operator following this sentence gets a false negative on the case that matters and a false
positive on the case that does not. It is the #584 bug restated as guidance, on the one surface
whose stated purpose is auditing — list_instance_tools's own description opens by offering itself
as the way to check what an agent can reach.
The same description was corrected in the same release for the neighbouring claim: it now says "To verify an agent is read-only … read mutates — NOT scope". This sentence is the identical
mistake one clause later, and reach is the field that answers it.
Why the guards did not catch it
platform-docs/mcp.md was rewritten today by #572 and this line survived, correctly: scripts/docs-drift.mjs compares documented numbers and names to the code defining them, and
nothing it measures changed. #573's surface lock excludes description from its hash by design,
so a description can go stale without moving MCP_SERVER_VERSION. Both exclusions are right — this
is simply a class neither covers, and the issue does not propose extending them to prose.
Acceptance criteria
Both sentences name reach and state what its three values mean, replacing the connector
advice. The tool description and platform-docs/mcp.md say the same thing.
A test asserts the description does not recommend connector as a reach proxy — the pairing of
a corrected field and prose still naming the old one is the failure here, and it should not be
able to recur silently.
Inferred: that reach currently reaches the MCP listing at all. It was added to the API's
row shape and the console consumes it; whether projectToolListing passes it through to MCP
was not checked, and list_instance_tools schemas:true is 433 B over the wire limit, measured but not asserted #578 altered that projection hours later. AC2 exists to settle it — if it
does not pass through, this issue is larger than a wording fix.
The auditing surface still tells an operator to use the proxy #584 proved wrong
#584established that "names a connector" is not "reaches outside the platform", and shipped aserver-sent
reach: "platform" | "machine" | "internet"field (workers/api/src/lib/tool-reach.ts,31194df). The advice that field replaced is still published in two places.1. The MCP tool description an operator reads.
workers/mcp/src/instance-tools/base.ts:133,final sentence of
list_instance_tools:2. The published docs.
platform-docs/mcp.md:394:Why this is a defect and not stale prose
connectoris wrong in both directions, both measured by #584:fetch_urlhas no connector and takes a caller-chosenmethod. Filtering onconnectorhides it — which is why 10 of 34 instances were told they had no tool reachingoutside the platform while
fetch_urlwasallowed:trueon all ten.supervisiontool names a connector and never leaves the platform.Filtering on
connectorreports external access to a system that does not exist.So an operator following this sentence gets a false negative on the case that matters and a false
positive on the case that does not. It is the #584 bug restated as guidance, on the one surface
whose stated purpose is auditing —
list_instance_tools's own description opens by offering itselfas the way to check what an agent can reach.
The same description was corrected in the same release for the neighbouring claim: it now says
"To verify an agent is read-only … read
mutates— NOTscope". This sentence is the identicalmistake one clause later, and
reachis the field that answers it.Why the guards did not catch it
platform-docs/mcp.mdwas rewritten today by #572 and this line survived, correctly:scripts/docs-drift.mjscompares documented numbers and names to the code defining them, andnothing it measures changed.
#573's surface lock excludesdescriptionfrom its hash by design,so a description can go stale without moving
MCP_SERVER_VERSION. Both exclusions are right — thisis simply a class neither covers, and the issue does not propose extending them to prose.
Acceptance criteria
reachand state what its three values mean, replacing theconnectoradvice. The tool description and
platform-docs/mcp.mdsay the same thing.reachis present on rows returned bylist_instance_tools— confirm it survivesprojectToolListing, since list_instance_tools schemas:true is 433 B over the wire limit, measured but not asserted #578 (8bc0453) just changed what that projection carries.connectoras a reach proxy — the pairing ofa corrected field and prose still naming the old one is the failure here, and it should not be
able to recur silently.
MCP_SERVER_VERSIONbump is required (descriptions are excluded from the serverInfo.version and server.json disagree, and neither moves when the tool surface does #573 hash) —confirm that rather than assume it, since AC2 may add a field.
Verified vs inferred
file:line;tool-reach.tsand commit31194df;the 10-of-34 and
supervisionmeasurements from The console tells 10 of 34 instances they have "no tool that reaches outside the platform" while fetch_url is allowed on every one of them #584's live enumeration; that#573's hashexcludes
description; thatdocs-drift.mjscompares numbers and names only.reachcurrently reaches the MCP listing at all. It was added to the API'srow shape and the console consumes it; whether
projectToolListingpasses it through to MCPwas not checked, and list_instance_tools schemas:true is 433 B over the wire limit, measured but not asserted #578 altered that projection hours later. AC2 exists to settle it — if it
does not pass through, this issue is larger than a wording fix.