@k08200/mcp-probe 0.1.0 → 1.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.
Files changed (43) hide show
  1. package/README.md +297 -13
  2. package/dist/checker.d.ts +2 -11
  3. package/dist/checker.d.ts.map +1 -1
  4. package/dist/checker.js +93 -9
  5. package/dist/checker.js.map +1 -1
  6. package/dist/cli.js +132 -5
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config.d.ts +4 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +143 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/protocols/mcp-client.d.ts.map +1 -1
  13. package/dist/protocols/mcp-client.js +225 -64
  14. package/dist/protocols/mcp-client.js.map +1 -1
  15. package/dist/reporters/badge.d.ts +12 -0
  16. package/dist/reporters/badge.d.ts.map +1 -0
  17. package/dist/reporters/badge.js +34 -0
  18. package/dist/reporters/badge.js.map +1 -0
  19. package/dist/reporters/github.d.ts +7 -0
  20. package/dist/reporters/github.d.ts.map +1 -0
  21. package/dist/reporters/github.js +138 -0
  22. package/dist/reporters/github.js.map +1 -0
  23. package/dist/reporters/json-reporter.d.ts +2 -2
  24. package/dist/reporters/json-reporter.d.ts.map +1 -1
  25. package/dist/reporters/json-reporter.js.map +1 -1
  26. package/dist/reporters/terminal.d.ts +2 -1
  27. package/dist/reporters/terminal.d.ts.map +1 -1
  28. package/dist/reporters/terminal.js +38 -0
  29. package/dist/reporters/terminal.js.map +1 -1
  30. package/dist/types.d.ts +73 -2
  31. package/dist/types.d.ts.map +1 -1
  32. package/examples/datadog.tools.json +13 -0
  33. package/examples/github-actions/fleet.yml +25 -0
  34. package/examples/github-actions/remote-server.yml +24 -0
  35. package/examples/github-actions/single-server.yml +21 -0
  36. package/examples/mcp-probe.config.json +23 -0
  37. package/examples/recipes/README.md +35 -0
  38. package/examples/recipes/datadog.tools.json +23 -0
  39. package/examples/recipes/gmail.tools.json +18 -0
  40. package/examples/recipes/supabase.tools.json +19 -0
  41. package/examples/self-check.config.json +14 -0
  42. package/examples/self-check.tools.json +17 -0
  43. package/package.json +4 -3
@@ -1,87 +1,248 @@
1
1
  import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
2
  import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
