{
  "openapi": "3.1.1",
  "info": {
    "title": "Security & supply-chain explorers API",
    "version": "1.0.0",
    "summary": "Deterministic tools for people and AI agents.",
    "description": "Every endpoint performs the same calculation as the human page and returns inputs, result, units, assumptions, sources, warnings and computedAt. MCP endpoint: /mcp."
  },
  "servers": [
    {
      "url": "https://security.usefulweb.app"
    }
  ],
  "paths": {
    "/api/v1/tools": {
      "get": {
        "operationId": "listTools",
        "summary": "Catalog of all tools",
        "responses": {
          "200": {
            "description": "Tool list.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/{id}": {
      "get": {
        "operationId": "getTool",
        "summary": "Definition of one tool",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "artifact-provenance-explorer",
                "c2pa-credentials-inspector",
                "container-image-explorer",
                "cve-relationship-graph",
                "dependency-vulnerability-explorer",
                "oauth-permission-explorer",
                "open-source-trust-explorer",
                "package-ecosystem-graph",
                "passkey-webauthn-tester",
                "sbom-explorer",
                "sbom-license-checker",
                "security-advisory-timeline",
                "security-configuration-scanner"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tool definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/artifact-provenance-explorer/calculate": {
      "post": {
        "operationId": "calculateArtifactProvenanceExplorer",
        "summary": "Verify npm build provenance: Sigstore signature, transparency log, source repo and commit.",
        "description": "Fetches (or reads pasted) npm registry attestations for a package version, verifies the Sigstore bundles with node:crypto (DSSE signature, Fulcio certificate chain to the pinned Sigstore root, Rekor signed entry timestamp, Merkle inclusion proof and checkpoint), parses the SLSA provenance (builder, workflow, source repository, commit, trigger) and cross-checks it against the package metadata (repository field, gitHead, tarball integrity).\n\nMethodology:\n- Attestations come from https://registry.npmjs.org/-/npm/v1/attestations/<name>@<version> (or your paste); package metadata from https://registry.npmjs.org/<name>/<version>.\n- Each Sigstore bundle is verified locally with node:crypto: the DSSE signature over the pre-authentication encoding (PAE); for provenance the Fulcio leaf certificate must chain to the pinned public-good Sigstore intermediate and root and be valid at the Rekor integratedTime; the publish attestation must be signed by a pinned npm registry key.\n- Transparency: the Rekor signed entry timestamp (SET) and checkpoint are verified against the pinned rekor.sigstore.dev key, the RFC 6962 Merkle inclusion proof must recompute the logged root hash, and the log entry must record the SHA-256 of this exact payload.\n- Cross-checks: in-toto subject = pkg:npm/<name>@<version>; subject SHA-512 = the registry tarball integrity; provenance repository = package.json repository; provenance commit = gitHead; Fulcio certificate extensions (source repository, digest, workflow) = the provenance claims.\n- Trust roots (npm keys, Rekor key, Fulcio certificates) are pinned snapshots from 2026-10-14, not refreshed via Sigstore TUF; rotated keys therefore show as failures, not as forgeries.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "artifact_provenance_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArtifactProvenanceExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted attestations for sigstore@3.0.0 (offline)",
                  "value": {
                    "attestations": "{\"attestations\":[{\"predicateType\":\"https://github.com/npm/attestation/tree/main/specs/publish/v0.1\",\"bundle\":{\"mediaType\":\"application/vnd.dev.sigstore.bundle+json;version=0.2\",\"verificationMaterial\":{\"publicKey\":{\"hint\":\"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA\"},\"tlogEntries\":[{\"logIndex\":\"139985246\",\"logId\":{\"keyId\":\"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0=\"},\"kindVersion\":{\"kind\":\"intoto\",\"version\":\"0.0.2\"},\"integratedTime\":\"1728922429\",\"inclusionPromise\":{\"signedEntryTimestamp\":\"MEUCIQCPv6SdeeKeVR0qcmXMuRzhh/zvFcX/f9b7BABIS/m9oQIgTS6Ux+yB+ljKWDMcbEFbEUJD63yiUw0W9R29RRKR630=\"},\"inclusionProof\":{\"logIndex\":\"18080984\",\"rootHash\":\"3QgSU4Sc5SaBpOIdtK7rq7YVvUIJa9ffmOBQJfAQ5No=\",\"treeSize\":\"18080985\",\"hashes\":[\"1VqcNP+E3GU18mbDgJETsYPoJoPiBbklVeJL1pT1cEU=\",\"TeoPJKP5nSkHigJeomgyX9aZZoddHPj9jYR2XBUXPmY=\",\"HYGE0qSPvaESM2IDQSij67KLAB+szi1KVxV/Rs/4oao=\",\"r5Dfj7qJpQin2WUzTTguka3V50Bo0mAIFHd3M/J1m/A=\",\"cj+mVHbPlEBj7SJvZUjTJ8GkBUjsTGRxO06+EhHpJI0=\",\"BjFsBrJyNhKTEH8w+f2KSzUI3erf7mABm3Xr99SHEn0=\",\"CrflNtVzHLcNx9sn8RoxU3TY97achLRHZbZywxnnJ8o=\",\"b3n5wXbbRN5E/WP1khHFeMJvwBNMYl7/pbbqIlmnA9k=\",\"pApK2lHZXMFTp32RUjqXhUaDn5VreViydgGWY2r35G8=\",\"7LYCkPo3kGZ6HBsTTt82Y2+LSJb6pYZspK4VhzDvQvA=\",\"rAAfgmPXo8TJp1LmkVDhAYrf0WzE4X4/mDuW1pwVM3Y=\",\"gf+9m552B3PnkWnO0o4KdVvjcT3WVHLrCbf1DoVYKFw=\"],\"checkpoint\":{\"envelope\":\"rekor.sigstore.dev - 1193050959916656506\\n18080985\\n3QgSU4Sc5SaBpOIdtK7rq7YVvUIJa9ffmOBQJfAQ5No=\\n\\n— rekor.sigstore.dev wNI9ajBGAiEAwmhqxQCnAv0coCsInw/SWm9h46zL6f0/o4tDrPu7uOICIQD/DsMW0cIMG0lNfqFtXBcl23j7YhsqIQudE5RSlyElRw==\\n\"}},\"canonicalizedBody\":\"eyJhcGlWZXJzaW9uIjoiMC4wLjIiLCJraW5kIjoiaW50b3RvIiwic3BlYyI6eyJjb250ZW50Ijp7ImVudmVsb3BlIjp7InBheWxvYWRUeXBlIjoiYXBwbGljYXRpb24vdm5kLmluLXRvdG8ranNvbiIsInNpZ25hdHVyZXMiOlt7ImtleWlkIjoiU0hBMjU2OmpsM2J3c3d1ODBQampva0NnaDBvMnc1YzJVNExoUUFFNTdnajljejFrekEiLCJwdWJsaWNLZXkiOiJMUzB0TFMxQ1JVZEpUaUJRVlVKTVNVTWdTMFZaTFMwdExTMEtUVVpyZDBWM1dVaExiMXBKZW1vd1EwRlJXVWxMYjFwSmVtb3dSRUZSWTBSUlowRkZNVTlzWWpONlRVRkdSbmhZUzBocFNXdFJUelZqU2pOWmFHdzFhVFpWVUhBclNXaDFkR1ZDU21KMVNHTkJOVlZ2WjB0dk1FVlhkR3hYZDFjMlMxTmhTMjlVVGtWWlREZEtiRU5SYVZadWEyaENhM1JWWjJjOVBRb3RMUzB0TFVWT1JDQlFWVUpNU1VNZ1MwVlpMUzB0TFMwPSIsInNpZyI6IlRVVlZRMGxHV0d0TE0xSlNjVzVqWW1FdmRVNW9iRmhEUzFaeVVIRjFjMnRCYjBSdU1YcERNamczSzBWdGNtRXlRV2xGUVc1Q05WWndaMHhDZVhNMFV6VnNWRUUyVm5od2RGaHZSbFpLU0drMlIwaENPVGRHUzI4MmFXWTJUVWs5In1dfSwiaGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjA2YWE0ZTYwMWYzMjc2ODMyODg0MjAzYTlhMmI3Nzg0NGQ0ZWUzZmRiMGY3NWE0NjA3ODQ5MzE0Y2I4N2QwYWEifSwicGF5bG9hZEhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI0MzMxZWIxMGI2ZjE4NDM3ZjZkYWM2OTdmN2Q3NWEyMGZjZjZlZWI5N2FmODRmMDAyZDIxYTkzYmUyOTk3YzdkIn19fX0=\"}],\"timestampVerificationData\":{\"rfc3161Timestamps\":[]}},\"dsseEnvelope\":{\"payload\":\"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInN1YmplY3QiOlt7Im5hbWUiOiJwa2c6bnBtL3NpZ3N0b3JlQDMuMC4wIiwiZGlnZXN0Ijp7InNoYTUxMiI6IjNjNzMyMjdlMTg3NzEwZGUyNWEwYzcwNzBiM2VhNWRlZmZlNWJiMzgxM2RmMzZiZWY1ZmYyY2I5YjFhMDc4YzM2MzZjOThmMzFmODIyM2ZkOGExN2RjNmJlZWZhNDZhOGI4OTQ0ODk1NTc1MzFjNzA5MTEwMDBkODdmZTY2ZDc4In19XSwicHJlZGljYXRlVHlwZSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vYXR0ZXN0YXRpb24vdHJlZS9tYWluL3NwZWNzL3B1Ymxpc2gvdjAuMSIsInByZWRpY2F0ZSI6eyJuYW1lIjoic2lnc3RvcmUiLCJ2ZXJzaW9uIjoiMy4wLjAiLCJyZWdpc3RyeSI6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnIn19\",\"payloadType\":\"application/vnd.in-toto+json\",\"signatures\":[{\"sig\":\"MEUCIFXkK3RRqncba/uNhlXCKVrPquskAoDn1zC287+Emra2AiEAnB5VpgLBys4S5lTA6VxptXoFVJHi6GHB97FKo6if6MI=\",\"keyid\":\"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA\"}]}},\"signedAccessSignatureUrl\":\"\"},{\"predicateType\":\"https://slsa.dev/provenance/v1\",\"bundle\":{\"mediaType\":\"application/vnd.dev.sigstore.bundle+json;version=0.2\",\"verificationMaterial\":{\"x509CertificateChain\":{\"certificates\":[{\"rawBytes\":\"MIIGtTCCBjugAwIBAgIUFZbCpi3CDAWvgrLHxtg1Y7uuzmUwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjQxMDE0MTYxMzQ1WhcNMjQxMDE0MTYyMzQ1WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf1geHKJmqtJp8PDuLWzA/2kUwTWxIQZuDpBv+oyuT7r/Ja7Ro8kGEQrJ/DBFSpT/npc35Pk3LmmRylyYoedRt6OCBVowggVWMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUmohazNhKN4gAImBmQV8TTMyBpeswHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wYwYDVR0RAQH/BFkwV4ZVaHR0cHM6Ly9naXRodWIuY29tL3NpZ3N0b3JlL3NpZ3N0b3JlLWpzLy5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMBIGCisGAQQBg78wAQIEBHB1c2gwNgYKKwYBBAGDvzABAwQoM2E1N2E3NDFiZmI5ZjdjM2JjYTY5YjYzZTE3MGZjMjhlOTQzMmU2OTAVBgorBgEEAYO/MAEEBAdSZWxlYXNlMCIGCisGAQQBg78wAQUEFHNpZ3N0b3JlL3NpZ3N0b3JlLWpzMB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wZQYKKwYBBAGDvzABCQRXDFVodHRwczovL2dpdGh1Yi5jb20vc2lnc3RvcmUvc2lnc3RvcmUtanMvLmdpdGh1Yi93b3JrZmxvd3MvcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoM2E1N2E3NDFiZmI5ZjdjM2JjYTY5YjYzZTE3MGZjMjhlOTQzMmU2OTAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwNwYKKwYBBAGDvzABDAQpDCdodHRwczovL2dpdGh1Yi5jb20vc2lnc3RvcmUvc2lnc3RvcmUtanMwOAYKKwYBBAGDvzABDQQqDCgzYTU3YTc0MWJmYjlmN2MzYmNhNjliNjNlMTcwZmMyOGU5NDMyZTY5MB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBkGCisGAQQBg78wAQ8ECwwJNDk1NTc0NTU1MCsGCisGAQQBg78wARAEHQwbaHR0cHM6Ly9naXRodWIuY29tL3NpZ3N0b3JlMBgGCisGAQQBg78wAREECgwINzEwOTYzNTMwZQYKKwYBBAGDvzABEgRXDFVodHRwczovL2dpdGh1Yi5jb20vc2lnc3RvcmUvc2lnc3RvcmUtanMvLmdpdGh1Yi93b3JrZmxvd3MvcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wARMEKgwoM2E1N2E3NDFiZmI5ZjdjM2JjYTY5YjYzZTE3MGZjMjhlOTQzMmU2OTAUBgorBgEEAYO/MAEUBAYMBHB1c2gwWwYKKwYBBAGDvzABFQRNDEtodHRwczovL2dpdGh1Yi5jb20vc2lnc3RvcmUvc2lnc3RvcmUtanMvYWN0aW9ucy9ydW5zLzExMzMxMjkwMzg3L2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwgYkGCisGAQQB1nkCBAIEewR5AHcAdQDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZKLzphoAAAEAwBGMEQCIHQ9LL9LECgBdY6bClnXOGR7hznz7bzwEz0gPvFmanWuAiBeeN3h0wium7ANLgDTBsFqY/df2Op54BC9EAtias1ZJjAKBggqhkjOPQQDAwNoADBlAjEA2bLa8wNOQQ43ANDZOFJ85DDyn4DaFWQFjoWlQP3RFIYQ9WDD4a5km9mVxQ9og82+AjApsAV76yLFvmDXHiOHNptbeDageiM1/nWekZZJj1Cix43RclqCNu0Q4+fNKeqlrnU=\"}]},\"tlogEntries\":[{\"logIndex\":\"139985224\",\"logId\":{\"keyId\":\"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0=\"},\"kindVersion\":{\"kind\":\"intoto\",\"version\":\"0.0.2\"},\"integratedTime\":\"1728922425\",\"inclusionPromise\":{\"signedEntryTimestamp\":\"MEUCICdHXEjie6kN9q31KFPR+3uU0aoV7DrM3MQfhyU0USvSAiEAnu7lzyeQLrbqYXO7aXR2vxWctF1qYSR4y8ErAlDI59I=\"},\"inclusionProof\":{\"logIndex\":\"18080962\",\"rootHash\":\"fM8KxP/V5eJtk7Dsf1sQAGWiC/L3QYumuzrRdhTc6Qc=\",\"treeSize\":\"18080963\",\"hashes\":[\"Z5LqT/yzIYCvllsIhcpuwWgMS7NOP/fXUhZce4z17hE=\",\"HYGE0qSPvaESM2IDQSij67KLAB+szi1KVxV/Rs/4oao=\",\"r5Dfj7qJpQin2WUzTTguka3V50Bo0mAIFHd3M/J1m/A=\",\"cj+mVHbPlEBj7SJvZUjTJ8GkBUjsTGRxO06+EhHpJI0=\",\"BjFsBrJyNhKTEH8w+f2KSzUI3erf7mABm3Xr99SHEn0=\",\"CrflNtVzHLcNx9sn8RoxU3TY97achLRHZbZywxnnJ8o=\",\"b3n5wXbbRN5E/WP1khHFeMJvwBNMYl7/pbbqIlmnA9k=\",\"pApK2lHZXMFTp32RUjqXhUaDn5VreViydgGWY2r35G8=\",\"7LYCkPo3kGZ6HBsTTt82Y2+LSJb6pYZspK4VhzDvQvA=\",\"rAAfgmPXo8TJp1LmkVDhAYrf0WzE4X4/mDuW1pwVM3Y=\",\"gf+9m552B3PnkWnO0o4KdVvjcT3WVHLrCbf1DoVYKFw=\"],\"checkpoint\":{\"envelope\":\"rekor.sigstore.dev - 1193050959916656506\\n18080963\\nfM8KxP/V5eJtk7Dsf1sQAGWiC/L3QYumuzrRdhTc6Qc=\\n\\n— rekor.sigstore.dev wNI9ajBEAiBSSvf+ycholemEa7s9BZU1/y3ydkVbkeEESu61+iXtZQIgQmmlIGuzYrjIruUdMqYQCUzXOpQ34ldW2vD3gebXi40=\\n\"}},\"canonicalizedBody\":\"eyJhcGlWZXJzaW9uIjoiMC4wLjIiLCJraW5kIjoiaW50b3RvIiwic3BlYyI6eyJjb250ZW50Ijp7ImVudmVsb3BlIjp7InBheWxvYWRUeXBlIjoiYXBwbGljYXRpb24vdm5kLmluLXRvdG8ranNvbiIsInNpZ25hdHVyZXMiOlt7InB1YmxpY0tleSI6IkxTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVWQwVkVORFFtcDFaMEYzU1VKQlowbFZSbHBpUTNCcE0wTkVRVmQyWjNKTVNIaDBaekZaTjNWMWVtMVZkME5uV1VsTGIxcEplbW93UlVGM1RYY0tUbnBGVmsxQ1RVZEJNVlZGUTJoTlRXTXliRzVqTTFKMlkyMVZkVnBIVmpKTlVqUjNTRUZaUkZaUlVVUkZlRlo2WVZka2VtUkhPWGxhVXpGd1ltNVNiQXBqYlRGc1drZHNhR1JIVlhkSWFHTk9UV3BSZUUxRVJUQk5WRmw0VFhwUk1WZG9ZMDVOYWxGNFRVUkZNRTFVV1hsTmVsRXhWMnBCUVUxR2EzZEZkMWxJQ2t0dldrbDZhakJEUVZGWlNVdHZXa2w2YWpCRVFWRmpSRkZuUVVWbU1XZGxTRXRLYlhGMFNuQTRVRVIxVEZkNlFTOHlhMVYzVkZkNFNWRmFkVVJ3UW5ZS0syOTVkVlEzY2k5S1lUZFNiemhyUjBWUmNrb3ZSRUpHVTNCVUwyNXdZek0xVUdzelRHMXRVbmxzZVZsdlpXUlNkRFpQUTBKV2IzZG5aMVpYVFVFMFJ3cEJNVlZrUkhkRlFpOTNVVVZCZDBsSVowUkJWRUpuVGxaSVUxVkZSRVJCUzBKblozSkNaMFZHUWxGalJFRjZRV1JDWjA1V1NGRTBSVVpuVVZWdGIyaGhDbnBPYUV0T05HZEJTVzFDYlZGV09GUlVUWGxDY0dWemQwaDNXVVJXVWpCcVFrSm5kMFp2UVZVek9WQndlakZaYTBWYVlqVnhUbXB3UzBaWGFYaHBORmtLV2tRNGQxbDNXVVJXVWpCU1FWRklMMEpHYTNkV05GcFdZVWhTTUdOSVRUWk1lVGx1WVZoU2IyUlhTWFZaTWpsMFRETk9jRm96VGpCaU0wcHNURE5PY0FwYU0wNHdZak5LYkV4WGNIcE1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wcHNZa2RXYUdNeVZYVmxWekZ6VVVoS2JGcHVUWFpoUjFab0NscElUWFppVjBad1ltcEJOVUpuYjNKQ1owVkZRVmxQTDAxQlJVSkNRM1J2WkVoU2QyTjZiM1pNTTFKMllUSldkVXh0Um1wa1IyeDJZbTVOZFZveWJEQUtZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVSkpSME5wYzBkQlVWRkNaemM0ZDBGUlNVVkNTRUl4WXpKbmQwNW5XVXRMZDFsQ1FrRkhSQXAyZWtGQ1FYZFJiMDB5UlRGT01rVXpUa1JHYVZwdFNUVmFhbVJxVFRKS2FsbFVXVFZaYWxsNldsUkZNMDFIV21wTmFtaHNUMVJSZWsxdFZUSlBWRUZXQ2tKbmIzSkNaMFZGUVZsUEwwMUJSVVZDUVdSVFdsZDRiRmxZVG14TlEwbEhRMmx6UjBGUlVVSm5OemgzUVZGVlJVWklUbkJhTTA0d1lqTktiRXd6VG5BS1dqTk9NR0l6U214TVYzQjZUVUl3UjBOcGMwZEJVVkZDWnpjNGQwRlJXVVZFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFUZENaMjl5UW1kRlJRcEJXVTh2VFVGRlNVSkRNRTFMTW1nd1pFaENlazlwT0haa1J6bHlXbGMwZFZsWFRqQmhWemwxWTNrMWJtRllVbTlrVjBveFl6SldlVmt5T1hWa1IxWjFDbVJETldwaU1qQjNXbEZaUzB0M1dVSkNRVWRFZG5wQlFrTlJVbGhFUmxadlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5XcGlNakIyWXpKc2JtTXpVbllLWTIxVmRtTXliRzVqTTFKMlkyMVZkR0Z1VFhaTWJXUndaRWRvTVZscE9UTmlNMHB5V20xNGRtUXpUWFpqYlZaeldsZEdlbHBUTlRWaVYzaEJZMjFXYlFwamVUbHZXbGRHYTJONU9YUlpWMngxVFVSblIwTnBjMGRCVVZGQ1p6YzRkMEZSYjBWTFozZHZUVEpGTVU0eVJUTk9SRVpwV20xSk5WcHFaR3BOTWtwcUNsbFVXVFZaYWxsNldsUkZNMDFIV21wTmFtaHNUMVJSZWsxdFZUSlBWRUZrUW1kdmNrSm5SVVZCV1U4dlRVRkZURUpCT0UxRVYyUndaRWRvTVZscE1XOEtZak5PTUZwWFVYZE9kMWxMUzNkWlFrSkJSMFIyZWtGQ1JFRlJjRVJEWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpqTW14dVl6TlNkZ3BqYlZWMll6SnNibU16VW5aamJWVjBZVzVOZDA5QldVdExkMWxDUWtGSFJIWjZRVUpFVVZGeFJFTm5lbGxVVlROWlZHTXdUVmRLYlZscWJHMU9NazE2Q2xsdFRtaE9hbXhwVG1wT2JFMVVZM2RhYlUxNVQwZFZOVTVFVFhsYVZGazFUVUk0UjBOcGMwZEJVVkZDWnpjNGQwRlJORVZGVVhkUVkyMVdiV041T1c4S1dsZEdhMk41T1hSWlYyeDFUVUpyUjBOcGMwZEJVVkZDWnpjNGQwRlJPRVZEZDNkS1RrUnJNVTVVWXpCT1ZGVXhUVU56UjBOcGMwZEJVVkZDWnpjNGR3cEJVa0ZGU0ZGM1ltRklVakJqU0UwMlRIazVibUZZVW05a1YwbDFXVEk1ZEV3elRuQmFNMDR3WWpOS2JFMUNaMGREYVhOSFFWRlJRbWMzT0hkQlVrVkZDa05uZDBsT2VrVjNUMVJaZWs1VVRYZGFVVmxMUzNkWlFrSkJSMFIyZWtGQ1JXZFNXRVJHVm05a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFlLWXpKc2JtTXpVblpqYlZWMll6SnNibU16VW5aamJWVjBZVzVOZGt4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU50Vm5OYVYwWjZXbE0xTlFwaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkdkSFEybHpSMEZSVVVKbk56aDNRVkpOUlV0bmQyOU5Na1V4VGpKRk0wNUVSbWxhYlVrMUNscHFaR3BOTWtwcVdWUlpOVmxxV1hwYVZFVXpUVWRhYWsxcWFHeFBWRkY2VFcxVk1rOVVRVlZDWjI5eVFtZEZSVUZaVHk5TlFVVlZRa0ZaVFVKSVFqRUtZekpuZDFkM1dVdExkMWxDUWtGSFJIWjZRVUpHVVZKT1JFVjBiMlJJVW5kamVtOTJUREprY0dSSGFERlphVFZxWWpJd2RtTXliRzVqTTFKMlkyMVZkZ3BqTW14dVl6TlNkbU50VlhSaGJrMTJXVmRPTUdGWE9YVmplVGw1WkZjMWVreDZSWGhOZWsxNFRXcHJkMDE2WnpOTU1rWXdaRWRXZEdOSVVucE1la1YzQ2tabldVdExkMWxDUWtGSFJIWjZRVUpHWjFGSlJFRmFkMlJYU25OaFYwMTNaMWxyUjBOcGMwZEJVVkZDTVc1clEwSkJTVVZsZDFJMVFVaGpRV1JSUkdRS1VGUkNjWGh6WTFKTmJVMWFTR2g1V2xwNlkwTnZhM0JsZFU0ME9ISm1LMGhwYmt0QlRIbHVkV3BuUVVGQldrdE1lbkJvYjBGQlFVVkJkMEpIVFVWUlF3cEpTRkU1VEV3NVRFVkRaMEprV1RaaVEyeHVXRTlIVWpkb2VtNTZOMko2ZDBWNk1HZFFka1p0WVc1WGRVRnBRbVZsVGpOb01IZHBkVzAzUVU1TVowUlVDa0p6Um5GWkwyUm1Nazl3TlRSQ1F6bEZRWFJwWVhNeFdrcHFRVXRDWjJkeGFHdHFUMUJSVVVSQmQwNXZRVVJDYkVGcVJVRXlZa3hoT0hkT1QxRlJORE1LUVU1RVdrOUdTamcxUkVSNWJqUkVZVVpYVVVacWIxZHNVVkF6VWtaSldWRTVWMFJFTkdFMWEyMDViVlo0VVRsdlp6Z3lLMEZxUVhCelFWWTNObmxNUmdwMmJVUllTR2xQU0U1d2RHSmxSR0ZuWldsTk1TOXVWMlZyV2xwS2FqRkRhWGcwTTFKamJIRkRUblV3VVRRclprNUxaWEZzY201VlBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdCIsInNpZyI6IlRVVlJRMGxJUzJkTkszUTViMmhUY1RSMkt6RjBlVXRVYmpCTFRrNUhkVXhYUVVrNWFFMDJORXRsWkdVd1EyeHRRV2xDYlZRelJtUkxWMEY2WkRaNWIweENkVFEwVldrNVdrMWxPRnBGWW5NeU9IZEVWMVZ1V0cxbVVXVnlaejA5In1dfSwiaGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjgxMWU2OGM0YjNlYjFmYjRiZjc4Y2ZhMWEzYTUxYzFjMjE4MmM0ZWMxZTU0M2VlZDdmODM2YzMwMTk4ODMwMmMifSwicGF5bG9hZEhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJhMTU0MDliZjRhYTIwYjdlOTNlM2FhZmJlMzllMTE3MDVlZTAyYzIxM2Q3N2M5YzQ1YzE3Y2JlZDM5YzMyMzhhIn19fX0=\"}],\"timestampVerificationData\":{\"rfc3161Timestamps\":[]}},\"dsseEnvelope\":{\"payload\":\"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjEiLCJzdWJqZWN0IjpbeyJuYW1lIjoicGtnOm5wbS9zaWdzdG9yZUAzLjAuMCIsImRpZ2VzdCI6eyJzaGE1MTIiOiIzYzczMjI3ZTE4NzcxMGRlMjVhMGM3MDcwYjNlYTVkZWZmZTViYjM4MTNkZjM2YmVmNWZmMmNiOWIxYTA3OGMzNjM2Yzk4ZjMxZjgyMjNmZDhhMTdkYzZiZWVmYTQ2YThiODk0NDg5NTU3NTMxYzcwOTExMDAwZDg3ZmU2NmQ3OCJ9fV0sInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjEiLCJwcmVkaWNhdGUiOnsiYnVpbGREZWZpbml0aW9uIjp7ImJ1aWxkVHlwZSI6Imh0dHBzOi8vc2xzYS1mcmFtZXdvcmsuZ2l0aHViLmlvL2dpdGh1Yi1hY3Rpb25zLWJ1aWxkdHlwZXMvd29ya2Zsb3cvdjEiLCJleHRlcm5hbFBhcmFtZXRlcnMiOnsid29ya2Zsb3ciOnsicmVmIjoicmVmcy9oZWFkcy9tYWluIiwicmVwb3NpdG9yeSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zaWdzdG9yZS9zaWdzdG9yZS1qcyIsInBhdGgiOiIuZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLnltbCJ9fSwiaW50ZXJuYWxQYXJhbWV0ZXJzIjp7ImdpdGh1YiI6eyJldmVudF9uYW1lIjoicHVzaCIsInJlcG9zaXRvcnlfaWQiOiI0OTU1NzQ1NTUiLCJyZXBvc2l0b3J5X293bmVyX2lkIjoiNzEwOTYzNTMifX0sInJlc29sdmVkRGVwZW5kZW5jaWVzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL3NpZ3N0b3JlL3NpZ3N0b3JlLWpzQHJlZnMvaGVhZHMvbWFpbiIsImRpZ2VzdCI6eyJnaXRDb21taXQiOiIzYTU3YTc0MWJmYjlmN2MzYmNhNjliNjNlMTcwZmMyOGU5NDMyZTY5In19XX0sInJ1bkRldGFpbHMiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hY3Rpb25zL3J1bm5lci9naXRodWItaG9zdGVkIn0sIm1ldGFkYXRhIjp7Imludm9jYXRpb25JZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zaWdzdG9yZS9zaWdzdG9yZS1qcy9hY3Rpb25zL3J1bnMvMTEzMzEyOTAzODcvYXR0ZW1wdHMvMSJ9fX19\",\"payloadType\":\"application/vnd.in-toto+json\",\"signatures\":[{\"sig\":\"MEQCIHKgM+t9ohSq4v+1tyKTn0KNNGuLWAI9hM64Kede0ClmAiBmT3FdKWAzd6yoLBu44Ui9ZMe8ZEbs28wDWUnXmfQerg==\",\"keyid\":\"\"}]}},\"signedAccessSignatureUrl\":\"\"}]}",
                    "packageMetadata": "{\n \"name\": \"sigstore\",\n \"version\": \"3.0.0\",\n \"repository\": {\n  \"url\": \"git+https://github.com/sigstore/sigstore-js.git\",\n  \"type\": \"git\"\n },\n \"gitHead\": \"3a57a741bfb9f7c3bca69b63e170fc28e9432e69\",\n \"dist\": {\n  \"integrity\": \"sha512-PHMifhh3EN4loMcHCz6l3v/luzgT3za+9f8subGgeMNjbJjzH4Ij/YoX3Gvu+kaouJRIlVdTHHCREADYf+ZteA==\",\n  \"tarball\": \"https://registry.npmjs.org/sigstore/-/sigstore-3.0.0.tgz\",\n  \"attestations\": {\n   \"url\": \"https://registry.npmjs.org/-/npm/v1/attestations/sigstore@3.0.0\",\n   \"provenance\": {\n    \"predicateType\": \"https://slsa.dev/provenance/v1\"\n   }\n  }\n }\n}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArtifactProvenanceExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/c2pa-credentials-inspector/calculate": {
      "post": {
        "operationId": "calculateC2paCredentialsInspector",
        "summary": "Read C2PA Content Credentials in images and videos: actions, AI hints, signer and signature.",
        "description": "Upload an image or video and see its C2PA manifest store: claim generator, actions (created, edited, AI-generated digitalSourceType), ingredients, assertions and the signer certificate chain. The COSE signature over the claim, the assertion hashes and the JPEG/PNG/WebP data hash are verified offline; trust lists, revocation and time-stamps are not evaluated. XMP DigitalSourceType hints are read with ExifTool when available.\n\nMethodology:\n- The container is detected from the file bytes: JPEG APP11 segments (JPEG XT “JP” header, multi-segment reassembly per ISO 19566-5 D.2), the PNG caBX chunk, the RIFF C2PA chunk (WebP), the ISO BMFF uuid box D8FEC3D6-1B0E-483C-9297-5828877EC481 (MP4, MOV, HEIF, AVIF), or a standalone .c2pa JUMBF file.\n- JUMBF superboxes are parsed by their description boxes (type UUID + label); claims, assertions and the claim signature are decoded with our own CBOR decoder. The last manifest in the store is the active one; brotli-compressed manifests are expanded.\n- Verified offline: (1) each hashed URI in the claim against the hash of the referenced assertion superbox (contents without the superbox header); (2) the c2pa.hash.data hard binding over the file bytes outside the exclusion ranges; (3) the COSE_Sign1 signature (detached payload = claim CBOR, empty external_aad) with the x5chain signer certificate (ES256/384/512, PS256/384/512, Ed25519); (4) that each x5chain certificate is signed by the next one.\n- NOT evaluated: whether the signer chains to a trusted C2PA trust list, certificate revocation (OCSP), RFC 3161 time-stamps, BMFF/box hashes (c2pa.hash.bmff*, c2pa.hash.boxes: presence only), ingredient manifests’ own bindings and cloud/remote manifests. A valid signature therefore proves integrity and the signer key, not that the signer is trustworthy.\n- AI hints: digitalSourceType values such as trainedAlgorithmicMedia or compositeWithTrainedAlgorithmicMedia in c2pa.actions, training-mining assertions, and (with ExifTool) XMP Iptc4xmpExt:DigitalSourceType. Missing credentials do not mean an image is authentic or human-made.\n\nSignature validity is not trust: the signer’s certificate is not checked against a C2PA trust list. Absence of Content Credentials says nothing about authenticity.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "c2pa_credentials_inspector",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/C2paCredentialsInspectorInput"
              },
              "examples": {
                "example1": {
                  "summary": "Synthetic AI-generated JPEG with a signed manifest",
                  "value": {
                    "file": {
                      "filename": "demo.jpg",
                      "contentType": "image/jpeg",
                      "contentBase64": "/9j/6wmLSlAAAQAAAAEAAAmBanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAACVtqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjNmYmU4ZjRlLTBiNWMtNGU1OS05ZThjLTFkNmEyYjdjOWQwMQAAAALbanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAABVGp1bWIAAAApanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5hY3Rpb25zLnYyAAAAASNjYm9yoWdhY3Rpb25zgqVmYWN0aW9ubGMycGEuY3JlYXRlZGR3aGVudDIwMjYtMTAtMDFUMTI6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVuRGVtbyBHZW5lcmF0b3JndmVyc2lvbmMxLjBxZGlnaXRhbFNvdXJjZVR5cGV4Rmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWFrZGVzY3JpcHRpb254HEdlbmVyYXRlZCBmcm9tIGEgdGV4dCBwcm9tcHSiZmFjdGlvbmxjMnBhLnJlc2l6ZWRkd2hlbnQyMDI2LTEwLTAxVDEyOjAwOjA1WgAAALRqdW1iAAAALGp1bWRjYm9yABEAEIAAAKoAOJtxA2MycGEuaW5ncmVkaWVudC52MgAAAACAY2JvcqRoZGM6dGl0bGVqc2tldGNoLnBuZ2lkYzpmb3JtYXRpaW1hZ2UvcG5nbHJlbGF0aW9uc2hpcGhwYXJlbnRPZmppbnN0YW5jZUlEeCx4bXA6aWlkOjdiMGY2ZjNlLTJmNDMtNGIxYy05ZDYyLTJkOWMxYTBlNWExMQAAAKJqdW1iAAAAKGp1bWRjYm9yABEAEIAAAKoAOJtxA2MycGEuaGFzaC5kYXRhAAAAAHJjYm9ypWpleGNsdXNpb25zgaJlc3RhcnQCZmxlbmd0aBkJjWRuYW1lbmp1bWJmIG1hbmlmZXN0Y2FsZ2ZzaGEyNTZkaGFzaFggPTsKWLT3wFfDVLCCjUFXaV/BfNivAgmBTvylRmNMVH1jcGFkQAAAAipqdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAAB+2Nib3Knamluc3RhbmNlSUR4LHhtcDppaWQ6NGExZThjNTItNjNhNC00ZDdlLWIyYTgtNWYwZjRjM2QyYjEwdGNsYWltX2dlbmVyYXRvcl9pbmZvomRuYW1leBt1c2VmdWx3ZWIgQzJQQSBkZW1vIGJ1aWxkZXJndmVyc2lvbmMxLjBoZGM6dGl0bGVoZGVtby5qcGdpZGM6Zm9ybWF0amltYWdlL2pwZWdpc2lnbmF0dXJleBlzZWxmI2p1bWJmPWMycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4OiY3VybHgqc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5hY3Rpb25zLnYyZGhhc2hYINgW3ODdlZHLJLHnwDxoe1722/EMeR02Wyp+VXb5puEyomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52MmRoYXNoWCAd4gbpVNONf8xll5S47b6ciOD4e92bT9JJ8Ph3ebRJAaJjdXJseClzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWRoYXNoWCDy0g/DqzMzLUileLa7ODFfVrUcIUiplraVSPOX+9ufZGNhbGdmc2hhMjU2AAAEB2p1bWIAAAAoanVtZGMyY3MAEQAQgAAAqgA4m3EDYzJwYS5zaWduYXR1cmUAAAAD12Nib3LShFkDhqIBJxghglkByDCCAcQwggF2oAMCAQICAiACMAUGAytlcDBPMQswCQYDVQQGEwJERTEhMB8GA1UECgwYRGVtbyBDb250ZW50IENyZWRlbnRpYWxzMR0wGwYDVQQDDBREZW1vIEMyUEEgSXNzdWluZyBDQTAeFw0yNjAxMDEwMDAwMDBaFw0yODAxMDEwMDAwMDBaMEYxCzAJBgNVBAYTAkRFMRcwFQYDVQQKDA51c2VmdWx3ZWIgZGVtbzEeMBwGA1UEAwwVRGVtbyBHZW5lcmF0b3IgU2lnbmVyMCowBQYDK2VwAyEAFVLRse+/VxVIaUCLYd3rRMZ371GRKuwX1tnVAF+T8EqjfzB9MAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMEBggrBgEFBQcDJDAdBgNVHQ4EFgQUmE59SpJN+jLKISMvjqvNGbeow+swHwYDVR0jBBgwFoAULzRxlOke8xLN2uw4bQPJ7di1OTYwBQYDK2VwA0EA7LD4cJalMrAl91LxYxPt933/t6CseQTHVtBbcWMkPGYcIgksf6jzy/NL+sSIdUgeL0XTY6FxasgpGgf/PUGxAlkBsjCCAa4wggFgoAMCAQICAiABMAUGAytlcDBJMQswCQYDVQQGEwJERTEhMB8GA1UECgwYRGVtbyBDb250ZW50IENyZWRlbnRpYWxzMRcwFQYDVQQDDA5EZW1vIEMyUEEgUm9vdDAeFw0yNTAxMDEwMDAwMDBaFw0zMzAxMDEwMDAwMDBaME8xCzAJBgNVBAYTAkRFMSEwHwYDVQQKDBhEZW1vIENvbnRlbnQgQ3JlZGVudGlhbHMxHTAbBgNVBAMMFERlbW8gQzJQQSBJc3N1aW5nIENBMCowBQYDK2VwAyEAvAsPkc7XlIl36bDBkKMX5LTEiLdl5rmtBwUeKLXDvCmjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQvNHGU6R7zEs3a7DhtA8nt2LU5NjAfBgNVHSMEGDAWgBSOdhkWRDSfJ1tgRi0ljwDjW8/u2TAFBgMrZXADQQCxcLvrak6Y1ZlwdGc/wvTno0qlfBmW51/03uY0/YW/xKI0wpV+4wrGbAQ/8ToGsAr6m0aysqfsVF3E5IF1icEDoPZYQK8DfQyj9anVfJI5psgATwTLyOuv6xalZuJMFFcRqFdc7o3+iVTBlYmJtESjhsCB8DKhd+xTXgwD5UY2jPsDgQ7/4AAQSkZJRgABAQAAAAAAAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAACAAIDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAABgf/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCCAWYOf//Z"
                    },
                    "useExiftool": false
                  }
                },
                "example2": {
                  "summary": "Synthetic PNG with a caBX manifest",
                  "value": {
                    "file": {
                      "filename": "demo.png",
                      "contentType": "image/png",
                      "contentBase64": "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACAQMAAABIeJ9nAAAIcmNhQlgAAAhyanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAACExqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjNmYmU4ZjRlLTBiNWMtNGU1OS05ZThjLTFkNmEyYjdjOWQwMQAAAAIoanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAABVGp1bWIAAAApanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5hY3Rpb25zLnYyAAAAASNjYm9yoWdhY3Rpb25zgqVmYWN0aW9ubGMycGEuY3JlYXRlZGR3aGVudDIwMjYtMTAtMDFUMTI6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVuRGVtbyBHZW5lcmF0b3JndmVyc2lvbmMxLjBxZGlnaXRhbFNvdXJjZVR5cGV4Rmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWFrZGVzY3JpcHRpb254HEdlbmVyYXRlZCBmcm9tIGEgdGV4dCBwcm9tcHSiZmFjdGlvbmxjMnBhLnJlc2l6ZWRkd2hlbnQyMDI2LTEwLTAxVDEyOjAwOjA1WgAAAKNqdW1iAAAAKGp1bWRjYm9yABEAEIAAAKoAOJtxA2MycGEuaGFzaC5kYXRhAAAAAHNjYm9ypWpleGNsdXNpb25zgaJlc3RhcnQYIWZsZW5ndGgZCH5kbmFtZW5qdW1iZiBtYW5pZmVzdGNhbGdmc2hhMjU2ZGhhc2hYICviiLcA3UoKWL3PF/GR0ikcOgEFd/o7e7MombIhq/TNY3BhZEAAAAHOanVtYgAAACdqdW1kYzJjbAARABCAAACqADibcQNjMnBhLmNsYWltLnYyAAAAAZ9jYm9yp2ppbnN0YW5jZUlEeCx4bXA6aWlkOjRhMWU4YzUyLTYzYTQtNGQ3ZS1iMmE4LTVmMGY0YzNkMmIxMHRjbGFpbV9nZW5lcmF0b3JfaW5mb6JkbmFtZXgbdXNlZnVsd2ViIEMyUEEgZGVtbyBidWlsZGVyZ3ZlcnNpb25jMS4waGRjOnRpdGxlaGRlbW8ucG5naWRjOmZvcm1hdGlpbWFnZS9wbmdpc2lnbmF0dXJleBlzZWxmI2p1bWJmPWMycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4KiY3VybHgqc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5hY3Rpb25zLnYyZGhhc2hYINgW3ODdlZHLJLHnwDxoe1722/EMeR02Wyp+VXb5puEyomN1cmx4KXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaGFzaC5kYXRhZGhhc2hYIOH7W2SoHuvqSI0h+C3Nu8C2GkKFnHX4uCEfjODci1AjY2FsZ2ZzaGEyNTYAAAQHanVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAAAPXY2JvctKEWQOGogEnGCGCWQHIMIIBxDCCAXagAwIBAgICIAIwBQYDK2VwME8xCzAJBgNVBAYTAkRFMSEwHwYDVQQKDBhEZW1vIENvbnRlbnQgQ3JlZGVudGlhbHMxHTAbBgNVBAMMFERlbW8gQzJQQSBJc3N1aW5nIENBMB4XDTI2MDEwMTAwMDAwMFoXDTI4MDEwMTAwMDAwMFowRjELMAkGA1UEBhMCREUxFzAVBgNVBAoMDnVzZWZ1bHdlYiBkZW1vMR4wHAYDVQQDDBVEZW1vIEdlbmVyYXRvciBTaWduZXIwKjAFBgMrZXADIQAVUtGx779XFUhpQIth3etExnfvUZEq7BfW2dUAX5PwSqN/MH0wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMkMB0GA1UdDgQWBBSYTn1Kkk36MsohIy+Oq80Zt6jD6zAfBgNVHSMEGDAWgBQvNHGU6R7zEs3a7DhtA8nt2LU5NjAFBgMrZXADQQDssPhwlqUysCX3UvFjE+33ff+3oKx5BMdW0FtxYyQ8ZhwiCSx/qPPL80v6xIh1SB4vRdNjoXFqyCkaB/89QbECWQGyMIIBrjCCAWCgAwIBAgICIAEwBQYDK2VwMEkxCzAJBgNVBAYTAkRFMSEwHwYDVQQKDBhEZW1vIENvbnRlbnQgQ3JlZGVudGlhbHMxFzAVBgNVBAMMDkRlbW8gQzJQQSBSb290MB4XDTI1MDEwMTAwMDAwMFoXDTMzMDEwMTAwMDAwMFowTzELMAkGA1UEBhMCREUxITAfBgNVBAoMGERlbW8gQ29udGVudCBDcmVkZW50aWFsczEdMBsGA1UEAwwURGVtbyBDMlBBIElzc3VpbmcgQ0EwKjAFBgMrZXADIQC8Cw+RzteUiXfpsMGQoxfktMSIt2Xmua0HBR4otcO8KaNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFC80cZTpHvMSzdrsOG0Dye3YtTk2MB8GA1UdIwQYMBaAFI52GRZENJ8nW2BGLSWPAONbz+7ZMAUGAytlcANBALFwu+tqTpjVmXB0Zz/C9OejSqV8GZbnX/Te5jT9hb/EojTClX7jCsZsBD/xOgawCvqbRrKyp+xUXcTkgXWJwQOg9lhA1KTIwAcxXA74aOG8jwYcFUjjxBBA6OzC6IG4AgxN4OS/P4jDi/nMNbvEMS3iNSanULhfMGmPMDFuYzGhPM5ADUnIylMAAAADUExURQ+KX5aeRkMAAAAMSURBVAjXY2BgYAAAAAQAASc0JwoAAAAASUVORK5CYII="
                    },
                    "useExiftool": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/C2paCredentialsInspectorResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/container-image-explorer/calculate": {
      "post": {
        "operationId": "calculateContainerImageExplorer",
        "summary": "Inspect a container image: platforms, layers, base image, root user, labels and cosign signature.",
        "description": "Reads an image straight from its registry (Docker Hub, GHCR, Quay or any OCI registry with anonymous pull): the index and per-platform manifests, layer sizes, digest, and the config blob (creation date, user, environment variable names, OCI labels such as source and revision, build history). Flags root user, likely secrets in env / build args, end-of-life base distributions, missing provenance labels and whether a cosign signature is published.\n\nMethodology:\n- Registry access follows the Docker / OCI distribution token flow: an anonymous request is answered with a WWW-Authenticate Bearer challenge, a pull-scoped token is requested from the advertised realm (auth.docker.io, ghcr.io/token, …) and the request is retried. Only public images work.\n- GET /v2/<repo>/manifests/<tag> with OCI + Docker media types; for an index / manifest list the platforms are listed and the requested platform manifest is fetched. BuildKit attestation manifests (provenance / SBOM, platform unknown/unknown) are counted. The config blob is fetched by digest and its SHA-256 is checked against the manifest.\n- Cosign signatures are looked up by cosign's tag convention (sha256-<digest>.sig) for the image digest. Signatures stored only via the OCI referrers API or Sigstore bundles are not detected, and a found signature is not cryptographically verified here.\n- Root user: config.User empty, root or 0. Secrets: env names and build-arg names (from history \"RUN |n NAME=…\") matching password/secret/token/key patterns; values are never shown.\n- Base distribution is guessed from history, labels and env text and compared with an endoflife.date snapshot (2026-10-14). This tool does NOT scan layers for vulnerable packages — that needs a scanner such as Trivy or Grype run against the image.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "container_image_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContainerImageExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted manifest + config of an illustrative Node app image (offline)",
                  "value": {
                    "manifestJson": "{\n \"schemaVersion\": 2,\n \"mediaType\": \"application/vnd.oci.image.manifest.v1+json\",\n \"config\": {\n  \"mediaType\": \"application/vnd.oci.image.config.v1+json\",\n  \"digest\": \"sha256:7db22f7fd3e9f15baca89f8609989af9e7f39dd33dc62fc1186370a7bc4c7ad8\",\n  \"size\": 1588\n },\n \"layers\": [\n  {\n   \"mediaType\": \"application/vnd.oci.image.layer.v1.tar+gzip\",\n   \"digest\": \"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n   \"size\": 50450000\n  },\n  {\n   \"mediaType\": \"application/vnd.oci.image.layer.v1.tar+gzip\",\n   \"digest\": \"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n   \"size\": 39820000\n  },\n  {\n   \"mediaType\": \"application/vnd.oci.image.layer.v1.tar+gzip\",\n   \"digest\": \"sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\",\n   \"size\": 12300000\n  }\n ]\n}",
                    "configJson": "{\"architecture\":\"amd64\",\"os\":\"linux\",\"created\":\"2024-03-12T09:41:07Z\",\"config\":{\"Env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\"NODE_VERSION=18.19.1\",\"YARN_VERSION=1.22.19\",\"NODE_ENV=production\",\"SENTRY_DSN=https://public@sentry.example/1\"],\"Cmd\":[\"node\",\"server.js\"],\"WorkingDir\":\"/app\",\"ExposedPorts\":{\"3000/tcp\":{}},\"Labels\":{\"org.opencontainers.image.source\":\"https://github.com/example/shop-api\",\"org.opencontainers.image.revision\":\"9f2c1d7e4b5a\",\"org.opencontainers.image.base.name\":\"docker.io/library/node:18-buster\"}},\"rootfs\":{\"type\":\"layers\",\"diff_ids\":[\"sha256:1111111111111111111111111111111111111111111111111111111111111111\",\"sha256:2222222222222222222222222222222222222222222222222222222222222222\",\"sha256:3333333333333333333333333333333333333333333333333333333333333333\"]},\"history\":[{\"created\":\"2024-02-13T00:00:00Z\",\"created_by\":\"# debian.sh --arch 'amd64' out/ 'buster' '@1707782400'\",\"comment\":\"debuerreotype 0.15\"},{\"created\":\"2024-02-14T00:00:00Z\",\"created_by\":\"ENV NODE_VERSION=18.19.1\",\"empty_layer\":true},{\"created\":\"2024-02-14T00:00:00Z\",\"created_by\":\"RUN /bin/sh -c set -ex && curl -fsSLO https://nodejs.org/dist/v18.19.1/node-v18.19.1-linux-x64.tar.xz && tar -xJf node-v18.19.1-linux-x64.tar.xz -C /usr/local --strip-components=1\"},{\"created\":\"2024-03-12T09:41:05Z\",\"created_by\":\"WORKDIR /app\",\"empty_layer\":true},{\"created\":\"2024-03-12T09:41:07Z\",\"created_by\":\"RUN |1 NPM_TOKEN=npm_xxxxxxxx /bin/sh -c npm ci --omit=dev # buildkit\"},{\"created\":\"2024-03-12T09:41:07Z\",\"created_by\":\"CMD [\\\"node\\\" \\\"server.js\\\"]\",\"empty_layer\":true}]}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContainerImageExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/cve-relationship-graph/calculate": {
      "post": {
        "operationId": "calculateCveRelationshipGraph",
        "summary": "One CVE or GHSA as a graph: aliases, affected packages, fixed versions, KEV status and EPSS.",
        "description": "Looks up a vulnerability in OSV.dev and maps everything connected to it: alias IDs (CVE, GHSA, distro advisories), affected packages with their vulnerable version ranges and fixed versions, fix commits, references grouped into advisories, fixes, reports and exploits, whether CISA lists it as known-exploited (KEV) and its FIRST EPSS exploitation probability.\n\nMethodology:\n- The advisory is read from OSV.dev (https://api.osv.dev/v1/vulns/{id}); CVE records there often carry no package data, so up to 3 alias records (GHSA first) are fetched and merged.\n- Version ranges are rendered from OSV events (introduced / fixed / last_affected); GIT ranges become fix-commit nodes. Fixed versions are sorted numerically.\n- References are grouped by OSV type, refined with URL patterns: commits and pull requests = fix; NVD, GHSA, vendor PSIRT pages = advisory; issue trackers and mailing lists = report; Exploit-DB, Packet Storm and PoC repositories = exploit.\n- KEV membership is checked against the full CISA Known Exploited Vulnerabilities JSON feed; EPSS (probability of exploitation activity in the next 30 days) comes from api.first.org.\n- Severity is the source database rating when present, otherwise derived from the CVSS v3.x base score computed from the vector (FIRST formulas).",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "cve_relationship_graph",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CveRelationshipGraphInput"
              },
              "examples": {
                "example1": {
                  "summary": "Log4Shell from pasted OSV + KEV + EPSS (offline)",
                  "value": {
                    "osvJson": "{\n \"schema_version\": \"1.9.0\",\n \"id\": \"GHSA-jfh8-c2jp-5v3q\",\n \"modified\": \"2025-10-22T19:37:02.616807Z\",\n \"published\": \"2021-12-10T00:40:56Z\",\n \"aliases\": [\n  \"CVE-2021-44228\"\n ],\n \"summary\": \"Remote code injection in Log4j\",\n \"details\": \"# Summary\\n\\nLog4j versions prior to 2.16.0 are subject to a remote code execution vulnerability via the ldap JNDI parser.\\n\\u2026(trimmed)\",\n \"severity\": [\n  {\n   \"type\": \"CVSS_V3\",\n   \"score\": \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H/E:H\"\n  }\n ],\n \"affected\": [\n  {\n   \"package\": {\n    \"name\": \"org.apache.logging.log4j:log4j-core\",\n    \"ecosystem\": \"Maven\",\n    \"purl\": \"pkg:maven/org.apache.logging.log4j/log4j-core\"\n   },\n   \"ranges\": [\n    {\n     \"type\": \"ECOSYSTEM\",\n     \"events\": [\n      {\n       \"introduced\": \"2.13.0\"\n      },\n      {\n       \"fixed\": \"2.15.0\"\n      }\n     ]\n    }\n   ]\n  },\n  {\n   \"package\": {\n    \"name\": \"org.apache.logging.log4j:log4j-core\",\n    \"ecosystem\": \"Maven\",\n    \"purl\": \"pkg:maven/org.apache.logging.log4j/log4j-core\"\n   },\n   \"ranges\": [\n    {\n     \"type\": \"ECOSYSTEM\",\n     \"events\": [\n      {\n       \"introduced\": \"2.0-beta9\"\n      },\n      {\n       \"fixed\": \"2.3.1\"\n      }\n     ]\n    }\n   ]\n  },\n  {\n   \"package\": {\n    \"name\": \"org.apache.logging.log4j:log4j-core\",\n    \"ecosystem\": \"Maven\",\n    \"purl\": \"pkg:maven/org.apache.logging.log4j/log4j-core\"\n   },\n   \"ranges\": [\n    {\n     \"type\": \"ECOSYSTEM\",\n     \"events\": [\n      {\n       \"introduced\": \"2.4\"\n      },\n      {\n       \"fixed\": \"2.12.2\"\n      }\n     ]\n    }\n   ]\n  },\n  {\n   \"package\": {\n    \"name\": \"org.ops4j.pax.logging:pax-logging-log4j2\",\n    \"ecosystem\": \"Maven\",\n    \"purl\": \"pkg:maven/org.ops4j.pax.logging/pax-logging-log4j2\"\n   },\n   \"ranges\": [\n    {\n     \"type\": \"ECOSYSTEM\",\n     \"events\": [\n      {\n       \"introduced\": \"1.8.0\"\n      },\n      {\n       \"fixed\": \"1.9.2\"\n      }\n     ]\n    }\n   ]\n  },\n  {\n   \"package\": {\n    \"name\": \"org.ops4j.pax.logging:pax-logging-log4j2\",\n    \"ecosystem\": \"Maven\",\n    \"purl\": \"pkg:maven/org.ops4j.pax.logging/pax-logging-log4j2\"\n   },\n   \"ranges\": [\n    {\n     \"type\": \"ECOSYSTEM\",\n     \"events\": [\n      {\n       \"introduced\": \"1.10.0\"\n      },\n      {\n       \"fixed\": \"1.10.8\"\n      }\n     ]\n    }\n   ]\n  }\n ],\n \"references\": [\n  {\n   \"type\": \"ADVISORY\",\n   \"url\": \"https://nvd.nist.gov/vuln/detail/CVE-2021-44228\"\n  },\n  {\n   \"type\": \"WEB\",\n   \"url\": \"https://github.com/apache/logging-log4j2/pull/608\"\n  },\n  {\n   \"type\": \"WEB\",\n   \"url\": \"https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2021-44228\"\n  },\n  {\n   \"type\": \"WEB\",\n   \"url\": \"https://www.debian.org/security/2021/dsa-5020\"\n  },\n  {\n   \"type\": \"WEB\",\n   \"url\": \"https://www.kb.cert.org/vuls/id/930724\"\n  },\n  {\n   \"type\": \"ADVISORY\",\n   \"url\": \"https://github.com/advisories/GHSA-7rjr-3q55-vv33\"\n  },\n  {\n   \"type\": \"PACKAGE\",\n   \"url\": \"https://github.com/apache/logging-log4j2\"\n  },\n  {\n   \"type\": \"WEB\",\n   \"url\": \"https://github.com/tangxiaofeng7/apache-log4j-poc\"\n  },\n  {\n   \"type\": \"WEB\",\n   \"url\": \"https://issues.apache.org/jira/browse/LOG4J2-3198\"\n  },\n  {\n   \"type\": \"WEB\",\n   \"url\": \"https://logging.apache.org/log4j/2.x/security.html\"\n  },\n  {\n   \"type\": \"WEB\",\n   \"url\": \"http://packetstormsecurity.com/files/165225/Apache-Log4j2-2.14.1-Remote-Code-Execution.html\"\n  },\n  {\n   \"type\": \"WEB\",\n   \"url\": \"http://www.openwall.com/lists/oss-security/2021/12/10/1\"\n  }\n ],\n \"database_specific\": {\n  \"cwe_ids\": [\n   \"CWE-20\",\n   \"CWE-400\",\n   \"CWE-502\",\n   \"CWE-917\"\n  ],\n  \"severity\": \"CRITICAL\",\n  \"github_reviewed\": true,\n  \"nvd_published_at\": \"2021-12-10T10:15:00Z\"\n }\n}",
                    "kevJson": "{\n \"cveID\": \"CVE-2021-44228\",\n \"vendorProject\": \"Apache\",\n \"product\": \"Log4j2\",\n \"vulnerabilityName\": \"Apache Log4j2 Remote Code Execution Vulnerability\",\n \"dateAdded\": \"2021-12-10\",\n \"shortDescription\": \"Apache Log4j2 contains a vulnerability where JNDI features do not protect against attacker-controlled JNDI-related endpoints, allowing for remote code execution.\",\n \"requiredAction\": \"For all affected software assets for which updates exist, the only acceptable remediation actions are: 1) Apply updates; OR 2) remove affected assets from agency networks. Temporary mitigations using one of the measures provided at https://www.cisa.gov/uscert/ed-22-02-apache-log4j-recommended-mitigation-measures are only acceptable until updates are available.\",\n \"dueDate\": \"2021-12-24\",\n \"knownRansomwareCampaignUse\": \"Known\",\n \"forensicTriage\": \"No\",\n \"notes\": \"https://nvd.nist.gov/vuln/detail/CVE-2021-44228\",\n \"cwes\": [\n  \"CWE-20\",\n  \"CWE-400\",\n  \"CWE-502\"\n ]\n}",
                    "epssJson": "{\"status\": \"OK\", \"status-code\": 200, \"version\": \"1.0\", \"access\": \"public\", \"total\": 1, \"offset\": 0, \"limit\": 100, \"data\": [{\"cve\": \"CVE-2021-44228\", \"epss\": \"0.999990000\", \"percentile\": \"1.000000000\", \"date\": \"2026-10-13\"}]}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CveRelationshipGraphResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/dependency-vulnerability-explorer/calculate": {
      "post": {
        "operationId": "calculateDependencyVulnerabilityExplorer",
        "summary": "Known vulnerabilities in your dependencies, and the version that fixes each one.",
        "description": "Reads npm (package.json, package-lock.json), Python (requirements.txt), Go (go.mod), Rust (Cargo.lock) and PHP (composer.lock) manifests, or lines like npm:lodash@4.17.20, and checks every exact package version against OSV.dev, the open vulnerability database that aggregates GitHub Security Advisories, PyPA, RustSec, Go and more. For each finding: severity, aliases (CVE/GHSA), and the nearest fixed version. You can also look up a single advisory ID.\n\nMethodology:\n- Exact versions come from lockfiles and == pins; for version ranges (^1.2.0, >=2.0) the lower bound is checked and the package is marked exact=false.\n- Each package@version is sent to the OSV.dev querybatch API; details for up to 60 distinct advisories are fetched from /v1/vulns/{id}.\n- Severity is the advisory database rating (GHSA: LOW/MODERATE/HIGH/CRITICAL); the CVSS vector is shown when published. fixedIn = the lowest fixed release above your version for that package; upgradeTo = the highest of those across a package's advisories.\n- Advisories are matched by OSV's version ranges; withdrawn advisories are not returned by OSV.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "dependency_vulnerability_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DependencyVulnerabilityExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Two outdated packages",
                  "value": {
                    "manifest": "npm:lodash@4.17.20\npypi:requests@2.19.0"
                  }
                },
                "example2": {
                  "summary": "Look up an advisory",
                  "value": {
                    "vulnId": "GHSA-35jh-r3h4-6jhm"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DependencyVulnerabilityExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/oauth-permission-explorer/calculate": {
      "post": {
        "operationId": "calculateOauthPermissionExplorer",
        "summary": "What an OAuth consent request really allows: scopes, risky combinations and flow problems.",
        "description": "Paste OAuth scopes or a full authorization URL for Google, GitHub, Microsoft Graph, Slack or generic OpenID Connect. Every scope is explained from the provider's official documentation with a sensitivity rating; risky combinations (read + send mail, offline access to files, push code + delete repositories, CI workflow edits) and unsafe request settings (implicit flow, missing PKCE or state, plain-HTTP redirect) are flagged. Unknown scopes are listed, never guessed.\n\nMethodology:\n- Input is split on spaces/commas; a full URL is parsed for scope, user_scope (Slack), client_id, redirect_uri, response_type, prompt, access_type, code_challenge(_method), state and nonce.\n- Provider = your choice, else the authorization host (accounts.google.com, github.com, login.microsoftonline.com, slack.com), else the provider most scopes uniquely belong to. Microsoft Graph scopes match with or without the https://graph.microsoft.com/ prefix, case-insensitively.\n- Scope descriptions come from a curated dataset copied from each provider's official scope reference (URL per scope). Only scopes found on those pages are included; anything else is reported as unknown.\n- Sensitivity (low/medium/high/critical) is an editorial rating of what a leaked token could do; Google's own Non-sensitive/Sensitive/Restricted class and Microsoft's admin-consent flag are shown where documented.\n- Risky combinations are rules over capabilities (e.g. mail.read + mail.send, repo.write + repo.delete, offline + files.read). Flow checks follow RFC 9700 (OAuth 2.0 Security BCP) and RFC 7636 (PKCE).",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "oauth_permission_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OauthPermissionExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Google consent URL with Gmail + offline access",
                  "value": {
                    "request": "https://accounts.google.com/o/oauth2/v2/auth?client_id=123.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Fapp.example%2Fcb&response_type=code&access_type=offline&prompt=consent&scope=openid%20email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.send&state=xyz",
                    "provider": "auto"
                  }
                },
                "example2": {
                  "summary": "GitHub token scopes",
                  "value": {
                    "request": "repo delete_repo workflow read:org",
                    "provider": "github"
                  }
                },
                "example3": {
                  "summary": "Microsoft Graph implicit flow",
                  "value": {
                    "request": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=abc&response_type=token&redirect_uri=http%3A%2F%2Fapp.example%2Fcb&scope=offline_access%20Mail.Send%20Files.ReadWrite.All%20User.Read",
                    "provider": "auto"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OauthPermissionExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/open-source-trust-explorer/calculate": {
      "post": {
        "operationId": "calculateOpenSourceTrustExplorer",
        "summary": "Is this open-source project maintained and trustworthy? Scorecard, activity and provenance.",
        "description": "For a GitHub repository or a package (npm, PyPI, Go, Maven, Cargo, NuGet, RubyGems) combines deps.dev data (versions, licences, advisories, SLSA provenance, OpenSSF Scorecard) with GitHub activity (last push, releases, contributors, archived status) into an explained maintenance score and a list of trust signals, including whether releases are signed.\n\nMethodology:\n- Packages: deps.dev /v3/systems/{system}/packages/{name} (all versions, default version, deprecation) and /versions/{version} (licences, advisories, SLSA provenance, linked source repository).\n- Repository: deps.dev /v3/projects/{github.com/owner/repo} (stars, licence, OpenSSF Scorecard checks) and the unauthenticated GitHub REST API (repo, latest releases, contributor count via the Link header of ?per_page=1&anon=1). GitHub allows 60 unauthenticated requests per hour per IP; when rate-limited the score uses deps.dev data only.\n- Maintenance score = sum of available components ÷ their maximum × 100: recent commits (25), recent release (20), Scorecard Maintained (15), contributors (15), Scorecard Code-Review (10), Security-Policy (5), licence (10). Missing components are left out rather than counted as zero; archived repositories are capped at 10.\n- Release signing: the Scorecard \"Signed-Releases\" check (signatures or provenance attached to the last releases; -1 = no releases inspected) plus deps.dev's record of SLSA provenance / attestations for the package version.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "open_source_trust_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenSourceTrustExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "expressjs/express from pasted deps.dev + GitHub data (offline)",
                  "value": {
                    "depsdevProject": "{\"projectKey\": {\"id\": \"github.com/expressjs/express\"}, \"openIssuesCount\": 236, \"starsCount\": 69643, \"forksCount\": 25224, \"license\": \"MIT\", \"description\": \"Fast, unopinionated, minimalist web framework for node.\", \"homepage\": \"https://expressjs.com\", \"scorecard\": {\"date\": \"2026-08-24T00:00:00Z\", \"repository\": {\"name\": \"github.com/expressjs/express\", \"commit\": \"023767fe9872e029271df1418f73401bff20ff40\"}, \"scorecard\": {\"version\": \"v5.5.1-0.20260815060127-d1fab88f5463\", \"commit\": \"d1fab88f54636ff366076edfc5c239f97b3c8e66\"}, \"checks\": [{\"name\": \"Maintained\", \"documentation\": {\"shortDescription\": \"Determines if the project is \\\"actively maintained\\\".\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#maintained\"}, \"score\": 10, \"reason\": \"17 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10\", \"details\": []}, {\"name\": \"Code-Review\", \"documentation\": {\"shortDescription\": \"Determines if the project requires human code review before pull requests (aka merge requests) are merged.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#code-review\"}, \"score\": 10, \"reason\": \"all changesets reviewed\", \"details\": []}, {\"name\": \"Packaging\", \"documentation\": {\"shortDescription\": \"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#packaging\"}, \"score\": -1, \"reason\": \"packaging workflow not detected\", \"details\": [\"Warn: no GitHub/GitLab publishing workflow detected.\"]}, {\"name\": \"Dangerous-Workflow\", \"documentation\": {\"shortDescription\": \"Determines if the project's GitHub Action workflows avoid dangerous patterns.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#dangerous-workflow\"}, \"score\": 10, \"reason\": \"no dangerous workflow patterns detected\", \"details\": []}, {\"name\": \"Binary-Artifacts\", \"documentation\": {\"shortDescription\": \"Determines if the project has generated executable (binary) artifacts in the source repository.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#binary-artifacts\"}, \"score\": 10, \"reason\": \"no binaries found in the repo\", \"details\": []}, {\"name\": \"Pinned-Dependencies\", \"documentation\": {\"shortDescription\": \"Determines if the project has declared and pinned the dependencies of its build process.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#pinned-dependencies\"}, \"score\": 6, \"reason\": \"dependency not pinned by hash detected -- score normalized to 6\", \"details\": [\"Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:40\", \"Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:72\", \"Warn: npmCommand not pinned by hash: .github/workflows/legacy.yml:56\", \"Info:  18 out of  18 GitHub-owned GitHubAction dependencies pinned\", \"Info:   3 out of   3 third-party GitHubAction dependencies pinned\", \"Info:   0 out of   3 npmCommand dependencies pinned\"]}, {\"name\": \"CII-Best-Practices\", \"documentation\": {\"shortDescription\": \"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#cii-best-practices\"}, \"score\": 0, \"reason\": \"no effort to earn an OpenSSF best practices badge detected\", \"details\": []}, {\"name\": \"Token-Permissions\", \"documentation\": {\"shortDescription\": \"Determines if the project's workflows follow the principle of least privilege.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#token-permissions\"}, \"score\": 10, \"reason\": \"GitHub workflow tokens follow principle of least privilege\", \"details\": [\"Info: jobLevel 'contents' permission set to 'read': .github/workflows/ci.yml:93\", \"Warn: jobLevel 'checks' permission set to 'write': .github/workflows/ci.yml:94\", \"Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:32\", \"Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:33\", \"Info: jobLevel 'contents' permission set to 'read': .github/workflows/legacy.yml:77\", \"Warn: jobLevel 'checks' permission set to 'write': .github/workflows/legacy.yml:78\", \"Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:17\", \"Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:25\", \"Info: topLevel 'contents' permission set to 'read': .github/workflows/legacy.yml:19\", \"Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:18\"]}, {\"name\": \"License\", \"documentation\": {\"shortDescription\": \"Determines if the project has defined a license.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#license\"}, \"score\": 10, \"reason\": \"license file detected\", \"details\": [\"Info: project has a license file: LICENSE:0\", \"Info: FSF or OSI recognized license: MIT License: LICENSE:0\"]}, {\"name\": \"Fuzzing\", \"documentation\": {\"shortDescription\": \"Determines if the project uses fuzzing.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#fuzzing\"}, \"score\": 0, \"reason\": \"project is not fuzzed\", \"details\": [\"Warn: no fuzzer integrations found\"]}, {\"name\": \"Signed-Releases\", \"documentation\": {\"shortDescription\": \"Determines if the project cryptographically signs release artifacts.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#signed-releases\"}, \"score\": -1, \"reason\": \"no releases found\", \"details\": []}, {\"name\": \"Security-Policy\", \"documentation\": {\"shortDescription\": \"Determines if the project has published a security policy.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#security-policy\"}, \"score\": 10, \"reason\": \"security policy file detected\", \"details\": [\"Info: security policy file detected: github.com/expressjs/.github/SECURITY.md:1\", \"Info: Found linked content: github.com/expressjs/.github/SECURITY.md:1\", \"Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/expressjs/.github/SECURITY.md:1\", \"Info: Found text in security policy: github.com/expressjs/.github/SECURITY.md:1\"]}, {\"name\": \"Branch-Protection\", \"documentation\": {\"shortDescription\": \"Determines if the default and release branches are protected with GitHub's branch protection settings.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#branch-protection\"}, \"score\": -1, \"reason\": \"internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md\", \"details\": []}, {\"name\": \"SAST\", \"documentation\": {\"shortDescription\": \"Determines if the project uses static code analysis.\", \"url\": \"https://github.com/ossf/scorecard/blob/d1fab88f54636ff366076edfc5c239f97b3c8e66/docs/checks.md#sast\"}, \"score\": 10, \"reason\": \"SAST tool is run on all commits\", \"details\": [\"Info: SAST configuration detected: CodeQL\", \"Info: all commits (30) are checked with a SAST tool\"]}], \"overallScore\": 8.5, \"metadata\": []}}",
                    "githubRepo": "{\n \"full_name\": \"expressjs/express\",\n \"html_url\": \"https://github.com/expressjs/express\",\n \"description\": \"Fast, unopinionated, minimalist web framework for node.\",\n \"stargazers_count\": 69651,\n \"forks_count\": 25228,\n \"open_issues_count\": 236,\n \"pushed_at\": \"2026-10-09T16:24:39Z\",\n \"created_at\": \"2009-06-26T18:56:01Z\",\n \"archived\": false,\n \"disabled\": false,\n \"fork\": false,\n \"default_branch\": \"master\",\n \"license\": {\n  \"key\": \"mit\",\n  \"name\": \"MIT License\",\n  \"spdx_id\": \"MIT\"\n },\n \"has_issues\": true\n}",
                    "githubReleases": "[{\"tag_name\":\"v5.3.0\",\"published_at\":\"2026-10-09T12:50:31Z\",\"draft\":false,\"prerelease\":false},{\"tag_name\":\"v4.22.2\",\"published_at\":\"2026-05-11T18:54:02Z\",\"draft\":false,\"prerelease\":false},{\"tag_name\":\"v5.2.1\",\"published_at\":\"2025-12-01T20:54:44Z\",\"draft\":false,\"prerelease\":false}]",
                    "contributorsCount": 394
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenSourceTrustExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/package-ecosystem-graph/calculate": {
      "post": {
        "operationId": "calculatePackageEcosystemGraph",
        "summary": "Who depends on what: resolved dependency graph, duplicates and the blast radius of breaking changes.",
        "description": "Shows the resolved dependency graph of an npm, PyPI, Cargo or Maven package version from deps.dev (Open Source Insights): direct and transitive dependencies, depth, packages pulled in at several versions, which dependencies the most other packages in the tree rely on (their breaking changes hit hardest), how many published packages depend on this one, and which direct dependencies have a newer major version. Paste a deps.dev graph JSON to work offline.\n\nMethodology:\n- Graph: deps.dev v3 GetDependencies (GET api.deps.dev/v3/systems/{system}/packages/{name}/versions/{version}:dependencies), i.e. the dependency tree deps.dev resolved for that release on Linux; your lockfile can resolve differently. Blank version = the package's default version from GetPackage.\n- Depth = shortest path from the package (breadth-first). Duplicates = the same package name resolved at more than one version.\n- Blast radius inside the tree: for every dependency, the number of other packages in this graph that depend on it directly or transitively, and which of your direct dependencies pull it in. A breaking release of a package high in this list affects the most code paths.\n- Dependents (ecosystem-wide blast radius): deps.dev v3alpha GetDependents counts (direct + indirect dependents of this exact version). v3alpha is an unstable API; when it fails the count is omitted.\n- Major updates: for up to 20 direct dependencies the default version is fetched from deps.dev; a higher leading version number than the resolved one is a semver-major (potentially breaking) upgrade.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "package_ecosystem_graph",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PackageEcosystemGraphInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted deps.dev graph",
                  "value": {
                    "system": "npm",
                    "graphJson": "{\"nodes\":[{\"versionKey\":{\"system\":\"NPM\",\"name\":\"my-app\",\"version\":\"1.0.0\"},\"bundled\":false,\"relation\":\"SELF\",\"errors\":[]},{\"versionKey\":{\"system\":\"NPM\",\"name\":\"express\",\"version\":\"4.19.2\"},\"bundled\":false,\"relation\":\"DIRECT\",\"errors\":[]},{\"versionKey\":{\"system\":\"NPM\",\"name\":\"debug\",\"version\":\"2.6.9\"},\"bundled\":false,\"relation\":\"INDIRECT\",\"errors\":[]},{\"versionKey\":{\"system\":\"NPM\",\"name\":\"ms\",\"version\":\"2.0.0\"},\"bundled\":false,\"relation\":\"INDIRECT\",\"errors\":[]},{\"versionKey\":{\"system\":\"NPM\",\"name\":\"body-parser\",\"version\":\"1.20.2\"},\"bundled\":false,\"relation\":\"INDIRECT\",\"errors\":[]},{\"versionKey\":{\"system\":\"NPM\",\"name\":\"ms\",\"version\":\"2.1.3\"},\"bundled\":false,\"relation\":\"INDIRECT\",\"errors\":[]},{\"versionKey\":{\"system\":\"NPM\",\"name\":\"chalk\",\"version\":\"5.3.0\"},\"bundled\":false,\"relation\":\"DIRECT\",\"errors\":[]}],\"edges\":[{\"fromNode\":0,\"toNode\":1,\"requirement\":\"^4.19.2\"},{\"fromNode\":0,\"toNode\":6,\"requirement\":\"^5.3.0\"},{\"fromNode\":1,\"toNode\":2,\"requirement\":\"2.6.9\"},{\"fromNode\":1,\"toNode\":4,\"requirement\":\"1.20.2\"},{\"fromNode\":4,\"toNode\":2,\"requirement\":\"2.6.9\"},{\"fromNode\":2,\"toNode\":3,\"requirement\":\"2.0.0\"},{\"fromNode\":1,\"toNode\":5,\"requirement\":\"2.1.3\"}],\"error\":\"\"}",
                    "includeDependents": false,
                    "checkMajorUpdates": false,
                    "maxNodes": 40
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PackageEcosystemGraphResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/passkey-webauthn-tester/calculate": {
      "post": {
        "operationId": "calculatePasskeyWebauthnTester",
        "summary": "Test passkeys in your browser and decode WebAuthn responses: flags, AAGUID, signatures.",
        "description": "Checks which passkey features your browser offers, runs a real passkey registration and sign-in against this site, and decodes the result: authenticator flags (user present/verified, backup), AAGUID, key algorithm and transports. Paste clientDataJSON, attestationObject or authenticatorData to decode and verify them on the server.\n\nMethodology:\n- In the browser (JavaScript on): feature detection of PublicKeyCredential, isUserVerifyingPlatformAuthenticatorAvailable(), isConditionalMediationAvailable() and getClientCapabilities(); then navigator.credentials.create() and get() with this site as relying party (rp.id = the current host) and random challenges generated in the browser. Nothing is sent to or stored on the server; the browser verifies the sign-in signature with WebCrypto.\n- clientDataJSON is decoded and checked: type (webauthn.create / webauthn.get), challenge, origin and crossOrigin. The RP ID hash in the authenticator data is compared with SHA-256 of the expected RP ID (or of the origin host).\n- Authenticator data (WebAuthn §6.1): RP ID hash, flags UP/UV/BE/BS/AT/ED, signature counter, and, at registration, the AAGUID, credential ID and COSE public key (decoded with a strict CBOR decoder). Well-known AAGUIDs are named from a small bundled list.\n- Attestation: \"none\" carries no statement. \"packed\" self-attestation (no certificate) is verified with the credential key; \"packed\" with an x5c certificate is verified with the certificate key, but the certificate chain is NOT validated against FIDO Metadata Service roots, so it proves nothing about the authenticator model. Other formats (tpm, android-key, apple, fido-u2f, …) are decoded but not verified.\n- Sign-in: the signature over authenticatorData ‖ SHA-256(clientDataJSON) is verified when you also paste the credential public key (COSE, base64url).\n\nThe browser test creates a real passkey for this site on your device or password manager; delete it there afterwards (\"usefulweb.site passkey test\"). This tool does not validate attestation certificate chains.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "passkey_webauthn_tester",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PasskeyWebauthnTesterInput"
              },
              "examples": {
                "example1": {
                  "summary": "Registration with packed self-attestation (synthetic software key)",
                  "value": {
                    "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiZTR0TnZzM0NtWk1SWlpqWVlwZjBSUFlGVjhETUJ6Ym0tTmRncXpuNktYVSIsIm9yaWdpbiI6Imh0dHBzOi8vdXNlZnVsd2ViLnNpdGUiLCJjcm9zc09yaWdpbiI6ZmFsc2V9",
                    "attestationObject": "o2NmbXRmcGFja2VkZ2F0dFN0bXSiY2FsZyZjc2lnWEgwRgIhAMY6wBkBpgg_WmvsahWqQpBuowRNNK9tLL6JjpdeWSFdAiEAye9k55Dyc3DyQQbcPVymc9KVP2ZvwaMcJjzzkIQ7CINoYXV0aERhdGFYlOx_npoPyQloSAHCywQcKoGnucq5KZN6JMYsOWZ9pvo0XQAAAAAAAAAAAAAAAAAAAAAAAAAAABC5eSMrhmCORJPJXUoBgVhOpQECAyYgASFYIObX00WVuw2Lu-D-Hln9Y2VEHPDKJQ4oXDXweSHYAgjjIlggyHkfre47j_wYetb2RK4y5fmMS0F-tNhrrrGPBjexWKg",
                    "expectedChallenge": "e4tNvs3CmZMRZZjYYpf0RPYFV8DMBzbm-Ndgqzn6KXU",
                    "expectedOrigin": "https://usefulweb.site",
                    "expectedRpId": "usefulweb.site"
                  }
                },
                "example2": {
                  "summary": "Sign-in (assertion) with signature check",
                  "value": {
                    "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiZmg4RC1DV2k0V2RqeEJsUzAwSEg5NVNCd0dYeXM4LWN0UDVfV1AyOTE5ZyIsIm9yaWdpbiI6Imh0dHBzOi8vdXNlZnVsd2ViLnNpdGUiLCJjcm9zc09yaWdpbiI6ZmFsc2V9",
                    "authenticatorData": "7H-emg_JCWhIAcLLBBwqgae5yrkpk3okxiw5Zn2m-jQdAAAAAA",
                    "signature": "MEUCIE1YxT6aNlpXBvrL_b-bQrAYIcoVRt7zxR-ppbCEaBHNAiEAoxx0AH7AwSXhWhlobPkKmOtcnaQ8l2bbKaRAcicCycA",
                    "publicKey": "pQECAyYgASFYIObX00WVuw2Lu-D-Hln9Y2VEHPDKJQ4oXDXweSHYAgjjIlggyHkfre47j_wYetb2RK4y5fmMS0F-tNhrrrGPBjexWKg",
                    "expectedChallenge": "fh8D-CWi4WdjxBlS00HH95SBwGXys8-ctP5_WP2919g",
                    "expectedOrigin": "https://usefulweb.site"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PasskeyWebauthnTesterResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/sbom-explorer/calculate": {
      "post": {
        "operationId": "calculateSbomExplorer",
        "summary": "Open a CycloneDX or SPDX SBOM: components, licences, dependency tree and known vulnerabilities.",
        "description": "Upload or paste a CycloneDX JSON or SPDX 2.x JSON software bill of materials. Lists every component with version, purl and type, classifies licences (permissive, weak / strong / network copyleft, unknown), draws the dependency tree when the SBOM records one, and checks every versioned purl against OSV.dev for known vulnerabilities.\n\nMethodology:\n- CycloneDX: components (including nested ones), metadata.component as root and the dependencies graph. SPDX 2.x: packages, purls from externalRefs, licenseConcluded (else licenseDeclared) and DEPENDS_ON / *_DEPENDENCY_OF / CONTAINS relationships.\n- Licences are classified from SPDX ids and expressions: for \"A OR B\" the more permissive option counts, for \"A AND B\" the more restrictive. NOASSERTION, missing and LicenseRef-* licences are reported as unknown. This flags review needs; it is not legal advice.\n- Dependency depth is the shortest path from the root component (breadth-first); components not reachable from the root are listed as unattached.\n- Vulnerabilities: every versioned purl (qualifiers stripped) is sent to the OSV.dev querybatch API; up to 50 advisories are expanded via /v1/vulns/{id} for severity and the nearest fixed version. Components without a purl cannot be checked.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "sbom_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SbomExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "CycloneDX app SBOM, licences + tree only (offline)",
                  "value": {
                    "sbom": "{\n \"bomFormat\": \"CycloneDX\",\n \"specVersion\": \"1.5\",\n \"version\": 1,\n \"metadata\": {\n  \"component\": {\n   \"type\": \"application\",\n   \"bom-ref\": \"app\",\n   \"name\": \"demo-web-app\",\n   \"version\": \"1.0.0\"\n  }\n },\n \"components\": [\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/express@4.17.1\",\n   \"name\": \"express\",\n   \"version\": \"4.17.1\",\n   \"purl\": \"pkg:npm/express@4.17.1\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"MIT\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/lodash@4.17.20\",\n   \"name\": \"lodash\",\n   \"version\": \"4.17.20\",\n   \"purl\": \"pkg:npm/lodash@4.17.20\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"MIT\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/body-parser@1.19.0\",\n   \"name\": \"body-parser\",\n   \"version\": \"1.19.0\",\n   \"purl\": \"pkg:npm/body-parser@1.19.0\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"MIT\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/node-forge@0.10.0\",\n   \"name\": \"node-forge\",\n   \"version\": \"0.10.0\",\n   \"purl\": \"pkg:npm/node-forge@0.10.0\",\n   \"licenses\": [\n    {\n     \"expression\": \"(BSD-3-Clause OR GPL-2.0)\"\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/sharp@0.32.0\",\n   \"name\": \"sharp\",\n   \"version\": \"0.32.0\",\n   \"purl\": \"pkg:npm/sharp@0.32.0\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"Apache-2.0\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/%40demo/native-image-lib@8.14.2\",\n   \"name\": \"@demo/native-image-lib\",\n   \"version\": \"8.14.2\",\n   \"purl\": \"pkg:npm/%40demo/native-image-lib@8.14.2\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"LGPL-2.1-or-later\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/internal-utils@2.0.0\",\n   \"name\": \"internal-utils\",\n   \"version\": \"2.0.0\",\n   \"purl\": \"pkg:npm/internal-utils@2.0.0\"\n  }\n ],\n \"dependencies\": [\n  {\n   \"ref\": \"app\",\n   \"dependsOn\": [\n    \"pkg:npm/express@4.17.1\",\n    \"pkg:npm/lodash@4.17.20\",\n    \"pkg:npm/sharp@0.32.0\",\n    \"pkg:npm/internal-utils@2.0.0\"\n   ]\n  },\n  {\n   \"ref\": \"pkg:npm/express@4.17.1\",\n   \"dependsOn\": [\n    \"pkg:npm/body-parser@1.19.0\"\n   ]\n  },\n  {\n   \"ref\": \"pkg:npm/sharp@0.32.0\",\n   \"dependsOn\": [\n    \"pkg:npm/%40demo/native-image-lib@8.14.2\"\n   ]\n  },\n  {\n   \"ref\": \"pkg:npm/internal-utils@2.0.0\",\n   \"dependsOn\": [\n    \"pkg:npm/node-forge@0.10.0\"\n   ]\n  }\n ]\n}",
                    "checkVulnerabilities": false
                  }
                },
                "example2": {
                  "summary": "SPDX 2.3 Python service (offline)",
                  "value": {
                    "sbom": "{\n \"spdxVersion\": \"SPDX-2.3\",\n \"dataLicense\": \"CC0-1.0\",\n \"SPDXID\": \"SPDXRef-DOCUMENT\",\n \"name\": \"demo-python-service\",\n \"documentNamespace\": \"https://example.com/spdx/demo-python-service-1.0\",\n \"creationInfo\": {\n  \"created\": \"2026-10-01T00:00:00Z\",\n  \"creators\": [\n   \"Tool: example\"\n  ]\n },\n \"packages\": [\n  {\n   \"SPDXID\": \"SPDXRef-root\",\n   \"name\": \"demo-python-service\",\n   \"versionInfo\": \"1.0\",\n   \"primaryPackagePurpose\": \"APPLICATION\",\n   \"licenseConcluded\": \"NOASSERTION\",\n   \"licenseDeclared\": \"NOASSERTION\"\n  },\n  {\n   \"SPDXID\": \"SPDXRef-requests\",\n   \"name\": \"requests\",\n   \"versionInfo\": \"2.19.0\",\n   \"licenseConcluded\": \"Apache-2.0\",\n   \"externalRefs\": [\n    {\n     \"referenceCategory\": \"PACKAGE-MANAGER\",\n     \"referenceType\": \"purl\",\n     \"referenceLocator\": \"pkg:pypi/requests@2.19.0\"\n    }\n   ]\n  },\n  {\n   \"SPDXID\": \"SPDXRef-urllib3\",\n   \"name\": \"urllib3\",\n   \"versionInfo\": \"1.23\",\n   \"licenseConcluded\": \"MIT\",\n   \"externalRefs\": [\n    {\n     \"referenceCategory\": \"PACKAGE-MANAGER\",\n     \"referenceType\": \"purl\",\n     \"referenceLocator\": \"pkg:pypi/urllib3@1.23\"\n    }\n   ]\n  },\n  {\n   \"SPDXID\": \"SPDXRef-psycopg2\",\n   \"name\": \"psycopg2\",\n   \"versionInfo\": \"2.9.9\",\n   \"licenseDeclared\": \"LGPL-3.0-or-later\",\n   \"externalRefs\": [\n    {\n     \"referenceCategory\": \"PACKAGE-MANAGER\",\n     \"referenceType\": \"purl\",\n     \"referenceLocator\": \"pkg:pypi/psycopg2@2.9.9\"\n    }\n   ]\n  }\n ],\n \"relationships\": [\n  {\n   \"spdxElementId\": \"SPDXRef-DOCUMENT\",\n   \"relationshipType\": \"DESCRIBES\",\n   \"relatedSpdxElement\": \"SPDXRef-root\"\n  },\n  {\n   \"spdxElementId\": \"SPDXRef-root\",\n   \"relationshipType\": \"DEPENDS_ON\",\n   \"relatedSpdxElement\": \"SPDXRef-requests\"\n  },\n  {\n   \"spdxElementId\": \"SPDXRef-root\",\n   \"relationshipType\": \"DEPENDS_ON\",\n   \"relatedSpdxElement\": \"SPDXRef-psycopg2\"\n  },\n  {\n   \"spdxElementId\": \"SPDXRef-urllib3\",\n   \"relationshipType\": \"DEPENDENCY_OF\",\n   \"relatedSpdxElement\": \"SPDXRef-requests\"\n  }\n ]\n}",
                    "checkVulnerabilities": false
                  }
                },
                "example3": {
                  "summary": "CycloneDX with OSV vulnerability check",
                  "value": {
                    "sbom": "{\n \"bomFormat\": \"CycloneDX\",\n \"specVersion\": \"1.5\",\n \"version\": 1,\n \"metadata\": {\n  \"component\": {\n   \"type\": \"application\",\n   \"bom-ref\": \"app\",\n   \"name\": \"demo-web-app\",\n   \"version\": \"1.0.0\"\n  }\n },\n \"components\": [\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/express@4.17.1\",\n   \"name\": \"express\",\n   \"version\": \"4.17.1\",\n   \"purl\": \"pkg:npm/express@4.17.1\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"MIT\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/lodash@4.17.20\",\n   \"name\": \"lodash\",\n   \"version\": \"4.17.20\",\n   \"purl\": \"pkg:npm/lodash@4.17.20\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"MIT\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/body-parser@1.19.0\",\n   \"name\": \"body-parser\",\n   \"version\": \"1.19.0\",\n   \"purl\": \"pkg:npm/body-parser@1.19.0\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"MIT\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/node-forge@0.10.0\",\n   \"name\": \"node-forge\",\n   \"version\": \"0.10.0\",\n   \"purl\": \"pkg:npm/node-forge@0.10.0\",\n   \"licenses\": [\n    {\n     \"expression\": \"(BSD-3-Clause OR GPL-2.0)\"\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/sharp@0.32.0\",\n   \"name\": \"sharp\",\n   \"version\": \"0.32.0\",\n   \"purl\": \"pkg:npm/sharp@0.32.0\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"Apache-2.0\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/%40demo/native-image-lib@8.14.2\",\n   \"name\": \"@demo/native-image-lib\",\n   \"version\": \"8.14.2\",\n   \"purl\": \"pkg:npm/%40demo/native-image-lib@8.14.2\",\n   \"licenses\": [\n    {\n     \"license\": {\n      \"id\": \"LGPL-2.1-or-later\"\n     }\n    }\n   ]\n  },\n  {\n   \"type\": \"library\",\n   \"bom-ref\": \"pkg:npm/internal-utils@2.0.0\",\n   \"name\": \"internal-utils\",\n   \"version\": \"2.0.0\",\n   \"purl\": \"pkg:npm/internal-utils@2.0.0\"\n  }\n ],\n \"dependencies\": [\n  {\n   \"ref\": \"app\",\n   \"dependsOn\": [\n    \"pkg:npm/express@4.17.1\",\n    \"pkg:npm/lodash@4.17.20\",\n    \"pkg:npm/sharp@0.32.0\",\n    \"pkg:npm/internal-utils@2.0.0\"\n   ]\n  },\n  {\n   \"ref\": \"pkg:npm/express@4.17.1\",\n   \"dependsOn\": [\n    \"pkg:npm/body-parser@1.19.0\"\n   ]\n  },\n  {\n   \"ref\": \"pkg:npm/sharp@0.32.0\",\n   \"dependsOn\": [\n    \"pkg:npm/%40demo/native-image-lib@8.14.2\"\n   ]\n  },\n  {\n   \"ref\": \"pkg:npm/internal-utils@2.0.0\",\n   \"dependsOn\": [\n    \"pkg:npm/node-forge@0.10.0\"\n   ]\n  }\n ]\n}",
                    "checkVulnerabilities": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SbomExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/sbom-license-checker/calculate": {
      "post": {
        "operationId": "calculateSbomLicenseChecker",
        "summary": "Check SBOM licences: SPDX expressions, copyleft class and conflicts with your project licence.",
        "description": "Upload or paste a CycloneDX (JSON or XML) or SPDX (JSON or tag-value) SBOM. Every component licence is parsed as an SPDX expression (AND, OR, WITH), normalised against a bundled SPDX licence list subset (name, OSI approval, permissive / weak / strong / network copyleft) and checked against the licence of your project or product with a documented compatibility matrix. Missing and unknown licences are flagged. Not legal advice.\n\nMethodology:\n- Readers: CycloneDX JSON and SPDX 2.x JSON via the SBOM Explorer parser; CycloneDX XML (components, nested components, metadata component, license id/name/expression) and SPDX tag-value (PackageName, PackageVersion, PackageLicenseConcluded, else PackageLicenseDeclared, purl ExternalRefs) with our own readers. Several CycloneDX licence entries for one component are combined with AND (conservative).\n- Licence strings are parsed as SPDX license expressions (SPDX spec Annex D: WITH binds tighter than AND, AND tighter than OR, parentheses, “+”). Deprecated ids (GPL-2.0, GPL-2.0+, LGPL-2.1, GPL-2.0-with-classpath-exception …) are mapped to current ids; common free-text names (“Apache 2.0”, “The MIT License”, “GPLv3”) are normalised and the mapping is reported.\n- Licence data: a bundled subset of 114 licences from the SPDX License List 3.29.0 (2026-09-16): id, name and OSI approval from SPDX; the copyleft class (public domain, permissive, weak, strong, network, source-available) is our classification.\n- Compatibility: each licence is rated against the project licence with the matrix shown in the results (ok, conditions, review, conflict, unknown). OR takes the best option, AND the worst. Linking exceptions (Classpath, GCC, LLVM, Autoconf, Bison, Universal FOSS …) reduce GPL components to weak copyleft. The matrix encodes widely documented positions (FSF licence list, MPL-2.0 §3.3, GPL-3.0 §13, Apache-2.0/GPL-2.0 incompatibility); edge cases depend on how components are combined.\n- Not legal advice: obligations depend on linking, distribution, modification and jurisdiction. Use the result to decide what needs legal review.\n\nNot legal advice. Licence compatibility depends on how components are used, linked and distributed.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "sbom_license_checker",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SbomLicenseCheckerInput"
              },
              "examples": {
                "example1": {
                  "summary": "CycloneDX XML Java service (Apache-2.0 project)",
                  "value": {
                    "sbom": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bom xmlns=\"http://cyclonedx.org/schema/bom/1.5\" version=\"1\">\n  <metadata><component type=\"application\"><name>shop-backend</name><version>3.2.0</version><licenses><license><id>Apache-2.0</id></license></licenses></component></metadata>\n  <components>\n    <component type=\"library\"><group>org.apache.commons</group><name>commons-lang3</name><version>3.14.0</version><purl>pkg:maven/org.apache.commons/commons-lang3@3.14.0</purl><licenses><license><id>Apache-2.0</id></license></licenses></component>\n    <component type=\"library\"><name>mysql-connector-j</name><version>8.3.0</version><purl>pkg:maven/com.mysql/mysql-connector-j@8.3.0</purl><licenses><expression>GPL-2.0-only WITH Universal-FOSS-exception-1.0</expression></licenses></component>\n    <component type=\"library\"><name>hibernate-core</name><version>6.4.4</version><licenses><license><id>LGPL-2.1-or-later</id></license></licenses></component>\n    <component type=\"library\"><name>jsoup</name><version>1.17.2</version><licenses><license><name>The MIT License</name></license></licenses></component>\n    <component type=\"library\"><name>ghostscript-wrapper</name><version>10.0</version><licenses><license><id>AGPL-3.0-or-later</id></license></licenses></component>\n    <component type=\"library\"><name>vendor-sdk</name><version>2.1</version></component>\n  </components>\n</bom>"
                  }
                },
                "example2": {
                  "summary": "SPDX tag-value firmware (proprietary, distributed)",
                  "value": {
                    "sbom": "SPDXVersion: SPDX-2.3\nDataLicense: CC0-1.0\nSPDXID: SPDXRef-DOCUMENT\nDocumentName: firmware-image\nRelationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-fw\n\nPackageName: firmware\nSPDXID: SPDXRef-fw\nPackageVersion: 1.4\nPackageLicenseDeclared: LicenseRef-Proprietary\n\nPackageName: busybox\nSPDXID: SPDXRef-busybox\nPackageVersion: 1.36.1\nPackageLicenseConcluded: GPL-2.0-only\n\nPackageName: openssl\nSPDXID: SPDXRef-openssl\nPackageVersion: 3.0.13\nPackageLicenseConcluded: Apache-2.0\n\nPackageName: zlib\nSPDXID: SPDXRef-zlib\nPackageVersion: 1.3.1\nPackageLicenseConcluded: Zlib\n\nPackageName: libcurl\nSPDXID: SPDXRef-curl\nPackageVersion: 8.6.0\nPackageLicenseConcluded: curl\n\nPackageName: dual-licensed-lib\nSPDXID: SPDXRef-dual\nPackageVersion: 0.9\nPackageLicenseDeclared: (MIT OR GPL-3.0-or-later)\n",
                    "projectLicense": "proprietary"
                  }
                },
                "example3": {
                  "summary": "Same firmware as a GPL-2.0-only project",
                  "value": {
                    "sbom": "SPDXVersion: SPDX-2.3\nDataLicense: CC0-1.0\nSPDXID: SPDXRef-DOCUMENT\nDocumentName: firmware-image\nRelationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-fw\n\nPackageName: firmware\nSPDXID: SPDXRef-fw\nPackageVersion: 1.4\nPackageLicenseDeclared: LicenseRef-Proprietary\n\nPackageName: busybox\nSPDXID: SPDXRef-busybox\nPackageVersion: 1.36.1\nPackageLicenseConcluded: GPL-2.0-only\n\nPackageName: openssl\nSPDXID: SPDXRef-openssl\nPackageVersion: 3.0.13\nPackageLicenseConcluded: Apache-2.0\n\nPackageName: zlib\nSPDXID: SPDXRef-zlib\nPackageVersion: 1.3.1\nPackageLicenseConcluded: Zlib\n\nPackageName: libcurl\nSPDXID: SPDXRef-curl\nPackageVersion: 8.6.0\nPackageLicenseConcluded: curl\n\nPackageName: dual-licensed-lib\nSPDXID: SPDXRef-dual\nPackageVersion: 0.9\nPackageLicenseDeclared: (MIT OR GPL-3.0-or-later)\n",
                    "projectLicense": "GPL-2.0-only"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SbomLicenseCheckerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/security-advisory-timeline/calculate": {
      "post": {
        "operationId": "calculateSecurityAdvisoryTimeline",
        "summary": "Disclosures, affected ranges, fixes and withdrawals for a package on one timeline, with time-to-fix.",
        "description": "Merges every OSV.dev advisory for a package (npm, PyPI, Go, crates.io, Maven, RubyGems, Packagist, NuGet) or a list of advisory IDs into one chronological timeline: publication, last modification, withdrawal and fix releases with their registry release dates (npm and PyPI). For each advisory it lists affected version ranges and fixed versions, and measures how long before or after disclosure the fix shipped and how long vulnerable versions were current. Paste OSV JSON to work offline.\n\nMethodology:\n- Package mode: POST https://api.osv.dev/v1/query with {package:{name, ecosystem}} (up to 5 result pages). ID mode: GET https://api.osv.dev/v1/vulns/{id} for up to 50 IDs. Withdrawn advisories are kept and marked.\n- Affected ranges are rebuilt from OSV range events (introduced / fixed / last_affected / limit); GIT commit ranges are skipped. \"last_affected\" means no fixed version is published in the record.\n- Release dates: npm registry packument \"time\" field (registry.npmjs.org/<name>) or the PyPI JSON API (earliest upload_time_iso_8601 per release). Other ecosystems: paste a {version: date} map.\n- Fix→disclosure days = advisory published − first fixed release date (positive: the fix shipped before the advisory, typical for coordinated disclosure; negative: users were exposed after disclosure). Vulnerable window = first fixed release − release of the introducing version (or the first release when \"introduced: 0\").",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "security_advisory_timeline",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecurityAdvisoryTimelineInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted OSV records (fictional package)",
                  "value": {
                    "ecosystem": "npm",
                    "packageName": "demo-parser",
                    "osvJson": "[{\"id\":\"EXAMPLE-0001\",\"summary\":\"Prototype pollution in demo-parser merge()\",\"published\":\"2024-03-12T10:00:00Z\",\"modified\":\"2024-04-01T08:00:00Z\",\"database_specific\":{\"severity\":\"HIGH\"},\"affected\":[{\"package\":{\"ecosystem\":\"npm\",\"name\":\"demo-parser\"},\"ranges\":[{\"type\":\"SEMVER\",\"events\":[{\"introduced\":\"0\"},{\"fixed\":\"1.4.2\"},{\"introduced\":\"2.0.0\"},{\"fixed\":\"2.1.1\"}]}]}]},{\"id\":\"EXAMPLE-0002\",\"summary\":\"ReDoS in demo-parser tokenizer\",\"published\":\"2024-09-02T09:00:00Z\",\"modified\":\"2024-09-03T09:00:00Z\",\"database_specific\":{\"severity\":\"MODERATE\"},\"affected\":[{\"package\":{\"ecosystem\":\"npm\",\"name\":\"demo-parser\"},\"ranges\":[{\"type\":\"SEMVER\",\"events\":[{\"introduced\":\"2.0.0\"},{\"last_affected\":\"2.3.0\"}]}]}]},{\"id\":\"EXAMPLE-0003\",\"summary\":\"Incorrectly reported path traversal\",\"published\":\"2023-11-20T12:00:00Z\",\"modified\":\"2023-12-01T12:00:00Z\",\"withdrawn\":\"2023-12-01T12:00:00Z\",\"database_specific\":{\"severity\":\"LOW\"},\"affected\":[{\"package\":{\"ecosystem\":\"npm\",\"name\":\"demo-parser\"},\"ranges\":[{\"type\":\"SEMVER\",\"events\":[{\"introduced\":\"1.0.0\"},{\"fixed\":\"1.3.0\"}]}]}]}]",
                    "releaseTimesJson": "{\"1.0.0\":\"2022-01-10T00:00:00Z\",\"1.3.0\":\"2023-06-01T00:00:00Z\",\"1.4.0\":\"2023-10-01T00:00:00Z\",\"1.4.2\":\"2024-03-05T00:00:00Z\",\"2.0.0\":\"2023-12-15T00:00:00Z\",\"2.1.1\":\"2024-03-06T00:00:00Z\",\"2.3.0\":\"2024-08-20T00:00:00Z\"}",
                    "fetchReleaseDates": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityAdvisoryTimelineResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/security-configuration-scanner/calculate": {
      "post": {
        "operationId": "calculateSecurityConfigurationScanner",
        "summary": "Passive, graded check of a domain's TLS, security headers, DNS security and security.txt.",
        "description": "For a domain you are authorised to test, checks the live TLS certificate, HTTP security headers, HTTP→HTTPS redirect, DNSSEC (validated via Google Public DNS), CAA, SPF and DMARC, and /.well-known/security.txt (RFC 9116 Contact and Expires), then grades the result and lists concrete fixes. Passive single requests only. You can also paste headers, DNS records and a certificate summary for an offline review, including cookie flags.\n\nMethodology:\n- Only scan systems you own or are authorised to test. This scanner is passive: a handful of ordinary single requests (the home page over HTTPS and HTTP, /.well-known/security.txt, public DNS and one TLS handshake) and no probing, fuzzing or port scanning.\n- TLS + DNS: the DNS + Certificate Explorer is called once (resolver lookups of TXT/CAA/_dmarc and one TLS handshake on port 443, no CT search). Certificate findings: trust, hostname match, expiry (<14 days = warning), RSA key size, TLS 1.0/1.1.\n- DNSSEC: one query to the Google Public DNS JSON API (dns.google/resolve, do=1); AD=true means the answer was DNSSEC-validated.\n- Headers: one GET of https://<domain>/ analysed with HeaderLens rules (HSTS, CSP, X-Content-Type-Options, framing, Referrer-Policy, Permissions-Policy, version disclosure). Redirect: one GET of http://<domain>/; pass if it ends on https://.\n- security.txt (RFC 9116): Contact and Expires are required; Expires must be in the future, ideally less than a year ahead; served as text/plain.\n- Cookies: only checked from pasted headers (the live fetcher strips Set-Cookie). Only cookie names and flags are reported, never values.\n- Score: 100 minus 20 per high, 8 per medium, 3 per low finding; A ≥ 90, B ≥ 75, C ≥ 60, D ≥ 40, else F; any high finding caps the grade at C.\n\nOnly scan systems you own or are authorised to test. This scanner is passive: a handful of ordinary single requests (the home page over HTTPS and HTTP, /.well-known/security.txt, public DNS and one TLS handshake) and no probing, fuzzing or port scanning.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "security_configuration_scanner",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecurityConfigurationScannerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Offline review of pasted findings",
                  "value": {
                    "domain": "shop.example.net",
                    "mode": "pasted",
                    "headers": "HTTP/2 200\ncontent-type: text/html\nstrict-transport-security: max-age=300\nx-content-type-options: nosniff\nserver: nginx/1.18.0\nset-cookie: session=abc; Path=/; HttpOnly\nset-cookie: __Host-csrf=x; Path=/; Secure; HttpOnly; SameSite=Strict",
                    "dnsRecords": "CAA 0 issue \"letsencrypt.org\"\nTXT v=spf1 include:_spf.example.net ~all\nDMARC v=DMARC1; p=none\nDNSSEC no",
                    "certificate": "issuer: CN=R11, O=Let's Encrypt, C=US\nvalidTo: 2026-10-20T12:00:00Z\nprotocol: TLSv1.3\nkeyType: ec\nhostnameMatches: yes\nauthorized: yes",
                    "securityTxt": "Contact: mailto:security@example.net\nExpires: 2026-03-01T00:00:00Z\nPreferred-Languages: en",
                    "httpsRedirect": "yes"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityConfigurationScannerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/workflows": {
      "get": {
        "operationId": "listWorkflows",
        "summary": "Multi-tool workflows",
        "responses": {
          "200": {
            "description": "Workflow list.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. 422 responses include per-field `errors`.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "message"
              ],
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "ArtifactProvenanceExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "package": {
            "title": "npm package@version",
            "description": "Looks up registry.npmjs.org attestations and metadata. Leave empty when pasting.",
            "type": "string",
            "maxLength": 260
          },
          "attestations": {
            "title": "Or paste attestations JSON",
            "description": "The response of /-/npm/v1/attestations/<pkg>@<version>, or a single Sigstore bundle.",
            "type": "string",
            "maxLength": 2000000
          },
          "attestationsFile": {
            "title": "Or upload attestations / bundle (.json)",
            "type": "object",
            "description": "Upload as {filename, contentType?, contentBase64}. Max 1953 KiB. Accepts .json,.sigstore,application/json.",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "packageMetadata": {
            "title": "Optional: package version metadata JSON",
            "description": "registry.npmjs.org/<pkg>/<version> document, used for the repository / gitHead / integrity cross-checks in paste mode.",
            "type": "string",
            "maxLength": 500000
          }
        },
        "required": []
      },
      "ArtifactProvenanceExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "package",
              "version",
              "attestationCount",
              "verdict",
              "provenance",
              "publishAttestation",
              "signingIdentity",
              "attestationChecks",
              "crossChecks",
              "notVerified"
            ],
            "properties": {
              "package": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "version": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "attestationCount": {
                "type": "integer"
              },
              "verdict": {
                "type": "string",
                "enum": [
                  "verified",
                  "verified-with-mismatches",
                  "signature-problems",
                  "no-attestations"
                ]
              },
              "provenance": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "predicateType",
                  "buildType",
                  "builderId",
                  "sourceRepo",
                  "commit",
                  "ref",
                  "workflowPath",
                  "eventName",
                  "invocationId"
                ],
                "properties": {
                  "predicateType": {
                    "type": "string"
                  },
                  "buildType": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "builderId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "sourceRepo": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "commit": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "ref": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "workflowPath": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "eventName": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "invocationId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "publishAttestation": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "registry",
                  "signedBy"
                ],
                "properties": {
                  "registry": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "signedBy": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "signingIdentity": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "subjectAltName",
                  "issuer",
                  "oidcIssuer",
                  "runnerEnvironment",
                  "loggedAt"
                ],
                "properties": {
                  "subjectAltName": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "issuer": {
                    "type": "string"
                  },
                  "oidcIssuer": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "runnerEnvironment": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "loggedAt": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "attestationChecks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "attestation",
                    "checks"
                  ],
                  "properties": {
                    "attestation": {
                      "type": "string"
                    },
                    "checks": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "check",
                          "status",
                          "detail"
                        ],
                        "properties": {
                          "check": {
                            "type": "string"
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "pass",
                              "fail",
                              "skipped"
                            ]
                          },
                          "detail": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              },
              "crossChecks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "check",
                    "status",
                    "detail"
                  ],
                  "properties": {
                    "check": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "pass",
                        "fail",
                        "skipped"
                      ]
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              },
              "notVerified": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "C2paCredentialsInspectorInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "file": {
            "title": "Image or video",
            "description": "JPEG, PNG, WebP, MP4/MOV, HEIF/AVIF or a .c2pa sidecar, up to 50 MB. Processed for this request only. Upload as {filename, contentType?, contentBase64}. Max 51200 KiB. Accepts .jpg,.jpeg,.png,.webp,.mp4,.m4v,.mov,.heic,.heif,.avif,.c2pa,image/jpeg,image/png,image/webp,video/mp4,video/quicktime,image/heic,image/avif.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "useExiftool": {
            "title": "Also read XMP/IPTC metadata hints with ExifTool (if installed)",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "file"
        ]
      },
      "C2paCredentialsInspectorResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "format",
              "bytes",
              "remoteManifest",
              "manifestStoreFound",
              "manifestCount",
              "activeManifest",
              "manifests",
              "validation",
              "aiGenerated",
              "xmpHints",
              "exiftool",
              "boxTree"
            ],
            "properties": {
              "format": {
                "type": "string"
              },
              "bytes": {
                "type": "integer"
              },
              "manifestStoreFound": {
                "type": "boolean"
              },
              "manifestCount": {
                "type": "integer"
              },
              "activeManifest": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "manifests": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "label",
                    "active",
                    "manifestType",
                    "claimVersion",
                    "claimGenerator",
                    "claimGeneratorInfo",
                    "title",
                    "format",
                    "instanceId",
                    "alg",
                    "assertions",
                    "actions",
                    "ingredients",
                    "dataHash",
                    "hardBindings",
                    "signature",
                    "aiHints",
                    "claimJson"
                  ],
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "active": {
                      "type": "boolean"
                    },
                    "manifestType": {
                      "type": "string"
                    },
                    "claimVersion": {
                      "type": "integer"
                    },
                    "claimGenerator": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "claimGeneratorInfo": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "title": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "format": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "instanceId": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "alg": {
                      "type": "string"
                    },
                    "assertions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "label",
                          "url",
                          "hashAlg",
                          "hashMatches",
                          "present",
                          "kind"
                        ],
                        "properties": {
                          "label": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "hashAlg": {
                            "type": "string"
                          },
                          "hashMatches": {
                            "type": [
                              "boolean",
                              "null"
                            ]
                          },
                          "present": {
                            "type": "boolean"
                          },
                          "kind": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "actions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "action",
                          "when",
                          "softwareAgent",
                          "digitalSourceType",
                          "description"
                        ],
                        "properties": {
                          "action": {
                            "type": "string"
                          },
                          "when": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "softwareAgent": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "digitalSourceType": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "description": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        }
                      }
                    },
                    "ingredients": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "title",
                          "format",
                          "relationship",
                          "instanceId",
                          "manifest"
                        ],
                        "properties": {
                          "title": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "format": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "relationship": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "instanceId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "manifest": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        }
                      }
                    },
                    "dataHash": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "additionalProperties": false,
                      "required": [
                        "label",
                        "alg",
                        "exclusions",
                        "hash",
                        "matches",
                        "note"
                      ],
                      "properties": {
                        "label": {
                          "type": "string"
                        },
                        "alg": {
                          "type": "string"
                        },
                        "exclusions": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "start",
                              "length"
                            ],
                            "properties": {
                              "start": {
                                "type": "integer"
                              },
                              "length": {
                                "type": "integer"
                              }
                            }
                          }
                        },
                        "hash": {
                          "type": "string"
                        },
                        "matches": {
                          "type": [
                            "boolean",
                            "null"
                          ]
                        },
                        "note": {
                          "type": "string"
                        }
                      }
                    },
                    "hardBindings": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "signature": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "alg",
                        "certificates",
                        "signatureValid",
                        "signatureNote",
                        "timestamp",
                        "x5chainLocation"
                      ],
                      "properties": {
                        "alg": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "certificates": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "subject",
                              "issuer",
                              "notBefore",
                              "notAfter",
                              "serialNumber",
                              "sha256",
                              "keyType",
                              "extKeyUsage",
                              "isCA",
                              "issuedByNext"
                            ],
                            "properties": {
                              "subject": {
                                "type": "string"
                              },
                              "issuer": {
                                "type": "string"
                              },
                              "notBefore": {
                                "type": "string"
                              },
                              "notAfter": {
                                "type": "string"
                              },
                              "serialNumber": {
                                "type": "string"
                              },
                              "sha256": {
                                "type": "string"
                              },
                              "keyType": {
                                "type": "string"
                              },
                              "extKeyUsage": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "isCA": {
                                "type": "boolean"
                              },
                              "issuedByNext": {
                                "type": [
                                  "boolean",
                                  "null"
                                ]
                              }
                            }
                          }
                        },
                        "signatureValid": {
                          "type": [
                            "boolean",
                            "null"
                          ]
                        },
                        "signatureNote": {
                          "type": "string"
                        },
                        "timestamp": {
                          "type": "boolean"
                        },
                        "x5chainLocation": {
                          "type": "string"
                        }
                      }
                    },
                    "aiHints": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "claimJson": {
                      "description": "The decoded claim (bytes shown as hex previews)"
                    }
                  }
                }
              },
              "validation": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "signature",
                  "assertionHashes",
                  "dataHash",
                  "certificateChain",
                  "trust"
                ],
                "properties": {
                  "signature": {
                    "type": "string",
                    "enum": [
                      "valid",
                      "invalid",
                      "not-checked",
                      "absent"
                    ]
                  },
                  "assertionHashes": {
                    "type": "string",
                    "enum": [
                      "all-match",
                      "mismatch",
                      "not-checked",
                      "absent"
                    ]
                  },
                  "dataHash": {
                    "type": "string",
                    "enum": [
                      "match",
                      "mismatch",
                      "not-checked",
                      "absent"
                    ]
                  },
                  "certificateChain": {
                    "type": "string",
                    "enum": [
                      "links-verified",
                      "broken",
                      "single-certificate",
                      "absent"
                    ]
                  },
                  "trust": {
                    "type": "string",
                    "enum": [
                      "not-evaluated"
                    ]
                  }
                }
              },
              "aiGenerated": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "true if the active manifest or XMP declares a trainedAlgorithmicMedia (generative AI) digital source type; false if another source type is declared; null if there is no information"
              },
              "remoteManifest": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "URL of a remote (cloud) manifest referenced via XMP dcterms:provenance"
              },
              "xmpHints": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "tag",
                    "value"
                  ],
                  "properties": {
                    "tag": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              },
              "exiftool": {
                "type": "string",
                "enum": [
                  "used",
                  "not-installed",
                  "disabled",
                  "failed"
                ]
              },
              "boxTree": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "ContainerImageExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "image": {
            "title": "Image reference",
            "type": "string",
            "maxLength": 300
          },
          "platform": {
            "title": "Platform",
            "description": "os/arch[/variant] picked from multi-platform images.",
            "type": "string",
            "maxLength": 40,
            "default": "linux/amd64"
          },
          "manifestJson": {
            "title": "Or paste a manifest / index (JSON)",
            "description": "Offline mode, e.g. output of `docker buildx imagetools inspect --raw <image>`.",
            "type": "string",
            "maxLength": 1000000
          },
          "configJson": {
            "title": "And its config blob (JSON)",
            "description": "e.g. `crane config <image>` or `docker inspect` Config section.",
            "type": "string",
            "maxLength": 2000000
          }
        },
        "required": []
      },
      "ContainerImageExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "image",
              "digest",
              "mediaType",
              "platforms",
              "attestationManifests",
              "selectedPlatform",
              "layers",
              "totalCompressedBytes",
              "config",
              "baseImage",
              "signature",
              "findings"
            ],
            "properties": {
              "image": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "digest": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "mediaType": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "platforms": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "platform",
                    "digest",
                    "size"
                  ],
                  "properties": {
                    "platform": {
                      "type": "string"
                    },
                    "digest": {
                      "type": "string"
                    },
                    "size": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  }
                }
              },
              "attestationManifests": {
                "type": "integer"
              },
              "selectedPlatform": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "layers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "digest",
                    "size",
                    "mediaType"
                  ],
                  "properties": {
                    "digest": {
                      "type": "string"
                    },
                    "size": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "mediaType": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "totalCompressedBytes": {
                "type": "integer"
              },
              "config": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "digestVerified",
                  "created",
                  "ageDays",
                  "os",
                  "architecture",
                  "user",
                  "runsAsRoot",
                  "envNames",
                  "labels",
                  "exposedPorts",
                  "entrypoint",
                  "cmd",
                  "historySteps",
                  "healthcheck"
                ],
                "properties": {
                  "digestVerified": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "created": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "ageDays": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "os": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "architecture": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "user": {
                    "type": "string"
                  },
                  "runsAsRoot": {
                    "type": "boolean"
                  },
                  "envNames": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "labels": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "exposedPorts": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "entrypoint": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "cmd": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "healthcheck": {
                    "type": "boolean"
                  },
                  "historySteps": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "created",
                        "createdBy",
                        "emptyLayer"
                      ],
                      "properties": {
                        "created": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "createdBy": {
                          "type": "string"
                        },
                        "emptyLayer": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              },
              "baseImage": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "label",
                  "distro",
                  "version",
                  "evidence",
                  "eol",
                  "status",
                  "note"
                ],
                "properties": {
                  "label": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "distro": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "version": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "evidence": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "eol": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "supported",
                      "eol",
                      "extended-only",
                      "unknown"
                    ]
                  },
                  "note": {
                    "type": "string"
                  }
                }
              },
              "signature": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "checked",
                  "cosignTag",
                  "found"
                ],
                "properties": {
                  "checked": {
                    "type": "boolean"
                  },
                  "cosignTag": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "found": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "level",
                    "text"
                  ],
                  "properties": {
                    "level": {
                      "type": "string",
                      "enum": [
                        "good",
                        "info",
                        "warning",
                        "bad"
                      ]
                    },
                    "text": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "CveRelationshipGraphInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "vulnId": {
            "title": "CVE, GHSA or OSV id",
            "type": "string",
            "maxLength": 80
          },
          "osvJson": {
            "title": "Or paste an OSV record (JSON)",
            "description": "Offline mode: an OSV vulnerability JSON, e.g. from api.osv.dev/v1/vulns/<id>.",
            "type": "string",
            "maxLength": 2000000
          },
          "kevJson": {
            "title": "Optional: CISA KEV entry or catalog (JSON)",
            "type": "string",
            "maxLength": 5000000
          },
          "epssJson": {
            "title": "Optional: EPSS response (JSON)",
            "description": "FIRST API response or {\"epss\": 0.97, \"percentile\": 0.99}.",
            "type": "string",
            "maxLength": 100000
          },
          "enrichAliases": {
            "title": "Fetch alias records for packages",
            "description": "If the record lists no packages (typical for CVE records), fetch up to 3 alias advisories.",
            "type": "boolean",
            "default": true
          }
        },
        "required": []
      },
      "CveRelationshipGraphResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "summary",
              "aliases",
              "cves",
              "severity",
              "cvssVector",
              "cvssScore",
              "published",
              "modified",
              "withdrawn",
              "cwes",
              "packages",
              "gitFixes",
              "references",
              "kev",
              "epss",
              "relatedCount"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              },
              "aliases": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "cves": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "severity": {
                "type": "string",
                "enum": [
                  "CRITICAL",
                  "HIGH",
                  "MODERATE",
                  "LOW",
                  "UNKNOWN"
                ]
              },
              "cvssVector": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "cvssScore": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "published": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "modified": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "withdrawn": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "cwes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "packages": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "ecosystem",
                    "name",
                    "purl",
                    "ranges",
                    "fixed",
                    "lastAffected",
                    "source"
                  ],
                  "properties": {
                    "ecosystem": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "purl": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "ranges": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "fixed": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "lastAffected": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "source": {
                      "type": "string"
                    }
                  }
                }
              },
              "gitFixes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "repo",
                    "commit"
                  ],
                  "properties": {
                    "repo": {
                      "type": "string"
                    },
                    "commit": {
                      "type": "string"
                    }
                  }
                }
              },
              "references": {
                "type": "object",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "kev": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "dateAdded",
                  "dueDate",
                  "vendorProject",
                  "product",
                  "vulnerabilityName",
                  "requiredAction",
                  "knownRansomwareCampaignUse"
                ],
                "properties": {
                  "dateAdded": {
                    "type": "string"
                  },
                  "dueDate": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "vendorProject": {
                    "type": "string"
                  },
                  "product": {
                    "type": "string"
                  },
                  "vulnerabilityName": {
                    "type": "string"
                  },
                  "requiredAction": {
                    "type": "string"
                  },
                  "knownRansomwareCampaignUse": {
                    "type": "string"
                  }
                }
              },
              "epss": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "cve",
                  "score",
                  "percentile",
                  "date"
                ],
                "properties": {
                  "cve": {
                    "type": "string"
                  },
                  "score": {
                    "type": "number"
                  },
                  "percentile": {
                    "type": "number"
                  },
                  "date": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "relatedCount": {
                "type": "integer"
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "DependencyVulnerabilityExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "manifest": {
            "title": "Manifest, lockfile or package list",
            "type": "string",
            "maxLength": 5000000
          },
          "vulnId": {
            "title": "Or: look up one advisory ID",
            "type": "string",
            "maxLength": 60
          }
        },
        "required": []
      },
      "DependencyVulnerabilityExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "manifestKind",
              "packagesChecked",
              "skipped",
              "vulnerablePackages",
              "counts",
              "findings",
              "advisory"
            ],
            "properties": {
              "manifestKind": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "packagesChecked": {
                "type": "integer"
              },
              "skipped": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "vulnerablePackages": {
                "type": "integer"
              },
              "counts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "CRITICAL",
                  "HIGH",
                  "MODERATE",
                  "LOW",
                  "UNKNOWN"
                ],
                "properties": {
                  "CRITICAL": {
                    "type": "integer"
                  },
                  "HIGH": {
                    "type": "integer"
                  },
                  "MODERATE": {
                    "type": "integer"
                  },
                  "LOW": {
                    "type": "integer"
                  },
                  "UNKNOWN": {
                    "type": "integer"
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "ecosystem",
                    "name",
                    "version",
                    "exact",
                    "upgradeTo",
                    "vulnerabilities"
                  ],
                  "properties": {
                    "ecosystem": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "version": {
                      "type": "string"
                    },
                    "exact": {
                      "type": "boolean"
                    },
                    "upgradeTo": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "vulnerabilities": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "id",
                          "aliases",
                          "summary",
                          "severity",
                          "cvss",
                          "published",
                          "fixedIn",
                          "url"
                        ],
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "aliases": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "summary": {
                            "type": "string"
                          },
                          "severity": {
                            "type": "string",
                            "enum": [
                              "CRITICAL",
                              "HIGH",
                              "MODERATE",
                              "LOW",
                              "UNKNOWN"
                            ]
                          },
                          "cvss": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "published": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "fixedIn": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "url": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              },
              "advisory": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "id",
                  "aliases",
                  "summary",
                  "severity",
                  "cvss",
                  "published",
                  "fixedIn",
                  "url",
                  "affectedPackages"
                ],
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "aliases": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "summary": {
                    "type": "string"
                  },
                  "severity": {
                    "type": "string",
                    "enum": [
                      "CRITICAL",
                      "HIGH",
                      "MODERATE",
                      "LOW",
                      "UNKNOWN"
                    ]
                  },
                  "cvss": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "published": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "fixedIn": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "url": {
                    "type": "string"
                  },
                  "affectedPackages": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "OauthPermissionExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "request": {
            "title": "Scopes or authorization URL",
            "description": "Scopes separated by spaces or commas, or the whole URL from the consent link.",
            "type": "string",
            "maxLength": 20000
          },
          "provider": {
            "title": "Provider",
            "type": "string",
            "enum": [
              "auto",
              "google",
              "github",
              "microsoft",
              "slack",
              "oidc"
            ],
            "default": "auto"
          }
        },
        "required": [
          "request"
        ]
      },
      "OauthPermissionExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "provider",
              "providerDetection",
              "request",
              "scopes",
              "unknownScopes",
              "riskyCombinations",
              "flowNotes",
              "overallRisk",
              "counts"
            ],
            "properties": {
              "provider": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "providerDetection": {
                "type": "string",
                "enum": [
                  "explicit",
                  "url",
                  "detected",
                  "none"
                ]
              },
              "request": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "host",
                  "clientId",
                  "redirectUri",
                  "responseType",
                  "prompt",
                  "accessType",
                  "codeChallengeMethod",
                  "hasPkce",
                  "hasState",
                  "hasNonce"
                ],
                "properties": {
                  "host": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "redirectUri": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "responseType": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "prompt": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "accessType": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "codeChallengeMethod": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "hasPkce": {
                    "type": "boolean"
                  },
                  "hasState": {
                    "type": "boolean"
                  },
                  "hasNonce": {
                    "type": "boolean"
                  }
                }
              },
              "scopes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "scope",
                    "provider",
                    "known",
                    "description",
                    "sensitivity",
                    "capabilities",
                    "providerClass",
                    "adminConsentRequired",
                    "tokenType",
                    "sourceUrl"
                  ],
                  "properties": {
                    "scope": {
                      "type": "string"
                    },
                    "provider": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "known": {
                      "type": "boolean"
                    },
                    "description": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "sensitivity": {
                      "type": "string",
                      "enum": [
                        "low",
                        "medium",
                        "high",
                        "critical",
                        "unknown"
                      ]
                    },
                    "capabilities": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "providerClass": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "adminConsentRequired": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "tokenType": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "sourceUrl": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "unknownScopes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "riskyCombinations": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "label",
                    "severity",
                    "scopes",
                    "why"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "severity": {
                      "type": "string",
                      "enum": [
                        "low",
                        "medium",
                        "high",
                        "critical"
                      ]
                    },
                    "scopes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "why": {
                      "type": "string"
                    }
                  }
                }
              },
              "flowNotes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "note"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low",
                        "info"
                      ]
                    },
                    "note": {
                      "type": "string"
                    }
                  }
                }
              },
              "overallRisk": {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high",
                  "critical",
                  "unknown"
                ]
              },
              "counts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "total",
                  "known",
                  "unknown",
                  "critical",
                  "high"
                ],
                "properties": {
                  "total": {
                    "type": "integer"
                  },
                  "known": {
                    "type": "integer"
                  },
                  "unknown": {
                    "type": "integer"
                  },
                  "critical": {
                    "type": "integer"
                  },
                  "high": {
                    "type": "integer"
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "OpenSourceTrustExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "target": {
            "title": "GitHub repo or package",
            "type": "string",
            "maxLength": 300
          },
          "depsdevProject": {
            "title": "Or paste deps.dev project JSON",
            "description": "Offline mode: response of api.deps.dev/v3/projects/<github.com%2Fowner%2Frepo>.",
            "type": "string",
            "maxLength": 1000000
          },
          "depsdevVersion": {
            "title": "Optional: deps.dev package version JSON",
            "type": "string",
            "maxLength": 1000000
          },
          "githubRepo": {
            "title": "Optional: GitHub repo JSON",
            "description": "Response of api.github.com/repos/<owner>/<repo>.",
            "type": "string",
            "maxLength": 500000
          },
          "githubReleases": {
            "title": "Optional: GitHub releases JSON",
            "type": "string",
            "maxLength": 1000000
          },
          "contributorsCount": {
            "title": "Optional: contributor count",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000
          }
        },
        "required": []
      },
      "OpenSourceTrustExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "repo",
              "package",
              "github",
              "scorecard",
              "maintenance",
              "releaseSigning",
              "signals"
            ],
            "properties": {
              "repo": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "package": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "system",
                  "name",
                  "version",
                  "publishedAt",
                  "defaultVersion",
                  "versionCount",
                  "deprecated",
                  "licenses",
                  "advisories",
                  "provenance"
                ],
                "properties": {
                  "system": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "version": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "publishedAt": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "defaultVersion": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "versionCount": {
                    "type": "integer"
                  },
                  "deprecated": {
                    "type": "boolean"
                  },
                  "licenses": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "advisories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "provenance": {
                    "type": "boolean"
                  }
                }
              },
              "github": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "stars",
                  "forks",
                  "openIssues",
                  "pushedAt",
                  "createdAt",
                  "archived",
                  "license",
                  "latestRelease",
                  "contributors"
                ],
                "properties": {
                  "stars": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "forks": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "openIssues": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "pushedAt": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "createdAt": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "archived": {
                    "type": "boolean"
                  },
                  "license": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "latestRelease": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "additionalProperties": false,
                    "required": [
                      "tag",
                      "publishedAt"
                    ],
                    "properties": {
                      "tag": {
                        "type": "string"
                      },
                      "publishedAt": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    }
                  },
                  "contributors": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                }
              },
              "scorecard": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "overall",
                  "date",
                  "checks"
                ],
                "properties": {
                  "overall": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "date": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "checks": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "name",
                        "score",
                        "reason"
                      ],
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "score": {
                          "type": "integer"
                        },
                        "reason": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              },
              "maintenance": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "score",
                  "components"
                ],
                "properties": {
                  "score": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "components": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "name",
                        "points",
                        "max",
                        "explanation"
                      ],
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "points": {
                          "type": "integer"
                        },
                        "max": {
                          "type": "integer"
                        },
                        "explanation": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              },
              "releaseSigning": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "scorecardSignedReleases",
                  "reason",
                  "provenanceAttestations"
                ],
                "properties": {
                  "scorecardSignedReleases": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "reason": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "provenanceAttestations": {
                    "type": "boolean"
                  }
                }
              },
              "signals": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "level",
                    "text"
                  ],
                  "properties": {
                    "level": {
                      "type": "string",
                      "enum": [
                        "good",
                        "info",
                        "warning",
                        "bad"
                      ]
                    },
                    "text": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "PackageEcosystemGraphInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "system": {
            "title": "Ecosystem",
            "type": "string",
            "enum": [
              "npm",
              "pypi",
              "cargo",
              "maven"
            ],
            "default": "npm"
          },
          "name": {
            "title": "Package name",
            "type": "string",
            "maxLength": 214
          },
          "version": {
            "title": "Version (blank = default/latest)",
            "type": "string",
            "maxLength": 100
          },
          "graphJson": {
            "title": "Or paste a deps.dev :dependencies JSON response",
            "description": "Output of GET https://api.deps.dev/v3/systems/{system}/packages/{name}/versions/{version}:dependencies",
            "type": "string",
            "maxLength": 3000000
          },
          "includeDependents": {
            "title": "Look up how many packages depend on it (deps.dev v3alpha)",
            "type": "boolean",
            "default": true
          },
          "checkMajorUpdates": {
            "title": "Check direct dependencies for newer major versions",
            "type": "boolean",
            "default": true
          },
          "maxNodes": {
            "title": "Max packages drawn in the graph",
            "type": "integer",
            "minimum": 5,
            "maximum": 60,
            "default": 40
          }
        },
        "required": []
      },
      "PackageEcosystemGraphResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "package",
              "dataSource",
              "counts",
              "direct",
              "duplicates",
              "mostDependedUpon",
              "dependents",
              "majorUpdates",
              "graphTruncated",
              "resolutionErrors"
            ],
            "properties": {
              "package": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "system",
                  "name",
                  "version"
                ],
                "properties": {
                  "system": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "version": {
                    "type": "string"
                  }
                }
              },
              "dataSource": {
                "type": "string",
                "enum": [
                  "deps.dev",
                  "pasted"
                ]
              },
              "counts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "packages",
                  "direct",
                  "transitive",
                  "edges",
                  "maxDepth",
                  "duplicatePackages"
                ],
                "properties": {
                  "packages": {
                    "type": "integer"
                  },
                  "direct": {
                    "type": "integer"
                  },
                  "transitive": {
                    "type": "integer"
                  },
                  "edges": {
                    "type": "integer"
                  },
                  "maxDepth": {
                    "type": "integer"
                  },
                  "duplicatePackages": {
                    "type": "integer"
                  }
                }
              },
              "direct": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "version",
                    "requirement"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "version": {
                      "type": "string"
                    },
                    "requirement": {
                      "type": "string"
                    }
                  }
                }
              },
              "duplicates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "versions"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "versions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "mostDependedUpon": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "version",
                    "dependentsInTree",
                    "depth",
                    "pulledInBy"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "version": {
                      "type": "string"
                    },
                    "dependentsInTree": {
                      "type": "integer"
                    },
                    "depth": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "pulledInBy": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "dependents": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "total",
                  "direct",
                  "indirect"
                ],
                "properties": {
                  "total": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "direct": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "indirect": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                }
              },
              "majorUpdates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "resolved",
                    "latest",
                    "requirement",
                    "majorsBehind"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "resolved": {
                      "type": "string"
                    },
                    "latest": {
                      "type": "string"
                    },
                    "requirement": {
                      "type": "string"
                    },
                    "majorsBehind": {
                      "type": "integer"
                    }
                  }
                }
              },
              "graphTruncated": {
                "type": "boolean"
              },
              "resolutionErrors": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "PasskeyWebauthnTesterInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "clientDataJSON": {
            "title": "clientDataJSON (base64url)",
            "type": "string",
            "maxLength": 20000
          },
          "attestationObject": {
            "title": "attestationObject (base64url, registration)",
            "type": "string",
            "maxLength": 100000
          },
          "authenticatorData": {
            "title": "authenticatorData (base64url, sign-in)",
            "description": "From navigator.credentials.get(). Ignored when an attestationObject is given.",
            "type": "string",
            "maxLength": 20000
          },
          "signature": {
            "title": "signature (base64url, sign-in)",
            "type": "string",
            "maxLength": 4000
          },
          "publicKey": {
            "title": "Credential public key (COSE, base64url, to verify a sign-in signature)",
            "type": "string",
            "maxLength": 4000
          },
          "expectedChallenge": {
            "title": "Expected challenge (base64url, optional)",
            "type": "string",
            "maxLength": 1000
          },
          "expectedOrigin": {
            "title": "Expected origin (optional)",
            "type": "string",
            "maxLength": 300
          },
          "expectedRpId": {
            "title": "Expected RP ID (optional)",
            "type": "string",
            "maxLength": 253
          }
        },
        "required": []
      },
      "PasskeyWebauthnTesterResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "ceremony",
              "clientData",
              "authenticatorData",
              "attestation",
              "signatureValid",
              "checks"
            ],
            "properties": {
              "ceremony": {
                "type": "string",
                "enum": [
                  "registration",
                  "authentication",
                  "client-data-only"
                ]
              },
              "clientData": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": true
              },
              "authenticatorData": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": true
              },
              "attestation": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": true
              },
              "signatureValid": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Attestation signature (registration) or assertion signature (sign-in); null if not checkable."
              },
              "checks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "check",
                    "status",
                    "detail"
                  ],
                  "properties": {
                    "check": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "pass",
                        "fail",
                        "info"
                      ]
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "SbomExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "sbom": {
            "title": "SBOM (CycloneDX or SPDX JSON)",
            "type": "string",
            "maxLength": 5000000
          },
          "sbomFile": {
            "title": "Or upload an SBOM file",
            "type": "object",
            "description": "Upload as {filename, contentType?, contentBase64}. Max 4883 KiB. Accepts .json,.cdx.json,.spdx.json,application/json.",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "checkVulnerabilities": {
            "title": "Check vulnerabilities on OSV.dev",
            "description": "Sends the component purls (not the SBOM) to api.osv.dev.",
            "type": "boolean",
            "default": true
          }
        },
        "required": []
      },
      "SbomExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "format",
              "specVersion",
              "documentName",
              "root",
              "componentCount",
              "components",
              "licenseSummary",
              "licenseClassCounts",
              "copyleftComponents",
              "unknownLicenseComponents",
              "dependencyEdges",
              "directDependencies",
              "maxDepth",
              "vulnerabilityCheck",
              "vulnerabilities",
              "severityCounts"
            ],
            "properties": {
              "format": {
                "type": "string",
                "enum": [
                  "CycloneDX",
                  "SPDX"
                ]
              },
              "specVersion": {
                "type": "string"
              },
              "documentName": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "root": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "componentCount": {
                "type": "integer"
              },
              "components": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "ref",
                    "name",
                    "version",
                    "purl",
                    "type",
                    "licenses",
                    "licenseClass"
                  ],
                  "properties": {
                    "ref": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "version": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "purl": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "type": {
                      "type": "string"
                    },
                    "licenses": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "licenseClass": {
                      "type": "string",
                      "enum": [
                        "permissive",
                        "weak-copyleft",
                        "strong-copyleft",
                        "network-copyleft",
                        "public-domain",
                        "proprietary",
                        "unknown"
                      ]
                    }
                  }
                }
              },
              "licenseSummary": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "license",
                    "class",
                    "count"
                  ],
                  "properties": {
                    "license": {
                      "type": "string"
                    },
                    "class": {
                      "type": "string",
                      "enum": [
                        "permissive",
                        "weak-copyleft",
                        "strong-copyleft",
                        "network-copyleft",
                        "public-domain",
                        "proprietary",
                        "unknown"
                      ]
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              },
              "licenseClassCounts": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "copyleftComponents": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "unknownLicenseComponents": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "dependencyEdges": {
                "type": "integer"
              },
              "directDependencies": {
                "type": "integer"
              },
              "maxDepth": {
                "type": "integer"
              },
              "vulnerabilityCheck": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "status",
                  "purlsChecked",
                  "detail"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "performed",
                      "skipped",
                      "failed"
                    ]
                  },
                  "purlsChecked": {
                    "type": "integer"
                  },
                  "detail": {
                    "type": "string"
                  }
                }
              },
              "vulnerabilities": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "component",
                    "version",
                    "purl",
                    "id",
                    "aliases",
                    "severity",
                    "summary",
                    "fixedIn"
                  ],
                  "properties": {
                    "component": {
                      "type": "string"
                    },
                    "version": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "purl": {
                      "type": "string"
                    },
                    "id": {
                      "type": "string"
                    },
                    "aliases": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "severity": {
                      "type": "string",
                      "enum": [
                        "CRITICAL",
                        "HIGH",
                        "MODERATE",
                        "LOW",
                        "UNKNOWN"
                      ]
                    },
                    "summary": {
                      "type": "string"
                    },
                    "fixedIn": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "severityCounts": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "SbomLicenseCheckerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "sbom": {
            "title": "SBOM (CycloneDX JSON/XML or SPDX JSON/tag-value)",
            "type": "string",
            "maxLength": 5000000
          },
          "sbomFile": {
            "title": "Or upload an SBOM file",
            "type": "object",
            "description": "Upload as {filename, contentType?, contentBase64}. Max 4883 KiB. Accepts .json,.xml,.spdx,.txt,.cdx,application/json,application/xml,text/xml,text/plain.",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "projectLicense": {
            "title": "Your project / product licence",
            "type": "string",
            "enum": [
              "auto",
              "proprietary",
              "saas",
              "MIT",
              "Apache-2.0",
              "BSD-3-Clause",
              "MPL-2.0",
              "LGPL-2.1-or-later",
              "LGPL-3.0-or-later",
              "GPL-2.0-only",
              "GPL-2.0-or-later",
              "GPL-3.0-or-later",
              "AGPL-3.0-or-later"
            ],
            "default": "auto"
          }
        },
        "required": []
      },
      "SbomLicenseCheckerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "format",
              "projectLicense",
              "projectLicenseSource",
              "componentCount",
              "components",
              "classCounts",
              "verdictCounts",
              "conflicts",
              "unknownOrMissing",
              "nonOsi",
              "licenseList"
            ],
            "properties": {
              "format": {
                "type": "string"
              },
              "projectLicense": {
                "type": "string"
              },
              "projectLicenseSource": {
                "type": "string"
              },
              "componentCount": {
                "type": "integer"
              },
              "components": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "version",
                    "purl",
                    "rawLicense",
                    "expression",
                    "licenses",
                    "class",
                    "verdict",
                    "reason",
                    "issues"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "version": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "purl": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "rawLicense": {
                      "type": "string"
                    },
                    "expression": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "licenses": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "id",
                          "name",
                          "osiApproved",
                          "class",
                          "exception"
                        ],
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "name": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "osiApproved": {
                            "type": [
                              "boolean",
                              "null"
                            ]
                          },
                          "class": {
                            "type": "string"
                          },
                          "exception": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        }
                      }
                    },
                    "class": {
                      "type": "string",
                      "enum": [
                        "public-domain",
                        "permissive",
                        "weak",
                        "strong",
                        "network",
                        "source-available",
                        "unknown"
                      ]
                    },
                    "verdict": {
                      "type": "string",
                      "enum": [
                        "ok",
                        "conditions",
                        "review",
                        "unknown",
                        "conflict"
                      ]
                    },
                    "reason": {
                      "type": "string"
                    },
                    "issues": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "classCounts": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "verdictCounts": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "conflicts": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "unknownOrMissing": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "nonOsi": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "licenseList": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "version",
                  "releaseDate",
                  "bundled"
                ],
                "properties": {
                  "version": {
                    "type": "string"
                  },
                  "releaseDate": {
                    "type": "string"
                  },
                  "bundled": {
                    "type": "integer"
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "SecurityAdvisoryTimelineInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "ecosystem": {
            "title": "Ecosystem",
            "type": "string",
            "enum": [
              "npm",
              "PyPI",
              "Go",
              "crates.io",
              "Maven",
              "RubyGems",
              "Packagist",
              "NuGet"
            ],
            "default": "npm"
          },
          "packageName": {
            "title": "Package name",
            "type": "string",
            "maxLength": 214
          },
          "advisoryIds": {
            "title": "Or advisory IDs (one per line)",
            "type": "string",
            "maxLength": 5000
          },
          "osvJson": {
            "title": "Or paste OSV JSON (offline)",
            "description": "Response of POST https://api.osv.dev/v1/query, an array of OSV records, or one record.",
            "type": "string",
            "maxLength": 3000000
          },
          "releaseTimesJson": {
            "title": "Optional: pasted release dates (offline)",
            "description": "npm packument (uses \"time\"), PyPI JSON (uses \"releases\") or {\"1.2.3\": \"2024-01-01T00:00:00Z\"}.",
            "type": "string",
            "maxLength": 5000000
          },
          "fetchReleaseDates": {
            "title": "Look up fix release dates (npm / PyPI registry)",
            "type": "boolean",
            "default": true
          }
        },
        "required": []
      },
      "SecurityAdvisoryTimelineResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "target",
              "dataSource",
              "advisories",
              "metrics",
              "events"
            ],
            "properties": {
              "target": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "dataSource": {
                "type": "string",
                "enum": [
                  "osv-package",
                  "osv-ids",
                  "pasted"
                ]
              },
              "advisories": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "aliases",
                    "summary",
                    "severity",
                    "cvss",
                    "package",
                    "published",
                    "modified",
                    "withdrawn",
                    "affectedRanges",
                    "fixedVersions",
                    "firstFixRelease",
                    "firstFixReleaseDate",
                    "introducedReleaseDate",
                    "daysFixToDisclosure",
                    "vulnerableWindowDays",
                    "url"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "aliases": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "summary": {
                      "type": "string"
                    },
                    "severity": {
                      "type": "string",
                      "enum": [
                        "CRITICAL",
                        "HIGH",
                        "MODERATE",
                        "LOW",
                        "UNKNOWN"
                      ]
                    },
                    "cvss": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "package": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "published": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "modified": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "withdrawn": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "affectedRanges": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "fixedVersions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "firstFixRelease": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "firstFixReleaseDate": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "introducedReleaseDate": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "daysFixToDisclosure": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "vulnerableWindowDays": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "url": {
                      "type": "string"
                    }
                  }
                }
              },
              "metrics": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "advisories",
                  "active",
                  "withdrawn",
                  "withoutFix",
                  "withFixDate",
                  "fixBeforeDisclosure",
                  "medianDaysFixToDisclosure",
                  "medianVulnerableWindowDays",
                  "firstPublished",
                  "lastPublished"
                ],
                "properties": {
                  "advisories": {
                    "type": "integer"
                  },
                  "active": {
                    "type": "integer"
                  },
                  "withdrawn": {
                    "type": "integer"
                  },
                  "withoutFix": {
                    "type": "integer"
                  },
                  "withFixDate": {
                    "type": "integer"
                  },
                  "fixBeforeDisclosure": {
                    "type": "integer"
                  },
                  "medianDaysFixToDisclosure": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "medianVulnerableWindowDays": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "firstPublished": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "lastPublished": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "events": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "time",
                    "kind",
                    "advisory",
                    "detail"
                  ],
                  "properties": {
                    "time": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "published",
                        "modified",
                        "withdrawn",
                        "fix-released",
                        "introduced"
                      ]
                    },
                    "advisory": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "SecurityConfigurationScannerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "domain": {
            "title": "Domain",
            "type": "string",
            "maxLength": 253
          },
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "pasted"
            ],
            "default": "live"
          },
          "authorized": {
            "title": "I own this domain or am authorised to test it",
            "description": "Required for live scans.",
            "type": "boolean",
            "default": false
          },
          "headers": {
            "title": "Pasted: HTTP response headers",
            "type": "string",
            "maxLength": 50000
          },
          "dnsRecords": {
            "title": "Pasted: DNS records",
            "type": "string",
            "maxLength": 20000
          },
          "certificate": {
            "title": "Pasted: certificate summary",
            "type": "string",
            "maxLength": 5000
          },
          "securityTxt": {
            "title": "Pasted: security.txt content",
            "type": "string",
            "maxLength": 20000
          },
          "httpsRedirect": {
            "title": "Pasted: does http:// redirect to https://?",
            "type": "string",
            "enum": [
              "unknown",
              "yes",
              "no"
            ],
            "default": "unknown"
          }
        },
        "required": [
          "domain"
        ]
      },
      "SecurityConfigurationScannerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "domain",
              "mode",
              "grade",
              "score",
              "counts",
              "findings",
              "certificate",
              "dnssec",
              "httpsRedirect",
              "securityTxt",
              "cookies",
              "notice"
            ],
            "properties": {
              "domain": {
                "type": "string"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "live",
                  "pasted"
                ]
              },
              "grade": {
                "type": "string",
                "enum": [
                  "A",
                  "B",
                  "C",
                  "D",
                  "F"
                ]
              },
              "score": {
                "type": "integer"
              },
              "counts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "high",
                  "medium",
                  "low",
                  "info"
                ],
                "properties": {
                  "high": {
                    "type": "integer"
                  },
                  "medium": {
                    "type": "integer"
                  },
                  "low": {
                    "type": "integer"
                  },
                  "info": {
                    "type": "integer"
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "area",
                    "finding",
                    "fix"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low",
                        "info"
                      ]
                    },
                    "area": {
                      "type": "string"
                    },
                    "finding": {
                      "type": "string"
                    },
                    "fix": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "certificate": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "issuer",
                  "validTo",
                  "daysLeft",
                  "protocol",
                  "trusted"
                ],
                "properties": {
                  "issuer": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "validTo": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "daysLeft": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "protocol": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "trusted": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                }
              },
              "dnssec": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "httpsRedirect": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "securityTxt": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "present",
                  "contact",
                  "expires",
                  "expired",
                  "signed",
                  "fields"
                ],
                "properties": {
                  "present": {
                    "type": "boolean"
                  },
                  "contact": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "expires": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "expired": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "signed": {
                    "type": "boolean"
                  },
                  "fields": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "cookies": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "secure",
                    "httpOnly",
                    "sameSite"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "secure": {
                      "type": "boolean"
                    },
                    "httpOnly": {
                      "type": "boolean"
                    },
                    "sameSite": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "notice": {
                "type": "string"
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}