DevToolkit

LLM Function Calling Schema Builder

Design LLM tool schemas visually and export to OpenAI, Anthropic, Zod, and TypeScript

More formats coming soon (Gemini / Vercel AI / Pydantic)

Parameters (2)

{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "Fetch current weather for a city",
    "parameters": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string",
          "description": "City name"
        },
        "unit": {
          "type": "string",
          "description": "Temperature unit",
          "enum": [
            "celsius",
            "fahrenheit"
          ]
        }
      },
      "required": [
        "city"
      ]
    }
  }
}

Frequently Asked Questions

What is function calling / tool use?

Modern LLMs (GPT-4.1, Claude Opus 4.7, Gemini 2.5) can return structured JSON calls to functions you define, like `get_weather({"city": "Tokyo"})`, instead of plain text. You describe each function with a JSON Schema of its parameters and the model decides when to call it. This is the foundation of tools, agents, and MCP.

Which formats can I export to?

- **OpenAI tools** (`tools: [{type: "function", function: {...}}]`) — Chat Completions and Responses API - **Anthropic tools** (`tools: [{name, description, input_schema}]`) — Claude Messages API - **Zod** — runtime validation in TypeScript backends - **TypeScript interface** — typing the parsed tool args in your code One source of truth, four outputs, so the model spec and your validation code cannot drift.

Can I import an existing schema?

Yes. Paste a JSON Schema, an OpenAI `tools` array, or an Anthropic tools block and the visual editor will back-fill the tree. Round-tripping lets you clean up legacy schemas and re-export them in the format your new backend expects.

Why build visually instead of hand-writing JSON?

JSON Schema is verbose — nested `type`, `properties`, `required`, `enum`, `items` quickly nest 5+ levels deep. Common mistakes: forgetting `required`, mixing up `enum` on the wrong level, inconsistent descriptions. The visual builder keeps invariants (required ⊂ properties) and shows the generated JSON live so you learn the shape as you go.

What's the real difference between OpenAI and Anthropic formats?

Structurally very close: OpenAI wraps the function in `{type: "function", function: {...}}`, Anthropic uses `{name, description, input_schema}` directly. Parameter schemas are both JSON Schema. The builder does the wrapping/unwrapping, so swapping providers is one export away instead of a manual rewrite.

Is my schema uploaded?

No. The builder is pure client-side — schemas, imports, and generated code all stay in the browser. Feel free to design internal tools or customer-facing functions without leaking them.

Related Tools