@crashbytes/mcp-test-kit 0.1.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.
@@ -0,0 +1,62 @@
1
+ /**
2
+ * MCP Test Client - Core testing client for MCP servers
3
+ */
4
+ import type { MCPTestClientConfig, MCPTool, MCPResource, MCPPrompt, MCPToolResult, MCPResourceContent, MCPInitializeResult, IMCPTestClient } from '../types/index.js';
5
+ /**
6
+ * Main test client for MCP servers
7
+ */
8
+ export declare class MCPTestClient implements IMCPTestClient {
9
+ private client;
10
+ private transport;
11
+ private process;
12
+ private config;
13
+ private initialized;
14
+ constructor(config: MCPTestClientConfig);
15
+ /**
16
+ * Connect to the MCP server
17
+ */
18
+ connect(): Promise<void>;
19
+ /**
20
+ * Disconnect from the MCP server
21
+ */
22
+ disconnect(): Promise<void>;
23
+ /**
24
+ * Ensure the client is connected
25
+ */
26
+ private ensureConnected;
27
+ /**
28
+ * List available tools from the server
29
+ */
30
+ listTools(): Promise<MCPTool[]>;
31
+ /**
32
+ * Call a tool on the server
33
+ */
34
+ callTool(name: string, args?: Record<string, unknown>): Promise<MCPToolResult>;
35
+ /**
36
+ * List available resources from the server
37
+ */
38
+ listResources(): Promise<MCPResource[]>;
39
+ /**
40
+ * Read a resource from the server
41
+ */
42
+ readResource(uri: string): Promise<MCPResourceContent>;
43
+ /**
44
+ * List available prompts from the server
45
+ */
46
+ listPrompts(): Promise<MCPPrompt[]>;
47
+ /**
48
+ * Get a prompt from the server
49
+ */
50
+ getPrompt(name: string, args?: Record<string, string>): Promise<unknown>;
51
+ /**
52
+ * Get server info and capabilities
53
+ */
54
+ getServerInfo(): Promise<MCPInitializeResult>;
55
+ }
56
+ /**
57
+ * Create a new MCP test client
58
+ * @param config - Client configuration
59
+ * @returns MCP test client instance
60
+ */
61
+ export declare function createMCPTestClient(config: MCPTestClientConfig): Promise<MCPTestClient>;
62
+ //# sourceMappingURL=MCPTestClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPTestClient.d.ts","sourceRoot":"","sources":["../../src/client/MCPTestClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,OAAO,EACP,WAAW,EACX,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAe3B;;GAEG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,mBAAmB;IAsBvC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMrC;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAMxF;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAM7C;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAM5D;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAMzC;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMlF;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAcpD;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAI7F"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * MCP Test Client - Core testing client for MCP servers
3
+ */
4
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
5
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
6
+ import { spawn } from 'child_process';
7
+ /**
8
+ * Filter out undefined values from environment object
9
+ */
10
+ function cleanEnv(env) {
11
+ const cleaned = {};
12
+ for (const [key, value] of Object.entries(env)) {
13
+ if (value !== undefined) {
14
+ cleaned[key] = value;
15
+ }
16
+ }
17
+ return cleaned;
18
+ }
19
+ /**
20
+ * Main test client for MCP servers
21
+ */
22
+ export class MCPTestClient {
23
+ constructor(config) {
24
+ this.transport = null;
25
+ this.process = null;
26
+ this.initialized = false;
27
+ this.config = {
28
+ command: config.command,
29
+ args: config.args || [],
30
+ env: config.env || {},
31
+ timeout: config.timeout || 5000,
32
+ transport: config.transport || 'stdio',
33
+ serverUrl: config.serverUrl || '',
34
+ debug: config.debug || false,
35
+ };
36
+ this.client = new Client({
37
+ name: 'mcp-test-kit',
38
+ version: '0.1.0',
39
+ }, {
40
+ capabilities: {},
41
+ });
42
+ }
43
+ /**
44
+ * Connect to the MCP server
45
+ */
46
+ async connect() {
47
+ if (this.initialized) {
48
+ throw new Error('Client is already connected');
49
+ }
50
+ if (this.config.transport !== 'stdio') {
51
+ throw new Error(`Transport type '${this.config.transport}' not yet implemented. Only 'stdio' is currently supported.`);
52
+ }
53
+ // Prepare environment variables
54
+ const processEnv = cleanEnv({
55
+ ...process.env,
56
+ ...this.config.env,
57
+ });
58
+ // Spawn the server process
59
+ this.process = spawn(this.config.command, this.config.args, {
60
+ env: processEnv,
61
+ });
62
+ if (!this.process.stdout || !this.process.stdin) {
63
+ throw new Error('Failed to create process stdio streams');
64
+ }
65
+ // Set up error handling
66
+ this.process.on('error', (error) => {
67
+ if (this.config.debug) {
68
+ console.error('MCP Server process error:', error);
69
+ }
70
+ });
71
+ this.process.stderr?.on('data', (data) => {
72
+ if (this.config.debug) {
73
+ console.error('MCP Server stderr:', data.toString());
74
+ }
75
+ });
76
+ // Create transport
77
+ this.transport = new StdioClientTransport({
78
+ command: this.config.command,
79
+ args: this.config.args,
80
+ env: processEnv,
81
+ });
82
+ // Connect the client
83
+ await this.client.connect(this.transport);
84
+ this.initialized = true;
85
+ if (this.config.debug) {
86
+ console.log('MCP Test Client connected successfully');
87
+ }
88
+ }
89
+ /**
90
+ * Disconnect from the MCP server
91
+ */
92
+ async disconnect() {
93
+ if (!this.initialized) {
94
+ return;
95
+ }
96
+ try {
97
+ await this.client.close();
98
+ }
99
+ catch (error) {
100
+ if (this.config.debug) {
101
+ console.error('Error closing client:', error);
102
+ }
103
+ }
104
+ if (this.process) {
105
+ this.process.kill();
106
+ this.process = null;
107
+ }
108
+ this.transport = null;
109
+ this.initialized = false;
110
+ if (this.config.debug) {
111
+ console.log('MCP Test Client disconnected');
112
+ }
113
+ }
114
+ /**
115
+ * Ensure the client is connected
116
+ */
117
+ ensureConnected() {
118
+ if (!this.initialized) {
119
+ throw new Error('Client is not connected. Call connect() first.');
120
+ }
121
+ }
122
+ /**
123
+ * List available tools from the server
124
+ */
125
+ async listTools() {
126
+ this.ensureConnected();
127
+ const response = await this.client.listTools();
128
+ return (response.tools || []);
129
+ }
130
+ /**
131
+ * Call a tool on the server
132
+ */
133
+ async callTool(name, args = {}) {
134
+ this.ensureConnected();
135
+ const response = await this.client.callTool({ name, arguments: args });
136
+ return response;
137
+ }
138
+ /**
139
+ * List available resources from the server
140
+ */
141
+ async listResources() {
142
+ this.ensureConnected();
143
+ const response = await this.client.listResources();
144
+ return (response.resources || []);
145
+ }
146
+ /**
147
+ * Read a resource from the server
148
+ */
149
+ async readResource(uri) {
150
+ this.ensureConnected();
151
+ const response = await this.client.readResource({ uri });
152
+ return response.contents?.[0];
153
+ }
154
+ /**
155
+ * List available prompts from the server
156
+ */
157
+ async listPrompts() {
158
+ this.ensureConnected();
159
+ const response = await this.client.listPrompts();
160
+ return (response.prompts || []);
161
+ }
162
+ /**
163
+ * Get a prompt from the server
164
+ */
165
+ async getPrompt(name, args = {}) {
166
+ this.ensureConnected();
167
+ const response = await this.client.getPrompt({ name, arguments: args });
168
+ return response;
169
+ }
170
+ /**
171
+ * Get server info and capabilities
172
+ */
173
+ async getServerInfo() {
174
+ this.ensureConnected();
175
+ // The server info is available after initialization
176
+ // We can access it from the client's internal state
177
+ return {
178
+ protocolVersion: '2024-11-05',
179
+ capabilities: {},
180
+ serverInfo: {
181
+ name: 'unknown',
182
+ version: 'unknown',
183
+ },
184
+ };
185
+ }
186
+ }
187
+ /**
188
+ * Create a new MCP test client
189
+ * @param config - Client configuration
190
+ * @returns MCP test client instance
191
+ */
192
+ export async function createMCPTestClient(config) {
193
+ const client = new MCPTestClient(config);
194
+ await client.connect();
195
+ return client;
196
+ }
197
+ //# sourceMappingURL=MCPTestClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPTestClient.js","sourceRoot":"","sources":["../../src/client/MCPTestClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Test Kit - Testing framework for Model Context Protocol servers
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export { MCPTestClient, createMCPTestClient } from './client/MCPTestClient.js';
7
+ export type { MCPTestClientConfig, TransportType, MCPTool, MCPResource, MCPPrompt, MCPToolResult, MCPResourceContent, MCPError, MCPProtocolVersion, MCPServerCapabilities, MCPInitializeResult, IMCPTestClient, MockToolHandler, MockResourceHandler, SnapshotOptions, } from './types/index.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAG/E,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,WAAW,EACX,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * MCP Test Kit - Testing framework for Model Context Protocol servers
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ // Core client
7
+ export { MCPTestClient, createMCPTestClient } from './client/MCPTestClient.js';
8
+ // Mocks (exported separately via /mocks subpath)
9
+ // Matchers (exported separately via /matchers subpath)
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAqB/E,iDAAiD;AACjD,uDAAuD"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Custom matchers for MCP Test Kit
3
+ *
4
+ * Import this module to enable custom MCP assertions in your tests
5
+ */
6
+ export * from './vitest.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/matchers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Custom matchers for MCP Test Kit
3
+ *
4
+ * Import this module to enable custom MCP assertions in your tests
5
+ */
6
+ export * from './vitest.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/matchers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Custom Vitest matchers for MCP testing
3
+ */
4
+ import type { MCPToolResult, MCPError } from '../types/index.js';
5
+ /**
6
+ * Register all custom matchers with Vitest
7
+ */
8
+ export declare function registerVitestMatchers(): void;
9
+ declare module 'vitest' {
10
+ interface Assertion<T = any> {
11
+ toBeValidMCPTool(): T;
12
+ toBeValidMCPResource(): T;
13
+ toMatchMCPToolResponse(expected?: Partial<MCPToolResult>): T;
14
+ toMatchMCPError(expected: Partial<MCPError> & {
15
+ message?: string | RegExp;
16
+ }): T;
17
+ toHaveMCPProtocolVersion(version: string): T;
18
+ }
19
+ interface AsymmetricMatchersContaining {
20
+ toBeValidMCPTool(): any;
21
+ toBeValidMCPResource(): any;
22
+ toMatchMCPToolResponse(expected?: Partial<MCPToolResult>): any;
23
+ toMatchMCPError(expected: Partial<MCPError> & {
24
+ message?: string | RegExp;
25
+ }): any;
26
+ toHaveMCPProtocolVersion(version: string): any;
27
+ }
28
+ }
29
+ //# sourceMappingURL=vitest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/matchers/vitest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAwB,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AA4NvF;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAQ7C;AAMD,OAAO,QAAQ,QAAQ,CAAC;IACtB,UAAU,SAAS,CAAC,CAAC,GAAG,GAAG;QACzB,gBAAgB,IAAI,CAAC,CAAC;QACtB,oBAAoB,IAAI,CAAC,CAAC;QAC1B,sBAAsB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC7D,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,GAAG,CAAC,CAAC;QAChF,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;KAC9C;IAED,UAAU,4BAA4B;QACpC,gBAAgB,IAAI,GAAG,CAAC;QACxB,oBAAoB,IAAI,GAAG,CAAC;QAC5B,sBAAsB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;QAC/D,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,GAAG,GAAG,CAAC;QAClF,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;KAChD;CACF"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Custom Vitest matchers for MCP testing
3
+ */
4
+ import { expect } from 'vitest';
5
+ /**
6
+ * Check if a tool is a valid MCP tool
7
+ */
8
+ function toBeValidMCPTool(received) {
9
+ const tool = received;
10
+ if (!tool || typeof tool !== 'object') {
11
+ return {
12
+ pass: false,
13
+ message: () => `Expected a valid MCP tool object, but received ${typeof received}`,
14
+ };
15
+ }
16
+ if (typeof tool.name !== 'string' || tool.name.trim() === '') {
17
+ return {
18
+ pass: false,
19
+ message: () => `Expected tool to have a non-empty name, but received: ${tool.name}`,
20
+ };
21
+ }
22
+ if (!tool.inputSchema || typeof tool.inputSchema !== 'object') {
23
+ return {
24
+ pass: false,
25
+ message: () => `Expected tool to have an inputSchema object, but received: ${typeof tool.inputSchema}`,
26
+ };
27
+ }
28
+ if (tool.inputSchema.type !== 'object') {
29
+ return {
30
+ pass: false,
31
+ message: () => `Expected inputSchema.type to be 'object', but received: ${tool.inputSchema?.type || 'undefined'}`,
32
+ };
33
+ }
34
+ return {
35
+ pass: true,
36
+ message: () => `Expected ${tool.name} not to be a valid MCP tool`,
37
+ };
38
+ }
39
+ /**
40
+ * Check if a resource is a valid MCP resource
41
+ */
42
+ function toBeValidMCPResource(received) {
43
+ const resource = received;
44
+ if (!resource || typeof resource !== 'object') {
45
+ return {
46
+ pass: false,
47
+ message: () => `Expected a valid MCP resource object, but received ${typeof received}`,
48
+ };
49
+ }
50
+ if (typeof resource.uri !== 'string' || resource.uri.trim() === '') {
51
+ return {
52
+ pass: false,
53
+ message: () => `Expected resource to have a non-empty uri, but received: ${resource.uri}`,
54
+ };
55
+ }
56
+ if (typeof resource.name !== 'string' || resource.name.trim() === '') {
57
+ return {
58
+ pass: false,
59
+ message: () => `Expected resource to have a non-empty name, but received: ${resource.name}`,
60
+ };
61
+ }
62
+ return {
63
+ pass: true,
64
+ message: () => `Expected ${resource.name} not to be a valid MCP resource`,
65
+ };
66
+ }
67
+ /**
68
+ * Check if a response matches the expected MCP tool response structure
69
+ */
70
+ function toMatchMCPToolResponse(received, expected) {
71
+ const result = received;
72
+ if (!result || typeof result !== 'object') {
73
+ return {
74
+ pass: false,
75
+ message: () => `Expected a valid MCP tool result object, but received ${typeof received}`,
76
+ };
77
+ }
78
+ if (!Array.isArray(result.content)) {
79
+ return {
80
+ pass: false,
81
+ message: () => `Expected result.content to be an array, but received: ${typeof result.content}`,
82
+ };
83
+ }
84
+ if (result.content.length === 0) {
85
+ return {
86
+ pass: false,
87
+ message: () => 'Expected result.content to have at least one item, but received an empty array',
88
+ };
89
+ }
90
+ // Check content items
91
+ for (const item of result.content) {
92
+ if (!item.type || !['text', 'image', 'resource'].includes(item.type)) {
93
+ return {
94
+ pass: false,
95
+ message: () => `Expected content item to have a valid type (text, image, or resource), but received: ${item.type}`,
96
+ };
97
+ }
98
+ }
99
+ // If expected values are provided, check them
100
+ if (expected) {
101
+ if (expected.isError !== undefined && result.isError !== expected.isError) {
102
+ return {
103
+ pass: false,
104
+ message: () => `Expected isError to be ${expected.isError}, but received: ${result.isError}`,
105
+ };
106
+ }
107
+ if (expected.content && result.content) {
108
+ const expectedLength = expected.content.length;
109
+ const actualLength = result.content.length;
110
+ if (expectedLength !== actualLength) {
111
+ return {
112
+ pass: false,
113
+ message: () => `Expected ${expectedLength} content items, but received: ${actualLength}`,
114
+ };
115
+ }
116
+ }
117
+ }
118
+ return {
119
+ pass: true,
120
+ message: () => 'Expected result not to match MCP tool response structure',
121
+ };
122
+ }
123
+ /**
124
+ * Check if an error matches the expected MCP error
125
+ */
126
+ function toMatchMCPError(received, expected) {
127
+ const error = received;
128
+ if (!error || typeof error !== 'object') {
129
+ return {
130
+ pass: false,
131
+ message: () => `Expected a valid MCP error object, but received ${typeof received}`,
132
+ };
133
+ }
134
+ if (expected.code !== undefined && error.code !== expected.code) {
135
+ return {
136
+ pass: false,
137
+ message: () => `Expected error code ${expected.code}, but received: ${error.code}`,
138
+ };
139
+ }
140
+ if (expected.message !== undefined) {
141
+ if (typeof expected.message === 'string') {
142
+ if (error.message !== expected.message) {
143
+ return {
144
+ pass: false,
145
+ message: () => `Expected error message "${expected.message}", but received: "${error.message}"`,
146
+ };
147
+ }
148
+ }
149
+ else {
150
+ // Must be RegExp
151
+ const pattern = expected.message;
152
+ if (!pattern.test(error.message || '')) {
153
+ return {
154
+ pass: false,
155
+ message: () => `Expected error message to match ${pattern}, but received: "${error.message}"`,
156
+ };
157
+ }
158
+ }
159
+ }
160
+ return {
161
+ pass: true,
162
+ message: () => 'Expected error not to match MCP error',
163
+ };
164
+ }
165
+ /**
166
+ * Check if the protocol version matches
167
+ */
168
+ function toHaveMCPProtocolVersion(received, expectedVersion) {
169
+ const obj = received;
170
+ if (!obj || typeof obj !== 'object') {
171
+ return {
172
+ pass: false,
173
+ message: () => `Expected an object with protocolVersion, but received ${typeof received}`,
174
+ };
175
+ }
176
+ if (obj.protocolVersion !== expectedVersion) {
177
+ return {
178
+ pass: false,
179
+ message: () => `Expected protocol version ${expectedVersion}, but received: ${obj.protocolVersion}`,
180
+ };
181
+ }
182
+ return {
183
+ pass: true,
184
+ message: () => `Expected protocol version not to be ${expectedVersion}`,
185
+ };
186
+ }
187
+ /**
188
+ * Register all custom matchers with Vitest
189
+ */
190
+ export function registerVitestMatchers() {
191
+ expect.extend({
192
+ toBeValidMCPTool,
193
+ toBeValidMCPResource,
194
+ toMatchMCPToolResponse,
195
+ toMatchMCPError,
196
+ toHaveMCPProtocolVersion,
197
+ });
198
+ }
199
+ // Auto-register matchers when imported
200
+ registerVitestMatchers();
201
+ //# sourceMappingURL=vitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/matchers/vitest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAiB;IACzC,MAAM,IAAI,GAAG,QAA4B,CAAC;IAE1C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,kDAAkD,OAAO,QAAQ,EAAE;SACnF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,yDAAyD,IAAI,CAAC,IAAI,EAAE;SACpF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC9D,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,8DAA8D,OAAO,IAAI,CAAC,WAAW,EAAE;SACvG,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,2DAA2D,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE;SAClH,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,CAAC,IAAI,6BAA6B;KAClE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,QAAiB;IAC7C,MAAM,QAAQ,GAAG,QAAgC,CAAC;IAElD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,sDAAsD,OAAO,QAAQ,EAAE;SACvF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACnE,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,4DAA4D,QAAQ,CAAC,GAAG,EAAE;SAC1F,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrE,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,6DAA6D,QAAQ,CAAC,IAAI,EAAE;SAC5F,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,QAAQ,CAAC,IAAI,iCAAiC;KAC1E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,QAAiB,EACjB,QAAiC;IAEjC,MAAM,MAAM,GAAG,QAAkC,CAAC;IAElD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,yDAAyD,OAAO,QAAQ,EAAE;SAC1F,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,yDAAyD,OAAO,MAAM,CAAC,OAAO,EAAE;SAChG,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,gFAAgF;SAChG,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrE,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,GAAG,EAAE,CAAC,wFAAwF,IAAI,CAAC,IAAI,EAAE;aACnH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC1E,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,GAAG,EAAE,CAAC,0BAA0B,QAAQ,CAAC,OAAO,mBAAmB,MAAM,CAAC,OAAO,EAAE;aAC7F,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/C,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC3C,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;gBACpC,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,cAAc,iCAAiC,YAAY,EAAE;iBACzF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,0DAA0D;KAC1E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,QAAiB,EACjB,QAA2D;IAE3D,MAAM,KAAK,GAAG,QAA6B,CAAC;IAE5C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,mDAAmD,OAAO,QAAQ,EAAE;SACpF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChE,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,uBAAuB,QAAQ,CAAC,IAAI,mBAAmB,KAAK,CAAC,IAAI,EAAE;SACnF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACvC,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE,GAAG,EAAE,CAAC,2BAA2B,QAAQ,CAAC,OAAO,qBAAqB,KAAK,CAAC,OAAO,GAAG;iBAChG,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAiB,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;gBACvC,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE,GAAG,EAAE,CAAC,mCAAmC,OAAO,oBAAoB,KAAK,CAAC,OAAO,GAAG;iBAC9F,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,uCAAuC;KACvD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAC/B,QAAiB,EACjB,eAAuB;IAEvB,MAAM,GAAG,GAAG,QAAwC,CAAC;IAErD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,yDAAyD,OAAO,QAAQ,EAAE;SAC1F,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,eAAe,KAAK,eAAe,EAAE,CAAC;QAC5C,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,6BAA6B,eAAe,mBAAmB,GAAG,CAAC,eAAe,EAAE;SACpG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,uCAAuC,eAAe,EAAE;KACxE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,CAAC,MAAM,CAAC;QACZ,gBAAgB;QAChB,oBAAoB;QACpB,sBAAsB;QACtB,eAAe;QACf,wBAAwB;KACzB,CAAC,CAAC;AACL,CAAC;AAED,uCAAuC;AACvC,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Mock MCP Server for testing
3
+ */
4
+ import type { MockToolHandler, MockResourceHandler, MCPTool, MCPResource } from '../types/index.js';
5
+ /**
6
+ * Mock tool definition
7
+ */
8
+ export interface MockTool {
9
+ name: string;
10
+ description?: string;
11
+ inputSchema?: MCPTool['inputSchema'];
12
+ handler: MockToolHandler;
13
+ }
14
+ /**
15
+ * Mock resource definition
16
+ */
17
+ export interface MockResource {
18
+ uri: string;
19
+ name: string;
20
+ description?: string;
21
+ mimeType?: string;
22
+ handler: MockResourceHandler;
23
+ }
24
+ /**
25
+ * Mock server configuration
26
+ */
27
+ export interface MockServerConfig {
28
+ tools?: MockTool[];
29
+ resources?: MockResource[];
30
+ serverInfo?: {
31
+ name: string;
32
+ version: string;
33
+ };
34
+ }
35
+ /**
36
+ * Create a mock tool
37
+ */
38
+ export declare function mockTool(name: string, handler: MockToolHandler, options?: {
39
+ description?: string;
40
+ inputSchema?: MCPTool['inputSchema'];
41
+ }): MockTool;
42
+ /**
43
+ * Create a mock resource
44
+ */
45
+ export declare function mockResource(uri: string, name: string, handler: MockResourceHandler, options?: {
46
+ description?: string;
47
+ mimeType?: string;
48
+ }): MockResource;
49
+ /**
50
+ * Mock MCP Server class
51
+ */
52
+ export declare class MockMCPServer {
53
+ private tools;
54
+ private resources;
55
+ private serverInfo;
56
+ constructor(config?: MockServerConfig);
57
+ /**
58
+ * Add a tool to the mock server
59
+ */
60
+ addTool(tool: MockTool): void;
61
+ /**
62
+ * Add a resource to the mock server
63
+ */
64
+ addResource(resource: MockResource): void;
65
+ /**
66
+ * Get all tools
67
+ */
68
+ getTools(): MCPTool[];
69
+ /**
70
+ * Get all resources
71
+ */
72
+ getResources(): MCPResource[];
73
+ /**
74
+ * Call a tool
75
+ */
76
+ callTool(name: string, args: Record<string, unknown>): Promise<import("../types/index.js").MCPToolResult>;
77
+ /**
78
+ * Read a resource
79
+ */
80
+ readResource(uri: string): Promise<import("../types/index.js").MCPResourceContent>;
81
+ /**
82
+ * Get server info
83
+ */
84
+ getServerInfo(): {
85
+ name: string;
86
+ version: string;
87
+ };
88
+ }
89
+ /**
90
+ * Create a mock MCP server
91
+ */
92
+ export declare function createMockMCPServer(config?: MockServerConfig): MockMCPServer;
93
+ //# sourceMappingURL=MockServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockServer.d.ts","sourceRoot":"","sources":["../../src/mocks/MockServer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEpG;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACrC,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACtC,GACA,QAAQ,CAUV;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,YAAY,CAQd;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,UAAU,CAAoC;gBAE1C,MAAM,GAAE,gBAAqB;IAqBzC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAI7B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIzC;;OAEG;IACH,QAAQ,IAAI,OAAO,EAAE;IAQrB;;OAEG;IACH,YAAY,IAAI,WAAW,EAAE;IAS7B;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ1D;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM;IAQ9B;;OAEG;IACH,aAAa;cArFe,MAAM;iBAAW,MAAM;;CAwFpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,gBAAqB,GAAG,aAAa,CAEhF"}