@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 +16 -1
- package/dist/bridge.d.ts +2 -0
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +61 -5
- package/dist/bridge.js.map +1 -1
- package/dist/http.d.ts +25 -5
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +191 -56
- package/dist/http.js.map +1 -1
- package/dist/protocol.d.ts +12 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +92 -10
- package/dist/protocol.js.map +1 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +3 -1
- package/dist/react.js.map +1 -1
- package/dist/server.d.ts +17 -7
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +14 -4
- package/dist/server.js.map +1 -1
- package/package.json +9 -3
- package/src/bridge.ts +63 -5
- package/src/http.ts +222 -57
- package/src/protocol.ts +101 -10
- package/src/react.ts +3 -1
- package/src/server.ts +31 -7
package/README.md
CHANGED
|
@@ -17,13 +17,28 @@ const tools = [
|
|
|
17
17
|
}),
|
|
18
18
|
]
|
|
19
19
|
|
|
20
|
-
const mcp = createMcpServer({
|
|
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;
|
package/dist/bridge.d.ts.map
CHANGED
|
@@ -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;
|
|
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) {
|
|
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
|
-
|
|
68
|
-
|
|
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;
|
package/dist/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
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
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
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
|
|
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
|
package/dist/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
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 {
|
|
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
|
-
*
|
|
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 (
|
|
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
|
-
//
|
|
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
|
|
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
|
-
|
|
49
|
-
|
|
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
|
-
|
|
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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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 =
|
|
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
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
190
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
306
|
-
|
|
307
|
-
|
|
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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"}
|