Modulesmcp
mcp
Build MCP servers with typed tools and resources
Overview
The mcp module wraps the Model Context Protocol SDK for building MCP servers with Zod-validated tools and resources. Includes a test harness for verification without a running server.
Peer dependencies: @modelcontextprotocol/sdk, zod
npm install @modelcontextprotocol/sdk zodyarn add @modelcontextprotocol/sdk zodpnpm add @modelcontextprotocol/sdk zodQuick Start
import { McpServerBuilder } from '@jamaalbuilds/ai-toolkit/mcp';
import { z } from 'zod';
const server = new McpServerBuilder({
name: 'my-tools',
version: '1.0.0',
});
server.defineTool({
name: 'search',
description: 'Search the knowledge base',
schema: {
query: z.string().describe('Search query'),
limit: z.number().optional().describe('Max results'),
},
handler: async ({ query, limit }) => {
const results = await searchKnowledgeBase(query, limit);
return results;
},
});
API Reference
McpServerBuilder
Builder class for creating MCP servers.
new McpServerBuilder(config: McpServerConfig)
| Parameter | Type | Description |
|---|---|---|
config.name | string | Server name |
config.version | string | Server version |
.defineTool(definition)
Register a tool with Zod schema validation.
| Parameter | Type | Description |
|---|---|---|
definition.name | string | Tool name |
definition.description | string | Tool description |
definition.schema | ZodObject | Input schema |
definition.handler | (input) => Promise<unknown> | Tool handler (return value auto-serialized to JSON) |
server.defineTool({
name: 'get-weather',
description: 'Get current weather for a location',
schema: {
location: z.string(),
units: z.enum(['celsius', 'fahrenheit']).optional(),
},
handler: async ({ location, units }) => {
return `Weather in ${location}: 72F`;
},
});
.defineResource(definition)
Register a resource that clients can read.
server.defineResource({
uri: 'config://app-settings',
name: 'Application Settings',
description: 'Current application configuration',
handler: async () => config,
});
McpTestHarness
Test MCP servers without starting a transport.
const harness = server.createTestHarness();
const result = await harness.callTool('search', { query: 'test' });
const resource = await harness.readResource('config://app-settings');
Types
McpServerBuilder— builder with defineTool(), defineResource()McpServerConfig— name, versionMcpToolResponse— content array of McpContentMcpContent— text content or image contentToolDefinition— name, description, schema, handlerResourceDefinition— uri, name, description, handlerMcpTestHarness— test helper with callTool(), readResource()