@wrongstack/mcp 0.297.0 → 0.298.1
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/dist/client-protocol-helpers.d.ts +6 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +184 -26
- package/dist/manage.d.ts +15 -0
- package/dist/server.d.ts +33 -0
- package/package.json +5 -4
- package/dist/authorization-manager.d.ts.map +0 -1
- package/dist/authorization.d.ts.map +0 -1
- package/dist/client-process.d.ts.map +0 -1
- package/dist/client-protocol-helpers.d.ts.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/content-selection.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -7
- package/dist/manage.d.ts.map +0 -1
- package/dist/manifest-cache.d.ts.map +0 -1
- package/dist/operations.d.ts.map +0 -1
- package/dist/protocol.d.ts.map +0 -1
- package/dist/read-body.d.ts.map +0 -1
- package/dist/registry-authorization.d.ts.map +0 -1
- package/dist/registry-catalog.d.ts.map +0 -1
- package/dist/registry-disconnect.d.ts.map +0 -1
- package/dist/registry-health.d.ts.map +0 -1
- package/dist/registry-operations.d.ts.map +0 -1
- package/dist/registry-reconnect.d.ts.map +0 -1
- package/dist/registry-slots.d.ts.map +0 -1
- package/dist/registry-types.d.ts.map +0 -1
- package/dist/registry.d.ts.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/sse-reader.d.ts.map +0 -1
- package/dist/test-helpers/mock-server.d.ts.map +0 -1
- package/dist/token-store.d.ts.map +0 -1
- package/dist/tool-schema.d.ts.map +0 -1
- package/dist/transport-base.d.ts.map +0 -1
- package/dist/transport-jsonrpc.d.ts.map +0 -1
- package/dist/transport-security.d.ts.map +0 -1
- package/dist/transport-sse.d.ts.map +0 -1
- package/dist/transport-streamable.d.ts.map +0 -1
- package/dist/transport.d.ts.map +0 -1
- package/dist/wrap-tool.d.ts.map +0 -1
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
* Windows. Only args containing whitespace or quotes need wrapping; inside
|
|
4
4
|
* double quotes cmd.exe escapes a literal `"` as `""`. Backslashes are literal
|
|
5
5
|
* inside cmd quotes, so paths like `C:\Program Files\x` pass through unharmed.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Unsafe for spawning. An argument with no whitespace is returned
|
|
8
|
+
* verbatim, so `--flag=x&calc.exe` reaches `cmd.exe` unquoted and `&` separates
|
|
9
|
+
* commands. Retained only for API compatibility; the stdio MCP transport now
|
|
10
|
+
* uses `buildWin32CmdShimInvocation` from `@wrongstack/core/utils`, which quotes
|
|
11
|
+
* every token and refuses metacharacters outright (CMDI-005).
|
|
6
12
|
*/
|
|
7
13
|
export declare function quoteWindowsArg(arg: string): string;
|
|
8
14
|
export declare function validateProtocolString(value: unknown, label: string, allowEmpty?: boolean): asserts value is string;
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { type MCPAuthorizationCompleteInput, MCPAuthorizationManager, type MCPAu
|
|
|
3
3
|
export { type ConnectionState, MCPClient, type MCPClientOptions, type MCPListChangedListener, type MCPPageOptions, type MCPRequestOptions, type MCPTool, type ToolCallResult, type Transport, } from './client.js';
|
|
4
4
|
export { MCP_CONSTANTS } from './constants.js';
|
|
5
5
|
export { DEFAULT_MCP_INSERTION_MAX_BYTES, DEFAULT_MCP_RESOURCE_SCHEMES, type MCPContentProvenance, type MCPInsertionPolicy, type MCPPromptInsertion, type MCPResourceInsertion, preparePromptInsertion, prepareResourceInsertion, } from './content-selection.js';
|
|
6
|
-
export { addMcp, disableMcp, discoverMcp, enableMcp, listMcp, type McpManageDeps, type McpOpResult, type McpServerInfo, type McpServerInput, removeMcp, restartMcp, updateMcp, } from './manage.js';
|
|
6
|
+
export { addMcp, disableMcp, discoverMcp, enableMcp, listMcp, MCP_ENV_MASK, type McpManageDeps, type McpOpResult, type McpServerInfo, type McpServerInput, removeMcp, restartMcp, updateMcp, } from './manage.js';
|
|
7
7
|
export { type MCPCapabilityManifest, manifestConfigHash, readCapabilityManifest, readManifest, writeCapabilityManifest, writeManifest, } from './manifest-cache.js';
|
|
8
8
|
export { MCP_OPERATION_LIMITS, type MCPFailureKind, type MCPHealthState, type MCPLatencySummary, type MCPOperationEvent, type MCPOperationKind, type MCPServerOperationalHealth, } from './operations.js';
|
|
9
9
|
export { type MCPGetPromptResult, type MCPImplementationInfo, type MCPListPromptsResult, type MCPListResourcesResult, type MCPListResourceTemplatesResult, type MCPPrompt, type MCPPromptArgument, type MCPPromptMessage, type MCPReadResourceResult, type MCPResource, type MCPResourceContents, type MCPResourceTemplate, type MCPServerCapabilities, type MCPServerMetadata, parseGetPromptResult, parseListPromptsResult, parseListResourcesResult, parseListResourceTemplatesResult, parseReadResourceResult, parseServerMetadata, } from './protocol.js';
|
package/dist/index.js
CHANGED
|
@@ -739,7 +739,7 @@ function boundedServerName(value) {
|
|
|
739
739
|
|
|
740
740
|
// src/client.ts
|
|
741
741
|
import { spawn as spawn2 } from "node:child_process";
|
|
742
|
-
import { buildChildEnv, toErrorMessage } from "@wrongstack/core/utils";
|
|
742
|
+
import { buildChildEnv, buildWin32CmdShimInvocation, toErrorMessage } from "@wrongstack/core/utils";
|
|
743
743
|
|
|
744
744
|
// src/constants.ts
|
|
745
745
|
var MCP_CONSTANTS = Object.freeze({
|
|
@@ -1182,6 +1182,7 @@ function validateTransportUrl(rawUrl) {
|
|
|
1182
1182
|
}
|
|
1183
1183
|
|
|
1184
1184
|
// src/transport-base.ts
|
|
1185
|
+
var MAX_TRANSPORT_REDIRECTS = 5;
|
|
1185
1186
|
function makeAbortError(method) {
|
|
1186
1187
|
const err = new Error(`MCP request "${method}" aborted by client`);
|
|
1187
1188
|
err.name = "AbortError";
|
|
@@ -1275,7 +1276,28 @@ var BaseHTTPTransport = class {
|
|
|
1275
1276
|
authorizationHeaderForToken(token, this.authorizationResource)
|
|
1276
1277
|
);
|
|
1277
1278
|
}
|
|
1278
|
-
|
|
1279
|
+
let currentUrl = typeof input === "string" ? input : String(input);
|
|
1280
|
+
let hopHeaders = headers;
|
|
1281
|
+
for (let hop = 0; hop < MAX_TRANSPORT_REDIRECTS; hop++) {
|
|
1282
|
+
const res = await fetch(currentUrl, { ...init, headers: hopHeaders, redirect: "manual" });
|
|
1283
|
+
if (res.status !== 301 && res.status !== 302 && res.status !== 303 && res.status !== 307 && res.status !== 308) {
|
|
1284
|
+
return res;
|
|
1285
|
+
}
|
|
1286
|
+
const location = res.headers.get("location");
|
|
1287
|
+
if (!location) return res;
|
|
1288
|
+
const nextUrl = new URL(location, currentUrl).toString();
|
|
1289
|
+
validateTransportUrl(nextUrl);
|
|
1290
|
+
if (new URL(nextUrl).origin !== new URL(currentUrl).origin) {
|
|
1291
|
+
hopHeaders = new Headers(hopHeaders);
|
|
1292
|
+
hopHeaders.delete("Authorization");
|
|
1293
|
+
}
|
|
1294
|
+
await res.body?.cancel().catch(() => void 0);
|
|
1295
|
+
currentUrl = nextUrl;
|
|
1296
|
+
}
|
|
1297
|
+
throw new ConfigError2({
|
|
1298
|
+
message: `MCP server "${this.name}" exceeded ${MAX_TRANSPORT_REDIRECTS} redirects.`,
|
|
1299
|
+
code: "CONFIG_INVALID"
|
|
1300
|
+
});
|
|
1279
1301
|
};
|
|
1280
1302
|
let response = await send();
|
|
1281
1303
|
if (response.status !== 401 || !this.authorizationProvider?.handleUnauthorized) {
|
|
@@ -2019,10 +2041,6 @@ var StreamableHTTPTransport = class extends BaseHTTPTransport {
|
|
|
2019
2041
|
};
|
|
2020
2042
|
|
|
2021
2043
|
// src/client-protocol-helpers.ts
|
|
2022
|
-
function quoteWindowsArg(arg) {
|
|
2023
|
-
if (!/[\s"]/.test(arg)) return arg;
|
|
2024
|
-
return `"${arg.replace(/"/g, '""')}"`;
|
|
2025
|
-
}
|
|
2026
2044
|
var MAX_PROTOCOL_INPUT_CHARS = 8192;
|
|
2027
2045
|
function validateProtocolString(value, label, allowEmpty = false) {
|
|
2028
2046
|
if (typeof value !== "string" || !allowEmpty && value.length === 0) {
|
|
@@ -2188,14 +2206,17 @@ var MCPClient = class _MCPClient {
|
|
|
2188
2206
|
const rawArgs = this.opts.args ?? [];
|
|
2189
2207
|
const spawnEnv = buildChildEnv({ extra: extraEnv });
|
|
2190
2208
|
const stdio = ["pipe", "pipe", "pipe"];
|
|
2191
|
-
const child = isWin ?
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2209
|
+
const child = isWin ? (() => {
|
|
2210
|
+
const shim = buildWin32CmdShimInvocation(this.opts.command, rawArgs);
|
|
2211
|
+
return spawn2(shim.command, shim.args, {
|
|
2212
|
+
env: spawnEnv,
|
|
2213
|
+
stdio,
|
|
2214
|
+
windowsVerbatimArguments: shim.windowsVerbatimArguments,
|
|
2215
|
+
// Without this every MCP server spawned from a console-less host
|
|
2216
|
+
// (WebUI server, scheduled runs) opens a visible console window.
|
|
2217
|
+
windowsHide: true
|
|
2218
|
+
});
|
|
2219
|
+
})() : spawn2(this.opts.command, rawArgs, { env: spawnEnv, stdio, windowsHide: true });
|
|
2199
2220
|
this.child = child;
|
|
2200
2221
|
child.stdout?.on("data", (chunk) => this.onData(chunk.toString()));
|
|
2201
2222
|
child.stderr?.on("data", () => {
|
|
@@ -2472,6 +2493,10 @@ var MCPClient = class _MCPClient {
|
|
|
2472
2493
|
new Promise((resolve) => setTimeout(resolve, FORCE_TIMEOUT_MS))
|
|
2473
2494
|
]);
|
|
2474
2495
|
}
|
|
2496
|
+
child.stdout?.removeAllListeners();
|
|
2497
|
+
child.stderr?.removeAllListeners();
|
|
2498
|
+
child.removeAllListeners();
|
|
2499
|
+
this.child = void 0;
|
|
2475
2500
|
}
|
|
2476
2501
|
this.failPending(`MCP "${this.opts.name}" closed`);
|
|
2477
2502
|
this.sseTransport?.close();
|
|
@@ -2932,6 +2957,26 @@ function normalizeTransport(t) {
|
|
|
2932
2957
|
if (t === "http" || t === "streamable-http") return "streamable-http";
|
|
2933
2958
|
return "stdio";
|
|
2934
2959
|
}
|
|
2960
|
+
var MCP_ENV_MASK = "__wrongstack_unchanged__";
|
|
2961
|
+
function unmaskEnv(env, base) {
|
|
2962
|
+
if (env === void 0) return void 0;
|
|
2963
|
+
let changed = false;
|
|
2964
|
+
const out = {};
|
|
2965
|
+
for (const [key, value] of Object.entries(env)) {
|
|
2966
|
+
if (value === MCP_ENV_MASK) {
|
|
2967
|
+
const stored = base?.[key];
|
|
2968
|
+
if (stored === void 0) {
|
|
2969
|
+
changed = true;
|
|
2970
|
+
continue;
|
|
2971
|
+
}
|
|
2972
|
+
out[key] = stored;
|
|
2973
|
+
changed = true;
|
|
2974
|
+
continue;
|
|
2975
|
+
}
|
|
2976
|
+
out[key] = value;
|
|
2977
|
+
}
|
|
2978
|
+
return changed ? out : env;
|
|
2979
|
+
}
|
|
2935
2980
|
function buildConfig(input, base) {
|
|
2936
2981
|
const cfg = {
|
|
2937
2982
|
name: input.name,
|
|
@@ -2943,7 +2988,7 @@ function buildConfig(input, base) {
|
|
|
2943
2988
|
if (command !== void 0) cfg.command = command;
|
|
2944
2989
|
const args = input.args ?? base?.args;
|
|
2945
2990
|
if (args !== void 0) cfg.args = args;
|
|
2946
|
-
const env = input.env ?? base?.env;
|
|
2991
|
+
const env = unmaskEnv(input.env ?? base?.env, base?.env);
|
|
2947
2992
|
if (env !== void 0) cfg.env = env;
|
|
2948
2993
|
const url = input.url ?? base?.url;
|
|
2949
2994
|
if (url !== void 0) cfg.url = url;
|
|
@@ -4418,11 +4463,13 @@ var MCPRegistry = class _MCPRegistry {
|
|
|
4418
4463
|
};
|
|
4419
4464
|
|
|
4420
4465
|
// src/server.ts
|
|
4466
|
+
import { timingSafeEqual as timingSafeEqual2 } from "node:crypto";
|
|
4421
4467
|
import { createServer } from "node:http";
|
|
4422
|
-
import { expectDefined as expectDefined2, toErrorMessage as toErrorMessage2 } from "@wrongstack/core/utils";
|
|
4468
|
+
import { expectDefined as expectDefined2, toErrorMessage as toErrorMessage2, validateAgainstSchema } from "@wrongstack/core/utils";
|
|
4423
4469
|
var PARSE_ERROR = -32700;
|
|
4424
4470
|
var INVALID_REQUEST = -32600;
|
|
4425
4471
|
var METHOD_NOT_FOUND = -32601;
|
|
4472
|
+
var INVALID_PARAMS = -32602;
|
|
4426
4473
|
var INTERNAL_ERROR = -32603;
|
|
4427
4474
|
var MCPServer = class {
|
|
4428
4475
|
host;
|
|
@@ -4475,7 +4522,8 @@ var MCPServer = class {
|
|
|
4475
4522
|
} catch (err) {
|
|
4476
4523
|
const message = toErrorMessage2(err);
|
|
4477
4524
|
this.logger?.warn?.(`MCP server: method "${msg.method}" threw: ${message}`);
|
|
4478
|
-
|
|
4525
|
+
const code = err instanceof InvalidToolArgumentsError ? INVALID_PARAMS : INTERNAL_ERROR;
|
|
4526
|
+
return this.encodeError(expectDefined2(msg.id), code, message);
|
|
4479
4527
|
}
|
|
4480
4528
|
}
|
|
4481
4529
|
async dispatch(method, params) {
|
|
@@ -4502,6 +4550,7 @@ var MCPServer = class {
|
|
|
4502
4550
|
throw new Error('tools/call requires a string "name"');
|
|
4503
4551
|
}
|
|
4504
4552
|
const args = p.arguments && typeof p.arguments === "object" && !Array.isArray(p.arguments) ? p.arguments : {};
|
|
4553
|
+
await this.assertArgumentsMatchSchema(p.name, args);
|
|
4505
4554
|
const res = await this.host.callTool(p.name, args);
|
|
4506
4555
|
return { content: toContentBlocks(res.content), isError: res.isError };
|
|
4507
4556
|
}
|
|
@@ -4557,10 +4606,56 @@ var MCPServer = class {
|
|
|
4557
4606
|
return METHOD_NOT_FOUND_SENTINEL;
|
|
4558
4607
|
}
|
|
4559
4608
|
}
|
|
4609
|
+
/**
|
|
4610
|
+
* WS-026: enforce the `inputSchema` this server advertises on `tools/list`.
|
|
4611
|
+
*
|
|
4612
|
+
* `tools/call` used to forward `params.arguments` to the host verbatim after
|
|
4613
|
+
* checking only that it was a non-array object — so every `enum`, `required`,
|
|
4614
|
+
* `additionalProperties: false`, and numeric bound in the published schema
|
|
4615
|
+
* was advisory. A client (or an attacker who reached the transport) could
|
|
4616
|
+
* send `{mode: "../../etc"}` to a tool whose schema declares
|
|
4617
|
+
* `enum: ["read","write"]` and the tool would receive it. Publishing a
|
|
4618
|
+
* contract and not enforcing it is worse than publishing none: downstream
|
|
4619
|
+
* tools are written against the schema they declared.
|
|
4620
|
+
*
|
|
4621
|
+
* SCOPE: `validateAgainstSchema` is the shared validator that also gates the
|
|
4622
|
+
* agent's own tool executor. It checks `type`, `enum`, and `required`, and
|
|
4623
|
+
* recurses through `properties`/`items` — it does NOT check
|
|
4624
|
+
* `additionalProperties: false`, numeric bounds, or string lengths. So those
|
|
4625
|
+
* keywords stay advisory here. Teaching the shared validator about them
|
|
4626
|
+
* would change what the agent accepts on every tool call in the product,
|
|
4627
|
+
* which is a deliberate decision that does not belong inside a transport
|
|
4628
|
+
* fix; it is tracked separately.
|
|
4629
|
+
*
|
|
4630
|
+
* Unknown tool names are left alone — the host owns that error, and
|
|
4631
|
+
* answering "no such tool" here would fork the message for no benefit.
|
|
4632
|
+
*/
|
|
4633
|
+
async assertArgumentsMatchSchema(name, args) {
|
|
4634
|
+
let tools;
|
|
4635
|
+
try {
|
|
4636
|
+
tools = await this.host.listTools();
|
|
4637
|
+
} catch {
|
|
4638
|
+
return;
|
|
4639
|
+
}
|
|
4640
|
+
const schema = tools.find((tool) => tool.name === name)?.inputSchema;
|
|
4641
|
+
if (!schema || typeof schema !== "object") return;
|
|
4642
|
+
const result = validateAgainstSchema(
|
|
4643
|
+
args,
|
|
4644
|
+
schema
|
|
4645
|
+
);
|
|
4646
|
+
if (result.ok) return;
|
|
4647
|
+
const detail = result.errors.slice(0, MAX_REPORTED_SCHEMA_ERRORS).map((error) => `${error.path || "(root)"}: ${error.message}`).join("; ");
|
|
4648
|
+
const more = result.errors.length > MAX_REPORTED_SCHEMA_ERRORS ? ` (+${result.errors.length - MAX_REPORTED_SCHEMA_ERRORS} more)` : "";
|
|
4649
|
+
throw new InvalidToolArgumentsError(`invalid arguments for tool "${name}" \u2014 ${detail}${more}`);
|
|
4650
|
+
}
|
|
4560
4651
|
encodeError(id, code, message) {
|
|
4561
4652
|
return JSON.stringify({ jsonrpc: "2.0", id, error: { code, message } });
|
|
4562
4653
|
}
|
|
4563
4654
|
};
|
|
4655
|
+
var MAX_REPORTED_SCHEMA_ERRORS = 5;
|
|
4656
|
+
var InvalidToolArgumentsError = class extends Error {
|
|
4657
|
+
name = "InvalidToolArgumentsError";
|
|
4658
|
+
};
|
|
4564
4659
|
var SERVER_PAGE_SIZE = 100;
|
|
4565
4660
|
function paginate(items, params) {
|
|
4566
4661
|
const cursor = paramsRecord(params)["cursor"];
|
|
@@ -4742,7 +4837,7 @@ function serveHttp(server, opts = {}) {
|
|
|
4742
4837
|
);
|
|
4743
4838
|
}
|
|
4744
4839
|
const httpServer = createServer((req, res) => {
|
|
4745
|
-
void handleHttpRequest(server, req, res, token, log);
|
|
4840
|
+
void handleHttpRequest(server, req, res, token, log, host);
|
|
4746
4841
|
});
|
|
4747
4842
|
return new Promise((resolve, reject) => {
|
|
4748
4843
|
httpServer.once("error", reject);
|
|
@@ -4761,23 +4856,37 @@ function serveHttp(server, opts = {}) {
|
|
|
4761
4856
|
});
|
|
4762
4857
|
});
|
|
4763
4858
|
}
|
|
4764
|
-
async function handleHttpRequest(server, req, res, token, log) {
|
|
4859
|
+
async function handleHttpRequest(server, req, res, token, log, boundHost) {
|
|
4765
4860
|
const send = (status, body2, type = "application/json") => {
|
|
4766
|
-
res.writeHead(status, {
|
|
4861
|
+
res.writeHead(status, {
|
|
4862
|
+
"content-type": type,
|
|
4863
|
+
// This endpoint executes tools. Nothing about it should be embedded,
|
|
4864
|
+
// sniffed into another type, or leak its URL onward.
|
|
4865
|
+
"x-content-type-options": "nosniff",
|
|
4866
|
+
"x-frame-options": "DENY",
|
|
4867
|
+
"referrer-policy": "no-referrer"
|
|
4868
|
+
// No CORS headers are ever emitted: a cross-origin reader must not be
|
|
4869
|
+
// able to see a response even if it manages to send the request.
|
|
4870
|
+
});
|
|
4767
4871
|
res.end(body2);
|
|
4768
4872
|
};
|
|
4873
|
+
if (!originIsAcceptable(req, boundHost)) {
|
|
4874
|
+
return send(403, JSON.stringify({ error: "cross-origin forbidden" }));
|
|
4875
|
+
}
|
|
4876
|
+
if (!hostHeaderIsAcceptable(req, boundHost)) {
|
|
4877
|
+
return send(403, JSON.stringify({ error: "untrusted host header" }));
|
|
4878
|
+
}
|
|
4879
|
+
if (token && !bearerTokenMatches(req.headers.authorization, token)) {
|
|
4880
|
+
return send(401, JSON.stringify({ error: "unauthorized" }));
|
|
4881
|
+
}
|
|
4769
4882
|
if (req.method === "GET") {
|
|
4770
4883
|
return send(200, JSON.stringify({ status: "ok", server: "wrongstack-mcp" }));
|
|
4771
4884
|
}
|
|
4772
4885
|
if (req.method !== "POST") {
|
|
4773
4886
|
return send(405, JSON.stringify({ error: "method not allowed" }));
|
|
4774
4887
|
}
|
|
4775
|
-
if (
|
|
4776
|
-
|
|
4777
|
-
const expected = `Bearer ${token}`;
|
|
4778
|
-
if (auth !== expected) {
|
|
4779
|
-
return send(401, JSON.stringify({ error: "unauthorized" }));
|
|
4780
|
-
}
|
|
4888
|
+
if (!isJsonContentType(req.headers["content-type"])) {
|
|
4889
|
+
return send(415, JSON.stringify({ error: "content-type must be application/json" }));
|
|
4781
4890
|
}
|
|
4782
4891
|
let body = "";
|
|
4783
4892
|
req.on("data", (chunk) => {
|
|
@@ -4797,6 +4906,54 @@ async function handleHttpRequest(server, req, res, token, log) {
|
|
|
4797
4906
|
});
|
|
4798
4907
|
});
|
|
4799
4908
|
}
|
|
4909
|
+
function isLoopbackHostname(hostname) {
|
|
4910
|
+
const bare = hostname.toLowerCase().replace(/^\[(.*)\]$/, "$1");
|
|
4911
|
+
return bare === "localhost" || bare === "::1" || bare === "127.0.0.1" || bare.startsWith("127.");
|
|
4912
|
+
}
|
|
4913
|
+
function originIsAcceptable(req, boundHost) {
|
|
4914
|
+
const origin = req.headers.origin;
|
|
4915
|
+
if (origin === void 0 || origin === "null") return origin === void 0;
|
|
4916
|
+
let parsed;
|
|
4917
|
+
try {
|
|
4918
|
+
parsed = new URL(origin);
|
|
4919
|
+
} catch {
|
|
4920
|
+
return false;
|
|
4921
|
+
}
|
|
4922
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") return false;
|
|
4923
|
+
const rawHost = req.headers.host?.trim();
|
|
4924
|
+
if (!rawHost) return false;
|
|
4925
|
+
try {
|
|
4926
|
+
const requestAuthority = new URL(`${parsed.protocol}//${rawHost}`).host.toLowerCase();
|
|
4927
|
+
if (parsed.host.toLowerCase() !== requestAuthority) return false;
|
|
4928
|
+
} catch {
|
|
4929
|
+
return false;
|
|
4930
|
+
}
|
|
4931
|
+
return isLoopbackHost(boundHost) ? isLoopbackHostname(parsed.hostname) : true;
|
|
4932
|
+
}
|
|
4933
|
+
function hostHeaderIsAcceptable(req, boundHost) {
|
|
4934
|
+
const rawHost = req.headers.host?.trim();
|
|
4935
|
+
if (!rawHost) return false;
|
|
4936
|
+
let parsed;
|
|
4937
|
+
try {
|
|
4938
|
+
parsed = new URL(`http://${rawHost}`);
|
|
4939
|
+
} catch {
|
|
4940
|
+
return false;
|
|
4941
|
+
}
|
|
4942
|
+
if (parsed.username || parsed.password || parsed.pathname !== "/" || parsed.search) return false;
|
|
4943
|
+
if (isLoopbackHost(boundHost)) return isLoopbackHostname(parsed.hostname);
|
|
4944
|
+
return true;
|
|
4945
|
+
}
|
|
4946
|
+
function isJsonContentType(value) {
|
|
4947
|
+
if (!value) return false;
|
|
4948
|
+
const base = value.split(";")[0]?.trim().toLowerCase() ?? "";
|
|
4949
|
+
return base === "application/json" || base.endsWith("+json");
|
|
4950
|
+
}
|
|
4951
|
+
function bearerTokenMatches(header, token) {
|
|
4952
|
+
const expected = Buffer.from(`Bearer ${token}`);
|
|
4953
|
+
const supplied = Buffer.from(header ?? "");
|
|
4954
|
+
if (supplied.length !== expected.length) return false;
|
|
4955
|
+
return timingSafeEqual2(supplied, expected);
|
|
4956
|
+
}
|
|
4800
4957
|
|
|
4801
4958
|
// src/token-store.ts
|
|
4802
4959
|
import * as fs3 from "node:fs/promises";
|
|
@@ -5098,6 +5255,7 @@ export {
|
|
|
5098
5255
|
MCPServer,
|
|
5099
5256
|
MCPVaultTokenStore,
|
|
5100
5257
|
MCP_CONSTANTS,
|
|
5258
|
+
MCP_ENV_MASK,
|
|
5101
5259
|
MCP_OPERATION_LIMITS,
|
|
5102
5260
|
SSEReader,
|
|
5103
5261
|
SSETransport,
|
package/dist/manage.d.ts
CHANGED
|
@@ -59,6 +59,21 @@ export interface McpManageDeps {
|
|
|
59
59
|
/** Built-in presets (from core `allServers()`), used by name-only `add`. */
|
|
60
60
|
presets?: Record<string, MCPServerConfig> | undefined;
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Build a clean MCPServerConfig from loose input, omitting undefined keys so
|
|
64
|
+
* `exactOptionalPropertyTypes` stays satisfied and we never write `null`-ish
|
|
65
|
+
* holes into config.json. `base` lets `update` merge onto an existing entry.
|
|
66
|
+
*/
|
|
67
|
+
/**
|
|
68
|
+
* Placeholder a caller receives in place of a secret-bearing env value.
|
|
69
|
+
*
|
|
70
|
+
* WS-036: `mcp.list` echoed MCP server env verbatim over the WebSocket, and
|
|
71
|
+
* MCP env is where server credentials live (`GITHUB_TOKEN`, `*_API_KEY`, …).
|
|
72
|
+
* Read surfaces substitute this; sending it back means "leave that value
|
|
73
|
+
* alone", so the browser can still edit a server without ever having been
|
|
74
|
+
* given its secrets.
|
|
75
|
+
*/
|
|
76
|
+
export declare const MCP_ENV_MASK = "__wrongstack_unchanged__";
|
|
62
77
|
/** List all configured servers, merged with live registry status + tool names. */
|
|
63
78
|
export declare function listMcp(deps: McpManageDeps): Promise<McpServerInfo[]>;
|
|
64
79
|
/**
|
package/dist/server.d.ts
CHANGED
|
@@ -79,8 +79,41 @@ export declare class MCPServer {
|
|
|
79
79
|
*/
|
|
80
80
|
handleMessage(raw: string): Promise<string | null>;
|
|
81
81
|
private dispatch;
|
|
82
|
+
/**
|
|
83
|
+
* WS-026: enforce the `inputSchema` this server advertises on `tools/list`.
|
|
84
|
+
*
|
|
85
|
+
* `tools/call` used to forward `params.arguments` to the host verbatim after
|
|
86
|
+
* checking only that it was a non-array object — so every `enum`, `required`,
|
|
87
|
+
* `additionalProperties: false`, and numeric bound in the published schema
|
|
88
|
+
* was advisory. A client (or an attacker who reached the transport) could
|
|
89
|
+
* send `{mode: "../../etc"}` to a tool whose schema declares
|
|
90
|
+
* `enum: ["read","write"]` and the tool would receive it. Publishing a
|
|
91
|
+
* contract and not enforcing it is worse than publishing none: downstream
|
|
92
|
+
* tools are written against the schema they declared.
|
|
93
|
+
*
|
|
94
|
+
* SCOPE: `validateAgainstSchema` is the shared validator that also gates the
|
|
95
|
+
* agent's own tool executor. It checks `type`, `enum`, and `required`, and
|
|
96
|
+
* recurses through `properties`/`items` — it does NOT check
|
|
97
|
+
* `additionalProperties: false`, numeric bounds, or string lengths. So those
|
|
98
|
+
* keywords stay advisory here. Teaching the shared validator about them
|
|
99
|
+
* would change what the agent accepts on every tool call in the product,
|
|
100
|
+
* which is a deliberate decision that does not belong inside a transport
|
|
101
|
+
* fix; it is tracked separately.
|
|
102
|
+
*
|
|
103
|
+
* Unknown tool names are left alone — the host owns that error, and
|
|
104
|
+
* answering "no such tool" here would fork the message for no benefit.
|
|
105
|
+
*/
|
|
106
|
+
private assertArgumentsMatchSchema;
|
|
82
107
|
private encodeError;
|
|
83
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Marks a `tools/call` rejected by {@link MCPServer.assertArgumentsMatchSchema}
|
|
111
|
+
* so `handleMessage` can answer with JSON-RPC `-32602 Invalid params` rather
|
|
112
|
+
* than the generic internal-error code every other throw maps to.
|
|
113
|
+
*/
|
|
114
|
+
export declare class InvalidToolArgumentsError extends Error {
|
|
115
|
+
readonly name = "InvalidToolArgumentsError";
|
|
116
|
+
}
|
|
84
117
|
/** Normalize a host result's content into MCP content blocks. */
|
|
85
118
|
export declare function toContentBlocks(content: unknown): Array<{
|
|
86
119
|
type: 'text';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.298.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "WrongStack Model Context Protocol client and registry: stdio, SSE, and streamable HTTP transports.",
|
|
6
6
|
"repository": {
|
|
@@ -22,13 +22,14 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
25
|
-
"dist"
|
|
25
|
+
"dist",
|
|
26
|
+
"!dist/**/*.map"
|
|
26
27
|
],
|
|
27
28
|
"dependencies": {
|
|
28
|
-
"@wrongstack/core": "0.
|
|
29
|
+
"@wrongstack/core": "0.298.1"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
|
-
"@types/node": "^26.1.
|
|
32
|
+
"@types/node": "^26.1.2",
|
|
32
33
|
"typescript": "^7.0.2",
|
|
33
34
|
"undici-types": "^8.9.0",
|
|
34
35
|
"vitest": "^4.1.10"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authorization-manager.d.ts","sourceRoot":"","sources":["../src/authorization-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EAEpC,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAGjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,0BAA0B,EAE1B,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAK1B,KAAK,qBAAqB,GAAG,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,gCAAgC,KACvC,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAE9C,KAAK,yBAAyB,GAAG,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAE5F,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACjD,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC3E;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AASD;;;;GAIG;AACH,qBAAa,uBAAuB;IAOtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC,YAA6B,OAAO,EAAE,8BAA8B,EAQnE;IAEK,KAAK,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAgCnF;IAEK,QAAQ,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAiCpF;IAEK,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAyBlF;IAEK,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAavE;IAED,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,IAAI;CASb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-process.d.ts","sourceRoot":"","sources":["../src/client-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,oBAAoB,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CA6BvD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-protocol-helpers.d.ts","sourceRoot":"","sources":["../src/client-protocol-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAID,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,UAAU,UAAQ,GACjB,OAAO,CAAC,KAAK,IAAI,MAAM,CAOzB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI5F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAIrD"}
|
package/dist/client.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;IACxB,wDAAwD;+BACtC,YAAY;IAE9B,6DAA6D;;;;;IAM7D,2DAA2D;;QAEzD,oEAAoE;;QAEpE,sEAAsE;;QAEtE,sEAAsE;;QAEtE,qDAAqD;;QAErD,iGAAiG;;;IAInG,+CAA+C;;QAE7C,0EAA0E;;QAE1E,wDAAwD;;;IAI1D,mCAAmC;;QAEjC,qFAAqF;;QAErF,mEAAmE;;;IAIrE,0DAA0D;kCACrC,GAAG;IAExB,0CAA0C;;IAG1C,iDAAiD;8BAChC,IAAI;EACZ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"content-selection.d.ts","sourceRoot":"","sources":["../src/content-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,+BAA+B,QAAa,CAAC;AAC1D,eAAO,MAAM,4BAA4B,YACvC,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,CACF,CAAC;AAEX,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,KAAK,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,qBAAqB,EAC7B,MAAM,GAAE,kBAAuB,GAC9B,oBAAoB,CAyBtB;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACxC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,GAAE,kBAAuB,GAC9B,kBAAkB,CA6BpB"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|