{
  "serverInfo": {
    "name": "semverkit",
    "title": "SemverKit",
    "version": "0.1.0"
  },
  "description": "Semantic versioning tools: parse, compare, npm range check, sort/max-satisfying and bump (node-semver 7 compatible). No API key: about 60 checks per minute per IP.",
  "homepage": "https://semverkit.mike-tusa.workers.dev/",
  "contact": {
    "email": "digitalpromohub.support@gmail.com"
  },
  "transport": {
    "type": "streamable-http",
    "url": "https://semverkit.mike-tusa.workers.dev/mcp"
  },
  "protocolVersions": [
    "2026-07-28",
    "2025-11-25",
    "2025-06-18",
    "2025-03-26",
    "2024-11-05"
  ],
  "capabilities": {
    "tools": {
      "listChanged": false
    }
  },
  "authentication": {
    "required": false
  },
  "instructions": "SemverKit answers Semantic Versioning 2.0.0 questions with the same rules npm uses (node-semver 7), computed instead of guessed. parse_version validates and splits a version; compare_versions gives precedence (-1/0/1) and the change type (major, minor, patch, premajor, prerelease…); check_range tests a version against an npm range (^, ~, x-ranges, hyphen ranges, comparators, ||) and returns the desugared range; resolve_versions sorts up to 200 versions and returns which match a range plus the max/min satisfying and latest stable; bump_version computes the next version like npm version / semver.inc. Prereleases follow npm's rule: they only match a range that names a prerelease on the same major.minor.patch, unless includePrerelease is true. Build metadata is ignored for precedence. Pure computation, nothing stored, no network calls, no registry lookups. No API key: about 60 checks per minute per IP.",
  "tools": [
    {
      "name": "parse_version",
      "title": "Parse and validate a semantic version",
      "description": "Validate a version against SemVer 2.0.0 and split it into major, minor, patch, prerelease identifiers and build metadata, with isPrerelease/isStable flags. Read-only. Same engine as GET /api/parse.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "Version: a semantic version such as \"1.4.2\", \"v2.0.0\" or \"3.0.0-rc.1+build.5\"."
          }
        },
        "required": [
          "version"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "input": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "major": {
            "type": "integer"
          },
          "minor": {
            "type": "integer"
          },
          "patch": {
            "type": "integer"
          },
          "prerelease": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "integer"
              ]
            }
          },
          "build": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "isPrerelease": {
            "type": "boolean"
          },
          "isStable": {
            "type": "boolean"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "apiVersion": {
            "type": "string"
          }
        },
        "required": [
          "version",
          "major",
          "minor",
          "patch",
          "isPrerelease",
          "apiVersion"
        ]
      },
      "annotations": {
        "title": "Parse a semantic version",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "compare_versions",
      "title": "Compare two semantic versions",
      "description": "Compare a and b by SemVer precedence (prereleases sort before the release, build metadata ignored). Returns -1, 0 or 1 and the change type from the lower to the higher version (major, minor, patch, premajor, preminor, prepatch, prerelease) exactly like semver.diff. Read-only. Same engine as GET /api/compare.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "a": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "First version: a semantic version such as \"1.4.2\", \"v2.0.0\" or \"3.0.0-rc.1+build.5\"."
          },
          "b": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "Second version: a semantic version such as \"1.4.2\", \"v2.0.0\" or \"3.0.0-rc.1+build.5\"."
          }
        },
        "required": [
          "a",
          "b"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "a": {
            "type": "string"
          },
          "b": {
            "type": "string"
          },
          "result": {
            "type": "integer"
          },
          "relation": {
            "type": "string"
          },
          "diff": {
            "type": [
              "string",
              "null"
            ]
          },
          "buildDiffers": {
            "type": "boolean"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "apiVersion": {
            "type": "string"
          }
        },
        "required": [
          "result",
          "relation",
          "diff",
          "apiVersion"
        ]
      },
      "annotations": {
        "title": "Compare versions",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "check_range",
      "title": "Check a version against an npm range",
      "description": "Does a version satisfy an npm-style range (^, ~, x-ranges, hyphen ranges, comparators, || alternatives)? Returns the answer and the range desugared into plain comparators (e.g. ^0.2.3 → >=0.2.3 <0.3.0-0), with a note when npm's prerelease rule is why it fails. Read-only. Same engine as GET /api/satisfies.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "Version to test: a semantic version such as \"1.4.2\", \"v2.0.0\" or \"3.0.0-rc.1+build.5\"."
          },
          "range": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512,
            "description": "npm-style range, e.g. \"^1.2.0\", \"~1.4\", \">=1.0.0 <2.0.0\", \"1.2.3 - 2.x\", \"1.x || >=3.0.0-beta.1\"."
          },
          "includePrerelease": {
            "type": "boolean",
            "default": false,
            "description": "Let prereleases match any range they fall inside (npm includePrerelease). Default false (npm behaviour)."
          }
        },
        "required": [
          "version",
          "range"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string"
          },
          "range": {
            "type": "string"
          },
          "normalized": {
            "type": "string"
          },
          "satisfies": {
            "type": "boolean"
          },
          "includePrerelease": {
            "type": "boolean"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "apiVersion": {
            "type": "string"
          }
        },
        "required": [
          "satisfies",
          "normalized",
          "apiVersion"
        ]
      },
      "annotations": {
        "title": "Check a range",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "resolve_versions",
      "title": "Sort versions and resolve a range",
      "description": "Sort 1 to 200 versions by SemVer precedence (duplicates removed, invalid ones listed separately) and, if a range is given, return the matching versions plus maxSatisfying / minSatisfying (what npm would install from that list) and the latest stable version. Read-only. Same engine as GET /api/resolve.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "versions": {
            "type": "array",
            "minItems": 1,
            "maxItems": 200,
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "description": "Version: a semantic version such as \"1.4.2\", \"v2.0.0\" or \"3.0.0-rc.1+build.5\"."
            },
            "description": "1 to 200 versions."
          },
          "range": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512,
            "description": "npm-style range, e.g. \"^1.2.0\", \"~1.4\", \">=1.0.0 <2.0.0\", \"1.2.3 - 2.x\", \"1.x || >=3.0.0-beta.1\"."
          },
          "includePrerelease": {
            "type": "boolean",
            "default": false,
            "description": "Let prereleases match any range they fall inside (npm includePrerelease). Default false (npm behaviour)."
          }
        },
        "required": [
          "versions"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "range": {
            "type": [
              "string",
              "null"
            ]
          },
          "normalized": {
            "type": [
              "string",
              "null"
            ]
          },
          "includePrerelease": {
            "type": "boolean"
          },
          "sorted": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "count": {
            "type": "integer"
          },
          "matching": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "maxSatisfying": {
            "type": [
              "string",
              "null"
            ]
          },
          "minSatisfying": {
            "type": [
              "string",
              "null"
            ]
          },
          "latestStable": {
            "type": [
              "string",
              "null"
            ]
          },
          "invalid": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "duplicatesRemoved": {
            "type": "integer"
          },
          "apiVersion": {
            "type": "string"
          }
        },
        "required": [
          "sorted",
          "matching",
          "maxSatisfying",
          "apiVersion"
        ]
      },
      "annotations": {
        "title": "Resolve versions",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "bump_version",
      "title": "Compute the next version",
      "description": "Compute the next version for a release type (major, minor, patch, premajor, preminor, prepatch, prerelease, release), with an optional prerelease id such as alpha, beta or rc, exactly like npm version / semver.inc. Read-only: nothing is published. Same engine as GET /api/bump.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "Current version: a semantic version such as \"1.4.2\", \"v2.0.0\" or \"3.0.0-rc.1+build.5\"."
          },
          "release": {
            "type": "string",
            "enum": [
              "major",
              "minor",
              "patch",
              "premajor",
              "preminor",
              "prepatch",
              "prerelease",
              "release"
            ],
            "default": "patch",
            "description": "Release type."
          },
          "preid": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "description": "Prerelease identifier, e.g. \"beta\" (for pre* and prerelease)."
          }
        },
        "required": [
          "version"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string"
          },
          "release": {
            "type": "string"
          },
          "preid": {
            "type": [
              "string",
              "null"
            ]
          },
          "version": {
            "type": "string"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "apiVersion": {
            "type": "string"
          }
        },
        "required": [
          "from",
          "version",
          "apiVersion"
        ]
      },
      "annotations": {
        "title": "Bump a version",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    }
  ]
}