- function firstMeaningfulLine(text) {
3
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
4
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
5
+ const VERSION = '1.0.0';
6
+ // Known startup warning patterns from official MCP servers — not fatal errors
7
+ const STDERR_WARNING_PATTERNS = [
8
+ /^warn(?:ing)?:/i,
9
+ /deprecat/i,
10
+ /optional.*not found/i,
11
+ /version.*mismatch/i,
12
+ /missing optional/i,
13
+ /checking for updates/i,
14
+ /update available/i,
15
+ ];
16
+ function compilePatterns(patterns) {
17
+ return (patterns ?? []).map((pattern) => new RegExp(pattern, 'i'));
18
+ }
19
+ function isStderrNoise(line, rules) {
20
+ return STDERR_WARNING_PATTERNS.some((p) => p.test(line))
21
+ || compilePatterns(rules?.allow).some((p) => p.test(line));
22
+ }
23
+ function firstMeaningfulLine(text, fallback, rules) {
4
24
  const lines = text.split('\n').map((l) => l.trim()).filter(Boolean);
5
- // 1. "Error: ..." lines are most informative
6
- const errorColonLine = lines.find((l) => /^Error:/.test(l));
7
- if (errorColonLine)
8
- return errorColonLine;
9
- // 2. Skip stack frames, node internals, carets, and bare code fragments
25
+ const fatalLine = lines.find((l) => compilePatterns(rules?.fatal).some((p) => p.test(l)));
26
+ if (fatalLine)
27
+ return fatalLine;
28
+ const nonNoise = lines.filter((l) => !isStderrNoise(l, rules));
29
+ if (nonNoise.length === 0)
30
+ return fallback;
31
+ const target = nonNoise;
32
+ const errorLine = target.find((l) => /^Error:/i.test(l));
33
+ if (errorLine)
34
+ return errorLine;
10
35
  const skip = /^at |^node:|^\^$|^const |^throw |^Require stack/;
11
- const meaningful = lines.find((l) => !skip.test(l) && l.length > 3);
12
- return meaningful ?? lines[0] ?? text;
36
+ return target.find((l) => !skip.test(l) && l.length > 3) ?? target[0] ?? fallback;
13
37
  }
14
38
  function withTimeout(promise, ms, label) {
15
- const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms));
16
- return Promise.race([promise, timeout]);
39
+ let timeoutId;
40
+ const timeoutPromise = new Promise((_, reject) => {
41
+ timeoutId = setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms);
42
+ });
43
+ return Promise.race([promise, timeoutPromise]).finally(() => {
44
+ if (timeoutId)
45
+ clearTimeout(timeoutId);
46
+ });
47
+ }
48
+ // Fallback: generate minimal inputs from JSON Schema when no sidecar entry exists
49
+ function generateMinimalInput(schema) {
50
+ if (!schema || typeof schema !== 'object')
51
+ return {};
52
+ const s = schema;
53
+ const props = s['properties'];
54
+ if (!props)
55
+ return {};
56
+ const required = s['required'] ?? [];
57
+ const input = {};
58
+ for (const key of required) {
59
+ const prop = props[key];
60
+ if (!prop)
61
+ continue;
62
+ switch (prop['type']) {
63
+ case 'string':
64
+ input[key] = '';
65
+ break;
66
+ case 'number':
67
+ case 'integer':
68
+ input[key] = 0;
69
+ break;
70
+ case 'boolean':
71
+ input[key] = false;
72
+ break;
73
+ case 'array':
74
+ input[key] = [];
75
+ break;
76
+ case 'object':
77
+ input[key] = {};
78
+ break;
79
+ default: input[key] = null;
80
+ }
81
+ }
82
+ return input;
83
+ }
84
+ function isAuthError(message, notErrorCodes) {
85
+ if (/401|403|unauthorized|forbidden/i.test(message))
86
+ return true;
87
+ if (notErrorCodes) {
88
+ return notErrorCodes.some((code) => message.includes(String(code)));
89
+ }
90
+ return false;
91
+ }
92
+ function toolResultErrorMessage(result) {
93
+ if (!result || typeof result !== 'object')
94
+ return undefined;
95
+ const toolResult = result;
96
+ if (toolResult.isError !== true)
97
+ return undefined;
98
+ if (!Array.isArray(toolResult.content))
99
+ return 'Tool returned an error result';
100
+ const textParts = toolResult.content
101
+ .map((part) => {
102
+ if (!part || typeof part !== 'object')
103
+ return undefined;
104
+ const maybeText = part.text;
105
+ return typeof maybeText === 'string' ? maybeText : undefined;
106
+ })
107
+ .filter((part) => Boolean(part));
108
+ return textParts.join('\n') || 'Tool returned an error result';
109
+ }
110
+ function makeRequestInit(headers) {
111
+ if (!headers || Object.keys(headers).length === 0)
112
+ return undefined;
113
+ return { headers };
114
+ }
115
+ function createTransport(options) {
116
+ const mode = options.transport ?? 'stdio';
117
+ if (mode === 'stdio') {
118
+ if (!options.command) {
119
+ throw new Error('stdio transport requires a command');
120
+ }
121
+ const transport = new StdioClientTransport({
122
+ command: options.command,
123
+ args: options.args ?? [],
124
+ env: { ...process.env },
125
+ stderr: 'pipe',
126
+ });
127
+ const stderrChunks = [];
128
+ transport.stderr?.on('data', (chunk) => stderrChunks.push(chunk));
129
+ return { transport, stderrChunks };
130
+ }
131
+ if (!options.url) {
132
+ throw new Error(`${mode} transport requires a URL target`);
133
+ }
134
+ const url = new URL(options.url);
135
+ const requestInit = makeRequestInit(options.headers);
136
+ const transport = mode === 'sse'
137
+ ? new SSEClientTransport(url, { requestInit })
138
+ : new StreamableHTTPClientTransport(url, { requestInit });
139
+ return { transport, stderrChunks: [] };
17
140
  }
