LLM Function Calling Schema Builder
Design LLM tool schemas visually and export to OpenAI, Anthropic, Zod, and TypeScript
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.