# SemverKit > Semantic versioning as a service: validate and parse versions, compare them (with the major/minor/patch change type), check a version against an npm range (^, ~, x, hyphen, ||), sort a list and pick the max satisfying version, and compute the next version. Same results as node-semver 7. Free web tool, JSON API and a remote MCP server for AI agents. Pure computation: no sign-up, no API key, nothing stored. ## For AI agents - [MCP server](https://semverkit.mike-tusa.workers.dev/mcp): remote MCP over Streamable HTTP (POST only, stateless, JSON responses). Protocol versions: 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Tools: `parse_version`, `compare_versions`, `check_range`, `resolve_versions`, `bump_version`. All read-only. Client config (most MCP clients accept this; some use a different format, for example VS Code uses a `servers` key): `{"mcpServers":{"semverkit":{"type":"http","url":"https://semverkit.mike-tusa.workers.dev/mcp"}}}` - [OpenAPI 3.1 spec](https://semverkit.mike-tusa.workers.dev/openapi.json): machine-readable description of the JSON API - [MCP server card](https://semverkit.mike-tusa.workers.dev/.well-known/mcp/server-card.json): static description of the MCP server and its tools - Works with AI agents and assistants that can call an MCP server or a JSON API, for example Muse, Claude, ChatGPT or Cursor (descriptive only). SemverKit is not affiliated with, endorsed by or sponsored by semver.org, npm, GitHub, the OpenJS Foundation, Meta, Anthropic, OpenAI or Anysphere. It reimplements the published Semantic Versioning 2.0.0 rules and npm range syntax and is tested against node-semver 7. ## JSON API (all GET, JSON responses) - `GET https://semverkit.mike-tusa.workers.dev/api/parse?version=v2.0.0-rc.1%2Bbuild.5`: { input, version, major, minor, patch, prerelease[], build[], isPrerelease, isStable, notes[] }. - `GET https://semverkit.mike-tusa.workers.dev/api/compare?a=1.2.3&b=1.10.0`: { a, b, result (-1|0|1), relation, diff (major|minor|patch|premajor|preminor|prepatch|prerelease|null), buildDiffers, notes[] }. - `GET https://semverkit.mike-tusa.workers.dev/api/satisfies?version=1.4.2&range=%5E1.2.0`: { version, range, normalized, satisfies, includePrerelease, notes[] }. - `GET https://semverkit.mike-tusa.workers.dev/api/resolve?versions=1.0.0,1.2.3,1.10.0,2.0.0-rc.1&range=%5E1.2`: 1-200 versions separated by commas. { sorted[], count, matching[], maxSatisfying, minSatisfying, latestStable, invalid[], duplicatesRemoved, normalized }. range is optional. - `GET https://semverkit.mike-tusa.workers.dev/api/bump?version=1.2.3&release=preminor&preid=beta`: { from, release, preid, version }. release: major | minor | patch | premajor | preminor | prepatch | prerelease | release (default patch). - Aliases: version=v, range=r, release=type. includePrerelease=true|false (default false) on satisfies and resolve. URL-encode ^ as %5E, + as %2B, spaces as %20 and | as %7C. - Every success body also carries apiVersion. `GET https://semverkit.mike-tusa.workers.dev/api/health`: { ok, version }. - Errors: { "error": { "code", "message", "field"? } } with 400 invalid_input / invalid_version / invalid_range, 404 not_found, 405 method_not_allowed, 429 rate_limited (Retry-After). - Versions: MAJOR.MINOR.PATCH with optional -prerelease and +build (one leading "v" is accepted), max 256 characters. Ranges: max 512 characters. Lists: up to 200 versions. Release types: major, minor, patch, premajor, preminor, prepatch, prerelease, release. Not supported: loose/coerced versions such as "1.2" or "01.2.3" (rejected as invalid, like semver.valid), Cargo/Maven/PEP 440 range dialects. - Precedence follows SemVer 2.0.0 item 11: numeric MAJOR.MINOR.PATCH, then a release sorts after its prereleases, prerelease identifiers compare numerically when numeric and in ASCII order otherwise, and build metadata is ignored. Ranges follow npm (node-semver 7): ^ allows changes that keep the left-most non-zero part, ~ allows patch changes (minor when only a major is given), 1.x / 1.2.* / * are wildcards, "a - b" is inclusive, || means OR and spaces mean AND. A prerelease such as 2.0.0-rc.1 only matches a range that names a prerelease on the same 2.0.0, unless includePrerelease is true. ## Limits and pricing - No API key and no sign-up. About 60 checks per minute per IP across all /api routes and MCP tools/call (HTTP 429 + Retry-After). Free; there is no paid tier on this site. - The MCP endpoint uses the same limiter: each `tools/call` is one check. Non-check MCP messages don't count as checks, but are capped at about 120/min per IP (HTTP 429 + Retry-After). MCP request bodies are limited to 65536 bytes. - Versions and ranges you submit are processed in memory and discarded when the response is sent. They are never written to storage, logs or analytics, and SemverKit makes no network requests (it does not look anything up on npm or any registry). ## Optional - [Privacy](https://semverkit.mike-tusa.workers.dev/privacy) - [Terms](https://semverkit.mike-tusa.workers.dev/terms) - Contact: digitalpromohub.support@gmail.com