Get the FREE Ultimate OpenClaw Setup Guide →

mcp-tool-schema-generator

Scanned
npx machina-cli add skill a5c-ai/babysitter/mcp-tool-schema-generator --openclaw
Files (1)
SKILL.md
7.8 KB

MCP Tool Schema Generator

Generate comprehensive JSON Schema definitions for MCP tools that are optimized for AI consumption, with clear descriptions, type constraints, and validation rules.

Capabilities

  • Generate JSON Schema for tool inputs
  • Create TypeScript types from schemas
  • Generate Zod validation schemas
  • Produce AI-optimized descriptions
  • Support complex nested structures
  • Handle enums, unions, and constraints

Usage

Invoke this skill when you need to:

  • Define input schemas for MCP tools
  • Create type-safe tool parameter definitions
  • Generate validation logic for tool inputs
  • Document tool parameters for AI consumption

Inputs

ParameterTypeRequiredDescription
toolNamestringYesName of the MCP tool
descriptionstringYesTool description
parametersarrayYesList of parameter definitions
outputFormatstringNojson-schema, zod, or typescript (default: all)
examplesarrayNoExample inputs for documentation

Parameter Definition Structure

{
  "parameters": [
    {
      "name": "path",
      "type": "string",
      "description": "File path to read",
      "required": true,
      "constraints": {
        "pattern": "^[a-zA-Z0-9_/.-]+$",
        "maxLength": 255
      }
    },
    {
      "name": "encoding",
      "type": "string",
      "description": "File encoding",
      "required": false,
      "default": "utf-8",
      "enum": ["utf-8", "ascii", "base64"]
    },
    {
      "name": "options",
      "type": "object",
      "description": "Read options",
      "required": false,
      "properties": [
        { "name": "maxSize", "type": "number", "description": "Max bytes to read" },
        { "name": "follow", "type": "boolean", "description": "Follow symlinks" }
      ]
    }
  ]
}

Output Structure

schemas/
├── <toolName>/
│   ├── schema.json           # JSON Schema definition
│   ├── schema.ts             # TypeScript types
│   ├── validation.ts         # Zod validation schema
│   ├── examples.json         # Example inputs
│   └── README.md             # Schema documentation

Generated Code Patterns

JSON Schema Output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "mcp://tools/read_file/input",
  "title": "read_file Input Schema",
  "description": "Read contents of a file from the filesystem",
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "File path to read. Must be a valid filesystem path.",
      "pattern": "^[a-zA-Z0-9_/.-]+$",
      "maxLength": 255,
      "examples": ["/home/user/document.txt", "./config.json"]
    },
    "encoding": {
      "type": "string",
      "description": "File encoding. Defaults to UTF-8 for text files.",
      "enum": ["utf-8", "ascii", "base64"],
      "default": "utf-8"
    },
    "options": {
      "type": "object",
      "description": "Additional read options",
      "properties": {
        "maxSize": {
          "type": "integer",
          "description": "Maximum bytes to read. Use for large files.",
          "minimum": 1,
          "maximum": 10485760
        },
        "follow": {
          "type": "boolean",
          "description": "Whether to follow symbolic links",
          "default": true
        }
      }
    }
  },
  "required": ["path"],
  "additionalProperties": false
}

TypeScript Types Output

/**
 * Input parameters for the read_file tool
 * @description Read contents of a file from the filesystem
 */
export interface ReadFileInput {
  /**
   * File path to read. Must be a valid filesystem path.
   * @pattern ^[a-zA-Z0-9_/.-]+$
   * @maxLength 255
   * @example "/home/user/document.txt"
   */
  path: string;

  /**
   * File encoding. Defaults to UTF-8 for text files.
   * @default "utf-8"
   */
  encoding?: 'utf-8' | 'ascii' | 'base64';

  /**
   * Additional read options
   */
  options?: {
    /**
     * Maximum bytes to read. Use for large files.
     * @minimum 1
     * @maximum 10485760
     */
    maxSize?: number;

    /**
     * Whether to follow symbolic links
     * @default true
     */
    follow?: boolean;
  };
}

Zod Validation Output

import { z } from 'zod';

/**
 * Zod schema for read_file tool input validation
 */
