Назад към всички

mcp-tool-schema-generator

// Generate JSON Schema definitions for MCP tool input parameters. Creates well-documented, AI-consumable schemas with proper types, descriptions, and validation rules.

$ git log --oneline --stat
stars:384
forks:73
updated:March 4, 2026
SKILL.mdreadonly
SKILL.md Frontmatter
namemcp-tool-schema-generator
descriptionGenerate JSON Schema definitions for MCP tool input parameters. Creates well-documented, AI-consumable schemas with proper types, descriptions, and validation rules.
allowed-toolsRead, Write, Edit, Bash, Glob, Grep

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