{
  "openapi": "3.1.0",
  "info": {
    "title": "Access Free Tools API",
    "version": "0.1.0-alpha",
    "description": "Deterministic calculator and utility tools for Access Free Tools. Alpha endpoints may change while the API/MCP layer is tested."
  },
  "servers": [
    {
      "url": "https://accessfreetools.com"
    }
  ],
  "paths": {
    "/api/v1/tools": {
      "get": {
        "summary": "List callable Access Free Tools utilities",
        "responses": {
          "200": {
            "description": "Tool list"
          }
        }
      }
    },
    "/api/v1/tools/{slug}": {
      "get": {
        "summary": "Get one tool schema",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "enum": [
                "percentage-calculator",
                "absolute-value-calculator",
                "ai-token-cost-calculator",
                "api-pricing-calculator",
                "basic-calculator",
                "average-calculator",
                "confidence-interval-calculator",
                "area-calculator",
                "circle-calculator",
                "binary-calculator",
                "big-number-calculator",
                "baking-pan-conversion-calculator",
                "bandwidth-calculator",
                "tip-calculator",
                "bra-size-calculator",
                "bmi-calculator",
                "btu-calculator",
                "butter-converter",
                "mortgage-calculator",
                "concrete-calculator",
                "paint-calculator",
                "download-time-calculator",
                "amps-to-watts-calculator",
                "watts-to-amps-calculator",
                "amp-hours-to-watt-hours-calculator",
                "word-counter",
                "character-counter",
                "json-formatter",
                "base64-encode-decode",
                "url-encode-decode",
                "password-generator",
                "subnet-calculator",
                "conversion-calculator",
                "date-calculator"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tool schema"
          },
          "404": {
            "description": "Tool not found"
          }
        }
      }
    },
    "/api/v1/run/{slug}": {
      "post": {
        "summary": "Run one deterministic tool",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "enum": [
                "percentage-calculator",
                "absolute-value-calculator",
                "ai-token-cost-calculator",
                "api-pricing-calculator",
                "basic-calculator",
                "average-calculator",
                "confidence-interval-calculator",
                "area-calculator",
                "circle-calculator",
                "binary-calculator",
                "big-number-calculator",
                "baking-pan-conversion-calculator",
                "bandwidth-calculator",
                "tip-calculator",
                "bra-size-calculator",
                "bmi-calculator",
                "btu-calculator",
                "butter-converter",
                "mortgage-calculator",
                "concrete-calculator",
                "paint-calculator",
                "download-time-calculator",
                "amps-to-watts-calculator",
                "watts-to-amps-calculator",
                "amp-hours-to-watt-hours-calculator",
                "word-counter",
                "character-counter",
                "json-formatter",
                "base64-encode-decode",
                "url-encode-decode",
                "password-generator",
                "subnet-calculator",
                "conversion-calculator",
                "date-calculator"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "properties": {
                  "inputs": {
                    "additionalProperties": true,
                    "type": "object"
                  }
                },
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tool result with answer, steps, warnings, and links"
          },
          "400": {
            "description": "Invalid input"
          },
          "404": {
            "description": "Tool not found"
          }
        }
      }
    },
    "/api/v1/ask": {
      "post": {
        "summary": "Ask a plain-language utility question",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "message": {
                    "type": "string"
                  }
                },
                "required": [
                  "message"
                ],
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Routed answer from a deterministic tool"
          },
          "400": {
            "description": "Question could not be routed or input was invalid"
          }
        }
      }
    },
    "/mcp": {
      "post": {
        "summary": "Stateless Streamable HTTP MCP endpoint",
        "responses": {
          "200": {
            "description": "MCP JSON-RPC response"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "toolInputs": {
        "percentage-calculator": {
          "description": "Find a percent of a value or find what percent one number is of another.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "mode": {
                "default": "percent-of",
                "type": "string",
                "enum": [
                  "percent-of",
                  "what-percent"
                ]
              },
              "part": {
                "type": "number"
              },
              "percent": {
                "type": "number"
              },
              "value": {
                "type": "number"
              },
              "whole": {
                "type": "number"
              }
            },
            "required": [
              "mode"
            ],
            "additionalProperties": false
          }
        },
        "absolute-value-calculator": {
          "description": "Find absolute value or absolute difference between two numbers.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "comparisonValue": {
                "type": "number"
              },
              "value": {
                "type": "number"
              }
            },
            "required": [
              "value"
            ],
            "additionalProperties": false
          }
        },
        "ai-token-cost-calculator": {
          "description": "Estimate LLM API spend from requests, total input tokens, cached input tokens, output tokens, and current prices per 1M tokens.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "cachedInputPricePerMillion": {
                "type": "number",
                "minimum": 0
              },
              "cachedInputTokensPerRequest": {
                "default": 0,
                "type": "number",
                "minimum": 0
              },
              "inputPricePerMillion": {
                "type": "number",
                "minimum": 0
              },
              "inputTokensPerRequest": {
                "type": "number",
                "minimum": 0
              },
              "outputPricePerMillion": {
                "type": "number",
                "minimum": 0
              },
              "outputTokensPerRequest": {
                "type": "number",
                "minimum": 0
              },
              "requests": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "cachedInputTokensPerRequest",
              "inputPricePerMillion",
              "inputTokensPerRequest",
              "outputPricePerMillion",
              "outputTokensPerRequest",
              "requests"
            ],
            "additionalProperties": false
          }
        },
        "api-pricing-calculator": {
          "description": "Estimate API usage cost from request volume, billable units, unit price, fixed fees, and retry overhead.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "platformFee": {
                "default": 0,
                "type": "number",
                "minimum": 0
              },
              "pricePerUnit": {
                "type": "number",
                "minimum": 0
              },
              "requests": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "retryPercent": {
                "default": 0,
                "type": "number",
                "minimum": 0,
                "maximum": 500
              },
              "unitsPerRequest": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "platformFee",
              "pricePerUnit",
              "requests",
              "retryPercent",
              "unitsPerRequest"
            ],
            "additionalProperties": false
          }
        },
        "basic-calculator": {
          "description": "Run a basic arithmetic operation with two numbers.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "left": {
                "type": "number"
              },
              "operator": {
                "default": "+",
                "type": "string",
                "enum": [
                  "+",
                  "-",
                  "*",
                  "/"
                ]
              },
              "right": {
                "type": "number"
              }
            },
            "required": [
              "left",
              "operator",
              "right"
            ],
            "additionalProperties": false
          }
        },
        "average-calculator": {
          "description": "Find the average, count, sum, minimum, and maximum of a list of numbers.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "values": {
                "minItems": 1,
                "maxItems": 1000,
                "type": "array",
                "items": {
                  "type": "number"
                }
              }
            },
            "required": [
              "values"
            ],
            "additionalProperties": false
          }
        },
        "confidence-interval-calculator": {
          "description": "Calculate a z confidence interval for a sample mean or a sample proportion.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "confidenceLevel": {
                    "default": 95,
                    "anyOf": [
                      {
                        "type": "number",
                        "const": 80
                      },
                      {
                        "type": "number",
                        "const": 85
                      },
                      {
                        "type": "number",
                        "const": 90
                      },
                      {
                        "type": "number",
                        "const": 95
                      },
                      {
                        "type": "number",
                        "const": 98
                      },
                      {
                        "type": "number",
                        "const": 99
                      }
                    ]
                  },
                  "mode": {
                    "type": "string",
                    "const": "mean"
                  },
                  "sampleMean": {
                    "type": "number"
                  },
                  "sampleSize": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "standardDeviation": {
                    "type": "number",
                    "exclusiveMinimum": 0
                  }
                },
                "required": [
                  "confidenceLevel",
                  "mode",
                  "sampleMean",
                  "sampleSize",
                  "standardDeviation"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "confidenceLevel": {
                    "default": 95,
                    "anyOf": [
                      {
                        "type": "number",
                        "const": 80
                      },
                      {
                        "type": "number",
                        "const": 85
                      },
                      {
                        "type": "number",
                        "const": 90
                      },
                      {
                        "type": "number",
                        "const": 95
                      },
                      {
                        "type": "number",
                        "const": 98
                      },
                      {
                        "type": "number",
                        "const": 99
                      }
                    ]
                  },
                  "mode": {
                    "type": "string",
                    "const": "proportion"
                  },
                  "sampleSize": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "successes": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "confidenceLevel",
                  "mode",
                  "sampleSize",
                  "successes"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "area-calculator": {
          "description": "Calculate area for rectangles, triangles, circles, trapezoids, and parallelograms.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "base": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "baseA": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "baseB": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "height": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "length": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "radius": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "shape": {
                "default": "rectangle",
                "type": "string",
                "enum": [
                  "rectangle",
                  "triangle",
                  "circle",
                  "trapezoid",
                  "parallelogram"
                ]
              },
              "width": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "shape"
            ],
            "additionalProperties": false
          }
        },
        "circle-calculator": {
          "description": "Find radius, diameter, circumference, and area from one known circle measurement.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "knownMeasure": {
                "default": "radius",
                "type": "string",
                "enum": [
                  "radius",
                  "diameter",
                  "circumference",
                  "area"
                ]
              },
              "value": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "knownMeasure",
              "value"
            ],
            "additionalProperties": false
          }
        },
        "binary-calculator": {
          "description": "Add, subtract, multiply, or divide two binary whole numbers.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "left": {
                "type": "string",
                "minLength": 1,
                "maxLength": 256
              },
              "operator": {
                "default": "+",
                "type": "string",
                "enum": [
                  "+",
                  "-",
                  "*",
                  "/"
                ]
              },
              "right": {
                "type": "string",
                "minLength": 1,
                "maxLength": 256
              }
            },
            "required": [
              "left",
              "operator",
              "right"
            ],
            "additionalProperties": false
          }
        },
        "big-number-calculator": {
          "description": "Add, subtract, multiply, or divide very large whole numbers.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "left": {
                "type": "string",
                "minLength": 1,
                "maxLength": 512
              },
              "operator": {
                "default": "+",
                "type": "string",
                "enum": [
                  "+",
                  "-",
                  "*",
                  "/"
                ]
              },
              "right": {
                "type": "string",
                "minLength": 1,
                "maxLength": 512
              }
            },
            "required": [
              "left",
              "operator",
              "right"
            ],
            "additionalProperties": false
          }
        },
        "baking-pan-conversion-calculator": {
          "description": "Compare rectangular baking pan areas and estimate recipe scale or servings.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "newLengthInches": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "newWidthInches": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "oldLengthInches": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "oldWidthInches": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "originalServings": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "newLengthInches",
              "newWidthInches",
              "oldLengthInches",
              "oldWidthInches"
            ],
            "additionalProperties": false
          }
        },
        "bandwidth-calculator": {
          "description": "Estimate transfer time from a data amount and a bandwidth rate.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "dataAmount": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "dataUnit": {
                "default": "GB",
                "type": "string",
                "enum": [
                  "KB",
                  "MB",
                  "GB",
                  "TB"
                ]
              },
              "speedAmount": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "speedUnit": {
                "default": "Mbps",
                "type": "string",
                "enum": [
                  "Kbps",
                  "Mbps",
                  "Gbps"
                ]
              }
            },
            "required": [
              "dataAmount",
              "dataUnit",
              "speedAmount",
              "speedUnit"
            ],
            "additionalProperties": false
          }
        },
        "tip-calculator": {
          "description": "Calculate tip amount, tax amount, total, and split per person.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "people": {
                "default": 1,
                "type": "integer",
                "minimum": 1,
                "maximum": 1000
              },
              "subtotal": {
                "type": "number",
                "minimum": 0
              },
              "taxPercent": {
                "default": 0,
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "tipPercent": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              }
            },
            "required": [
              "people",
              "subtotal",
              "taxPercent",
              "tipPercent"
            ],
            "additionalProperties": false
          }
        },
        "bra-size-calculator": {
          "description": "Estimate a US bra size from underbust and bust measurements in inches.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "bustInches": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "underbustInches": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "bustInches",
              "underbustInches"
            ],
            "additionalProperties": false
          }
        },
        "bmi-calculator": {
          "description": "Calculate BMI from metric height and weight.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "heightCm": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "weightKg": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "heightCm",
              "weightKg"
            ],
            "additionalProperties": false
          }
        },
        "btu-calculator": {
          "description": "Estimate room air-conditioner cooling capacity in BTU per hour from room size and simple adjustments.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "ceilingHeightFeet": {
                "default": 8,
                "type": "number",
                "exclusiveMinimum": 0
              },
              "kitchen": {
                "default": false,
                "type": "boolean"
              },
              "people": {
                "default": 2,
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "squareFeet": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "sunlight": {
                "default": "normal",
                "type": "string",
                "enum": [
                  "normal",
                  "shaded",
                  "sunny"
                ]
              }
            },
            "required": [
              "ceilingHeightFeet",
              "kitchen",
              "people",
              "squareFeet",
              "sunlight"
            ],
            "additionalProperties": false
          }
        },
        "butter-converter": {
          "description": "Convert butter between teaspoons, tablespoons, cups, sticks, ounces, grams, and pounds.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "amount": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "unit": {
                "default": "stick",
                "type": "string",
                "enum": [
                  "teaspoon",
                  "tablespoon",
                  "cup",
                  "stick",
                  "ounce",
                  "gram",
                  "pound"
                ]
              }
            },
            "required": [
              "amount",
              "unit"
            ],
            "additionalProperties": false
          }
        },
        "mortgage-calculator": {
          "description": "Estimate monthly mortgage payment including optional taxes, insurance, PMI, and HOA.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "annualPropertyTax": {
                "default": 0,
                "type": "number",
                "minimum": 0
              },
              "annualRatePercent": {
                "type": "number",
                "minimum": 0
              },
              "downPayment": {
                "type": "number",
                "minimum": 0
              },
              "homePrice": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "monthlyHoa": {
                "default": 0,
                "type": "number",
                "minimum": 0
              },
              "monthlyInsurance": {
                "default": 0,
                "type": "number",
                "minimum": 0
              },
              "monthlyPmi": {
                "default": 0,
                "type": "number",
                "minimum": 0
              },
              "years": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "annualPropertyTax",
              "annualRatePercent",
              "downPayment",
              "homePrice",
              "monthlyHoa",
              "monthlyInsurance",
              "monthlyPmi",
              "years"
            ],
            "additionalProperties": false
          }
        },
        "concrete-calculator": {
          "description": "Estimate concrete volume and common bag counts for slabs, footings, and posts.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "depthInches": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "lengthFeet": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "wastePercent": {
                "default": 10,
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "widthFeet": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "depthInches",
              "lengthFeet",
              "wastePercent",
              "widthFeet"
            ],
            "additionalProperties": false
          }
        },
        "paint-calculator": {
          "description": "Estimate paintable wall area, gallons needed, and gallons to buy.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "coats": {
                "default": 2,
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "coverageSquareFeetPerGallon": {
                "default": 350,
                "type": "number",
                "exclusiveMinimum": 0
              },
              "doors": {
                "default": 1,
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "lengthFeet": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "wallHeightFeet": {
                "default": 8,
                "type": "number",
                "exclusiveMinimum": 0
              },
              "wastePercent": {
                "default": 10,
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "widthFeet": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "windows": {
                "default": 2,
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "coats",
              "coverageSquareFeetPerGallon",
              "doors",
              "lengthFeet",
              "wallHeightFeet",
              "wastePercent",
              "widthFeet",
              "windows"
            ],
            "additionalProperties": false
          }
        },
        "download-time-calculator": {
          "description": "Estimate download time from file size, unit, speed, and efficiency.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "efficiencyPercent": {
                "default": 90,
                "type": "number",
                "minimum": 1,
                "maximum": 100
              },
              "fileSize": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "fileUnit": {
                "default": "GB",
                "type": "string",
                "enum": [
                  "KB",
                  "MB",
                  "GB",
                  "TB"
                ]
              },
              "speedMbps": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "efficiencyPercent",
              "fileSize",
              "fileUnit",
              "speedMbps"
            ],
            "additionalProperties": false
          }
        },
        "amps-to-watts-calculator": {
          "description": "Convert amps to watts using voltage, phase, and power factor.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "amps": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "phase": {
                "default": "dc",
                "type": "string",
                "enum": [
                  "dc",
                  "single-phase",
                  "three-phase"
                ]
              },
              "powerFactor": {
                "default": 1,
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 1
              },
              "volts": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "amps",
              "phase",
              "powerFactor",
              "volts"
            ],
            "additionalProperties": false
          }
        },
        "watts-to-amps-calculator": {
          "description": "Convert watts to amps using voltage, phase, and power factor.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "phase": {
                "default": "single-phase",
                "type": "string",
                "enum": [
                  "dc",
                  "single-phase",
                  "three-phase"
                ]
              },
              "powerFactor": {
                "default": 1,
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 1
              },
              "volts": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "watts": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "phase",
              "powerFactor",
              "volts",
              "watts"
            ],
            "additionalProperties": false
          }
        },
        "amp-hours-to-watt-hours-calculator": {
          "description": "Convert battery amp-hours and nominal voltage into watt-hours and kilowatt-hours.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "ampHours": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "volts": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "ampHours",
              "volts"
            ],
            "additionalProperties": false
          }
        },
        "word-counter": {
          "description": "Count words, characters, sentences, paragraphs, lines, bytes, and reading time.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "maxLength": 20000
              }
            },
            "required": [
              "text"
            ],
            "additionalProperties": false
          }
        },
        "character-counter": {
          "description": "Count characters, non-space characters, UTF-8 bytes, lines, and supporting text metrics.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "maxLength": 20000
              }
            },
            "required": [
              "text"
            ],
            "additionalProperties": false
          }
        },
        "json-formatter": {
          "description": "Format JSON and optionally sort object keys.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "json": {
                "type": "string",
                "maxLength": 20000
              },
              "sortKeys": {
                "default": false,
                "type": "boolean"
              }
            },
            "required": [
              "json",
              "sortKeys"
            ],
            "additionalProperties": false
          }
        },
        "base64-encode-decode": {
          "description": "Encode plain text to Base64 or decode Base64 to UTF-8 text.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "mode": {
                "default": "encode",
                "type": "string",
                "enum": [
                  "encode",
                  "decode"
                ]
              },
              "text": {
                "type": "string",
                "maxLength": 20000
              }
            },
            "required": [
              "mode",
              "text"
            ],
            "additionalProperties": false
          }
        },
        "url-encode-decode": {
          "description": "URL-encode or URL-decode text for query strings and links.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "mode": {
                "default": "encode",
                "type": "string",
                "enum": [
                  "encode",
                  "decode"
                ]
              },
              "plusForSpace": {
                "default": false,
                "type": "boolean"
              },
              "text": {
                "type": "string",
                "maxLength": 20000
              }
            },
            "required": [
              "mode",
              "plusForSpace",
              "text"
            ],
            "additionalProperties": false
          }
        },
        "password-generator": {
          "description": "Generate a random password with selected character groups.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "avoidAmbiguous": {
                "default": true,
                "type": "boolean"
              },
              "includeLowercase": {
                "default": true,
                "type": "boolean"
              },
              "includeNumbers": {
                "default": true,
                "type": "boolean"
              },
              "includeSymbols": {
                "default": true,
                "type": "boolean"
              },
              "includeUppercase": {
                "default": true,
                "type": "boolean"
              },
              "length": {
                "default": 16,
                "type": "integer",
                "minimum": 8,
                "maximum": 128
              }
            },
            "required": [
              "avoidAmbiguous",
              "includeLowercase",
              "includeNumbers",
              "includeSymbols",
              "includeUppercase",
              "length"
            ],
            "additionalProperties": false
          }
        },
        "subnet-calculator": {
          "description": "Calculate IPv4 subnet mask, wildcard, network, broadcast, and usable host range.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "ipAddress": {
                "type": "string",
                "minLength": 7,
                "maxLength": 15
              },
              "prefixLength": {
                "type": "integer",
                "minimum": 0,
                "maximum": 32
              }
            },
            "required": [
              "ipAddress",
              "prefixLength"
            ],
            "additionalProperties": false
          }
        },
        "conversion-calculator": {
          "description": "Convert length, mass, volume, or temperature values between supported units in the same category.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "category": {
                    "type": "string",
                    "const": "length"
                  },
                  "fromUnit": {
                    "type": "string",
                    "enum": [
                      "millimeter",
                      "centimeter",
                      "meter",
                      "kilometer",
                      "inch",
                      "foot",
                      "yard",
                      "mile"
                    ]
                  },
                  "toUnit": {
                    "type": "string",
                    "enum": [
                      "millimeter",
                      "centimeter",
                      "meter",
                      "kilometer",
                      "inch",
                      "foot",
                      "yard",
                      "mile"
                    ]
                  },
                  "value": {
                    "type": "number"
                  }
                },
                "required": [
                  "category",
                  "fromUnit",
                  "toUnit",
                  "value"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "category": {
                    "type": "string",
                    "const": "mass"
                  },
                  "fromUnit": {
                    "type": "string",
                    "enum": [
                      "milligram",
                      "gram",
                      "kilogram",
                      "ounce",
                      "pound",
                      "ton"
                    ]
                  },
                  "toUnit": {
                    "type": "string",
                    "enum": [
                      "milligram",
                      "gram",
                      "kilogram",
                      "ounce",
                      "pound",
                      "ton"
                    ]
                  },
                  "value": {
                    "type": "number"
                  }
                },
                "required": [
                  "category",
                  "fromUnit",
                  "toUnit",
                  "value"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "category": {
                    "type": "string",
                    "const": "volume"
                  },
                  "fromUnit": {
                    "type": "string",
                    "enum": [
                      "milliliter",
                      "liter",
                      "cubic-meter",
                      "teaspoon",
                      "tablespoon",
                      "fluid-ounce",
                      "cup",
                      "pint",
                      "quart",
                      "gallon"
                    ]
                  },
                  "toUnit": {
                    "type": "string",
                    "enum": [
                      "milliliter",
                      "liter",
                      "cubic-meter",
                      "teaspoon",
                      "tablespoon",
                      "fluid-ounce",
                      "cup",
                      "pint",
                      "quart",
                      "gallon"
                    ]
                  },
                  "value": {
                    "type": "number"
                  }
                },
                "required": [
                  "category",
                  "fromUnit",
                  "toUnit",
                  "value"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "category": {
                    "type": "string",
                    "const": "temperature"
                  },
                  "fromUnit": {
                    "type": "string",
                    "enum": [
                      "celsius",
                      "fahrenheit",
                      "kelvin"
                    ]
                  },
                  "toUnit": {
                    "type": "string",
                    "enum": [
                      "celsius",
                      "fahrenheit",
                      "kelvin"
                    ]
                  },
                  "value": {
                    "type": "number"
                  }
                },
                "required": [
                  "category",
                  "fromUnit",
                  "toUnit",
                  "value"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "date-calculator": {
          "description": "Find the number of days and calendar difference between two dates.",
          "value": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "endDate": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              "startDate": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              }
            },
            "required": [
              "endDate",
              "startDate"
            ],
            "additionalProperties": false
          }
        }
      }
    }
  }
}