UNPKG

mcp-test-client

Version:

A testing utility for Model Context Protocol (MCP) servers

148 lines (112 loc) 3.41 kB
# MCP Test Client A testing utility for Model Context Protocol (MCP) servers. This client helps you test MCP server implementations by providing a simple interface for making tool calls and validating responses. ## Features - Easy-to-use testing interface for MCP servers - Built-in support for tool listing and tool calls - Type-safe implementation using TypeScript - Assertion utilities for validating server responses - Mock calculator server implementation for examples ## Installation ```bash bun install mcp-test-client ``` ## Usage ### Basic Example ```typescript import { MCPTestClient } from 'mcp-test-client'; describe('MCP Server Tests', () => { let client: MCPTestClient; beforeAll(async () => { client = new MCPTestClient({ serverCommand: 'bun', serverArgs: ['./path/to/your/server.ts'], }); await client.init(); }); afterAll(async () => { await client.cleanup(); }); test('should list available tools', async () => { const tools = await client.listTools(); expect(tools).toContainEqual( expect.objectContaining({ name: 'your-tool-name', description: 'Your tool description', }) ); }); test('should call a tool', async () => { await client.assertToolCall( 'your-tool-name', { arg1: 'value1', arg2: 'value2' }, (result) => { expect(result.content[0].text).toBe('expected result'); } ); }); }); ``` ### Calculator Server Example The package includes a mock calculator server for testing and learning purposes: ```typescript import { MCPTestClient } from 'mcp-test-client'; describe('Calculator Server Tests', () => { let client: MCPTestClient; beforeAll(async () => { client = new MCPTestClient({ serverCommand: 'bun', serverArgs: ['./tests/mocks/calculator.ts'], }); await client.init(); }); afterAll(async () => { await client.cleanup(); }); test('should perform addition', async () => { await client.assertToolCall( 'calculate', { operation: 'add', a: 5, b: 3 }, (result) => { expect(result.content[0].text).toBe('8'); } ); }); }); ``` ## API Reference ### `MCPTestClient` #### Constructor ```typescript constructor(config: { serverCommand: string; serverArgs: string[] }) ``` #### Methods - `init(): Promise<void>` - Initialize the client and connect to the server - `listTools(): Promise<Tool[]>` - Get a list of available tools from the server - `callTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>` - Call a specific tool - `assertToolCall(toolName: string, args: Record<string, unknown>, assertion: (result: ToolResult) => void | Promise<void>): Promise<void>` - Call a tool and run assertions on the result - `cleanup(): Promise<void>` - Clean up resources and disconnect from the server ## Development ### Prerequisites - [Bun](https://bun.sh) (v1.0.0 or higher) ### Setup 1. Clone the repository ```bash git clone <repository-url> cd mcp-test-client ``` 2. Install dependencies ```bash bun install ``` 3. Run tests ```bash bun test ``` ## License MIT ## Contributing 1. Fork the repository 2. Create your feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add some amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request