{
  "title": "JSON Schema Merger",
  "human_url": "https://happytails.ai/en/data-tools/json-schema-merger/",
  "agent_url": "https://happytails.ai/agents/en/data-tools/json-schema-merger/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/data-tools/json-schema-merger.md",
  "content": "JSON Schema Merger\nCombine several JSON Schemas, or one allOf composition, into a single schema. Rules that can never be satisfied together are listed as conflicts.\nHow to use JSON Schema Merger\nPaste a JSON array of schemas, or one schema whose allOf lists them.\nChoose the JSON Schema draft or keep automatic detection.\nRun the merge and review conflicts and rules kept in allOf.\nDownload the merged schema and the conflict report.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nUseful next steps\nJSON schema validator\nJSON to schema\nJSON diff\nAccepts up to 100,000 characters and 2 to 50 schemas. Everything runs in your browser. Downloads are the merged schema as JSON, a JSON report and a CSV list of conflicts.\nHow rules combine\nTypes are intersected, enums and const values are intersected, minimum and maximum bounds take the stricter value, required lists are joined, and properties are merged one by one. When one schema forbids extra properties, a property that only another schema defines is forbidden too, and a conflict is listed if that property is required.\nWhat stays in allOf\nSome keywords cannot be combined exactly, such as two different regular expressions, oneOf, not, if and then, patternProperties next to other property rules, and unevaluated properties. These are kept inside an allOf in the merged schema and listed in the report, so the meaning of the schema does not change.\nChecking the result\nConflicts identify their schema location. A conflict in an optional property or a numeric-only rule does not by itself make the whole schema impossible. The report marks provenUnsatisfiable only when a bounded structural proof establishes that no instance can satisfy the merged schema. Otherwise that flag is not a satisfiability proof. When there are no conflicts, optional sample checks validate candidates from each composition against the other with Ajv. Separate input schemas retain their own local-reference roots. Samples are evidence, not an exhaustive equivalence proof. Schemas using __proto__ as a property, pattern or dependency key are rejected by the validator.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "JSON schema validator",
      "url": "https://happytails.ai/en/developer-tools/json-schema-validator/"
    },
    {
      "name": "JSON to schema",
      "url": "https://happytails.ai/en/developer-tools/json-to-schema/"
    },
    {
      "name": "JSON diff",
      "url": "https://happytails.ai/en/developer-tools/json-diff/"
    }
  ],
  "tool": {
    "id": "json-schema-merger",
    "category": "data-tools",
    "built": true,
    "requirements": "Accepts up to 100,000 characters and 2 to 50 schemas. Everything runs in your browser. Downloads are the merged schema as JSON, a JSON report and a CSV list of conflicts.",
    "implementation": {
      "fields": [
        {
          "key": "draft",
          "label": "JSON Schema draft",
          "value": "auto",
          "type": "select",
          "values": [
            "auto",
            "draft-07",
            "2019-09",
            "2020-12"
          ]
        },
        {
          "key": "verify",
          "label": "Check the merged schema with generated samples",
          "value": true,
          "type": "checkbox"
        }
      ],
      "registrationFamily": "api-contracts-reference",
      "codeDirection": "ltr",
      "inputMaxLength": 100000,
      "inputErrorCode": "API_CONTRACTS_REFERENCE_TOO_LONG",
      "note": "Runs in your browser in a background worker. Accepts up to 100000 characters and 50 schemas, and keeps rules it cannot combine exactly in allOf.",
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 100000,
        "inputMode": "text",
        "label": "Schemas to merge",
        "placeholder": "[{\"type\":\"object\",\"required\":[\"id\"]},{\"properties\":{\"id\":{\"type\":\"string\"}}}]",
        "help": "A JSON array of schemas, or one schema with allOf. YAML also works. Up to 100,000 characters. Review the settings before running.",
        "helpParts": [
          "A JSON array of schemas, or one schema with allOf. YAML also works.",
          "Up to 100,000 characters.",
          "Review the settings before running."
        ],
        "action": null
      },
      "mode": "explicit",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# JSON Schema Merger\n\n- Human page: https://happytails.ai/en/data-tools/json-schema-merger/\n- Markdown: https://happytails.ai/en/data-tools/json-schema-merger.md\n- Structured JSON: https://happytails.ai/agents/en/data-tools/json-schema-merger/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `json-schema-merger` |\n| Category | data-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Use the visible action or interactive controls. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nRuns in your browser in a background worker. Accepts up to 100000 characters and 50 schemas, and keeps rules it cannot combine exactly in allOf.\n\n### Inputs and settings\n\nText input: Schemas to merge.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\n[{\"type\":\"object\",\"required\":[\"id\"]},{\"properties\":{\"id\":{\"type\":\"string\"}}}]\n```\n\nA JSON array of schemas, or one schema with allOf. YAML also works. Up to 100,000 characters. Review the settings before running.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `draft` | JSON Schema draft | select | \"auto\" | Allowed: auto, draft-07, 2019-09, 2020-12 |\n| `verify` | Check the merged schema with generated samples | checkbox | true |  |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nAccepts up to 100,000 characters and 2 to 50 schemas. Everything runs in your browser. Downloads are the merged schema as JSON, a JSON report and a CSV list of conflicts.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"json-schema-merger\",\n  \"category\": \"data-tools\",\n  \"built\": true,\n  \"requirements\": \"Accepts up to 100,000 characters and 2 to 50 schemas. Everything runs in your browser. Downloads are the merged schema as JSON, a JSON report and a CSV list of conflicts.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"draft\",\n        \"label\": \"JSON Schema draft\",\n        \"value\": \"auto\",\n        \"type\": \"select\",\n        \"values\": [\n          \"auto\",\n          \"draft-07\",\n          \"2019-09\",\n          \"2020-12\"\n        ]\n      },\n      {\n        \"key\": \"verify\",\n        \"label\": \"Check the merged schema with generated samples\",\n        \"value\": true,\n        \"type\": \"checkbox\"\n      }\n    ],\n    \"registrationFamily\": \"api-contracts-reference\",\n    \"codeDirection\": \"ltr\",\n    \"inputMaxLength\": 100000,\n    \"inputErrorCode\": \"API_CONTRACTS_REFERENCE_TOO_LONG\",\n    \"note\": \"Runs in your browser in a background worker. Accepts up to 100000 characters and 50 schemas, and keeps rules it cannot combine exactly in allOf.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 100000,\n      \"inputMode\": \"text\",\n      \"label\": \"Schemas to merge\",\n      \"placeholder\": \"[{\\\"type\\\":\\\"object\\\",\\\"required\\\":[\\\"id\\\"]},{\\\"properties\\\":{\\\"id\\\":{\\\"type\\\":\\\"string\\\"}}}]\",\n      \"help\": \"A JSON array of schemas, or one schema with allOf. YAML also works. Up to 100,000 characters. Review the settings before running.\",\n      \"helpParts\": [\n        \"A JSON array of schemas, or one schema with allOf. YAML also works.\",\n        \"Up to 100,000 characters.\",\n        \"Review the settings before running.\"\n      ],\n      \"action\": null\n    },\n    \"mode\": \"explicit\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nCombine several JSON Schemas, or one allOf composition, into a single schema. Rules that can never be satisfied together are listed as conflicts.\n\n### How to use JSON Schema Merger\n\n1. Paste a JSON array of schemas, or one schema whose allOf lists them.\n2. Choose the JSON Schema draft or keep automatic detection.\n3. Run the merge and review conflicts and rules kept in allOf.\n4. Download the merged schema and the conflict report.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n## Useful next steps\n\n- [JSON schema validator](https://happytails.ai/en/developer-tools/json-schema-validator/) ([Markdown](https://happytails.ai/en/developer-tools/json-schema-validator.md))\n\n- [JSON to schema](https://happytails.ai/en/developer-tools/json-to-schema/) ([Markdown](https://happytails.ai/en/developer-tools/json-to-schema.md))\n\n- [JSON diff](https://happytails.ai/en/developer-tools/json-diff/) ([Markdown](https://happytails.ai/en/developer-tools/json-diff.md))\n\nAccepts up to 100,000 characters and 2 to 50 schemas. Everything runs in your browser. Downloads are the merged schema as JSON, a JSON report and a CSV list of conflicts.\n\n## How rules combine\n\nTypes are intersected, enums and const values are intersected, minimum and maximum bounds take the stricter value, required lists are joined, and properties are merged one by one. When one schema forbids extra properties, a property that only another schema defines is forbidden too, and a conflict is listed if that property is required.\n\n### What stays in allOf\n\nSome keywords cannot be combined exactly, such as two different regular expressions, oneOf, not, if and then, patternProperties next to other property rules, and unevaluated properties. These are kept inside an allOf in the merged schema and listed in the report, so the meaning of the schema does not change.\n\n### Checking the result\n\nConflicts identify their schema location. A conflict in an optional property or a numeric-only rule does not by itself make the whole schema impossible. The report marks provenUnsatisfiable only when a bounded structural proof establishes that no instance can satisfy the merged schema. Otherwise that flag is not a satisfiability proof. When there are no conflicts, optional sample checks validate candidates from each composition against the other with Ajv. Separate input schemas retain their own local-reference roots. Samples are evidence, not an exhaustive equivalence proof. Schemas using \\_\\_proto\\_\\_ as a property, pattern or dependency key are rejected by the validator.\n"
}