@aimarket/warden 0.8.2 → 0.9.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/README-es.md +17 -7
  3. package/README-fr.md +17 -7
  4. package/README-ru.md +17 -7
  5. package/README-zh.md +17 -7
  6. package/README.md +17 -7
  7. package/dist/classifier.d.ts +50 -0
  8. package/dist/classifier.d.ts.map +1 -0
  9. package/dist/classifier.js +164 -0
  10. package/dist/classifier.js.map +1 -0
  11. package/dist/claude-hook.d.ts +53 -0
  12. package/dist/claude-hook.d.ts.map +1 -0
  13. package/dist/claude-hook.js +192 -0
  14. package/dist/claude-hook.js.map +1 -0
  15. package/dist/histor.d.ts +69 -0
  16. package/dist/histor.d.ts.map +1 -0
  17. package/dist/histor.js +82 -0
  18. package/dist/histor.js.map +1 -0
  19. package/dist/mcp-client.d.ts +58 -0
  20. package/dist/mcp-client.d.ts.map +1 -0
  21. package/dist/mcp-client.js +451 -0
  22. package/dist/mcp-client.js.map +1 -0
  23. package/dist/mcp-rpc.js +1 -1
  24. package/dist/mcp-server.js +8 -0
  25. package/dist/mcp-server.js.map +1 -1
  26. package/dist/mcp-tools.js +2 -2
  27. package/dist/mcp-tools.js.map +1 -1
  28. package/dist/mtl.d.ts +28 -0
  29. package/dist/mtl.d.ts.map +1 -0
  30. package/dist/mtl.js +77 -0
  31. package/dist/mtl.js.map +1 -0
  32. package/dist/scan-cli.d.ts +3 -0
  33. package/dist/scan-cli.d.ts.map +1 -0
  34. package/dist/scan-cli.js +36 -0
  35. package/dist/scan-cli.js.map +1 -0
  36. package/dist/scan-config.d.ts +72 -0
  37. package/dist/scan-config.d.ts.map +1 -0
  38. package/dist/scan-config.js +239 -0
  39. package/dist/scan-config.js.map +1 -0
  40. package/dist/scan-lock.d.ts +46 -0
  41. package/dist/scan-lock.d.ts.map +1 -0
  42. package/dist/scan-lock.js +112 -0
  43. package/dist/scan-lock.js.map +1 -0
  44. package/dist/scan-report.d.ts +21 -0
  45. package/dist/scan-report.d.ts.map +1 -0
  46. package/dist/scan-report.js +273 -0
  47. package/dist/scan-report.js.map +1 -0
  48. package/dist/scan.d.ts +137 -0
  49. package/dist/scan.d.ts.map +1 -0
  50. package/dist/scan.js +534 -0
  51. package/dist/scan.js.map +1 -0
  52. package/dist/static-scan.d.ts +1 -1
  53. package/dist/static-scan.d.ts.map +1 -1
  54. package/dist/static-scan.js +189 -4
  55. package/dist/static-scan.js.map +1 -1
  56. package/dist/tool-list.d.ts +34 -0
  57. package/dist/tool-list.d.ts.map +1 -0
  58. package/dist/tool-list.js +57 -0
  59. package/dist/tool-list.js.map +1 -0
  60. package/dist/wrap.d.ts.map +1 -1
  61. package/dist/wrap.js +2 -33
  62. package/dist/wrap.js.map +1 -1
  63. package/docs/gates.es.md +40 -7
  64. package/docs/gates.fr.md +39 -6
  65. package/docs/gates.md +38 -7
  66. package/docs/gates.ru.md +40 -7
  67. package/docs/gates.zh.md +10 -5
  68. package/docs/scan.es.md +184 -0
  69. package/docs/scan.fr.md +184 -0
  70. package/docs/scan.md +184 -0
  71. package/docs/scan.ru.md +184 -0
  72. package/docs/scan.zh.md +184 -0
  73. package/docs/scanner-comparison.es.md +218 -0
  74. package/docs/scanner-comparison.fr.md +223 -0
  75. package/docs/scanner-comparison.md +209 -0
  76. package/docs/scanner-comparison.ru.md +214 -0
  77. package/docs/scanner-comparison.zh.md +135 -0
  78. package/package.json +5 -3
