@nifrajs/mcp 3.3.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,13 +17,28 @@ const tools = [
17
17
  }),
18
18
  ]
19
19
 
20
- const mcp = createMcpServer({ name: "orders", version: "1.0.0", tools })
20
+ const mcp = createMcpServer({
21
+ name: "orders",
22
+ version: "1.0.0",
23
+ tools,
24
+ // Local or private-network server: refuse any other Host (DNS rebinding).
25
+ allowedHosts: ["localhost", "127.0.0.1", "[::1]"],
26
+ })
21
27
  ```
22
28
 
23
29
  Mount `mcp.fetch` at `POST /mcp`. The package also exposes the JSON-RPC protocol and Streamable HTTP
24
30
  layers directly, plus `defineMcpWidget` and the React adapter for tool results that render UI in MCP
25
31
  hosts.
26
32
 
33
+ MCP servers are same-origin for browser clients by default. Set an exact `allowedOrigins` list for
34
+ known cross-origin clients, or set `allowAnyOrigin: true` only for a deliberately public,
35
+ secret-free server. Authentication is still the host application's responsibility.
36
+
37
+ The Origin check cannot stop DNS rebinding: a rebound page reaches the server under the attacker's
38
+ hostname, so its Origin matches. For a server on localhost or a private network, set `allowedHosts`
39
+ (`host` matches any port, `host:port` one port); every request with an unlisted Host gets 403.
40
+ Unset, any Host is accepted.
41
+
27
42
  Clients that include `text/event-stream` in `Accept` receive progress notifications as they happen,
28
43
  followed by the final JSON-RPC response in the same stream. An SSE `GET /mcp` opens a cancellable
29
44
  server-message connection; a plain `GET /mcp` remains a health page.
package/dist/bridge.d.ts CHANGED
@@ -34,6 +34,8 @@ export interface McpAppBridge {
34
34
  onTheme(cb: (theme: unknown) => void): void;
35
35
  /** Invoke a tool back through the host; resolves with the tools/call result. */
36
36
  callTool(name: string, args?: Record<string, unknown>): Promise<unknown>;
37
+ /** Reject pending calls when the embedding host tears down the widget. */
38
+ disconnect(reason?: string): void;
37
39
  }
38
40
  /** The bridge source, as a string for inlining in a `<script>`. Self-contained, no imports. */
39
41
  export declare function bridgeScript(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,IAAI,EAAE,OAAO,CAAA;IACb;+FAC2F;IAC3F,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IACzC,2FAA2F;IAC3F,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IAC1C,0FAA0F;IAC1F,KAAK,EAAE,OAAO,CAAA;IACd;wGACoG;IACpG,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACzE;AAED,+FAA+F;AAC/F,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,IAAI,EAAE,OAAO,CAAA;IACb;+FAC2F;IAC3F,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IACzC,2FAA2F;IAC3F,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IAC1C,0FAA0F;IAC1F,KAAK,EAAE,OAAO,CAAA;IACd;wGACoG;IACpG,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACxE,0EAA0E;IAC1E,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC;AAED,+FAA+F;AAC/F,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
package/dist/bridge.js CHANGED
@@ -26,11 +26,44 @@ export function bridgeScript() {
26
26
  // global or strip it, and so it has zero dependency on this module's runtime. Intentionally ES5-ish for
27
27
  // maximal host/iframe compatibility.
28
28
  const BRIDGE_SOURCE = `(function () {
29
- var pending = {};
29
+ var pending = Object.create(null);
30
30
  var nextId = 1;
31
+ var maxPending = 64;
32
+ var maxCallbacks = 128;
33
+ var maxNameLength = 128;
34
+ var maxArgsChars = 65536;
35
+ var maxReasonLength = 512;
36
+ var callTimeoutMs = 30000;
37
+ var disconnected = false;
31
38
  var dataCbs = [];
32
39
  var inputCbs = [];
33
40
  var themeCbs = [];
41
+ function boundedReason(reason) {
42
+ return typeof reason === "string" && reason.length > 0
43
+ ? reason.slice(0, maxReasonLength)
44
+ : "mcp host disconnected";
45
+ }
46
+ function boundedArgs(args) {
47
+ if (args == null) return {};
48
+ if (typeof args !== "object" || Array.isArray(args)) return null;
49
+ try {
50
+ var encoded = JSON.stringify(args);
51
+ if (typeof encoded !== "string" || encoded.length > maxArgsChars) return null;
52
+ return JSON.parse(encoded);
53
+ } catch (e) {
54
+ return null;
55
+ }
56
+ }
57
+ function disconnect(reason) {
58
+ disconnected = true;
59
+ var message = boundedReason(reason);
60
+ for (var id in pending) {
61
+ if (!Object.prototype.hasOwnProperty.call(pending, id)) continue;
62
+ var item = pending[id]; delete pending[id];
63
+ if (item.timer) clearTimeout(item.timer);
64
+ try { item.reject(new Error(message)); } catch (e) {}
65
+ }
66
+ }
34
67
  function applyTheme(theme) {
35
68
  if (!theme || typeof theme !== "object") return;
36
69
  var root = document.documentElement;
@@ -52,22 +85,42 @@ const BRIDGE_SOURCE = `(function () {
52
85
  theme: null,
53
86
  onData: function (cb) {
54
87
  if (typeof cb !== "function") return;
88
+ if (dataCbs.length >= maxCallbacks) return;
55
89
  dataCbs.push(cb);
56
90
  if (api.data !== null) { try { cb(api.data); } catch (e) {} }
57
91
  },
58
- onInput: function (cb) { if (typeof cb === "function") inputCbs.push(cb); },
92
+ onInput: function (cb) {
93
+ if (typeof cb !== "function" || inputCbs.length >= maxCallbacks) return;
94
+ inputCbs.push(cb);
95
+ },
59
96
  onTheme: function (cb) {
60
97
  if (typeof cb !== "function") return;
98
+ if (themeCbs.length >= maxCallbacks) return;
61
99
  themeCbs.push(cb);
62
100
  if (api.theme !== null) { try { cb(api.theme); } catch (e) {} }
63
101
  },
64
102
  callTool: function (name, args) {
103
+ if (disconnected) return Promise.reject(new Error("mcp host disconnected"));
104
+ if (typeof name !== "string" || name.length === 0 || name.length > maxNameLength)
105
+ return Promise.reject(new Error("mcp host tool name is invalid"));
106
+ var safeArgs = boundedArgs(args);
107
+ if (safeArgs === null) return Promise.reject(new Error("mcp host tool arguments are invalid"));
108
+ var count = 0;
109
+ for (var key in pending) if (Object.prototype.hasOwnProperty.call(pending, key)) count++;
110
+ if (count >= maxPending) return Promise.reject(new Error("mcp host call limit reached"));
65
111
  var id = "w" + nextId++;
66
112
  return new Promise(function (resolve, reject) {
67
- pending[id] = { resolve: resolve, reject: reject };
68
- post({ jsonrpc: "2.0", id: id, method: "tools/call", params: { name: name, arguments: args || {} } });
113
+ var timer = setTimeout(function () {
114
+ var item = pending[id];
115
+ if (!item) return;
116
+ delete pending[id];
117
+ try { item.reject(new Error("mcp host call timed out")); } catch (e) {}
118
+ }, callTimeoutMs);
119
+ pending[id] = { resolve: resolve, reject: reject, timer: timer };
120
+ post({ jsonrpc: "2.0", id: id, method: "tools/call", params: { name: name, arguments: safeArgs } });
69
121
  });
70
- }
122
+ },
123
+ disconnect: function (reason) { disconnect(reason); }
71
124
  };
72
125
  function post(msg) { try { (window.parent || window).postMessage(msg, "*"); } catch (e) {} }
73
126
  function emit(list, value) { for (var i = 0; i < list.length; i++) { try { list[i](value); } catch (e) {} } }
@@ -82,6 +135,7 @@ const BRIDGE_SOURCE = `(function () {
82
135
  // A response to one of our tools/call requests (id-matched).
83
136
  if (msg.id != null && pending[msg.id]) {
84
137
  var p = pending[msg.id]; delete pending[msg.id];
138
+ if (p.timer) clearTimeout(p.timer);
85
139
  if (msg.error) p.reject(msg.error); else p.resolve(msg.result);
86
140
  return;
87
141
  }
@@ -98,6 +152,8 @@ const BRIDGE_SOURCE = `(function () {
98
152
  api.theme = theme;
99
153
  applyTheme(theme);
100
154
  emit(themeCbs, theme);
155
+ } else if (msg.method === "ui/notifications/disconnected") {
156
+ disconnect((msg.params || {}).reason);
101
157
  }
102
158
  });
103
159
  window.mcpApp = api;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAoBH,+FAA+F;AAC/F,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,sGAAsG;AACtG,wGAAwG;AACxG,qCAAqC;AACrC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA8EhB,CAAA"}
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAsBH,+FAA+F;AAC/F,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,sGAAsG;AACtG,wGAAwG;AACxG,qCAAqC;AACrC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsIhB,CAAA"}
package/dist/http.d.ts CHANGED
@@ -7,20 +7,40 @@
7
7
  * JSON-RPC parse error. Pass the tools (and optional {@link McpServerFeatures} for resources / prompts /
8
8
  * the MCP Apps `ui://` widgets) so each host supplies its own corpus/source behind one core.
9
9
  */
10
- import { type JsonRpcRequest, type McpServerFeatures, type McpTool } from "./protocol.js";
10
+ import { type JsonRpcRequest, type McpProtocolState, type McpServerFeatures, type McpTool } from "./protocol.js";
11
11
  export interface McpHttpOptions {
12
12
  /** Maximum JSON-RPC request body size in bytes. Default 1 MB. */
13
13
  readonly maxBodyBytes?: number;
14
+ /** Maximum serialized JSON-RPC response or SSE frame size. Default 1 MB. */
15
+ readonly maxResponseBytes?: number;
14
16
  /** Resources / prompts / the MCP Apps UI extension served alongside the tools. */
15
17
  readonly features?: McpServerFeatures;
16
18
  /** Shown on the GET health page so each host can describe itself. */
17
19
  readonly health?: string;
20
+ /** Explicitly expose a secret-free, unauthenticated server to browser clients from any origin. */
21
+ readonly allowAnyOrigin?: boolean;
22
+ /** Origin allowlist for the DNS-rebinding guard. When set, only exact origins are accepted. */
23
+ readonly allowedOrigins?: readonly string[];
18
24
  /**
19
- * Origin allowlist for the DNS-rebinding guard. Omit (the default) to allow any origin - the right
20
- * choice for a public, unauthenticated docs server that can't enumerate its browser clients' origins.
21
- * Set it (e.g. a localhost origin for a hardened local host) to reject any other browser origin with 403.
25
+ * Host allowlist - the DNS-rebinding guard for a server on localhost or a private network. A rebound
26
+ * page reaches the server under the attacker's hostname with a matching Origin, so the Origin check
27
+ * alone cannot stop it. Entries are `host[:port]`; without a port they match any port. Every request,
28
+ * with or without an Origin, whose Host is not listed gets 403. Example: `["localhost", "127.0.0.1"]`.
22
29
  */
23
- readonly allowedOrigins?: readonly string[];
30
+ readonly allowedHosts?: readonly string[];
31
+ /**
32
+ * Shared request registry for one authenticated MCP session. Pass the same state to the
33
+ * request that starts a tool call and its `notifications/cancelled` request. Do not share one
34
+ * state across unrelated callers unless the surrounding authorization boundary makes their
35
+ * request-id namespace exclusive.
36
+ */
37
+ readonly state?: McpProtocolState;
38
+ /**
39
+ * Resolve a session-scoped request registry after authorization. This is the preferred seam for
40
+ * multi-user HTTP hosts: bind the returned state to the authenticated caller/session and return
41
+ * `undefined` for stateless requests. A resolver failure fails closed with a generic denial.
42
+ */
43
+ readonly resolveState?: (request: Request, message: JsonRpcRequest) => McpProtocolState | undefined | Promise<McpProtocolState | undefined>;
24
44
  /**
25
45
  * Optional authorization, run once per request against the parsed message - after the body has been
26
46
  * read under the size cap, so it never costs a second read of the stream. Returning `false` answers
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAGL,KAAK,cAAc,EAGnB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EAGb,MAAM,eAAe,CAAA;AAiDtB,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IACrC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC1B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,OAAO,KACb,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAChC;AAkOD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EAAE,EAChB,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC7C,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAoFnB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,EAIL,KAAK,cAAc,EAGnB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EAGb,MAAM,eAAe,CAAA;AAkJtB,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IACrC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,kGAAkG;IAClG,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,+FAA+F;IAC/F,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACjC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CACtB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,cAAc,KACpB,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAA;IACzE;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC1B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,OAAO,KACb,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAChC;AAyOD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EAAE,EAChB,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC7C,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAkHnB"}
package/dist/http.js CHANGED
@@ -7,7 +7,8 @@
7
7
  * JSON-RPC parse error. Pass the tools (and optional {@link McpServerFeatures} for resources / prompts /
8
8
  * the MCP Apps `ui://` widgets) so each host supplies its own corpus/source behind one core.
9
9
  */
10
- import { handleRpc, MCP_ERROR, modernVersionOf, rpcError, } from "./protocol.js";
10
+ import { assertTransportByteLimit, MAX_TRANSPORT_BYTES, parseTransportContentLength, readBoundedTransportBytes, } from "@nifrajs/agent-protocol";
11
+ import { handleRpc, isJsonRpcRequest, MCP_ERROR, modernVersionOf, rpcError, } from "./protocol.js";
11
12
  // Headers on every response. `access-control-allow-headers` lists the request headers a browser MCP client
12
13
  // (claude.ai, ChatGPT) actually sends: `mcp-protocol-version` (required per POST since 2025-06-18),
13
14
  // `mcp-method`/`mcp-name` (the 2026-07-28 request-metadata mirror), `authorization` (OAuth-protected hosts),
@@ -18,26 +19,127 @@ const CORS_BASE = {
18
19
  "access-control-expose-headers": "mcp-protocol-version, mcp-session-id",
19
20
  "access-control-max-age": "86400",
20
21
  };
22
+ /**
23
+ * Same host, and an Origin scheme equal to or stronger than the request URL's: an `https:` page may reach
24
+ * an `http:` URL (a TLS-terminating proxy in front of the server), never the reverse. Mirrors core's
25
+ * `isSameOriginRequest`; inlined because `@nifrajs/core` is an optional peer of this transport.
26
+ */
27
+ function isSameOrigin(origin, request) {
28
+ try {
29
+ const from = new URL(origin);
30
+ const own = new URL(request.url);
31
+ if (from.host !== own.host)
32
+ return false;
33
+ if (from.protocol === "https:")
34
+ return own.protocol === "https:" || own.protocol === "http:";
35
+ if (from.protocol === "http:")
36
+ return own.protocol === "http:";
37
+ return false;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ /** Parse a bare `host[:port]` authority without accepting userinfo, paths, whitespace, or fragments. */
44
+ function parseHostAuthority(value) {
45
+ if (value.length === 0 || /[\r\n\s@/?#]/.test(value))
46
+ return undefined;
47
+ let hostname;
48
+ let port;
49
+ if (value.startsWith("[")) {
50
+ const close = value.indexOf("]");
51
+ if (close === -1)
52
+ return undefined;
53
+ const address = value.slice(1, close);
54
+ if (address.length === 0 || !/^[0-9a-f:.%]+$/i.test(address))
55
+ return undefined;
56
+ hostname = `[${address.toLowerCase()}]`;
57
+ const rest = value.slice(close + 1);
58
+ if (rest !== "") {
59
+ if (!rest.startsWith(":"))
60
+ return undefined;
61
+ port = rest.slice(1);
62
+ }
63
+ }
64
+ else {
65
+ const colon = value.indexOf(":");
66
+ if (colon === -1) {
67
+ hostname = value.toLowerCase();
68
+ }
69
+ else {
70
+ if (value.indexOf(":", colon + 1) !== -1)
71
+ return undefined;
72
+ hostname = value.slice(0, colon).toLowerCase();
73
+ port = value.slice(colon + 1);
74
+ }
75
+ if (hostname.length === 0 || !/^[a-z0-9.-]+$/.test(hostname))
76
+ return undefined;
77
+ }
78
+ if (port !== undefined) {
79
+ if (!/^\d{1,5}$/.test(port))
80
+ return undefined;
81
+ const numeric = Number(port);
82
+ if (!Number.isSafeInteger(numeric) || numeric > 65_535)
83
+ return undefined;
84
+ port = String(numeric);
85
+ }
86
+ return port === undefined ? { hostname } : { hostname, port };
87
+ }
88
+ function defaultPort(protocol) {
89
+ if (protocol === "http:")
90
+ return "80";
91
+ if (protocol === "https:")
92
+ return "443";
93
+ return undefined;
94
+ }
95
+ /**
96
+ * The Host guard. Prefer the inbound Host header: an adapter may deliberately build `request.url`
97
+ * with a canonical authority, but that must not hide the attacker-controlled Host this guard exists
98
+ * to check. An allowlist entry without a port matches any port; one with a port matches the effective
99
+ * port (so `localhost:80` matches an HTTP URL whose canonical form omits `:80`).
100
+ */
101
+ function hostAllowed(request, allowedHosts) {
102
+ if (allowedHosts === undefined)
103
+ return true;
104
+ const url = new URL(request.url);
105
+ const actual = parseHostAuthority(request.headers.get("host") ?? url.host);
106
+ if (actual === undefined)
107
+ return false;
108
+ const actualPort = actual.port ?? defaultPort(url.protocol);
109
+ for (const value of allowedHosts) {
110
+ const candidate = parseHostAuthority(value);
111
+ if (candidate === undefined || candidate.hostname !== actual.hostname)
112
+ continue;
113
+ if (candidate.port === undefined || candidate.port === actualPort)
114
+ return true;
115
+ }
116
+ return false;
117
+ }
21
118
  /**
22
119
  * Resolve the CORS/Origin headers for one request against the host's `allowedOrigins` policy, or `null`
23
120
  * when the request's `Origin` is present but not allowed - the caller then answers 403, per the
24
121
  * Streamable-HTTP DNS-rebinding rule ("Servers MUST validate the `Origin` header ... respond with 403").
25
- * With no policy (the default) every origin is allowed and reflected as `*` - correct for a public,
26
- * secret-free, unauthenticated server, whose browser clients send arbitrary origins we can't enumerate.
122
+ * The default is same-origin. Public, secret-free servers must explicitly opt into `allowAnyOrigin`.
27
123
  */
28
- function corsFor(request, allowedOrigins) {
29
- if (allowedOrigins === undefined)
124
+ function corsFor(request, allowedOrigins, allowAnyOrigin) {
125
+ if (allowAnyOrigin)
30
126
  return { ...CORS_BASE, "access-control-allow-origin": "*" };
31
127
  const origin = request.headers.get("origin");
32
- // A caller with no Origin (curl, server-to-server) can't mount a DNS-rebinding attack - allow it.
128
+ // No Origin: curl, server-to-server, or a same-origin browser GET. `allowedHosts` covers the last one.
33
129
  if (origin === null)
34
130
  return { ...CORS_BASE, vary: "Origin" };
35
- if (allowedOrigins.includes(origin)) {
131
+ if (allowedOrigins?.includes(origin)) {
132
+ return { ...CORS_BASE, "access-control-allow-origin": origin, vary: "Origin" };
133
+ }
134
+ if (allowedOrigins === undefined && isSameOrigin(origin, request)) {
36
135
  return { ...CORS_BASE, "access-control-allow-origin": origin, vary: "Origin" };
37
136
  }
38
137
  return null;
39
138
  }
40
139
  const DEFAULT_MAX_BODY_BYTES = 1_000_000;
140
+ const MAX_BODY_BYTES = MAX_TRANSPORT_BYTES;
141
+ const DEFAULT_MAX_RESPONSE_BYTES = 1_000_000;
142
+ const MAX_RESPONSE_BYTES = MAX_TRANSPORT_BYTES;
41
143
  const TEXT_DECODER = new TextDecoder();
42
144
  const TEXT_ENCODER = new TextEncoder();
43
145
  const SSE_CONTENT_TYPE = "text/event-stream; charset=utf-8";
@@ -45,14 +147,19 @@ const SSE_KEEP_ALIVE_MS = 15_000;
45
147
  /** Invalid byte caps make `total > maxBytes` fail open (especially for `NaN`). Reject configuration
46
148
  * before any request body is read so MCP cannot silently lose its memory bound. */
47
149
  function assertByteLimit(value) {
48
- if (!Number.isSafeInteger(value) || value < 0) {
49
- throw new RangeError("MCP maxBodyBytes must be a non-negative safe integer");
50
- }
150
+ assertTransportByteLimit(value, { maximum: MAX_BODY_BYTES, label: "MCP maxBodyBytes" });
151
+ }
152
+ function assertResponseLimit(value) {
153
+ assertTransportByteLimit(value, {
154
+ minimum: 1_024,
155
+ maximum: MAX_RESPONSE_BYTES,
156
+ label: "MCP maxResponseBytes",
157
+ });
51
158
  }
52
159
  function acceptsEventStream(request) {
53
160
  return (request.headers.get("accept") ?? "").toLowerCase().includes("text/event-stream");
54
161
  }
55
- function eventStreamResponse(request, headers, run, keepAliveMs = 0) {
162
+ function eventStreamResponse(request, headers, run, keepAliveMs = 0, maxFrameBytes = DEFAULT_MAX_RESPONSE_BYTES) {
56
163
  const abortController = new AbortController();
57
164
  let closed = false;
58
165
  let controller;
@@ -99,7 +206,13 @@ function eventStreamResponse(request, headers, run, keepAliveMs = 0) {
99
206
  signal: abortController.signal,
100
207
  closed: closedPromise,
101
208
  send(message) {
102
- write(`data: ${JSON.stringify(message)}\n\n`);
209
+ const encoded = encodeJson(message, maxFrameBytes);
210
+ const id = "id" in message ? message.id : null;
211
+ const payload = encoded ?? JSON.stringify(rpcError(id ?? null, -32000, "response too large"));
212
+ const frame = `data: ${payload}\n\n`;
213
+ write(TEXT_ENCODER.encode(frame).byteLength <= maxFrameBytes
214
+ ? frame
215
+ : `data: ${JSON.stringify(rpcError(id ?? null, -32000, "response too large"))}\n\n`);
103
216
  },
104
217
  comment(value = "") {
105
218
  write(`: ${value.replace(/[\r\n]/g, "")}\n\n`);
@@ -146,24 +259,20 @@ function eventStreamResponse(request, headers, run, keepAliveMs = 0) {
146
259
  },
147
260
  });
148
261
  }
149
- function parseContentLength(value) {
150
- if (value.length === 0)
151
- return undefined;
152
- let length = 0;
153
- for (let i = 0; i < value.length; i++) {
154
- const digit = value.charCodeAt(i) - 48;
155
- if (digit < 0 || digit > 9)
156
- return undefined;
157
- length = length * 10 + digit;
158
- if (length > Number.MAX_SAFE_INTEGER)
159
- return Number.POSITIVE_INFINITY;
160
- }
161
- return length;
262
+ /** Validate the HTTP envelope before any method-specific access or authorization callback. */
263
+ function parseHttpMessage(value) {
264
+ return isJsonRpcRequest(value) ? value : undefined;
265
+ }
266
+ function unauthorizedResponse(id, headers) {
267
+ return Response.json(rpcError(id ?? null, MCP_ERROR.UNAUTHORIZED, "unauthorized"), {
268
+ status: 403,
269
+ headers,
270
+ });
162
271
  }
163
272
  async function readJsonBounded(request, maxBytes) {
164
273
  const declared = request.headers.get("content-length");
165
274
  if (declared !== null) {
166
- const length = parseContentLength(declared);
275
+ const length = parseTransportContentLength(declared);
167
276
  if (length === undefined)
168
277
  return { ok: false, status: 400 };
169
278
  if (length > maxBytes)
@@ -172,33 +281,34 @@ async function readJsonBounded(request, maxBytes) {
172
281
  const body = request.body;
173
282
  if (body === null)
174
283
  return { ok: false, status: 400 };
175
- const reader = body.getReader();
176
- const chunks = [];
177
- let total = 0;
178
- for (;;) {
179
- const { done, value } = await reader.read();
180
- if (done)
181
- break;
182
- total += value.byteLength;
183
- if (total > maxBytes) {
184
- await reader.cancel();
185
- return { ok: false, status: 413 };
186
- }
187
- chunks.push(value);
284
+ const read = await readBoundedTransportBytes(body, maxBytes);
285
+ if (!read.ok)
286
+ return { ok: false, status: read.reason === "too-large" ? 413 : 400 };
287
+ try {
288
+ return { ok: true, value: JSON.parse(TEXT_DECODER.decode(read.bytes)) };
188
289
  }
189
- const bytes = new Uint8Array(total);
190
- let offset = 0;
191
- for (const chunk of chunks) {
192
- bytes.set(chunk, offset);
193
- offset += chunk.byteLength;
290
+ catch {
291
+ return { ok: false, status: 400 };
194
292
  }
293
+ }
294
+ function encodeJson(value, maxBytes) {
195
295
  try {
196
- return { ok: true, value: JSON.parse(TEXT_DECODER.decode(bytes)) };
296
+ const encoded = JSON.stringify(value);
297
+ if (typeof encoded !== "string")
298
+ return undefined;
299
+ if (TEXT_ENCODER.encode(encoded).byteLength > maxBytes)
300
+ return undefined;
301
+ return encoded;
197
302
  }
198
303
  catch {
199
- return { ok: false, status: 400 };
304
+ return undefined;
200
305
  }
201
306
  }
307
+ function boundedResponse(response, maxBytes) {
308
+ if (encodeJson(response, maxBytes) !== undefined)
309
+ return response;
310
+ return rpcError(response.id, -32000, "response too large");
311
+ }
202
312
  const SENTINEL_PREFIX = "=?base64?";
203
313
  const SENTINEL_SUFFIX = "?=";
204
314
  /** Decode the Streamable-HTTP `=?base64?...?=` header sentinel (used when a name/uri isn't header-safe).
@@ -261,7 +371,12 @@ function modernErrorStatus(response) {
261
371
  export async function respondMcpHttp(request, tools, serverInfo, options = {}) {
262
372
  const maxBodyBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES;
263
373
  assertByteLimit(maxBodyBytes);
264
- const cors = corsFor(request, options.allowedOrigins);
374
+ const maxResponseBytes = options.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES;
375
+ assertResponseLimit(maxResponseBytes);
376
+ if (!hostAllowed(request, options.allowedHosts)) {
377
+ return Response.json(rpcError(null, -32600, "host not allowed"), { status: 403 });
378
+ }
379
+ const cors = corsFor(request, options.allowedOrigins, options.allowAnyOrigin === true);
265
380
  if (cors === null) {
266
381
  // Origin present but not allowlisted: reject before the body is ever read (DNS-rebinding guard). No
267
382
  // `id` (no request parsed) and no CORS headers - a disallowed origin gets nothing to work with.
@@ -277,7 +392,7 @@ export async function respondMcpHttp(request, tools, serverInfo, options = {}) {
277
392
  return eventStreamResponse(request, { allow: "POST, GET", ...cors }, async (stream) => {
278
393
  stream.comment("connected");
279
394
  await stream.closed;
280
- }, SSE_KEEP_ALIVE_MS);
395
+ }, SSE_KEEP_ALIVE_MS, maxResponseBytes);
281
396
  }
282
397
  return new Response(options.health ??
283
398
  "MCP server - POST JSON-RPC 2.0 here (methods: initialize, tools/list, tools/call).", { headers: { "content-type": "text/plain; charset=utf-8", ...cors } });
@@ -298,14 +413,33 @@ export async function respondMcpHttp(request, tools, serverInfo, options = {}) {
298
413
  }
299
414
  return Response.json(rpcError(null, -32700, "parse error"), { status: 400, headers: cors });
300
415
  }
301
- const message = parsed.value;
416
+ const message = parseHttpMessage(parsed.value);
417
+ if (message === undefined)
418
+ return Response.json(rpcError(null, -32600, "Invalid Request"), {
419
+ status: 400,
420
+ headers: cors,
421
+ });
302
422
  if (options.authorizeMessage !== undefined) {
303
- const authorized = await options.authorizeMessage(message, request);
423
+ let authorized = false;
424
+ try {
425
+ authorized = await options.authorizeMessage(message, request);
426
+ }
427
+ catch {
428
+ // Authorization is an application boundary. Fail closed without reflecting verifier or
429
+ // credential-store diagnostics to an unauthenticated caller.
430
+ return unauthorizedResponse(message.id, cors);
431
+ }
304
432
  if (!authorized) {
305
- return Response.json(rpcError(message.id ?? null, MCP_ERROR.UNAUTHORIZED, "unauthorized"), {
306
- status: 403,
307
- headers: cors,
308
- });
433
+ return unauthorizedResponse(message.id, cors);
434
+ }
435
+ }
436
+ let state = options.state;
437
+ if (options.resolveState !== undefined) {
438
+ try {
439
+ state = await options.resolveState(request, message);
440
+ }
441
+ catch {
442
+ return unauthorizedResponse(message.id, cors);
309
443
  }
310
444
  }
311
445
  const bodyVersion = modernVersionOf(message.params);
@@ -319,6 +453,7 @@ export async function respondMcpHttp(request, tools, serverInfo, options = {}) {
319
453
  return Response.json(headerError, { status: 400, headers });
320
454
  }
321
455
  const dispatch = (stream) => handleRpc(message, tools, serverInfo, options.features ?? {}, {
456
+ ...(state === undefined ? {} : { state }),
322
457
  signal: stream?.signal ?? request.signal,
323
458
  ...(stream !== undefined ? { sendNotification: stream.send } : {}),
324
459
  });
@@ -328,7 +463,7 @@ export async function respondMcpHttp(request, tools, serverInfo, options = {}) {
328
463
  if (response !== null)
329
464
  stream.send(response);
330
465
  stream.close();
331
- });
466
+ }, 0, maxResponseBytes);
332
467
  }
333
468
  const response = await dispatch();
334
469
  // A notification (no id) yields null - acknowledge with 202 Accepted and no body (Streamable-HTTP).
@@ -336,6 +471,6 @@ export async function respondMcpHttp(request, tools, serverInfo, options = {}) {
336
471
  return new Response(null, { status: 202, headers });
337
472
  // Modern requests carry spec HTTP statuses (400 version/header, 404 unknown method); legacy stays 200.
338
473
  const status = bodyVersion !== undefined ? modernErrorStatus(response) : 200;
339
- return Response.json(response, { status, headers });
474
+ return Response.json(boundedResponse(response, maxResponseBytes), { status, headers });
340
475
  }
341
476
  //# sourceMappingURL=http.js.map
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}