@slbdn/mcp-tester 1.4.3 → 1.5.4

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 (66) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +78 -26
  3. package/dist/ai/provider.d.ts +145 -0
  4. package/dist/ai/provider.d.ts.map +1 -0
  5. package/dist/ai/provider.js +428 -0
  6. package/dist/ai/provider.js.map +1 -0
  7. package/dist/cli/index.js +214 -14
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/generate-cases.d.ts +113 -0
  10. package/dist/generate-cases.d.ts.map +1 -0
  11. package/dist/generate-cases.js +565 -0
  12. package/dist/generate-cases.js.map +1 -0
  13. package/dist/generate-tests.d.ts +52 -1
  14. package/dist/generate-tests.d.ts.map +1 -1
  15. package/dist/generate-tests.js +208 -81
  16. package/dist/generate-tests.js.map +1 -1
  17. package/dist/index.d.ts +3 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/matchers.d.ts +31 -21
  22. package/dist/matchers.d.ts.map +1 -1
  23. package/dist/matchers.js.map +1 -1
  24. package/dist/templates/full-stack/.github/workflows/test.yml +34 -0
  25. package/dist/templates/full-stack/README.md +73 -0
  26. package/dist/templates/full-stack/examples/mock-server.js +115 -0
  27. package/dist/templates/full-stack/jest.config.js +39 -0
  28. package/dist/templates/full-stack/package.json +31 -0
  29. package/dist/templates/full-stack/scripts/generate-tests.ts +32 -0
  30. package/dist/templates/full-stack/scripts/generate-types.ts +28 -0
  31. package/dist/templates/full-stack/src/server.ts +78 -0
  32. package/dist/templates/full-stack/tests/helpers.ts +29 -0
  33. package/dist/templates/full-stack/tests/parallel.test.ts +44 -0
  34. package/dist/templates/full-stack/tests/server.test.ts +36 -0
  35. package/dist/templates/full-stack/tests/tools.test.ts +61 -0
  36. package/dist/templates/full-stack/tsconfig.json +19 -0
  37. package/dist/templates/minimal-jest/README.md +42 -0
  38. package/dist/templates/minimal-jest/examples/mock-server.js +62 -0
  39. package/dist/templates/minimal-jest/jest.config.js +24 -0
  40. package/dist/templates/minimal-jest/package.json +24 -0
  41. package/dist/templates/minimal-jest/tests/server.test.ts +64 -0
  42. package/dist/templates/minimal-jest/tsconfig.json +19 -0
  43. package/dist/templates/standard-jest/.github/workflows/test.yml +32 -0
  44. package/dist/templates/standard-jest/README.md +44 -0
  45. package/dist/templates/standard-jest/examples/mock-server.js +122 -0
  46. package/dist/templates/standard-jest/jest.config.js +39 -0
  47. package/dist/templates/standard-jest/package.json +27 -0
  48. package/dist/templates/standard-jest/tests/helpers.ts +43 -0
  49. package/dist/templates/standard-jest/tests/prompts.test.ts +37 -0
  50. package/dist/templates/standard-jest/tests/resources.test.ts +37 -0
  51. package/dist/templates/standard-jest/tests/server.test.ts +30 -0
  52. package/dist/templates/standard-jest/tests/tools.test.ts +87 -0
  53. package/dist/templates/standard-jest/tsconfig.json +19 -0
  54. package/docs/advanced.md +424 -0
  55. package/docs/ai-generation.md +211 -0
  56. package/docs/api-reference.md +819 -0
  57. package/docs/cicd.md +289 -0
  58. package/docs/cli.md +225 -0
  59. package/docs/examples.md +300 -0
  60. package/docs/nodejs-compatibility.md +81 -0
  61. package/docs/releases.md +413 -0
  62. package/docs/starter-templates.md +110 -0
  63. package/docs/testing.md +443 -0
  64. package/docs/troubleshooting.md +139 -0
  65. package/jest.d.ts +43 -0
  66. package/package.json +5 -2
@@ -6,6 +6,27 @@
6
6
  */
7
7
  import { MCPClient } from './client/MCPClient.js';
8
8
  import type { ServerConfig } from './client/MCPClient.js';
