@tmcp/adapter-zod
v0.1.7
Published
Zod adapter for TMCP JSON Schema conversion
Readme
@tmcp/adapter-zod
Zod v4+ adapter for TMCP JSON Schema conversion. Uses Zod's built-in toJSONSchema() method available in Zod v4+.
Note: For Zod v3 support, use
@tmcp/adapter-zod-v3which uses the externalzod-to-json-schemalibrary.
Installation
pnpm add @tmcp/adapter-zod zod tmcpUsage
import { ZodJsonSchemaAdapter } from '@tmcp/adapter-zod';
import { z } from 'zod';
const adapter = new ZodJsonSchemaAdapter();
// Define a Zod schema
const userSchema = z.object({
name: z.string(),
age: z.number(),
email: z.string().email(),
});
// Convert to JSON Schema
const jsonSchema = await adapter.toJsonSchema(userSchema);
console.log(jsonSchema);Usage with TMCP Server
import { McpServer } from 'tmcp';
import { ZodJsonSchemaAdapter } from '@tmcp/adapter-zod';
import { z } from 'zod';
const adapter = new ZodJsonSchemaAdapter();
const server = new McpServer(
{
name: 'my-server',
version: '1.0.0',
description: 'Server with Zod schemas',
},
{
adapter,
capabilities: {
tools: { listChanged: true },
},
},
);
// Define a tool with Zod schema
server.tool(
{
name: 'create_user',
description: 'Create a new user',
schema: z.object({
name: z.string(),
age: z.number().positive(),
email: z.string().email(),
}),
},
async ({ name, age, email }) => {
return {
content: [
{
type: 'text',
text: `Created user: ${name}, age ${age}, email ${email}`,
},
],
};
},
);Advanced Usage
Custom JSON Schema Options
import { ZodJsonSchemaAdapter } from '@tmcp/adapter-zod';
import { z } from 'zod';
const adapter = new ZodJsonSchemaAdapter();
// Schema with custom descriptions and metadata
const userSchema = z.object({
name: z.string().describe('Full name of the user'),
age: z.number().positive().describe('Age in years'),
email: z.string().email().describe('Valid email address'),
preferences: z
.object({
theme: z.enum(['light', 'dark']).default('light'),
notifications: z.boolean().default(true),
})
.optional(),
});
const jsonSchema = await adapter.toJsonSchema(userSchema);Complex Schemas
import { z } from 'zod';
// Union types
const contactSchema = z.union([
z.object({ type: z.literal('email'), value: z.string().email() }),
z.object({ type: z.literal('phone'), value: z.string().regex(/^\+?\d+$/) }),
]);
// Arrays and nested objects
const companySchema = z.object({
name: z.string(),
employees: z.array(userSchema),
contacts: z.array(contactSchema),
founded: z.date().transform((date) => date.toISOString()),
});API
ZodJsonSchemaAdapter
A class that extends the base JsonSchemaAdapter from TMCP and provides Zod-specific schema conversion.
Methods
toJsonSchema(schema)- Converts a Zod schema to JSON Schema format
Dependencies
zod- Peer dependency for schema validation and type definitions (^4.0.0)tmcp- Peer dependency for the base adapter
Features
- Full Zod v4+ support - Supports all Zod schema types and transformations
- Type safety - Full TypeScript support with proper type inference
- Rich metadata - Preserves descriptions, defaults, and validation rules
- Easy integration - Drop-in replacement for other TMCP adapters
- Native conversion - Uses Zod's built-in
toJSONSchema()method for optimal performance
Acknowledgments
Huge thanks to Sean O'Bannon that provided us with the @tmcp scope on npm.
