Anthropic · Schema

Anthropic Tool Use

Schema for Anthropic Claude tool use definitions, tool choice configuration, tool use content blocks, and tool result content blocks used within the Messages API.

AIArtificial IntelligenceClaudeFoundation ModelsLarge Language ModelsMachine LearningMCPAgents
View JSON Schema on GitHub

JSON Schema

anthropic-tool-use-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api-evangelist.com/schemas/anthropic/anthropic-tool-use-schema.json",
  "title": "Anthropic Tool Use",
  "description": "Schema for Anthropic Claude tool use definitions, tool choice configuration, tool use content blocks, and tool result content blocks used within the Messages API.",
  "type": "object",
  "definitions": {
    "ToolDefinition": {
      "type": "object",
      "description": "A custom tool definition provided in the tools array of a Messages API request. Specifies the name, description, and input schema for a tool Claude may invoke.",
      "required": ["name", "input_schema"],
      "properties": {
        "type": {
          "type": "string",
          "description": "The type of tool. Defaults to 'custom' for user-defined tools.",
          "enum": ["custom"],
          "default": "custom"
        },
        "name": {
          "type": "string",
          "description": "Name of the tool. Must match ^[a-zA-Z0-9_-]{1,64}$.",
          "pattern": "^[a-zA-Z0-9_-]{1,64}$",
          "minLength": 1,
          "maxLength": 64
        },
        "description": {
          "type": "string",
          "description": "Detailed description of what this tool does. Tool descriptions should be as detailed as possible to help the model understand when and how to use the tool."
        },
        "input_schema": {
          "$ref": "#/definitions/ToolInputSchema"
        },
        "cache_control": {
          "$ref": "#/definitions/CacheControl"
        }
      },
      "additionalProperties": false
    },

    "ToolInputSchema": {
      "type": "object",
      "description": "A JSON Schema object defining the expected parameters for a tool. Must be of type 'object'.",
      "required": ["type"],
      "properties": {
        "type": {
          "type": "string",
          "const": "object",
          "description": "Must be 'object'."
        },
        "properties": {
          "type": "object",
          "description": "An object where each key is a parameter name and the value is a JSON Schema describing that parameter.",
          "additionalProperties": {
            "$ref": "#/definitions/ToolParameterSchema"
          }
        },
        "required": {
          "type": "array",
          "description": "An array of parameter names that are required.",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": true
    },

    "ToolParameterSchema": {
      "type": "object",
      "description": "JSON Schema for an individual tool parameter.",
      "properties": {
        "type": {
          "type": "string",
          "description": "The JSON Schema type of the parameter.",
          "enum": ["string", "number", "integer", "boolean", "array", "object", "null"]
        },
        "description": {
          "type": "string",
          "description": "A description of the parameter to help Claude understand its purpose."
        },
        "enum": {
          "type": "array",
          "description": "An array of allowed values for this parameter.",
          "items": {}
        },
        "items": {
          "type": "object",
          "description": "Schema for array items when type is 'array'.",
          "additionalProperties": true
        },
        "properties": {
          "type": "object",
          "description": "Nested properties when type is 'object'.",
          "additionalProperties": true
        },
        "required": {
          "type": "array",
          "description": "Required nested properties when type is 'object'.",
          "items": { "type": "string" }
        },
        "default": {
          "description": "The default value for this parameter."
        },
        "minimum": {
          "type": "number",
          "description": "Minimum value for numeric types."
        },
        "maximum": {
          "type": "number",
          "description": "Maximum value for numeric types."
        },
        "minLength": {
          "type": "integer",
          "description": "Minimum length for string types."
        },
        "maxLength": {
          "type": "integer",
          "description": "Maximum length for string types."
        },
        "pattern": {
          "type": "string",
          "description": "Regex pattern for string types."
        }
      },
      "additionalProperties": true
    },

    "ServerToolDefinition": {
      "type": "object",
      "description": "An Anthropic-defined server tool that executes on Anthropic's servers. Server tools include web search, web fetch, code execution, bash, text editor, and memory.",
      "required": ["type", "name"],
      "properties": {
        "type": {
          "type": "string",
          "description": "The versioned server tool type identifier.",
          "enum": [
            "web_search_20250305",
            "web_search_20260209",
            "web_fetch_20250910",
            "web_fetch_20260209",
            "code_execution_20250825",
            "code_execution_20260120",
            "bash_20250124",
            "text_editor_20250728",
            "memory_20250818"
          ]
        },
        "name": {
          "type": "string",
          "description": "The server tool name."
        }
      },
      "additionalProperties": true
    },

    "ToolChoice": {
      "type": "object",
      "description": "Specifies how the model should use the provided tools.",
      "required": ["type"],
      "properties": {
        "type": {
          "type": "string",
          "description": "The type of tool choice: 'auto' lets Claude decide, 'any' forces a tool call, 'tool' forces a specific tool, 'none' prevents tool use.",
          "enum": ["auto", "any", "tool", "none"]
        },
        "name": {
          "type": "string",
          "description": "The name of the tool to force. Required and only valid when type is 'tool'."
        },
        "disable_parallel_tool_use": {
          "type": "boolean",
          "description": "Whether to disable parallel tool use. When true, the model will only call one tool at a time.",
          "default": false
        }
      },
      "allOf": [
        {
          "if": {
            "properties": { "type": { "const": "tool" } },
            "required": ["type"]
          },
          "then": {
            "required": ["name"]
          }
        }
      ],
      "additionalProperties": false
    },

    "ToolUseContentBlock": {
      "type": "object",
      "description": "A tool use content block in an API response, indicating that Claude wants to call a tool. Appears in the content array of an assistant message when stop_reason is 'tool_use'.",
      "required": ["type", "id", "name", "input"],
      "properties": {
        "type": {
          "type": "string",
          "const": "tool_use",
          "description": "The content block type. Always 'tool_use'."
        },
        "id": {
          "type": "string",
          "description": "A unique identifier for this tool use request. Must be provided in the corresponding tool_result block."
        },
        "name": {
          "type": "string",
          "description": "The name of the tool the model wants to call."
        },
        "input": {
          "type": "object",
          "description": "An object containing the tool input generated by the model, conforming to the tool's input_schema.",
          "additionalProperties": true
        }
      },
      "additionalProperties": false
    },

    "ToolResultContentBlock": {
      "type": "object",
      "description": "A tool result content block sent in a user message to provide the output of a tool execution back to Claude.",
      "required": ["type", "tool_use_id"],
      "properties": {
        "type": {
          "type": "string",
          "const": "tool_result",
          "description": "The content block type. Always 'tool_result'."
        },
        "tool_use_id": {
          "type": "string",
          "description": "The id of the tool_use content block that this result corresponds to."
        },
        "content": {
          "description": "The result of the tool call. Can be a string or an array of text content blocks.",
          "oneOf": [
            { "type": "string" },
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/TextContentBlock"
              }
            }
          ]
        },
        "is_error": {
          "type": "boolean",
          "description": "Set to true if the tool execution resulted in an error. Claude will use this to understand that something went wrong.",
          "default": false
        },
        "cache_control": {
          "$ref": "#/definitions/CacheControl"
        }
      },
      "additionalProperties": false
    },

    "TextContentBlock": {
      "type": "object",
      "description": "A simple text content block.",
      "required": ["type", "text"],
      "properties": {
        "type": {
          "type": "string",
          "const": "text"
        },
        "text": {
          "type": "string",
          "description": "The text content."
        }
      }
    },

    "CacheControl": {
      "type": "object",
      "description": "Cache control configuration for prompt caching.",
      "properties": {
        "type": {
          "type": "string",
          "enum": ["ephemeral"]
        },
        "ttl": {
          "type": "string",
          "description": "Time-to-live for the cached content.",
          "enum": ["5m", "1h"]
        }
      }
    },

    "ToolUseExample": {
      "type": "object",
      "description": "A complete example of a tool use request showing tool definition, message, and expected response patterns.",
      "properties": {
        "request": {
          "type": "object",
          "properties": {
            "model": { "type": "string" },
            "max_tokens": { "type": "integer" },
            "tools": {
              "type": "array",
              "items": { "$ref": "#/definitions/ToolDefinition" }
            },
            "messages": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "role": { "type": "string", "enum": ["user", "assistant"] },
                  "content": {}
                }
              }
            }
          }
        },
        "response": {
          "type": "object",
          "properties": {
            "id": { "type": "string" },
            "type": { "type": "string", "const": "message" },
            "role": { "type": "string", "const": "assistant" },
            "content": {
              "type": "array",
              "items": {
                "oneOf": [
                  { "$ref": "#/definitions/TextContentBlock" },
                  { "$ref": "#/definitions/ToolUseContentBlock" }
                ]
              }
            },
            "stop_reason": { "type": "string", "enum": ["end_turn", "tool_use"] }
          }
        }
      }
    }
  },

  "oneOf": [
    { "$ref": "#/definitions/ToolDefinition" },
    { "$ref": "#/definitions/ServerToolDefinition" },
    { "$ref": "#/definitions/ToolChoice" },
    { "$ref": "#/definitions/ToolUseContentBlock" },
    { "$ref": "#/definitions/ToolResultContentBlock" }
  ]
}