9
+ import type { Tool, Resource, Prompt } from '@modelcontextprotocol/sdk/types.js';
10
+ import { type GeneratedCase } from './generate-cases.js';
11
+ import { type AIProvider, type OpenAICompatOptions } from './ai/provider.js';
12
+ /**
13
+ * How test cases are derived.
14
+ *
15
+ * - `'static'` — the classic generator: one listing test + one probe call per
16
+ * tool. @defaultValue
17
+ * - `'edge'` — additionally derives boundary/invalid cases from each tool's
18
+ * JSON Schema (offline, deterministic).
19
+ * - `'ai'` — edge cases plus AI-suggested cases. Requires a provider (see
20
+ * {@link GenerateTestOptions.provider} or the `MCP_TESTER_AI_*` env vars);
21
+ * falls back to `'edge'` with a warning unless {@link GenerateTestOptions.requireAi}
22
+ * is set.
23
+ */
24
+ export type GenerationMode = 'static' | 'edge' | 'ai';
25
+ /** AI configuration accepted by the generate functions. */
26
+ export interface AIOptions extends OpenAICompatOptions {
27
+ /** Fail instead of falling back to deterministic cases when AI is unavailable. @defaultValue false */
28
+ requireAi?: boolean;
29
+ }
9
30
  /**
10
31
  * Options for test generation.
11
32
  */
@@ -28,7 +49,36 @@ export interface GenerateTestOptions {
28
49
  timeout?: number;
29
50
  /** Description for the test suite. */
30
51
  description?: string;
52
+ /** How test cases are derived. @defaultValue 'static' */
53
+ mode?: GenerationMode;
54
+ /** Pre-built AI provider; overrides env-based discovery. */
55
+ provider?: AIProvider;
56
+ /** AI provider configuration (used when `provider` is not supplied). */
57
+ ai?: AIOptions;
58
+ /** Dry-run every derived case against the live server and annotate the
59
+ * generated tests with what actually happens. @defaultValue false */
60
+ verify?: boolean;
31
61
  }
62
+ /**
63
+ * Collapse control characters (including line terminators) so untrusted text
64
+ * can be embedded in a `//` line comment without terminating it. Model-provided
65
+ * rationales are the main caller — a raw newline would otherwise let the text
66
+ * escape the comment and become executable test code.
67
+ */
68
+ export declare function escapeLineComment(s: string): string;
69
+ /** Escape a string for use inside a single- or double-quoted JavaScript literal. */
70
+ export declare function escapeJsString(s: string, quote?: "'" | '"'): string;
71
+ /**
72
+ * Options consumed by {@link buildTestFile} (server description is passed separately).
73
+ */
74
+ type TestBuildOptions = Pick<GenerateTestOptions, 'framework' | 'description' | 'includeResources' | 'includePrompts' | 'includeTools' | 'includeMatchers'>;
75
+ /**
76
+ * Generate a complete test file.
77
+ *
78
+ * @internal Exported for testing; consumers should use {@link generateTests}
79
+ * or {@link generateTestsFromClient}.
80
+ */
81
+ export declare function buildTestFile(tools: Tool[], resources: Resource[], prompts: Prompt[], options: TestBuildOptions, server: ServerConfig, cases?: GeneratedCase[]): string;
32
82
  /**
33
83
  * Connect to an MCP server, inspect capabilities, and generate a test file.
34
84
  *
@@ -38,7 +88,7 @@ export declare function generateTests(options: GenerateTestOptions): Promise<str
38
88
  /**
39
89
  * Options for {@link generateTestsFromClient}.
40
90
  */
41
- export type GenerateTestsFromClientOptions = Pick<GenerateTestOptions, 'framework' | 'description' | 'includeResources' | 'includePrompts' | 'includeTools' | 'includeMatchers'>;
91
+ export type GenerateTestsFromClientOptions = Pick<GenerateTestOptions, 'framework' | 'description' | 'includeResources' | 'includePrompts' | 'includeTools' | 'includeMatchers' | 'mode' | 'provider' | 'ai' | 'verify' | 'timeout'>;
42
92
  /**
43
93
  * Generate a test file from an already-connected client.
44
94
  *
@@ -52,4 +102,5 @@ export type GenerateTestsFromClientOptions = Pick<GenerateTestOptions, 'framewor
52
102
  * @returns The generated test file content
53
103
  */
54
104
  export declare function generateTestsFromClient(client: MCPClient, server: ServerConfig, options?: GenerateTestsFromClientOptions): Promise<string>;
105
+ export {};
55
106
  //# sourceMappingURL=generate-tests.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-tests.d.ts","sourceRoot":"","sources":["../src/generate-tests.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,uBAAuB,CAAC;AAI7E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoTD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBjF;AAED;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAC/C,mBAAmB,EACjB,WAAW,GACX,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,GACd,iBAAiB,CACpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,MAAM,CAAC,CAQjB"}
