JSPM

@tmcp/adapter-zod

0.1.7
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1682
  • Score
    100M100P100Q115967F

Zod adapter for TMCP JSON Schema conversion

Package Exports

  • @tmcp/adapter-zod
  • @tmcp/adapter-zod/package.json

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-v3 which uses the external zod-to-json-schema library.

Installation

pnpm add @tmcp/adapter-zod zod tmcp

Usage

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.