18
141
  export async function probeMcpServer(options) {
19
- const transport = new StdioClientTransport({
20
- command: options.command,
21
- args: options.args,
22
- env: { ...process.env },
23
- stderr: 'pipe',
24
- });
25
- // Collect stderr so we can surface crash reasons in error messages
26
- const stderrChunks = [];
27
- transport.stderr?.on('data', (chunk) => stderrChunks.push(chunk));
28
- const client = new Client({ name: 'mcp-probe', version: '0.1.0' }, { capabilities: { roots: { listChanged: false } } });
142
+ const { transport, stderrChunks } = createTransport(options);
143
+ const client = new Client({ name: 'mcp-probe', version: VERSION }, { capabilities: { roots: { listChanged: false } } });
29
144
  const connectStart = Date.now();
30
145
  try {
31
146
  await withTimeout(client.connect(transport), options.timeoutMs, 'Connection');
32
147
  }
33
148
  catch (err) {
34
149
  const stderrText = Buffer.concat(stderrChunks).toString('utf8').trim();
150
+ const fallback = err instanceof Error ? err.message : String(err);
35
151
  const reason = stderrText
36
- ? firstMeaningfulLine(stderrText)
37
- : err instanceof Error ? err.message : String(err);
152
+ ? firstMeaningfulLine(stderrText, fallback, options.stderr)
153
+ : fallback;
154
+ await client.close().catch(() => undefined);
38
155
  throw new Error(reason);
39
156
  }
40
157
  const connectLatencyMs = Date.now() - connectStart;
41
- const rawServerInfo = client.getServerVersion();
42
- const rawCaps = client.getServerCapabilities();
43
- const capabilities = Object.keys(rawCaps ?? {});
44
- const toolsStart = Date.now();
45
- const toolsResult = await withTimeout(client.listTools(), options.timeoutMs, 'tools/list');
46
- const toolsLatencyMs = Date.now() - toolsStart;
47
- let resourcesLatencyMs;
48
- let promptsLatencyMs;
49
- const resourcesList = [];
50
- const promptsList = [];
51
- if (rawCaps?.resources) {
52
- const t = Date.now();
53
- const result = await withTimeout(client.listResources(), options.timeoutMs, 'resources/list');
54
- resourcesLatencyMs = Date.now() - t;
55
- for (const r of result.resources) {
56
- resourcesList.push({ uri: r.uri, name: r.name, description: r.description });
158
+ try {
159
+ const rawServerInfo = client.getServerVersion();
160
+ const rawCaps = client.getServerCapabilities();
161
+ const capabilities = Object.keys(rawCaps ?? {});
162
+ const toolsStart = Date.now();
163
+ const toolsResult = await withTimeout(client.listTools(), options.timeoutMs, 'tools/list');
164
+ const toolsLatencyMs = Date.now() - toolsStart;
165
+ let resourcesLatencyMs;
166
+ let promptsLatencyMs;
167
+ const resourcesList = [];
168
+ const promptsList = [];
169
+ if (rawCaps?.resources) {
170
+ const t = Date.now();
171
+ const result = await withTimeout(client.listResources(), options.timeoutMs, 'resources/list');
172
+ resourcesLatencyMs = Date.now() - t;
173
+ for (const r of result.resources) {
174
+ resourcesList.push({ uri: r.uri, name: r.name, description: r.description });
175
+ }
57
176
  }
58
- }
59
- if (rawCaps?.prompts) {
60
- const t = Date.now();
61
- const result = await withTimeout(client.listPrompts(), options.timeoutMs, 'prompts/list');
62
- promptsLatencyMs = Date.now() - t;
63
- for (const p of result.prompts) {
64
- promptsList.push({ name: p.name, description: p.description });
177
+ if (rawCaps?.prompts) {
178
+ const t = Date.now();
179
+ const result = await withTimeout(client.listPrompts(), options.timeoutMs, 'prompts/list');
180
+ promptsLatencyMs = Date.now() - t;
181
+ for (const p of result.prompts) {
182
+ promptsList.push({ name: p.name, description: p.description });
183
+ }
65
184
  }
185
+ let toolCallResults;
186
+ if (options.probeTools && toolsResult.tools.length > 0) {
187
+ toolCallResults = [];
188
+ for (const tool of toolsResult.tools) {
189
+ const sidecarEntry = options.sidecar?.tools[tool.name];
190
+ // Sidecar input beats auto-generated because it can reach the real call path.
191
+ const input = sidecarEntry?.input ?? generateMinimalInput(tool.inputSchema);
192
+ const source = sidecarEntry ? 'sidecar' : 'auto';
193
+ const notErrorCodes = sidecarEntry?.expect?.not_error_code;
194
+ const start = Date.now();
195
+ try {
196
+ const result = await withTimeout(client.callTool({ name: tool.name, arguments: input }), options.timeoutMs, `callTool(${tool.name})`);
197
+ const toolError = toolResultErrorMessage(result);
198
+ if (toolError) {
199
+ const status = isAuthError(toolError, notErrorCodes) ? 'warn' : 'fail';
200
+ toolCallResults.push({
201
+ tool: tool.name,
202
+ status,
203
+ latencyMs: Date.now() - start,
204
+ error: toolError,
205
+ source,
206
+ });
207
+ continue;
208
+ }
209
+ toolCallResults.push({ tool: tool.name, status: 'pass', latencyMs: Date.now() - start, source });
210
+ }
211
+ catch (err) {
212
+ const msg = err instanceof Error ? err.message : String(err);
213
+ const status = isAuthError(msg, notErrorCodes) ? 'warn' : 'fail';
214
+ toolCallResults.push({
215
+ tool: tool.name,
216
+ status,
217
+ latencyMs: Date.now() - start,
218
+ error: msg,
219
+ source,
220
+ });
221
+ }
222
+ }
223
+ }
224
+ return {
225
+ serverInfo: {
226
+ name: rawServerInfo?.name ?? 'unknown',
227
+ version: rawServerInfo?.version ?? 'unknown',
228
+ capabilities,
229
+ },
230
+ tools: toolsResult.tools.map((t) => ({
231
+ name: t.name,
232
+ description: t.description,
233
+ inputSchema: t.inputSchema,
234
+ })),
235
+ resources: resourcesList,
236
+ prompts: promptsList,
237
+ connectLatencyMs,
238
+ toolsLatencyMs,
239
+ resourcesLatencyMs,
240
+ promptsLatencyMs,
241
+ toolCallResults,
242
+ };
243
+ }
244
+ finally {
245
+ await client.close().catch(() => undefined);
66
246
  }
67
- await client.close();
68
- return {
69
- serverInfo: {
70
- name: rawServerInfo?.name ?? 'unknown',
71
- version: rawServerInfo?.version ?? 'unknown',
72
- capabilities,
73
- },
74
- tools: toolsResult.tools.map((t) => ({
75
- name: t.name,
76
- description: t.description,
77
- inputSchema: t.inputSchema,
78
- })),
79
- resources: resourcesList,
80
- prompts: promptsList,
81
- connectLatencyMs,
82
- toolsLatencyMs,
83
- resourcesLatencyMs,
84
- promptsLatencyMs,
85
- };
86
247
  }
87
248
  //# sourceMappingURL=mcp-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/protocols/mcp-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/protocols/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { BatchReport, CheckReport } from '../types.js';
2
+ type AnyReport = CheckReport | BatchReport;
3
+ export type ShieldsBadge = {
4
+ schemaVersion: 1;
5
+ label: string;
6
+ message: string;
7
+ color: string;
8
+ };
9
+ export declare function buildBadge(report: AnyReport): ShieldsBadge;
10
+ export declare function writeBadgeFile(report: AnyReport, path: string): void;
11
+ export {};
12
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/reporters/badge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAEzE,KAAK,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAuBF,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,CAO1D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGpE"}
@@ -0,0 +1,34 @@
1
+ import { dirname } from 'path';
2
+ import { mkdirSync, writeFileSync } from 'fs';
3
+ const COLORS = {
4
+ pass: 'brightgreen',
5
+ warn: 'yellow',
6
+ fail: 'red',
7
+ };
8
+ function isBatchReport(report) {
9
+ return 'servers' in report;
10
+ }
11
+ function batchMessage(report) {
12
+ const passed = report.servers.filter((server) => server.report.overallStatus === 'pass').length;
13
+ const warned = report.servers.filter((server) => server.report.overallStatus === 'warn').length;
14
+ const failed = report.servers.filter((server) => server.report.overallStatus === 'fail').length;
15
+ const parts = [`${passed} pass`];
16
+ if (warned > 0)
17
+ parts.push(`${warned} warn`);
18
+ if (failed > 0)
19
+ parts.push(`${failed} fail`);
20
+ return parts.join(', ');
21
+ }
22
+ export function buildBadge(report) {
23
+ return {
24
+ schemaVersion: 1,
25
+ label: isBatchReport(report) ? 'mcp fleet' : 'mcp probe',
26
+ message: isBatchReport(report) ? batchMessage(report) : report.overallStatus,
27
+ color: COLORS[report.overallStatus],
28
+ };
29
+ }
30
+ export function writeBadgeFile(report, path) {
31
+ mkdirSync(dirname(path), { recursive: true });
32
+ writeFileSync(path, `${JSON.stringify(buildBadge(report), null, 2)}\n`);
33
+ }
34
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.js","sourceRoot":"","sources":["../../src/reporters/badge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAY9C,MAAM,MAAM,GAAgC;IAC1C,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF,SAAS,aAAa,CAAC,MAAiB;IACtC,OAAO,SAAS,IAAI,MAAM,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAC,MAAmB;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAChG,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAChG,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAEhG,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC;IACjC,IAAI,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC;IAC7C,IAAI,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;QACxD,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;QAC5E,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAiB,EAAE,IAAY;IAC5D,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { BatchReport, CheckReport } from '../types.js';
2
+ type AnyReport = CheckReport | BatchReport;
3
+ export declare function buildGithubSummary(report: AnyReport): string;
4
+ export declare function buildGithubAnnotations(report: AnyReport): string[];
5
+ export declare function renderGithubActions(report: AnyReport, summaryPath?: string | undefined): void;
6
+ export {};
7
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/reporters/github.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAa,WAAW,EAA+B,MAAM,aAAa,CAAC;AAEpG,KAAK,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AA6G3C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAE5D;AAmBD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,CAYlE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,qBAAkC,GAAG,IAAI,CAQ1G"}
@@ -0,0 +1,138 @@
1
+ import { appendFileSync } from 'fs';
2
+ const STATUS_ICON = {
3
+ pass: 'PASS',
4
+ warn: 'WARN',
5
+ fail: 'FAIL',
6
+ };
7
+ function isBatchReport(report) {
8
+ return 'servers' in report;
9
+ }
10
+ function escapeCell(value) {
11
+ return String(value ?? '')
12
+ .replace(/\|/g, '\\|')
13
+ .replace(/\r?\n/g, '<br>');
14
+ }
15
+ function escapeCommand(value) {
16
+ return value
17
+ .replace(/%/g, '%25')
18
+ .replace(/\r/g, '%0D')
19
+ .replace(/\n/g, '%0A');
20
+ }
21
+ function row(values) {
22
+ return `| ${values.map(escapeCell).join(' | ')} |`;
23
+ }
24
+ function checksTable(checks) {
25
+ return [
26
+ row(['Status', 'Check', 'Message', 'Latency']),
27
+ row(['---', '---', '---', '---']),
28
+ ...checks.map((check) => row([
29
+ STATUS_ICON[check.status],
30
+ check.name,
31
+ check.message,
32
+ check.latencyMs !== undefined ? `${check.latencyMs}ms` : '',
33
+ ])),
34
+ ].join('\n');
35
+ }
36
+ function toolCallsTable(results) {
37
+ if (!results || results.length === 0)
38
+ return '';
39
+ return [
40
+ '',
41
+ '### Tool Call Dry-run',
42
+ '',
43
+ row(['Status', 'Tool', 'Source', 'Latency', 'Error']),
44
+ row(['---', '---', '---', '---', '---']),
45
+ ...results.map((result) => row([
46
+ STATUS_ICON[result.status],
47
+ result.tool,
48
+ result.source,
49
+ `${result.latencyMs}ms`,
50
+ result.error ?? '',
51
+ ])),
52
+ ].join('\n');
53
+ }
54
+ function singleSummary(report) {
55
+ const lines = [
56
+ `## mcp-probe: ${report.target}`,
57
+ '',
58
+ `**Status:** ${STATUS_ICON[report.overallStatus]} `,
59
+ `**Total:** ${report.totalLatencyMs}ms`,
60
+ '',
61
+ checksTable(report.checks),
62
+ ];
63
+ const toolCalls = toolCallsTable(report.toolCallResults);
64
+ if (toolCalls)
65
+ lines.push(toolCalls);
66
+ return lines.join('\n') + '\n';
67
+ }
68
+ function batchSummary(report) {
69
+ const passed = report.servers.filter((server) => server.report.overallStatus === 'pass').length;
70
+ const warned = report.servers.filter((server) => server.report.overallStatus === 'warn').length;
71
+ const failed = report.servers.filter((server) => server.report.overallStatus === 'fail').length;
72
+ const lines = [
73
+ `## mcp-probe batch: ${report.target}`,
74
+ '',
75
+ `**Status:** ${STATUS_ICON[report.overallStatus]} `,
76
+ `**Servers:** ${passed} passed, ${warned} warned, ${failed} failed `,
77
+ `**Total:** ${report.totalLatencyMs}ms`,
78
+ '',
79
+ row(['Status', 'Server', 'Target', 'Tools', 'Latency']),
80
+ row(['---', '---', '---', '---', '---']),
81
+ ...report.servers.map((server) => row([
82
+ STATUS_ICON[server.report.overallStatus],
83
+ server.name,
84
+ server.report.target,
85
+ server.report.tools.length,
86
+ `${server.report.totalLatencyMs}ms`,
87
+ ])),
88
+ ];
89
+ for (const server of report.servers) {
90
+ if (server.report.overallStatus === 'pass')
91
+ continue;
92
+ lines.push('', `### ${server.name}`, '', checksTable(server.report.checks));
93
+ const toolCalls = toolCallsTable(server.report.toolCallResults);
94
+ if (toolCalls)
95
+ lines.push(toolCalls);
96
+ }
97
+ return lines.join('\n') + '\n';
98
+ }
99
+ export function buildGithubSummary(report) {
100
+ return isBatchReport(report) ? batchSummary(report) : singleSummary(report);
101
+ }
102
+ function annotation(level, title, message) {
103
+ return `::${level} title=${escapeCommand(title)}::${escapeCommand(message)}`;
104
+ }
105
+ function annotationsForCheck(prefix, check) {
106
+ if (check.status === 'pass')
107
+ return [];
108
+ const level = check.status === 'fail' ? 'error' : 'warning';
109
+ return [annotation(level, `${prefix}: ${check.name}`, check.message)];
110
+ }
111
+ function annotationsForToolCall(prefix, result) {
112
+ if (result.status === 'pass')
113
+ return [];
114
+ const level = result.status === 'fail' ? 'error' : 'warning';
115
+ const message = result.error ?? `${result.tool} returned ${result.status}`;
116
+ return [annotation(level, `${prefix}: ${result.tool}`, message)];
117
+ }
118
+ export function buildGithubAnnotations(report) {
119
+ if (!isBatchReport(report)) {
120
+ return [
121
+ ...report.checks.flatMap((check) => annotationsForCheck(report.target, check)),
122
+ ...(report.toolCallResults ?? []).flatMap((result) => annotationsForToolCall(report.target, result)),
123
+ ];
124
+ }
125
+ return report.servers.flatMap((server) => [
126
+ ...server.report.checks.flatMap((check) => annotationsForCheck(server.name, check)),
127
+ ...(server.report.toolCallResults ?? []).flatMap((result) => annotationsForToolCall(server.name, result)),
128
+ ]);
129
+ }
130
+ export function renderGithubActions(report, summaryPath = process.env.GITHUB_STEP_SUMMARY) {
131
+ for (const line of buildGithubAnnotations(report)) {
132
+ process.stdout.write(`${line}\n`);
133
+ }
134
+ if (summaryPath) {
135
+ appendFileSync(summaryPath, buildGithubSummary(report));
136
+ }
137
+ }
138
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/reporters/github.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import type { CheckReport } from '../types.js';
2
- export declare function renderJson(report: CheckReport): void;
1
+ import type { BatchReport, CheckReport } from '../types.js';
2
+ export declare function renderJson(report: CheckReport | BatchReport): void;
3
3
  //# sourceMappingURL=json-reporter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-reporter.d.ts","sourceRoot":"","sources":["../../src/reporters/json-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAEpD"}
1
+ {"version":3,"file":"json-reporter.d.ts","sourceRoot":"","sources":["../../src/reporters/json-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5D,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAElE"}
@@ -1 +1 @@
1
- {"version":3,"file":"json-reporter.js","sourceRoot":"","sources":["../../src/reporters/json-reporter.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"json-reporter.js","sourceRoot":"","sources":["../../src/reporters/json-reporter.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,MAAiC;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/D,CAAC"}
@@ -1,3 +1,4 @@
1
- import type { CheckReport } from '../types.js';
1
+ import type { BatchReport, CheckReport } from '../types.js';
2
2
  export declare function renderTerminal(report: CheckReport): void;
3
+ export declare function renderBatchTerminal(report: BatchReport): void;
3
4
  //# sourceMappingURL=terminal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/reporters/terminal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAgB5D,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAyDxD"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/reporters/terminal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAgBzE,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAqExD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CA2B7D"}