@@ -0,0 +1,58 @@
1
+ import type { McpServerRef, ToolDef } from './types.js';
2
+ /**
3
+ * A one-shot MCP client for `scan`: initialize, list every tool, close.
4
+ *
5
+ * It never calls a tool, reads a resource or answers a sampling request. Over
6
+ * stdio it starts the server the way the client config says to — which runs
7
+ * that program, exactly as the MCP client would — so `scan --no-launch` exists
8
+ * for places (CI on a pull request) where running it is not acceptable.
9
+ */
10
+ export declare const PROTOCOL_VERSION = "2025-06-18";
11
+ export declare const RESPONSE_BYTES: number;
12
+ export interface FetchedServer {
13
+ tools: ToolDef[];
14
+ serverInfo?: {
15
+ name?: string;
16
+ version?: string;
17
+ };
18
+ protocolVersion?: string;
19
+ instructions?: string;
20
+ }
21
+ export interface ClientOptions {
22
+ timeoutMs: number;
23
+ clientVersion: string;
24
+ /** Remote servers only: refuse loopback, private, link-local and metadata addresses. */
25
+ publicOnly?: boolean;
26
+ headers?: Record<string, string>;
27
+ /** stdio: base environment for the child (defaults to process.env). */
28
+ baseEnv?: NodeJS.ProcessEnv;
29
+ cwd?: string;
30
+ }
31
+ export declare class McpClientError extends Error {
32
+ readonly kind: 'timeout' | 'spawn' | 'protocol' | 'http' | 'network' | 'refused';
33
+ constructor(kind: 'timeout' | 'spawn' | 'protocol' | 'http' | 'network' | 'refused', message: string);
34
+ }
35
+ export declare function fetchStdio(ref: McpServerRef, opts: ClientOptions): Promise<FetchedServer>;
36
+ /** True for addresses a CI scan must not be steered into: loopback, private, link-local, metadata, CGNAT, ULA. */
37
+ export declare function isNonPublicAddress(address: string): boolean;
38
+ /** Incremental SSE parser: yields `{event, data}` per dispatched event. */
39
+ export declare class SseParser {
40
+ private buf;
41
+ private event;
42
+ private data;
43
+ push(text: string): Array<{
44
+ event: string;
45
+ data: string;
46
+ }>;
47
+ end(): Array<{
48
+ event: string;
49
+ data: string;
50
+ }>;
51
+ }
52
+ /** Streamable HTTP (2025-03-26 and later): every request is a POST; the reply is JSON or an SSE stream. */
53
+ export declare function fetchStreamableHttp(ref: McpServerRef, opts: ClientOptions): Promise<FetchedServer>;
54
+ /** Legacy HTTP+SSE (2024-11-05): GET opens the stream, its `endpoint` event names where to POST. */
55
+ export declare function fetchLegacySse(ref: McpServerRef, opts: ClientOptions): Promise<FetchedServer>;
56
+ /** Dispatch on the server's transport. */
57
+ export declare function fetchServer(ref: McpServerRef, opts: ClientOptions): Promise<FetchedServer>;
58
+ //# sourceMappingURL=mcp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIxD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,cAAc,QAA4B,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,cAAe,SAAQ,KAAK;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS;gBAAvE,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM;CAC9G;AA4BD,wBAAsB,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAqD/F;AA4BD,kHAAkH;AAClH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAe3D;AAgDD,2EAA2E;AAC3E,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,IAAI,CAAgB;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAsB1D,GAAG,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAQD,2GAA2G;AAC3G,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA2DxG;AAED,oGAAoG;AACpG,wBAAsB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAoDnG;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAI1F"}
@@ -0,0 +1,451 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { request as httpRequest } from 'node:http';
3
+ import { request as httpsRequest } from 'node:https';
4
+ import { lookup as dnsLookup } from 'node:dns';
5
+ import { isIP } from 'node:net';
6
+ import { WrapFrames, readFrames } from './wrap-wire.js';
7
+ import { listAllTools, SCAN_LIST_LIMITS } from './tool-list.js';
8
+ /**
9
+ * A one-shot MCP client for `scan`: initialize, list every tool, close.
10
+ *
11
+ * It never calls a tool, reads a resource or answers a sampling request. Over
12
+ * stdio it starts the server the way the client config says to — which runs
13
+ * that program, exactly as the MCP client would — so `scan --no-launch` exists
14
+ * for places (CI on a pull request) where running it is not acceptable.
15
+ */
16
+ export const PROTOCOL_VERSION = '2025-06-18';
17
+ export const RESPONSE_BYTES = SCAN_LIST_LIMITS.maxBytes;
18
+ export class McpClientError extends Error {
19
+ kind;
20
+ constructor(kind, message) {
21
+ super(message);
22
+ this.kind = kind;
23
+ this.name = 'McpClientError';
24
+ }
25
+ }
26
+ function initParams(version) {
27
+ return { protocolVersion: PROTOCOL_VERSION, capabilities: {}, clientInfo: { name: 'warden-scan', version } };
28
+ }
29
+ function readInit(result) {
30
+ if (!result || typeof result !== 'object')
31
+ throw new McpClientError('protocol', 'initialize returned no result');
32
+ const r = result;
33
+ const info = r.serverInfo && typeof r.serverInfo === 'object' ? r.serverInfo : {};
34
+ return {
35
+ protocolVersion: typeof r.protocolVersion === 'string' ? r.protocolVersion : undefined,
36
+ serverInfo: { name: typeof info.name === 'string' ? info.name : undefined, version: typeof info.version === 'string' ? info.version : undefined },
37
+ instructions: typeof r.instructions === 'string' ? r.instructions : undefined,
38
+ };
39
+ }
40
+ /** Answer what a well-behaved client must answer; refuse everything else. */
41
+ function answerServerRequest(msg) {
42
+ if (msg.method === 'ping')
43
+ return { jsonrpc: '2.0', id: msg.id, result: {} };
44
+ if (msg.method === 'roots/list')
45
+ return { jsonrpc: '2.0', id: msg.id, result: { roots: [] } };
46
+ return { jsonrpc: '2.0', id: msg.id, error: { code: -32601, message: 'warden scan does not serve this request' } };
47
+ }
48
+ // ── stdio ────────────────────────────────────────────────────────────────────
49
+ export async function fetchStdio(ref, opts) {
50
+ if (!ref.command)
51
+ throw new McpClientError('spawn', 'no command');
52
+ const child = spawn(ref.command, ref.args ?? [], {
53
+ stdio: ['pipe', 'pipe', 'pipe'], cwd: opts.cwd,
54
+ env: { ...(opts.baseEnv ?? process.env), ...(ref.env ?? {}) },
55
+ });
56
+ let stderrTail = '';
57
+ child.stderr.on('data', chunk => { stderrTail = (stderrTail + String(chunk)).slice(-2000); });
58
+ const pending = new Map();
59
+ let failure;
60
+ const fail = (err) => {
61
+ if (failure)
62
+ return;
63
+ failure = err;
64
+ for (const p of pending.values())
65
+ p.reject(err);
66
+ pending.clear();
67
+ };
68
+ child.on('error', e => fail(new McpClientError('spawn', `could not start: ${e.message}`)));
69
+ child.on('close', code => fail(new McpClientError('spawn', `exited (code ${code ?? 'signal'}) before answering${stderrTail ? `: ${lastLine(stderrTail)}` : ''}`)));
70
+ child.stdin.on('error', () => { });
71
+ const send = (msg) => { if (!child.stdin.destroyed)
72
+ child.stdin.write(JSON.stringify(msg) + '\n'); };
73
+ readFrames(child.stdout, new WrapFrames('ndjson'), body => {
74
+ let msg;
75
+ try {
76
+ msg = JSON.parse(body);
77
+ }
78
+ catch {
79
+ return;
80
+ } // a stray log line on stdout is not our concern
81
+ if (!msg || typeof msg !== 'object')
82
+ return;
83
+ if (msg.method !== undefined) {
84
+ if (msg.id !== undefined && msg.id !== null)
85
+ send(answerServerRequest(msg));
86
+ return;
87
+ }
88
+ if (typeof msg.id !== 'string')
89
+ return;
90
+ const p = pending.get(msg.id);
91
+ if (!p)
92
+ return;
93
+ pending.delete(msg.id);
94
+ p.resolve({ msg, bytes: Buffer.byteLength(body) });
95
+ }, e => fail(new McpClientError('protocol', e instanceof Error ? e.message : String(e))), () => { });
96
+ let seq = 0;
97
+ const call = (method, params) => new Promise((resolve, reject) => {
98
+ if (failure) {
99
+ reject(failure);
100
+ return;
101
+ }
102
+ const id = `warden-scan:${seq++}`;
103
+ pending.set(id, { resolve, reject });
104
+ send({ jsonrpc: '2.0', id, method, params });
105
+ });
106
+ const result = async (method, params) => {
107
+ const { msg, bytes } = await call(method, params);
108
+ if (msg.error)
109
+ throw new McpClientError('protocol', `${method} failed: ${msg.error.message ?? JSON.stringify(msg.error)}`);
110
+ return { result: msg.result, bytes };
111
+ };
112
+ const work = (async () => {
113
+ const init = readInit((await result('initialize', initParams(opts.clientVersion))).result);
114
+ send({ jsonrpc: '2.0', method: 'notifications/initialized' });
115
+ const tools = await listAllTools(cursor => result('tools/list', cursor === undefined ? {} : { cursor }), SCAN_LIST_LIMITS);
116
+ return { ...init, tools };
117
+ })();
118
+ try {
119
+ return await withTimeout(work, opts.timeoutMs, () => new McpClientError('timeout', `no answer within ${opts.timeoutMs} ms${stderrTail ? `: ${lastLine(stderrTail)}` : ''}`));
120
+ }
121
+ finally {
122
+ stopChild(child);
123
+ }
124
+ }
125
+ function stopChild(child) {
126
+ if (child.exitCode !== null || child.signalCode !== null)
127
+ return;
128
+ try {
129
+ child.stdin?.end();
130
+ }
131
+ catch { /* already closed */ }
132
+ const term = setTimeout(() => { try {
133
+ child.kill('SIGTERM');
134
+ }
135
+ catch { /* gone */ } }, 1500);
136
+ const kill = setTimeout(() => { try {
137
+ child.kill('SIGKILL');
138
+ }
139
+ catch { /* gone */ } }, 4000);
140
+ term.unref();
141
+ kill.unref();
142
+ child.once('close', () => { clearTimeout(term); clearTimeout(kill); });
143
+ child.stdout?.destroy();
144
+ child.stderr?.destroy();
145
+ child.unref();
146
+ }
147
+ /** The most telling stderr line: the last one that is not a stack frame or Node's version footer. */
148
+ function lastLine(text) {
149
+ const lines = text.trim().split('\n').map(l => l.trimEnd()).filter(l => l && !/^\s+at\s/.test(l) && !/^Node\.js v\d/.test(l) && !/^\s*\^+\s*$/.test(l));
150
+ const errorLine = [...lines].reverse().find(l => /error|cannot|not found|missing|denied|refused/i.test(l));
151
+ return (errorLine ?? lines[lines.length - 1] ?? '').slice(0, 300);
152
+ }
153
+ function withTimeout(work, ms, error) {
154
+ let timer;
155
+ const timeout = new Promise((_, reject) => { timer = setTimeout(() => reject(error()), ms); });
156
+ return Promise.race([work, timeout]).finally(() => clearTimeout(timer));
157
+ }
158
+ // ── address policy for remote servers ────────────────────────────────────────
159
+ /** True for addresses a CI scan must not be steered into: loopback, private, link-local, metadata, CGNAT, ULA. */
160
+ export function isNonPublicAddress(address) {
161
+ const v = isIP(address);
162
+ if (v === 4) {
163
+ const [a, b] = address.split('.').map(Number);
164
+ return a === 0 || a === 10 || a === 127 || (a === 100 && b >= 64 && b <= 127) || (a === 169 && b === 254) ||
165
+ (a === 172 && b >= 16 && b <= 31) || (a === 192 && b === 168) || (a === 198 && (b === 18 || b === 19)) || a >= 224;
166
+ }
167
+ if (v === 6) {
168
+ const x = address.toLowerCase();
169
+ if (x === '::' || x === '::1')
170
+ return true;
171
+ const mapped = /^::ffff:(\d+\.\d+\.\d+\.\d+)$/.exec(x);
172
+ if (mapped)
173
+ return isNonPublicAddress(mapped[1]);
174
+ return /^(fc|fd|fe8|fe9|fea|feb|ff)/.test(x) || x.startsWith('fd00:ec2:');
175
+ }
176
+ return true;
177
+ }
178
+ function guardedLookup(publicOnly) {
179
+ return (hostname, options, callback) => {
180
+ dnsLookup(hostname, { ...options, all: true }, (err, addresses) => {
181
+ if (err) {
182
+ callback(err, '');
183
+ return;
184
+ }
185
+ const list = addresses;
186
+ if (publicOnly) {
187
+ const bad = list.find(a => isNonPublicAddress(a.address));
188
+ if (bad) {
189
+ callback(Object.assign(new Error(`${hostname} resolves to a non-public address (${bad.address}); refused by --public-only`), { code: 'EWARDENREFUSED' }), '');
190
+ return;
191
+ }
192
+ }
193
+ if (options.all)
194
+ callback(null, list);
195
+ else
196
+ callback(null, list[0].address, list[0].family);
197
+ });
198
+ };
199
+ }
200
+ function open(url, method, headers, body, opts, signal) {
201
+ if (url.protocol !== 'https:' && url.protocol !== 'http:')
202
+ return Promise.reject(new McpClientError('refused', `unsupported URL scheme ${url.protocol}`));
203
+ if (opts.publicOnly && isIP(url.hostname.replace(/^\[|\]$/g, '')) && isNonPublicAddress(url.hostname.replace(/^\[|\]$/g, ''))) {
204
+ return Promise.reject(new McpClientError('refused', `${url.hostname} is a non-public address; refused by --public-only`));
205
+ }
206
+ const fn = url.protocol === 'https:' ? httpsRequest : httpRequest;
207
+ return new Promise((resolve, reject) => {
208
+ const req = fn(url, { method, headers: { 'user-agent': `warden-scan/${opts.clientVersion}`, ...headers, ...(body ? { 'content-length': String(Buffer.byteLength(body)) } : {}) }, lookup: guardedLookup(!!opts.publicOnly), signal }, res => resolve({ status: res.statusCode ?? 0, headers: res.headers, res }));
209
+ req.on('error', e => reject(e.code === 'EWARDENREFUSED' ? new McpClientError('refused', e.message)
210
+ : signal.aborted ? new McpClientError('timeout', 'timed out') : new McpClientError('network', e.message)));
211
+ if (body)
212
+ req.write(body);
213
+ req.end();
214
+ });
215
+ }
216
+ async function readAll(res, limit = RESPONSE_BYTES) {
217
+ const chunks = [];
218
+ let total = 0;
219
+ for await (const chunk of res) {
220
+ total += chunk.length;
221
+ if (total > limit) {
222
+ res.destroy();
223
+ throw new McpClientError('protocol', `response exceeds ${limit} bytes`);
224
+ }
225
+ chunks.push(chunk);
226
+ }
227
+ return Buffer.concat(chunks).toString('utf8');
228
+ }
229
+ /** Incremental SSE parser: yields `{event, data}` per dispatched event. */
230
+ export class SseParser {
231
+ buf = '';
232
+ event = '';
233
+ data = [];
234
+ push(text) {
235
+ this.buf += text;
236
+ const out = [];
237
+ let nl;
238
+ while ((nl = this.buf.search(/\r\n|\r|\n/)) >= 0) {
239
+ const line = this.buf.slice(0, nl);
240
+ this.buf = this.buf.slice(nl + (this.buf.startsWith('\r\n', nl) ? 2 : 1));
241
+ if (line === '') {
242
+ if (this.data.length)
243
+ out.push({ event: this.event || 'message', data: this.data.join('\n') });
244
+ this.event = '';
245
+ this.data = [];
246
+ continue;
247
+ }
248
+ if (line.startsWith(':'))
249
+ continue;
250
+ const colon = line.indexOf(':');
251
+ const field = colon < 0 ? line : line.slice(0, colon);
252
+ const value = colon < 0 ? '' : line.slice(colon + 1).replace(/^ /, '');
253
+ if (field === 'event')
254
+ this.event = value;
255
+ else if (field === 'data')
256
+ this.data.push(value);
257
+ }
258
+ if (this.buf.length > RESPONSE_BYTES)
259
+ throw new McpClientError('protocol', 'SSE line exceeds the response limit');
260
+ return out;
261
+ }
262
+ end() { return this.push('\n\n'); }
263
+ }
264
+ function parseRpc(text) {
265
+ let v;
266
+ try {
267
+ v = JSON.parse(text);
268
+ }
269
+ catch {
270
+ return [];
271
+ }
272
+ return (Array.isArray(v) ? v : [v]).filter((m) => !!m && typeof m === 'object');
273
+ }
274
+ /** Streamable HTTP (2025-03-26 and later): every request is a POST; the reply is JSON or an SSE stream. */
275
+ export async function fetchStreamableHttp(ref, opts) {
276
+ const url = new URL(ref.url);
277
+ const controller = new AbortController();
278
+ let session, negotiated, seq = 0;
279
+ const post = async (msg, expectReply) => {
280
+ const headers = { ...(opts.headers ?? {}), 'content-type': 'application/json', accept: 'application/json, text/event-stream' };
281
+ if (session)
282
+ headers['mcp-session-id'] = session;
283
+ if (negotiated)
284
+ headers['mcp-protocol-version'] = negotiated;
285
+ const body = JSON.stringify(msg);
286
+ const reply = await open(url, 'POST', headers, body, opts, controller.signal);
287
+ const sid = reply.headers['mcp-session-id'];
288
+ if (typeof sid === 'string' && sid)
289
+ session = sid;
290
+ if (reply.status >= 300 && reply.status < 400) {
291
+ reply.res.resume();
292
+ throw new McpClientError('http', `HTTP ${reply.status} redirect (not followed)`);
293
+ }
294
+ if (reply.status === 401 || reply.status === 403) {
295
+ reply.res.resume();
296
+ throw new McpClientError('http', `HTTP ${reply.status}: the server needs credentials this config does not carry`);
297
+ }
298
+ if (reply.status >= 400) {
299
+ reply.res.resume();
300
+ throw new McpClientError('http', `HTTP ${reply.status}`);
301
+ }
302
+ if (!expectReply) {
303
+ reply.res.resume();
304
+ return { bytes: 0 };
305
+ }
306
+ const type = String(reply.headers['content-type'] ?? '');
307
+ if (type.includes('text/event-stream')) {
308
+ const parser = new SseParser();
309
+ let bytes = 0;
310
+ for await (const chunk of reply.res) {
311
+ bytes += chunk.length;
312
+ if (bytes > RESPONSE_BYTES) {
313
+ reply.res.destroy();
314
+ throw new McpClientError('protocol', 'SSE response exceeds the limit');
315
+ }
316
+ for (const ev of parser.push(String(chunk))) {
317
+ for (const m of parseRpc(ev.data)) {
318
+ if (m.id === msg.id && m.method === undefined) {
319
+ reply.res.destroy();
320
+ return { msg: m, bytes };
321
+ }
322
+ }
323
+ }
324
+ }
325
+ for (const ev of parser.end())
326
+ for (const m of parseRpc(ev.data))
327
+ if (m.id === msg.id && m.method === undefined)
328
+ return { msg: m, bytes };
329
+ throw new McpClientError('protocol', `${msg.method}: the event stream ended without a reply`);
330
+ }
331
+ const text = await readAll(reply.res);
332
+ const m = parseRpc(text).find(r => r.id === msg.id);
333
+ if (!m)
334
+ throw new McpClientError('protocol', `${msg.method}: no JSON-RPC reply in the response`);
335
+ return { msg: m, bytes: Buffer.byteLength(text) };
336
+ };
337
+ const call = async (method, params) => {
338
+ const { msg, bytes } = await post({ jsonrpc: '2.0', id: `warden-scan:${seq++}`, method, params }, true);
339
+ if (msg.error)
340
+ throw new McpClientError('protocol', `${method} failed: ${msg.error.message ?? JSON.stringify(msg.error)}`);
341
+ return { result: msg.result, bytes };
342
+ };
343
+ const work = (async () => {
344
+ const init = readInit((await call('initialize', initParams(opts.clientVersion))).result);
345
+ negotiated = init.protocolVersion;
346
+ await post({ jsonrpc: '2.0', method: 'notifications/initialized' }, false).catch(() => { });
347
+ const tools = await listAllTools(cursor => call('tools/list', cursor === undefined ? {} : { cursor }), SCAN_LIST_LIMITS);
348
+ return { ...init, tools };
349
+ })();
350
+ try {
351
+ return await withTimeout(work, opts.timeoutMs, () => new McpClientError('timeout', `no answer within ${opts.timeoutMs} ms`));
352
+ }
353
+ finally {
354
+ controller.abort();
355
+ if (session) {
356
+ // Courtesy: end the session. Never awaited past a short bound, never fatal.
357
+ const end = new AbortController();
358
+ const t = setTimeout(() => end.abort(), 2000);
359
+ t.unref();
360
+ open(url, 'GET', {}, undefined, opts, end.signal).then(r => r.res.resume(), () => { }).finally(() => clearTimeout(t));
361
+ }
362
+ }
363
+ }
364
+ /** Legacy HTTP+SSE (2024-11-05): GET opens the stream, its `endpoint` event names where to POST. */
365
+ export async function fetchLegacySse(ref, opts) {
366
+ const url = new URL(ref.url);
367
+ const controller = new AbortController();
368
+ const work = (async () => {
369
+ const reply = await open(url, 'GET', { ...(opts.headers ?? {}), accept: 'text/event-stream' }, undefined, opts, controller.signal);
370
+ if (reply.status >= 400) {
371
+ reply.res.resume();
372
+ throw new McpClientError('http', `HTTP ${reply.status}`);
373
+ }
374
+ if (reply.status >= 300) {
375
+ reply.res.resume();
376
+ throw new McpClientError('http', `HTTP ${reply.status} redirect (not followed)`);
377
+ }
378
+ const parser = new SseParser();
379
+ const pending = new Map();
380
+ let endpoint, endpointReady = () => { }, streamError = () => { };
381
+ const ready = new Promise((resolve, reject) => { endpointReady = resolve; streamError = reject; });
382
+ let bytes = 0;
383
+ reply.res.on('data', chunk => {
384
+ bytes += chunk.length;
385
+ if (bytes > RESPONSE_BYTES * 4) {
386
+ reply.res.destroy();
387
+ streamError(new McpClientError('protocol', 'SSE stream exceeds the limit'));
388
+ return;
389
+ }
390
+ for (const ev of parser.push(String(chunk))) {
391
+ if (ev.event === 'endpoint' && !endpoint) {
392
+ const target = new URL(ev.data.trim(), url);
393
+ if (target.origin !== url.origin) {
394
+ streamError(new McpClientError('refused', `endpoint event points at another origin (${target.origin})`));
395
+ return;
396
+ }
397
+ endpoint = target;
398
+ endpointReady(target);
399
+ continue;
400
+ }
401
+ for (const m of parseRpc(ev.data)) {
402
+ if (m.method !== undefined) {
403
+ if (m.id !== undefined && m.id !== null && endpoint)
404
+ void open(endpoint, 'POST', { ...(opts.headers ?? {}), 'content-type': 'application/json' }, JSON.stringify(answerServerRequest(m)), opts, controller.signal).then(r => r.res.resume(), () => { });
405
+ continue;
406
+ }
407
+ const resolve = typeof m.id === 'string' ? pending.get(m.id) : undefined;
408
+ if (resolve) {
409
+ pending.delete(m.id);
410
+ resolve({ msg: m, bytes: Buffer.byteLength(ev.data) });
411
+ }
412
+ }
413
+ }
414
+ });
415
+ reply.res.on('error', e => streamError(new McpClientError('network', e.message)));
416
+ reply.res.on('end', () => streamError(new McpClientError('protocol', 'the event stream closed')));
417
+ const postUrl = await ready;
418
+ let seq = 0;
419
+ const call = async (method, params) => {
420
+ const id = `warden-scan:${seq++}`;
421
+ const answered = new Promise((resolve, reject) => { pending.set(id, resolve); ready.catch(reject); reply.res.once('end', () => reject(new McpClientError('protocol', 'the event stream closed'))); });
422
+ const r = await open(postUrl, 'POST', { ...(opts.headers ?? {}), 'content-type': 'application/json' }, JSON.stringify({ jsonrpc: '2.0', id, method, params }), opts, controller.signal);
423
+ r.res.resume();
424
+ if (r.status >= 400)
425
+ throw new McpClientError('http', `${method}: HTTP ${r.status}`);
426
+ const { msg, bytes: n } = await answered;
427
+ if (msg.error)
428
+ throw new McpClientError('protocol', `${method} failed: ${msg.error.message ?? JSON.stringify(msg.error)}`);
429
+ return { result: msg.result, bytes: n };
430
+ };
431
+ const init = readInit((await call('initialize', initParams(opts.clientVersion))).result);
432
+ await open(postUrl, 'POST', { ...(opts.headers ?? {}), 'content-type': 'application/json' }, JSON.stringify({ jsonrpc: '2.0', method: 'notifications/initialized' }), opts, controller.signal).then(r => r.res.resume(), () => { });
433
+ const tools = await listAllTools(cursor => call('tools/list', cursor === undefined ? {} : { cursor }), SCAN_LIST_LIMITS);
434
+ return { ...init, tools };
435
+ })();
436
+ try {
437
+ return await withTimeout(work, opts.timeoutMs, () => new McpClientError('timeout', `no answer within ${opts.timeoutMs} ms`));
438
+ }
439
+ finally {
440
+ controller.abort();
441
+ }
442
+ }
443
+ /** Dispatch on the server's transport. */
444
+ export function fetchServer(ref, opts) {
445
+ if (ref.transport === 'stdio')
446
+ return fetchStdio(ref, opts);
447
+ if (ref.transport === 'sse')
448
+ return fetchLegacySse(ref, opts);
449
+ return fetchStreamableHttp(ref, opts);
450
+ }
451
+ //# sourceMappingURL=mcp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
package/dist/mcp-rpc.js CHANGED
@@ -6,7 +6,7 @@ import { dirname, join } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import { callMcpTool, MCP_INSTRUCTIONS, MCP_TOOLS, McpToolError, payloadTooLarge } from "./mcp-tools.js";
8
8
  export const PROTOCOL = "2025-03-26";
