{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/broad-institute/main/json-schema/broad-institute-tool-schema.json",
  "title": "Tool",
  "description": "A tool (or described tool) describes one pairing of a tool as described in a descriptor file (which potentially describes multiple tools) and a Docker image.",
  "x-generated": "2026-10-15",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/broad-institute-openapi.yml#/components/schemas/Tool",
  "required": [
    "author",
    "id",
    "meta-version",
    "organization",
    "toolclass",
    "url",
    "versions"
  ],
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "The URL for this tool in this registry, for example `http://agora.broadinstitute.org/tools/123456`"
    },
    "id": {
      "type": "string",
      "description": "A unique identifier of the tool, scoped to this registry, for example `123456` or `123456_v1`"
    },
    "organization": {
      "type": "string",
      "description": "The organization that published the image."
    },
    "toolname": {
      "type": "string",
      "description": "The name of the tool."
    },
    "toolclass": {
      "$ref": "#/$defs/ToolClass"
    },
    "description": {
      "type": "string",
      "description": "The description of the tool."
    },
    "author": {
      "type": "string",
      "description": "Contact information for the author of this tool entry in the registry. (More complex authorship information is handled by the descriptor)"
    },
    "meta-version": {
      "type": "string",
      "description": "The version of this tool in the registry. Iterates when fields like the description, author, etc. are updated."
    },
    "contains": {
      "type": "array",
      "description": "An array of IDs for the applications that are stored inside this tool (for example `https://bio.tools/tool/mytum.de/SNAP2/1`). This always returns an empty array.",
      "items": {
        "type": "string"
      }
    },
    "verified": {
      "type": "boolean",
      "description": "Reports whether this tool has been verified by a specific organization or individual.  This always returns false."
    },
    "verified-source": {
      "type": "string",
      "description": "Source of metadata that can support a verified tool, such as an email or URL"
    },
    "signed": {
      "type": "boolean",
      "description": "Reports whether this tool has been signed.  This always returns false."
    },
    "versions": {
      "type": "array",
      "description": "A list of versions for this tool",
      "items": {
        "$ref": "#/$defs/ToolVersion"
      }
    }
  },
  "$defs": {
    "ToolClass": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The unique identifier for the class"
        },
        "name": {
          "type": "string",
          "description": "A short friendly name for the class"
        },
        "description": {
          "type": "string",
          "description": "A longer explanation of what this class is and what it can accomplish"
        }
      },
      "description": "Describes a class (type) of tool allowing us to categorize workflows, tools, and maybe even other entities (such as services) separately"
    },
    "ToolVersion": {
      "required": [
        "id",
        "meta-version",
        "url"
      ],
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the version."
        },
        "url": {
          "type": "string",
          "description": "The URL for this tool in this registry, for example `http://agora.broadinstitute.org/tools/123456/1`"
        },
        "id": {
          "type": "string",
          "description": "An identifier of the version of this tool for this particular tool registry, for example `v1`"
        },
        "image": {
          "type": "string",
          "description": "The docker path to the image (and version) for this tool. (e.g. quay.io/seqware/seqware_full/1.1). This always returns an empty string."
        },
        "descriptor-type": {
          "type": "array",
          "description": "The type (or types) of descriptors available.",
          "items": {
            "type": "string",
            "enum": [
              "WDL"
            ]
          }
        },
        "dockerfile": {
          "type": "boolean",
          "description": "Reports if this tool has a dockerfile available. This always returns false."
        },
        "meta-version": {
          "type": "string",
          "description": "The version of this tool version in the registry. Iterates when fields like the description, author, etc. are updated."
        }
      },
      "description": "A tool version describes a particular iteration of a tool as described by a reference to a specific image and dockerfile."
    }
  }
}