export const ReadFileInputSchema = z.object({
  path: z
    .string()
    .regex(/^[a-zA-Z0-9_/.-]+$/, 'Invalid path characters')
    .max(255, 'Path too long')
    .describe('File path to read. Must be a valid filesystem path.'),

  encoding: z
    .enum(['utf-8', 'ascii', 'base64'])
    .optional()
    .default('utf-8')
    .describe('File encoding. Defaults to UTF-8 for text files.'),

  options: z
    .object({
      maxSize: z
        .number()
        .int()
        .min(1)
        .max(10485760)
        .optional()
        .describe('Maximum bytes to read. Use for large files.'),

      follow: z
        .boolean()
        .optional()
        .default(true)
        .describe('Whether to follow symbolic links'),
    })
    .optional()
    .describe('Additional read options'),
}).strict();

export type ReadFileInput = z.infer<typeof ReadFileInputSchema>;

Supported Types

TypeJSON SchemaTypeScriptZod
stringstringstringz.string()
numbernumbernumberz.number()
integerintegernumberz.number().int()
booleanbooleanbooleanz.boolean()
arrayarrayT[]z.array()
objectobjectinterfacez.object()
enumenumunionz.enum()
nullnullnullz.null()
uniononeOfunionz.union()

Constraint Support

ConstraintTypesJSON SchemaZod
minLengthstringminLength.min()
maxLengthstringmaxLength.max()
patternstringpattern.regex()
formatstringformat.email()/.url()
minimumnumberminimum.min()
maximumnumbermaximum.max()
multipleOfnumbermultipleOf.multipleOf()
minItemsarrayminItems.min()
maxItemsarraymaxItems.max()
uniqueItemsarrayuniqueItemscustom

AI-Optimized Descriptions

The skill generates descriptions optimized for AI consumption:

  1. Clear Purpose: What the parameter does
  2. Valid Values: Acceptable inputs
  3. Examples: Concrete usage examples
  4. Constraints: Limits and validation rules
  5. Defaults: What happens if omitted

Example:

"File path to read. Must be an absolute or relative path to an existing file.
Supports Unix and Windows path formats. Maximum length: 255 characters.
Example: '/home/user/config.json'"

Workflow

  1. Parse parameters - Validate parameter definitions
  2. Infer types - Determine TypeScript/Zod types
  3. Generate JSON Schema - Create draft 2020-12 schema
  4. Generate TypeScript - Create interface definitions
  5. Generate Zod schema - Create validation code
  6. Create examples - Generate valid example inputs
  7. Document schema - Create README with usage

Best Practices Applied

  • JSON Schema draft 2020-12 compliance
  • Strict mode (additionalProperties: false)
  • Comprehensive descriptions for AI
  • Type-safe TypeScript interfaces
  • Runtime validation with Zod
  • Example inputs for each parameter

References

Target Processes

  • mcp-tool-implementation
  • mcp-tool-documentation
  • argument-parser-setup

Source

git clone https://github.com/a5c-ai/babysitter/blob/main/plugins/babysitter/skills/babysit/process/specializations/cli-mcp-development/skills/mcp-tool-schema-generator/SKILL.mdView on GitHub

Overview

Generates comprehensive JSON Schema definitions for MCP tools, optimized for AI consumption with clear descriptions, type constraints, and validation rules. It also produces TypeScript types and Zod validators to ensure end-to-end type safety and reliable parameter validation, including support for nested structures, enums, unions, and constraints.

How This Skill Works

Provide a toolName, description, and a detailed parameters list. The skill annotates each parameter with types, constraints, and descriptions, then outputs a JSON Schema (plus optional TypeScript types and Zod schemas) that can be consumed by AI agents and tooling.

When to Use It

  • Define input schemas for MCP tools
  • Create type-safe tool parameter definitions
  • Generate validation logic for tool inputs
  • Document tool parameters for AI consumption
  • Produce reusable schemas for tooling automation

Quick Start

  1. Step 1: Provide toolName, description, and a detailed parameters list in the SKILL usage format
  2. Step 2: Specify outputFormat (json-schema, zod, typescript) or defaults to all
  3. Step 3: Retrieve generated artifacts in schemas/<toolName>/ (schema.json, schema.ts, validation.ts, examples.json, README.md)

Best Practices

  • Keep parameter names stable and descriptive
  • Use explicit types, required flags, and constraints
  • Document with clear descriptions and examples
  • Test schemas with representative inputs
  • Prefer enums for fixed value sets and nested structures when needed

Example Use Cases

  • Schema for a read_file tool with path, encoding, and options
  • Tool with nested options object and numeric constraints
  • Enum-based parameter for operation mode (read/write/append)
  • Array of parameter objects with item-level validations
  • Generated TS types and Zod validators alongside JSON Schema

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers