Skip to content

Generate from MCP Tool Schemas

Generate Python models from Model Context Protocol (MCP) tool schema profiles.

Experimental

MCP tool schema profile input support is experimental. The MCP specification and real-world tool schema shapes may evolve, so generated behavior may change as compatibility is expanded.

Quick Start

datamodel-codegen \
    --input tools-list.json \
    --input-file-type mcp-tools \
    --output-model-type pydantic_v2.BaseModel \
    --output model.py

Supported Input Shapes

The mcp-tools input type accepts:

  • a tools/list JSON-RPC response containing result.tools;
  • an MCP server definition containing a top-level tools array;
  • a single tool definition or an array of tool definitions;
  • JSON Schema documents whose $defs or definitions values are tool definitions.

Each tool must define name and inputSchema. If outputSchema is present, it is generated too.

Example

tools-list.json

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "search",
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": { "type": "string" }
          },
          "required": ["query"]
        },
        "outputSchema": {
          "type": "object",
          "properties": {
            "results": {
              "type": "array",
              "items": { "type": "string" }
            }
          },
          "required": ["results"]
        }
      }
    ]
  }
}

Generated model.py

from __future__ import annotations

from pydantic import BaseModel


class SearchInput(BaseModel):
    query: str


class SearchOutput(BaseModel):
    results: list[str]

Naming

Tool names are converted to PascalCase and suffixed with Input or Output.

For example:

Tool name Generated input model Generated output model
search SearchInput SearchOutput
create_issue CreateIssueInput CreateIssueOutput

Notes

MCP inputSchema and outputSchema entries are converted into JSON Schema definitions before generation. Local $defs and definitions entries inside a tool schema are hoisted and prefixed to avoid collisions between tools.

See Also