Skip to content

Commit a717d5d

Browse files
georgiclaude
andcommitted
chore(runtime): classify the external MCP fetch in the egress inventory
The HTTP transport for a user's MCP server is a new safeFetch call site, which the URL egress audit requires an inventory entry for. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XiCF7BrK6J3ybmB2ULvFND
1 parent 10b698d commit a717d5d

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

docs/url-egress-inventory.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ Everything here fetches a URL somebody else chose, through the protected fetch.
104104
| Gemini node video download | `packages/llm-nodes/src/nodes/gemini.ts` | provider response |
105105
| provider result downloads | `packages/runtime/src/providers/{fal,replicate,kie,topaz,meshy,rodin,minimax,evolink,gemini,anthropic}-provider.ts` | provider response |
106106
| MCP OAuth Client ID Metadata Document fetch | `packages/websocket/src/oauth/cimd.ts` | model/client (an MCP client's self-hosted `client_id` URL) |
107+
| external MCP server (HTTP transport) | `packages/websocket/src/external-mcp.ts` | operator (a user's own MCP server URL; guarded under the cloud profile, loopback allowed on a local install) |
107108

108109
The provider row is eleven files, each downloading a URL a provider's response
109110
named — plus one reading a URL the caller's own message named

packages/runtime/tests/url-egress-inventory.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,21 @@ export const URL_EGRESS_INVENTORY: EgressEntry[] = [
266266
"Reads the uri a workflow output named before storing the bytes as an asset."
267267
),
268268

269+
{
270+
file: "packages/websocket/src/external-mcp.ts",
271+
owner: "external MCP server (HTTP transport)",
272+
inputSource: "operator",
273+
schemes: ["https"],
274+
authScope:
275+
"The headers the user configured for that server, resolved from their own secrets; safeFetch strips Authorization on a cross-origin hop.",
276+
redirects: "checked-per-hop",
277+
dnsRebinding: "deployment-egress",
278+
policy: "guarded",
279+
guardedBy: ["safeFetch", "assertSafePublicHttpsUrl"],
280+
note:
281+
"A user's own MCP server URL. Under the cloud profile the MCP transport is handed safeFetch and the URL is checked on save and probe; a local install may reach its own loopback servers and uses the global fetch."
282+
},
283+
269284
// -------------------------------------------- guarded (provider result URLs)
270285
guardedSafeFetch(
271286
"packages/kie-nodes/src/kie-base.ts",

0 commit comments

Comments
 (0)