1
+ {"version":3,"file":"generate-tests.d.ts","sourceRoot":"","sources":["../src/generate-tests.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjF,OAAO,EACL,KAAK,aAAa,EAInB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,mBAAmB,EAEzB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;AAEtD,2DAA2D;AAC3D,MAAM,WAAW,SAAU,SAAQ,mBAAmB;IACpD,sGAAsG;IACtG,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,wEAAwE;IACxE,EAAE,CAAC,EAAE,SAAS,CAAC;IACf;0EACsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAsFD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,GAAG,GAAG,GAAS,GAAG,MAAM,CAYxE;AA+HD;;GAEG;AACH,KAAK,gBAAgB,GAAG,IAAI,CAC1B,mBAAmB,EACjB,WAAW,GACX,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,GACd,iBAAiB,CACpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,EAAE,EACb,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,aAAa,EAAO,GAC1B,MAAM,CAgGR;AAmGD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BjF;AAED;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAC/C,mBAAmB,EACjB,WAAW,GACX,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,GACd,iBAAiB,GACjB,MAAM,GACN,UAAU,GACV,IAAI,GACJ,QAAQ,GACR,SAAS,CACZ,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,MAAM,CAAC,CAcjB"}
@@ -6,63 +6,8 @@
6
6
  */
7
7
  import { MCPClient } from './client/MCPClient.js';
8
8
  import { getPackageVersion } from './utils/version.js';
9
- /**
10
- * Generate sample arguments from a JSON Schema property.
11
- */
12
- function generateSampleValue(schema) {
13
- const type = schema.type;
14
- const examples = schema.examples;
15
- const enumValues = schema['enum'];
16
- if (enumValues && enumValues.length > 0)
17
- return enumValues[0];
18
- if (examples && examples.length > 0)
19
- return examples[0];
20
- if (schema.default !== undefined)
21
- return schema.default;
22
- switch (type) {
23
- case 'string':
24
- return schema.description
25
- ? `example-${String(schema.description).toLowerCase().replace(/\s+/g, '-')}`
26
- : 'example';
27
- case 'number':
28
- case 'integer':
29
- return 42;
30
- case 'boolean':
31
- return true;
32
- case 'array':
33
- if (schema.items && typeof schema.items === 'object') {
34
- return [generateSampleValue(schema.items)];
35
- }
36
- return [];
37
- case 'object':
38
- return {};
39
- default:
40
- return 'example';
41
- }
42
- }
43
- /**
44
- * Generate sample arguments from a tool's input schema.
45
- */
46
- function generateToolArgs(tool) {
47
- const schema = tool.inputSchema;
48
- if (!schema || !schema.properties)
49
- return {};
50
- const args = {};
51
- const props = schema.properties;
52
- const required = new Set(schema.required || []);
53
- // Generate values for all required fields, and optional ones with defaults
54
- for (const [key, propSchema] of Object.entries(props)) {
55
- if (required.has(key) || propSchema.default !== undefined) {
56
- args[key] = generateSampleValue(propSchema);
57
- }
58
- }
59
- // If no required fields, generate at least one so the test is useful
60
- if (Object.keys(args).length === 0 && Object.keys(props).length > 0) {
61
- const firstKey = Object.keys(props)[0];
62
- args[firstKey] = generateSampleValue(props[firstKey]);
63
- }
64
- return args;
65
- }
9
+ import { generateToolArgs, suggestEdgeCasesForTools, mergeAndValidateCases, } from './generate-cases.js';
10
+ import { createProviderFromEnv, } from './ai/provider.js';
66
11
  /**
67
12
  * Build the `client.start({ ... })` config literal for the generated test.
68
13
  * Uses JSON.stringify for values so quotes/backslashes are safely escaped.
@@ -90,31 +35,118 @@ function formatServerLabel(server) {
90
35
  const stdio = server;
91
36
  return `${stdio.command}${stdio.args && stdio.args.length > 0 ? ' ' + stdio.args.join(' ') : ''}`;
92
37
  }
38
+ /**
39
+ * Render one derived test case as an `it(...)` block.
40
+ */
41
+ function generateCaseTest(c) {
42
+ const lines = [];
43
+ const argsStr = JSON.stringify(c.args);
44
+ lines.push(` // ${c.source} — ${escapeLineComment(c.rationale)}`);
45
+ // --verify found the server behaving differently than predicted: keep the
46
+ // case for visibility but skip it, and say what actually happened.
47
+ if (c.observed && c.expectation !== 'observe' && c.observed !== c.expectation) {
48
+ lines.push(` // verify: expected ${c.expectation} but server returned ${c.observed} — adjust manually`);
49
+ lines.push(` it.skip('${escapeJsString(c.title)}', async () => {`);
50
+ lines.push(' const result = await client.callTool({');
51
+ lines.push(` name: '${toolNameLiteral(c.tool)}',`);
52
+ lines.push(` arguments: ${argsStr},`);
53
+ lines.push(' }).catch((error: unknown) => error);');
54
+ lines.push(' expect(result).toBeDefined();');
55
+ lines.push(' });');
56
+ return lines;
57
+ }
58
+ if (c.expectation === 'observe') {
59
+ lines.push(` it('${escapeJsString(c.title)}', async () => {`);
60
+ lines.push(' const result = await client.callTool({');
61
+ lines.push(` name: '${toolNameLiteral(c.tool)}',`);
62
+ lines.push(` arguments: ${argsStr},`);
63
+ lines.push(' }).catch((error: unknown) => error);');
64
+ lines.push(' // Observation only — record what the server actually does.');
65
+ lines.push(' expect(result).toBeDefined();');
66
+ lines.push(` console.log('[${toolNameLiteral(c.tool)}]', JSON.stringify(result));`);
67
+ lines.push(' });');
68
+ }
69
+ else if (c.expectation === 'error') {
70
+ lines.push(` it('${escapeJsString(c.title)}', async () => {`);
71
+ lines.push(' const result = await client.callTool({');
72
+ lines.push(` name: '${toolNameLiteral(c.tool)}',`);
73
+ lines.push(` arguments: ${argsStr},`);
74
+ lines.push(' }).catch((error: unknown) => error);');
75
+ lines.push(' expect(isToolError(result)).toBe(true);');
76
+ lines.push(' });');
77
+ }
78
+ else {
79
+ lines.push(` it('${escapeJsString(c.title)}', async () => {`);
80
+ lines.push(' const result = await client.callTool({');
81
+ lines.push(` name: '${toolNameLiteral(c.tool)}',`);
82
+ lines.push(` arguments: ${argsStr},`);
83
+ lines.push(' }).catch((error: unknown) => error);');
84
+ lines.push(' expect(isToolError(result)).toBe(false);');
85
+ lines.push(' });');
86
+ }
87
+ return lines;
88
+ }
89
+ /**
90
+ * Collapse control characters (including line terminators) so untrusted text
91
+ * can be embedded in a `//` line comment without terminating it. Model-provided
92
+ * rationales are the main caller — a raw newline would otherwise let the text
93
+ * escape the comment and become executable test code.
94
+ */
95
+ export function escapeLineComment(s) {
96
+ // eslint-disable-next-line no-control-regex -- intentional: collapse control chars and line terminators
97
+ return s.replace(/[\u0000-\u001f\u2028\u2029]+/g, ' ');
98
+ }
99
+ /** Escape a string for use inside a single- or double-quoted JavaScript literal. */
100
+ export function escapeJsString(s, quote = "'") {
101
+ // Escape backslashes first, then the chosen quote, then newlines/control chars.
102
+ return (s
103
+ .replace(/\\/g, '\\\\')
104
+ .replace(new RegExp(quote, 'g'), `\\${quote}`)
105
+ .replace(/\n/g, '\\n')
106
+ .replace(/\r/g, '\\r')
107
+ .replace(/\t/g, '\\t')
108
+ // eslint-disable-next-line no-control-regex -- intentional: we want to escape ASCII control chars in user-provided strings
109
+ .replace(/[\u0000-\u001f]/g, (ch) => `\\u${ch.charCodeAt(0).toString(16).padStart(4, '0')}`));
110
+ }
111
+ /** Emit a safe single-quoted string literal for a tool name. */
112
+ function toolNameLiteral(name) {
113
+ return escapeJsString(name, "'");
114
+ }
93
115
  /**
94
116
  * Generate tool test cases.
95
117
  */
96
- function generateToolTests(tools) {
118
+ function generateToolTests(tools, cases = []) {
97
119
  if (tools.length === 0)
98
120
  return '';
99
121
  const lines = [" describe('Tools', () => {"];
122
+ if (cases.length > 0) {
123
+ lines.push(' const isToolError = (res: unknown): boolean =>');
124
+ lines.push(' res instanceof Error ||');
125
+ lines.push(' (typeof res === "object" && res !== null && (res as { isError?: unknown }).isError === true);');
126
+ }
100
127
  for (const tool of tools) {
101
128
  const sampleArgs = generateToolArgs(tool);
102
129
  const argsStr = Object.keys(sampleArgs).length > 0 ? JSON.stringify(sampleArgs) : '{}';
103
130
  lines.push('');
104
- lines.push(` it('should have tool "${tool.name}"', async () => {`);
131
+ lines.push(` it('should have tool "${escapeJsString(tool.name, "'")}"', async () => {`);
105
132
  lines.push(' const tools = await client.listTools();');
106
- lines.push(` expect(tools).toHaveTool('${tool.name}');`);
133
+ lines.push(` expect(tools).toHaveTool('${toolNameLiteral(tool.name)}');`);
107
134
  lines.push(' });');
108
135
  lines.push('');
109
136
  // Call test. Generated arguments are guesses, and some tools intentionally
110
137
  // return/throw errors — so accept a successful result or a tool-level error.
111
- lines.push(` it('should call "${tool.name}"', async () => {`);
138
+ lines.push(` it('should call "${escapeJsString(tool.name, "'")}"', async () => {`);
112
139
  lines.push(' const result = await client.callTool({');
113
- lines.push(` name: '${tool.name}',`);
140
+ lines.push(` name: '${toolNameLiteral(tool.name)}',`);
114
141
  lines.push(` arguments: ${argsStr},`);
115
142
  lines.push(' }).catch((error: unknown) => error);');
116
143
  lines.push(' expect(result).toBeDefined();');
117
144
  lines.push(' });');
145
+ // Derived edge/AI cases for this tool.
146
+ for (const c of cases.filter((c) => c.tool === tool.name)) {
147
+ lines.push('');
148
+ lines.push(...generateCaseTest(c));
149
+ }
118
150
  }
119
151
  lines.push(' });');
120
152
  return lines.join('\n');
@@ -128,13 +160,13 @@ function generateResourceTests(resources) {
128
160
  const lines = [" describe('Resources', () => {"];
129
161
  for (const resource of resources) {
130
162
  lines.push('');
131
- lines.push(` it('should have resource "${resource.uri}"', async () => {`);
163
+ lines.push(` it('should have resource "${escapeJsString(resource.uri, "'")}"', async () => {`);
132
164
  lines.push(' const resources = await client.listResources();');
133
- lines.push(` expect(resources).toHaveResource('${resource.uri}');`);
165
+ lines.push(` expect(resources).toHaveResource('${escapeJsString(resource.uri, "'")}');`);
134
166
  lines.push(' });');
135
167
  lines.push('');
136
- lines.push(` it('should read resource "${resource.uri}"', async () => {`);
137
- lines.push(` const result = await client.readResource('${resource.uri}');`);
168
+ lines.push(` it('should read resource "${escapeJsString(resource.uri, "'")}"', async () => {`);
169
+ lines.push(` const result = await client.readResource('${escapeJsString(resource.uri, "'")}');`);
138
170
  lines.push(' expect(result.contents).toBeDefined();');
139
171
  lines.push(' expect(result.contents.length).toBeGreaterThan(0);');
140
172
  lines.push(' });');
@@ -161,13 +193,13 @@ function generatePromptTests(prompts) {
161
193
  }
162
194
  const argsStr = Object.keys(promptArgs).length > 0 ? `, ${JSON.stringify(promptArgs)}` : '';
163
195
  lines.push('');
164
- lines.push(` it('should have prompt "${prompt.name}"', async () => {`);
196
+ lines.push(` it('should have prompt "${escapeJsString(prompt.name, "'")}"', async () => {`);
165
197
  lines.push(' const prompts = await client.listPrompts();');
166
- lines.push(` expect(prompts).toHavePrompt('${prompt.name}');`);
198
+ lines.push(` expect(prompts).toHavePrompt('${escapeJsString(prompt.name, "'")}');`);
167
199
  lines.push(' });');
168
200
  lines.push('');
169
- lines.push(` it('should get prompt "${prompt.name}"', async () => {`);
170
- lines.push(` const result = await client.getPrompt('${prompt.name}'${argsStr});`);
201
+ lines.push(` it('should get prompt "${escapeJsString(prompt.name, "'")}"', async () => {`);
202
+ lines.push(` const result = await client.getPrompt('${escapeJsString(prompt.name, "'")}'${argsStr});`);
171
203
  lines.push(' expect(result.messages).toBeDefined();');
172
204
  lines.push(' expect(result.messages.length).toBeGreaterThan(0);');
173
205
  lines.push(' });');
@@ -177,8 +209,11 @@ function generatePromptTests(prompts) {
177
209
  }
178
210
  /**
179
211
  * Generate a complete test file.
212
+ *
213
+ * @internal Exported for testing; consumers should use {@link generateTests}
214
+ * or {@link generateTestsFromClient}.
180
215
  */
181
- function buildTestFile(tools, resources, prompts, options, server) {
216
+ export function buildTestFile(tools, resources, prompts, options, server, cases = []) {
182
217
  const framework = options.framework || 'jest';
183
218
  const description = options.description || 'MCP Server';
184
219
  const startCmd = formatServerStart(server);
@@ -204,18 +239,21 @@ function buildTestFile(tools, resources, prompts, options, server) {
204
239
  // Header comment
205
240
  const header = [
206
241
  '/**',
207
- ` * Generated test file for: ${description}`,
242
+ ` * Generated test file for: ${description.replace(/\*\//g, '*\\/')}`,
208
243
  ' *',
209
244
  ` * Framework: ${framework}`,
210
- ` * Server: ${serverLabel}`,
245
+ ` * Server: ${serverLabel.replace(/\*\//g, '*\\/')}`,
211
246
  ` * Tools: ${tools.length} | Resources: ${resources.length} | Prompts: ${prompts.length}`,
247
+ cases.length > 0 ? ` * Derived cases: ${cases.length} (edge/AI)` : null,
212
248
  ' *',
213
249
  ` * Generated by @slbdn/mcp-tester v${getPackageVersion()}`,
214
250
  ' * Run: npx jest --testTimeout=30000 (or npx vitest run)',
215
251
  ' */',
216
- ].join('\n');
252
+ ]
253
+ .filter((line) => line !== null)
254
+ .join('\n');
217
255
  // Test sections
218
- const toolTests = options.includeTools !== false ? generateToolTests(tools) : '';
256
+ const toolTests = options.includeTools !== false ? generateToolTests(tools, cases) : '';
219
257
  const resourceTests = options.includeResources !== false ? generateResourceTests(resources) : '';
220
258
  const promptTests = options.includePrompts !== false ? generatePromptTests(prompts) : '';
221
259
  // Combine
@@ -230,7 +268,7 @@ function buildTestFile(tools, resources, prompts, options, server) {
230
268
  ${importLines.join('\n')}
231
269
 
232
270
  ${beforeAllLine}
233
- describe('${description}', () => {
271
+ describe('${escapeJsString(description, "'")}', () => {
234
272
  let client: MCPClient;
235
273
 
236
274
  beforeEach(async () => {
@@ -262,6 +300,82 @@ ${sections.join('\n\n')}
262
300
  });
263
301
  `;
264
302
  }
303
+ /**
304
+ * Derive test cases for the requested {@link GenerationMode}.
305
+ *
306
+ * - `static` → no extra cases
307
+ * - `edge` → deterministic schema rules
308
+ * - `ai` → rules + AI-suggested cases (validated against the real schemas)
309
+ *
310
+ * @returns The cases, a diagnostics string (or null), and whether AI ran.
311
+ */
312
+ async function buildCases(tools, options, serverLabel) {
313
+ const mode = options.mode ?? 'static';
314
+ if (mode === 'static' || options.includeTools === false || tools.length === 0) {
315
+ return { cases: [], note: null, usedAI: false };
316
+ }
317
+ const ruleCases = suggestEdgeCasesForTools(tools);
318
+ if (mode === 'edge') {
319
+ return { cases: ruleCases, note: null, usedAI: false };
320
+ }
321
+ // mode === 'ai'
322
+ const provider = options.provider ?? createProviderFromEnv();
323
+ if (!provider) {
324
+ if (options.ai?.requireAi) {
325
+ throw new Error('AI generation requested with requireAi, but no provider is available. ' +
326
+ 'Set MCP_TESTER_AI_API_KEY (and optionally MCP_TESTER_AI_BASE_URL / MCP_TESTER_AI_MODEL), ' +
327
+ 'or pass a provider.');
328
+ }
329
+ return {
330
+ cases: ruleCases,
331
+ note: 'No AI provider configured (set MCP_TESTER_AI_API_KEY); ' +
332
+ 'fell back to deterministic edge cases.',
333
+ usedAI: false,
334
+ };
335
+ }
336
+ const analysis = {
337
+ serverLabel,
338
+ tools: tools.map((t) => ({
339
+ name: t.name,
340
+ description: t.description,
341
+ inputSchema: t.inputSchema,
342
+ })),
343
+ };
344
+ const aiCases = await provider.suggestCases(analysis);
345
+ const schemas = new Map(tools.map((t) => [t.name, t]));
346
+ const { cases, rejected } = mergeAndValidateCases([ruleCases, aiCases], schemas);
347
+ // Only AI cases can be rejected (rule cases are exempt from schema
348
+ // validation), but count by source so the diagnostic stays correct if that
349
+ // ever changes.
350
+ const dropped = rejected.filter((r) => r.c.source.startsWith('ai:')).length;
351
+ const note = dropped > 0
352
+ ? `AI suggested cases: ${aiCases.length}, kept after schema validation: ${aiCases.length - dropped} (dropped ${dropped})`
353
+ : null;
354
+ return { cases, note, usedAI: true };
355
+ }
356
+ /**
357
+ * Dry-run every derived case against the live server and record what actually
358
+ * happens in `case.observed`. The renderer turns mismatches into `it.skip`
359
+ * blocks with an explanatory comment.
360
+ */
361
+ async function verifyCases(client, cases, timeout) {
362
+ for (const c of cases) {
363
+ if (c.expectation === 'observe')
364
+ continue;
365
+ try {
366
+ const result = await client.callTool({
367
+ name: c.tool,
368
+ arguments: c.args,
369
+ timeout: Math.min(timeout, 15_000),
370
+ });
371
+ const isError = result.isError === true;
372
+ c.observed = isError ? 'error' : 'success';
373
+ }
374
+ catch {
375
+ c.observed = 'error';
376
+ }
377
+ }
378
+ }
265
379
  /**
266
380
  * Connect to an MCP server, inspect capabilities, and generate a test file.
267
381
  *
@@ -280,12 +394,19 @@ export async function generateTests(options) {
280
394
  args: options.args,
281
395
  });
282
396
  const [tools, resources, prompts] = await Promise.all([
283
- client.listTools(),
284
- client.listResources(),
285
- client.listPrompts(),
397
+ options.includeTools === false ? Promise.resolve([]) : client.listTools(),
398
+ options.includeResources === false ? Promise.resolve([]) : client.listResources(),
399
+ options.includePrompts === false ? Promise.resolve([]) : client.listPrompts(),
286
400
  ]);
287
401
  const server = { command: options.command, args: options.args };
288
- return buildTestFile(tools, resources, prompts, options, server);
402
+ const serverLabel = formatServerLabel(server);
403
+ const { cases, note } = await buildCases(tools, options, serverLabel);
404
+ if (note)
405
+ console.warn(`mcp-tester: ${note}`);
406
+ if (options.verify && cases.length > 0) {
407
+ await verifyCases(client, cases, options.timeout || 30000);
408
+ }
409
+ return buildTestFile(tools, resources, prompts, options, server, cases);
289
410
  }
290
411
  finally {
291
412
  await client.stop();
@@ -309,6 +430,12 @@ export async function generateTestsFromClient(client, server, options = {}) {
309
430
  options.includeResources === false ? Promise.resolve([]) : client.listResources(),
310
431
  options.includePrompts === false ? Promise.resolve([]) : client.listPrompts(),
311
432
  ]);
312
- return buildTestFile(tools, resources, prompts, options, server);
433
+ const { cases, note } = await buildCases(tools, options, formatServerLabel(server));
434
+ if (note)
435
+ console.warn(`mcp-tester: ${note}`);
436
+ if (options.verify && cases.length > 0) {
437
+ await verifyCases(client, cases, options.timeout || 30000);
438
+ }
439
+ return buildTestFile(tools, resources, prompts, options, server, cases);
313
440
  }
314
441
  //# sourceMappingURL=generate-tests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-tests.js","sourceRoot":"","sources":["../src/generate-tests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-tests.js","sourceRoot":"","sources":["../src/generate-tests.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -39,7 +39,9 @@ export * as assert from './assert.js';
39
39
  export { AssertionError } from './assert.js';
40
40
  export { toHaveTool, toHaveResource, toHavePrompt, toHaveToolWithSchema, toHaveToolCount, toHaveResourceCount, toHavePromptCount, toHaveResourceByName, toHavePromptWithArgs, toReturnText, toReturnTextContaining, toReturnError, toReturnOk, toReturnJson, toReturnContentCount, toReturnImage, toReturnResourceText, toReturnResourceTextContaining, toReturnPromptTextContaining, toReturnPromptMessageCount, setupJestMatchers, setupVitestMatchers, setupCustomMatchers, assertToolText, assertToolTextContains, assertHasTool, assertHasResource, assertHasPrompt, } from './matchers.js';
41
41
  export { generateTests, generateTestsFromClient } from './generate-tests.js';
42
- export type { GenerateTestOptions, GenerateTestsFromClientOptions } from './generate-tests.js';
42
+ export type { GenerateTestOptions, GenerateTestsFromClientOptions, GenerationMode, AIOptions, } from './generate-tests.js';
43
+ export { type GeneratedCase, type CaseExpectation, type CaseSource, generateToolArgs, suggestEdgeCases, suggestEdgeCasesForTools, validateArgsAgainstSchema, mergeAndValidateCases, } from './generate-cases.js';
44
+ export { type AIProvider, type ServerAnalysis, type OpenAICompatOptions, OpenAICompatProvider, createProviderFromEnv, suggestCasesWithAI, DEFAULT_AI_BASE_URL, DEFAULT_AI_MODEL, } from './ai/provider.js';
43
45
  export { generateTypes, generateTypesFromClient } from './generate-types.js';
44
46
  export type { GenerateTypesOptions, GenerateTypesFromClientOptions } from './generate-types.js';
45
47
  export { getPackageVersion } from './utils/version.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EACL,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,eAAe;AACpB,wCAAwC;AACxC,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,8BAA8B,EAC9B,4BAA4B,EAC5B,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,YAAY,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,YAAY,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EACL,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,eAAe;AACpB,wCAAwC;AACxC,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,8BAA8B,EAC9B,4BAA4B,EAC5B,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,YAAY,EACV,mBAAmB,EACnB,8BAA8B,EAC9B,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,YAAY,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -34,6 +34,8 @@ export * as assert from './assert.js';
34
34
  export { AssertionError } from './assert.js';
35
35
  export { toHaveTool, toHaveResource, toHavePrompt, toHaveToolWithSchema, toHaveToolCount, toHaveResourceCount, toHavePromptCount, toHaveResourceByName, toHavePromptWithArgs, toReturnText, toReturnTextContaining, toReturnError, toReturnOk, toReturnJson, toReturnContentCount, toReturnImage, toReturnResourceText, toReturnResourceTextContaining, toReturnPromptTextContaining, toReturnPromptMessageCount, setupJestMatchers, setupVitestMatchers, setupCustomMatchers, assertToolText, assertToolTextContains, assertHasTool, assertHasResource, assertHasPrompt, } from './matchers.js';
36
36
  export { generateTests, generateTestsFromClient } from './generate-tests.js';
37
+ export { generateToolArgs, suggestEdgeCases, suggestEdgeCasesForTools, validateArgsAgainstSchema, mergeAndValidateCases, } from './generate-cases.js';
38
+ export { OpenAICompatProvider, createProviderFromEnv, suggestCasesWithAI, DEFAULT_AI_BASE_URL, DEFAULT_AI_MODEL, } from './ai/provider.js';
37
39
  export { generateTypes, generateTypesFromClient } from './generate-types.js';
38
40
  export { getPackageVersion } from './utils/version.js';
39
41
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EACL,SAAS,GAaV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,8BAA8B,EAC9B,4BAA4B,EAC5B,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EACL,SAAS,GAaV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,8BAA8B,EAC9B,4BAA4B,EAC5B,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAO7E,OAAO,EAIL,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIL,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,30 +1,40 @@
1
1
  import { Tool, Resource, Prompt, CallToolResult, ReadResourceResult, GetPromptResult } from '@modelcontextprotocol/sdk/types.js';
2
+ /**
3
+ * The matcher signatures, declared once so both augmentation targets below
4
+ * stay in sync.
5
+ */
6
+ export interface MCPMatchers<R = void> {
7
+ toHaveTool(toolName: string): R;
8
+ toHaveResource(uri: string): R;
9
+ toHavePrompt(promptName: string): R;
10
+ toHaveToolWithSchema(toolName: string): R;
11
+ toHaveToolCount(count: number): R;
12
+ toHaveResourceCount(count: number): R;
13
+ toHavePromptCount(count: number): R;
14
+ toHaveResourceByName(name: string): R;
15
+ toHavePromptWithArgs(promptName: string): R;
16
+ toReturnText(expected?: string): R;
17
+ toReturnTextContaining(substring: string): R;
18
+ toReturnError(): R;
19
+ toReturnOk(): R;
20
+ toReturnJson(expected: unknown): R;
21
+ toReturnContentCount(count: number): R;
22
+ toReturnImage(): R;
23
+ toReturnResourceText(expected?: string): R;
24
+ toReturnResourceTextContaining(substring: string): R;
25
+ toReturnPromptTextContaining(substring: string): R;
26
+ toReturnPromptMessageCount(count: number): R;
27
+ }
2
28
  declare global {
3
29
  namespace jest {
4
- interface Matchers<R> {
5
- toHaveTool(toolName: string): R;
6
- toHaveResource(uri: string): R;
7
- toHavePrompt(promptName: string): R;
8
- toHaveToolWithSchema(toolName: string): R;
9
- toHaveToolCount(count: number): R;
10
- toHaveResourceCount(count: number): R;
11
- toHavePromptCount(count: number): R;
12
- toHaveResourceByName(name: string): R;
13
- toHavePromptWithArgs(promptName: string): R;
14
- toReturnText(expected?: string): R;
15
- toReturnTextContaining(substring: string): R;
16
- toReturnError(): R;
17
- toReturnOk(): R;
18
- toReturnJson(expected: unknown): R;
19
- toReturnContentCount(count: number): R;
20
- toReturnImage(): R;
21
- toReturnResourceText(expected?: string): R;
22
- toReturnResourceTextContaining(substring: string): R;
23
- toReturnPromptTextContaining(substring: string): R;
24
- toReturnPromptMessageCount(count: number): R;
30
+ interface Matchers<R> extends MCPMatchers<R> {
25
31
  }
26
32
  }
27
33
  }
34
+ declare module 'expect' {
35
+ interface Matchers<R extends void | Promise<void>, T = unknown> extends MCPMatchers<R> {
36
+ }
37
+ }
28
38
  /**
29
39
  * Check if a tool with the given name exists in the tools array.
30
40
  * Works with `.not` for negation.