9
- const FALLBACK_VERSION = "0.8.2";
9
+ const FALLBACK_VERSION = "0.9.0";
10
10
  export function packageVersion() {
11
11
  try {
12
12
  const pkgPath = join(dirname(fileURLToPath(import.meta.url)), "..", "package.json");
@@ -79,6 +79,14 @@ async function main() {
79
79
  async function entry() {
80
80
  if (process.argv.length <= 2)
81
81
  return main();
82
+ if (process.argv[2] === 'scan' || process.argv[2] === 'hook') {
83
+ const code = process.argv[2] === 'scan'
84
+ ? await (await import("./scan-cli.js")).runScanCli(process.argv.slice(3))
85
+ : await (await import("./claude-hook.js")).runHookCli(process.argv.slice(3));
86
+ // Servers scan started are already told to stop; do not wait on their pipes.
87
+ stdout.write("", () => process.exit(code));
88
+ return;
89
+ }
82
90
  const { parseWrapArgs, runPins } = await import("./wrap-cli.js");
83
91
  let options;
84
92
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
package/dist/mcp-tools.js CHANGED
@@ -207,7 +207,7 @@ export const MCP_TOOLS = [
207
207
  {
208
208
  name: "static_scan_tools",
209
209
  title: "Static-scan MCP tool definitions for injection and exfil",
210
- description: "Run only the static-scan gate (ruleset v8, 26 signatures with context guards, text folded first) over every advertised tool field: name, description, input schema, title, output schema, annotations and extension metadata. Returns findings, a 0..1 gate score, and the published ruleset digest.\n\n" +
210
+ description: "Run only the static-scan gate (ruleset v10, 35 signatures with context guards, text folded first) over every advertised tool field: name, description, input schema, title, output schema, annotations and extension metadata. Returns findings, a 0..1 gate score, and the published ruleset digest.\n\n" +
211
211
  "When to use: you have a tools/list dump and want injection / credential / hidden-Unicode hits without origin, pinning, or the threat feed. Cheaper and narrower than vet_mcp_server.\n\n" +
212
212
  "When NOT to use: you need the full host decision (vet_mcp_server); you want operator glob classification (classify_sensitive_tools); you want the published rule table itself (list_scan_rules).\n\n" +
213
213
  "Behaviour: local regex+guard evaluation, no network, no mutation. Advisory-tier hits are reported with advisory=true and do not reduce the score. Does not launch servers or send tool output to a model.\n\n" +
@@ -380,7 +380,7 @@ export const MCP_TOOLS = [
380
380
  name: "list_scan_rules",
381
381
  title: "List the published WARDEN static-scan rule table",
382
382
  description: "Return the in-force static-scan ruleset: version, digest, and every rule's code, severity, tier (block vs advise), surfaces (name / description / inputSchema / title / outputSchema / annotations / metadata), optional regex source, and named guards. A recorded verdict is only reproducible together with this identity.\n\n" +
383
- "When to use: explain a finding code, confirm you are on ruleset v8, or re-run a scan with the same table. include_source=true adds the regex source and flags for an independent re-implementation.\n\n" +
383
+ "When to use: explain a finding code, confirm you are on ruleset v10, or re-run a scan with the same table. include_source=true adds the regex source and flags for an independent re-implementation.\n\n" +
384
384
  "When NOT to use: evaluating a live tools/list (static_scan_tools or vet_mcp_server — those apply the table). This tool does not scan anything.\n\n" +
385
385
  "Behaviour: local snapshot of the compiled rule table, no network, no mutation. Digest is sha256 over the RFC 8785 form of {version, fold, rules} (each rule carries its `raw` flag).\n\n" +
386
386
  "Returns the ruleset object. Example: list_scan_rules({ include_source: false }).",