# ToolSchema Forge - Batch LLM Tool Schema Converter

> ToolSchema Forge - Batch LLM Tool Schema Converter is a paid API for AI agents from toolschema-forge.toolschemaforge.workers.dev, paid per call via x402, $0.05/call, status unknown (last checked 2026-10-21).

Converts, lints, and cross-compiles 1-50 LLM tool definitions into multiple target formats (OpenAI, Anthropic, Gemini, MCP, JSON Schema) in a single batch call.

## Facts

- Endpoint: POST https://toolschema-forge.toolschemaforge.workers.dev/v1/tool-schema/batch-convert?utm_source=zero.xyz
- Price: $0.05/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-21
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/toolschema-forge-batch-llm-tool-schema-converter-97e6cd1f
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_2VbW0tmaktJjJiuQYE04b

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability toolschema-forge-batch-llm-tool-schema-converter-97e6cd1f -d '<json body>'
```

Example prompt: Convert these two tool definitions — one in OpenAI format and one in Anthropic format — into Gemini and MCP formats, and flag any schema issues you find along the way.

## When to prefer this

Choose this endpoint when you need deterministic, rule-based conversion of tool schemas across multiple LLM providers in a single round-trip — especially when you need linting feedback and auto-fix reporting alongside conversion. Prefer it over manual schema translation when handling more than one tool or more than one target format simultaneously.

## Known failure modes

- Empty tools array or more than 50 tools triggers validation error
- Unrecognizable tool schema format causes detection failure with error per result
- Invalid target format enum value rejected at request level
- Malformed JSON body returns HTTP 400
- Payment not provided or insufficient USDC balance causes HTTP 402 rejection

## How this service works

Deterministic LLM tool-schema conversion, linting and MCP manifest generation for OpenAI (incl. strict mode), Anthropic, Gemini and MCP, paid per call in USDC on Base via x402.

## Output

Returns a JSON object with a count of processed tools, success/failure counts, and per-tool results. Each result includes the detected source format, converted output schemas keyed by target provider (openai, openai_strict, anthropic, gemini, mcp, jsonschema), a list of lint issues with severity, path, and whether they were auto-fixed, and any error message. Also returns a list of duplicate tool names across the batch.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method",
    "bodyType",
    "body"
   ],
   "properties": {
    "body": {
     "type": "object",
     "required": [
      "tools"
     ],
     "properties": {
      "tools": {
       "type": "array",
       "items": {
        "type": "object"
       },
       "maxItems": 50,
       "minItems": 1,
       "description": "1-50 tool definitions in any supported format."
      },
      "targets": {
       "type": "array",
       "items": {
        "enum": [
         "openai",
         "openai_strict",
         "anthropic",
         "gemini",
         "mcp",
         "jsonschema"
        ],
        "type": "string"
       },
       "minItems": 1,
       "description": "Target formats. Default: all."
      }
     }
    },
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "POST"
     ],
     "type": "string"
    },
    "bodyType": {
     "enum": [
      "json",
      "form-data",
      "text"
     ],
     "type": "string"
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "count",
      "ok",
      "failed",
      "results",
      "duplicate_names"
     ],
     "properties": {
      "ok": {
       "type": "integer"
      },
      "count": {
       "type": "integer"
      },
      "failed": {
       "type": "integer"
      },
      "results": {
       "type": "array",
       "items": {
        "type": "object",
        "required": [
         "index",
         "name",
         "detected",
         "outputs",
         "issues",
         "error"
        ],
        "properties": {
         "name": {
          "type": [
           "string",
           "null"
          ]
         },
         "error": {
          "type": [
           "string",
           "null"
          ]
         },
         "index": {
          "type": "integer"
         },
         "issues": {
          "type": "array",
          "items": {
           "type": "object",
           "required": [
            "provider",
            "path",
            "code",
            "message",
            "severity",
            "fixed"
           ],
           "properties": {
    
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": 2,
  "count": 2,
  "failed": 0,
  "results": [
   {
    "name": "get_weather",
    "error": null,
    "index": 0,
    "issues": [],
    "outputs": {
     "mcp": {
      "name": "get_weather",
      "description": "Get the current weather for a city.",
      "inputSchema": {
       "type": "object",
       "required": [
        "city"
       ],
       "properties": {
        "city": {
         "type": "string",
         "description": "City name"
        },
        "unit": {
         "enum": [
          "c",
          "f"
         ],
         "type": "string"
        }
       }
      }
     },
     "gemini": {
      "name": "get_weather",
      "parameters": {
       "type": "object",
       "required": [
        "city"
       ],
       "properties": {
        "city": {
         "type": "string",
         "description": "City name"
        },
        "unit": {
         "enum": [
          "c",
          "f"
         ],
         "type": "string"
        }
       }
      },
      "description": "Get the current weather for a city."
     }
    },
    "detected": "openai"
   },
   {
    "name": "search_docs",
    "error": null,
    "index": 1,
    "issues": [],
    "outputs": {
     "mcp": {
      "name": "search_docs",
      "description": "Search the documentation.",
      "inputSchema": {
       "type": "object",
       "required": [
        "query"
       ],
       "properties": {
        "query": {
         "type": "string"
        }
       }
      }
     },
     "gemini": {
      "name": "search_docs",
      "parameters": {
       "type": "object",
       "required": [
        "query"
       ],
       "properties": {
        "query": {
         "type": "string"
        }
       }
      },
      "description": "Search the documentation."
     }
    },
    "detected": "anthropic"
   }
  ],
  "duplicate_names": []
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/toolschema-forge-batch-llm-tool-schema-converter-97e6cd1f/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from toolschema-forge.toolschemaforge.workers.dev](https://www.zero.xyz/host/toolschema-forge.toolschemaforge.workers.dev/llms.txt)
