Server definition
- Hash
- sha256:b24bf2d8f3644c8669c039221585dc5be2676906cec9ff3ce9f65bea2da03d32
- What it is
- What a remote MCP server returned when asked what it offers: 5 tools
The blob, as servednamed by its sha256
{
"instructions": "What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. When you quote an entry, keep its labels, cite the vendor's own release notes by URL, and attribute What's New (whatsnew.fyi). Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. Start with list_products to learn valid slugs; whats_new answers \"what changed since the version I run\". upgrade_notes takes the dependencies you are upgrading and answers per package — pass each one's installed version and, from its own package.json, its repository; a Maven, Go, NuGet or Actions package goes by its purl. missing_changes takes a whole project's outdated report (npm outdated, pip list --outdated, go list -m -u) and answers what the project is missing — security releases, CVEs and fixes, most exposed first, split at the version its declared range admits; call upgrade_notes on the packages worth moving. A Maven, Go or NuGet package either tool does not track is checked against deps.dev after the answer and counted; pass recordMisses: false for private packages.",
"tools": [
{
"description": "The products What's New tracks release notes for, with slugs, categories and platforms. Filter by category and/or a name query.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"category": {
"description": "Limit results to one product category.",
"enum": [
"Developer Tools",
"Frameworks & Libraries",
"Languages & Runtimes",
"Infrastructure & DevOps",
"Databases & Data",
"Security & Privacy",
"Games",
"Gaming Tools",
"Operating Systems",
"System Utilities",
"Browsers",
"Communication",
"Media",
"Creative Tools",
"AI",
"Productivity",
"Lifestyle & Apps",
"Firmware",
"Drivers"
],
"type": "string"
},
"query": {
"description": "Filter by name, e.g. \"terminal\" or \"jetbrains\".",
"maxLength": 64,
"type": "string"
},
"sort": {
"description": "\"popular\" ranks by current audience popularity — outside signals (stars, downloads, players) blended with this site's own readers — and answers \"what are the most popular software right now?\". Default is the curated catalog order (or search relevance when query is set, which ignores sort).",
"enum": [
"curated",
"popular"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_products",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"products": {
"items": {
"additionalProperties": false,
"properties": {
"archived": {
"description": "Whether the upstream repository is archived; absent when unknown.",
"type": "boolean"
},
"category": {
"enum": [
"Developer Tools",
"Frameworks & Libraries",
"Languages & Runtimes",
"Infrastructure & DevOps",
"Databases & Data",
"Security & Privacy",
"Games",
"Gaming Tools",
"Operating Systems",
"System Utilities",
"Browsers",
"Communication",
"Media",
"Creative Tools",
"AI",
"Productivity",
"Lifestyle & Apps",
"Firmware",
"Drivers"
],
"type": "string"
},
"description": {
"type": "string"
},
"homepage": {
"description": "The vendor's own site.",
"type": "string"
},
"labels": {
"description": "Provenance to keep with any quote, e.g. “Sample data”.",
"items": {
"type": "string"
},
"type": "array"
},
"language": {
"type": "string"
},
"license": {
"description": "SPDX expression as the product's own source states it, e.g. MIT or LicenseRef-proprietary; absent when unknown.",
"type": "string"
},
"name": {
"type": "string"
},
"platforms": {
"items": {
"type": "string"
},
"type": "array"
},
"slug": {
"type": "string"
},
"url": {
"description": "This product's page on What's New.",
"type": "string"
},
"vendor": {
"type": "string"
}
},
"required": [
"slug",
"name",
"vendor",
"category",
"description",
"url",
"homepage"
],
"type": "object"
},
"type": "array"
},
"returned": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"total": {
"description": "Matches before the cap.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"truncated": {
"const": true,
"type": "boolean"
}
},
"required": [
"total",
"returned",
"products"
],
"type": "object"
}
},
{
"description": "For a whole project's outdated report — npm/pnpm outdated --json (current → from, wanted, latest), ncu --format installedVersion, pip or uv pip list --outdated --format json (version → from, latest_version → latest), go list -m -u -json all (Version → from, Update.Version → latest), cargo outdated, dotnet list package --outdated, a Gradle versions report — pass each package with the version installed and, where the tool gives them, wanted and latest. Answers what the project is missing, most exposed first: per package, the security releases, CVE ids and fixes it does not have, split into toWanted (from → wanted: reachable by an update within the declared range, no manifest edit) and toLatest (→ latest: needs the range changed), with the cost of moving beside them (major bump, breaking mentions, removed/deprecated) and a few of the fixes themselves. Counts are deterministic over every tracked release; no model judged anything. Up to 100 packages a call. Pass repository (from the package's own package.json) for scoped or renamed packages; a Maven, Go or NuGet package goes by its purl. For the vendor's own breaking-change and migration sections, call upgrade_notes on the packages worth moving. A Maven, Go or NuGet package this server does not track is checked against deps.dev after the answer and counted; pass recordMisses: false for private packages.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"dependencies": {
"description": "Up to 100 per call; split a larger project.",
"items": {
"properties": {
"from": {
"description": "The version installed now — a version, not a range: npm outdated's `current`, pip's `version`, go's `Version`.",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"latest": {
"description": "The newest version published — outdated's `latest`, pip's `latest_version`, go's `Update.Version`. Omit for everything tracked after `wanted` (or `from`).",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"name": {
"description": "The package as its ecosystem spells it: \"better-auth\", \"@tanstack/react-query\", a Maven \"group:artifact\", a Go module path, or an Action's \"owner/repo@ref\".",
"maxLength": 214,
"minLength": 1,
"type": "string"
},
"purl": {
"description": "The package as a purl (package URL), e.g. \"pkg:maven/com.squareup.okhttp3/okhttp\", \"pkg:golang/github.com/spf13/cobra\" or \"pkg:nuget/Newtonsoft.Json\" — what an SBOM, OSV or Renovate already names it by. Takes precedence over name and registry; a version inside it is ignored in favour of the versions passed beside it.",
"maxLength": 300,
"pattern": "^[Pp][Kk][Gg]:",
"type": "string"
},
"registry": {
"description": "Default npm — unless purl, or the name's own shape (group:artifact, a Go module path), says otherwise.",
"enum": [
"npm",
"pypi",
"crates",
"rubygems"
],
"type": "string"
},
"repository": {
"description": "The package's source repository — its package.json `repository`, or the repo a Maven or NuGet package is built from (any GitHub URL, github:owner/repo or owner/repo). Resolves scoped and renamed packages the name alone cannot, and makes the match exact.",
"maxLength": 300,
"type": "string"
},
"wanted": {
"description": "The greatest version the declared range admits — npm/pnpm outdated's `wanted`, what an update reaches without editing the manifest. Omit where the tool reports none.",
"maxLength": 100,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"from"
],
"type": "object"
},
"maxItems": 100,
"minItems": 1,
"type": "array"
},
"recordMisses": {
"description": "Default true. A Maven, Go or NuGet package this server does not track is checked against deps.dev after the answer and counted per day, with nothing about the caller, to decide what to track next. Pass false for private packages.",
"type": "boolean"
}
},
"required": [
"dependencies"
],
"type": "object"
},
"name": "missing_changes",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"dependencies": {
"description": "Most exposed first — CVEs, then security releases, then fixes, then releases behind; untracked last, in the order given.",
"items": {
"additionalProperties": false,
"properties": {
"from": {
"type": "string"
},
"latest": {
"type": "string"
},
"match": {
"additionalProperties": false,
"properties": {
"matchedKey": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"tier": {
"description": "identifier: a registry id, a purl or a repository the catalog tracks. namespace: the package sits under a namespace the product claims (a Maven group, say) — the notes are the family's. name: a name-only guess — check the product before trusting it, and pass purl or repository to make it exact.",
"enum": [
"identifier",
"namespace",
"name"
],
"type": "string"
},
"url": {
"description": "The product's page on What's New.",
"type": "string"
},
"vendor": {
"type": "string"
}
},
"required": [
"slug",
"name",
"vendor",
"url",
"tier",
"matchedKey"
],
"type": "object"
},
"name": {
"type": "string"
},
"notes": {
"description": "How the package was resolved.",
"items": {
"type": "string"
},
"type": "array"
},
"purl": {
"description": "The package as a versionless purl, as it was matched.",
"type": "string"
},
"registry": {
"enum": [
"npm",
"pypi",
"crates",
"rubygems"
],
"type": "string"
},
"status": {
"description": "untracked is not in the catalog.",
"enum": [
"ok",
"untracked"
],
"type": "string"
},
"toLatest": {
"additionalProperties": false,
"description": "wanted (or from) → latest: what needs the range changed. Absent when wanted was passed without latest, or equals it.",
"properties": {
"ahead": {
"const": true,
"description": "`from` is newer than anything we track.",
"type": "boolean"
},
"compareMarkdownUrl": {
"description": "The same interval as markdown, with every release's notes.",
"type": "string"
},
"compareUrl": {
"description": "The interval as one page on What's New.",
"type": "string"
},
"cost": {
"additionalProperties": false,
"description": "What moving would cost — deterministic signals, no model's reading. upgrade_notes has the vendor's own breaking and migration sections.",
"properties": {
"breakingMentions": {
"description": "Releases whose notes say “breaking change”.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"deprecated": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"majorBump": {
"type": "boolean"
},
"removed": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"majorBump",
"breakingMentions",
"removed",
"deprecated"
],
"type": "object"
},
"from": {
"additionalProperties": false,
"properties": {
"date": {
"description": "ISO 8601, when tracked.",
"type": "string"
},
"label": {
"type": "string"
},
"tracked": {
"description": "Whether this exact version is in the history we hold.",
"type": "boolean"
},
"url": {
"description": "The release's page here, when tracked.",
"type": "string"
}
},
"required": [
"label",
"tracked"
],
"type": "object"
},
"gain": {
"additionalProperties": false,
"description": "What the project is missing, counted over every release in the interval.",
"properties": {
"cves": {
"items": {
"type": "string"
},
"type": "array"
},
"fixed": {
"description": "Releases carrying a fix.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"security": {
"description": "Releases carrying a security change.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"uncategorized": {
"description": "Releases with no categorized changes — not enriched, or notes that yielded none; they may hold fixes the counts miss.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"security",
"fixed",
"cves",
"uncategorized"
],
"type": "object"
},
"items": {
"additionalProperties": false,
"description": "A sample of the changes themselves, security first.",
"properties": {
"fixed": {
"items": {
"additionalProperties": false,
"properties": {
"synthesized": {
"const": true,
"description": "Summarized from commit messages because the vendor published no notes.",
"type": "boolean"
},
"text": {
"type": "string"
},
"truncated": {
"const": true,
"description": "Cut at the cap; the release's page has it whole.",
"type": "boolean"
},
"versions": {
"description": "The versions that shipped it, newest first.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"text",
"versions"
],
"type": "object"
},
"type": "array"
},
"security": {
"items": {
"additionalProperties": false,
"properties": {
"synthesized": {
"const": true,
"description": "Summarized from commit messages because the vendor published no notes.",
"type": "boolean"
},
"text": {
"type": "string"
},
"truncated": {
"const": true,
"description": "Cut at the cap; the release's page has it whole.",
"type": "boolean"
},
"versions": {
"description": "The versions that shipped it, newest first.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"text",
"versions"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"security",
"fixed"
],
"type": "object"
},
"itemsTruncated": {
"const": true,
"description": "More security or fixed items exist than are listed; compareUrl or upgrade_notes has them all.",
"type": "boolean"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
},
"releases": {
"description": "Releases numbered inside the interval.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"status": {
"description": "ok answers; unreadable is a version the grammar cannot read (a range is not a version); unversioned is a source whose notes carry no numbers; the rest name why the pair has no interval.",
"enum": [
"ok",
"unversioned",
"unreadable",
"unplaceable",
"same",
"reversed",
"unorderable"
],
"type": "string"
},
"to": {
"additionalProperties": false,
"description": "Absent when the interval runs to the newest we track.",
"properties": {
"date": {
"description": "ISO 8601, when tracked.",
"type": "string"
},
"label": {
"type": "string"
},
"tracked": {
"description": "Whether this exact version is in the history we hold.",
"type": "boolean"
},
"url": {
"description": "The release's page here, when tracked.",
"type": "string"
}
},
"required": [
"label",
"tracked"
],
"type": "object"
},
"truncated": {
"const": true,
"description": "`from` sits below the history we hold, so every count is a lower bound.",
"type": "boolean"
},
"unordered": {
"description": "Rows the comparator could not place against it.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"from",
"status",
"releases",
"unordered"
],
"type": "object"
},
"toWanted": {
"additionalProperties": false,
"description": "from → wanted: what an update within the declared range would bring. Present when wanted was passed.",
"properties": {
"ahead": {
"const": true,
"description": "`from` is newer than anything we track.",
"type": "boolean"
},
"compareMarkdownUrl": {
"description": "The same interval as markdown, with every release's notes.",
"type": "string"
},
"compareUrl": {
"description": "The interval as one page on What's New.",
"type": "string"
},
"cost": {
"additionalProperties": false,
"description": "What moving would cost — deterministic signals, no model's reading. upgrade_notes has the vendor's own breaking and migration sections.",
"properties": {
"breakingMentions": {
"description": "Releases whose notes say “breaking change”.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"deprecated": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"majorBump": {
"type": "boolean"
},
"removed": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"majorBump",
"breakingMentions",
"removed",
"deprecated"
],
"type": "object"
},
"from": {
"additionalProperties": false,
"properties": {
"date": {
"description": "ISO 8601, when tracked.",
"type": "string"
},
"label": {
"type": "string"
},
"tracked": {
"description": "Whether this exact version is in the history we hold.",
"type": "boolean"
},
"url": {
"description": "The release's page here, when tracked.",
"type": "string"
}
},
"required": [
"label",
"tracked"
],
"type": "object"
},
"gain": {
"additionalProperties": false,
"description": "What the project is missing, counted over every release in the interval.",
"properties": {
"cves": {
"items": {
"type": "string"
},
"type": "array"
},
"fixed": {
"description": "Releases carrying a fix.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"security": {
"description": "Releases carrying a security change.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"uncategorized": {
"description": "Releases with no categorized changes — not enriched, or notes that yielded none; they may hold fixes the counts miss.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"security",
"fixed",
"cves",
"uncategorized"
],
"type": "object"
},
"items": {
"additionalProperties": false,
"description": "A sample of the changes themselves, security first.",
"properties": {
"fixed": {
"items": {
"additionalProperties": false,
"properties": {
"synthesized": {
"const": true,
"description": "Summarized from commit messages because the vendor published no notes.",
"type": "boolean"
},
"text": {
"type": "string"
},
"truncated": {
"const": true,
"description": "Cut at the cap; the release's page has it whole.",
"type": "boolean"
},
"versions": {
"description": "The versions that shipped it, newest first.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"text",
"versions"
],
"type": "object"
},
"type": "array"
},
"security": {
"items": {
"additionalProperties": false,
"properties": {
"synthesized": {
"const": true,
"description": "Summarized from commit messages because the vendor published no notes.",
"type": "boolean"
},
"text": {
"type": "string"
},
"truncated": {
"const": true,
"description": "Cut at the cap; the release's page has it whole.",
"type": "boolean"
},
"versions": {
"description": "The versions that shipped it, newest first.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"text",
"versions"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"security",
"fixed"
],
"type": "object"
},
"itemsTruncated": {
"const": true,
"description": "More security or fixed items exist than are listed; compareUrl or upgrade_notes has them all.",
"type": "boolean"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
},
"releases": {
"description": "Releases numbered inside the interval.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"status": {
"description": "ok answers; unreadable is a version the grammar cannot read (a range is not a version); unversioned is a source whose notes carry no numbers; the rest name why the pair has no interval.",
"enum": [
"ok",
"unversioned",
"unreadable",
"unplaceable",
"same",
"reversed",
"unorderable"
],
"type": "string"
},
"to": {
"additionalProperties": false,
"description": "Absent when the interval runs to the newest we track.",
"properties": {
"date": {
"description": "ISO 8601, when tracked.",
"type": "string"
},
"label": {
"type": "string"
},
"tracked": {
"description": "Whether this exact version is in the history we hold.",
"type": "boolean"
},
"url": {
"description": "The release's page here, when tracked.",
"type": "string"
}
},
"required": [
"label",
"tracked"
],
"type": "object"
},
"truncated": {
"const": true,
"description": "`from` sits below the history we hold, so every count is a lower bound.",
"type": "boolean"
},
"unordered": {
"description": "Rows the comparator could not place against it.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"from",
"status",
"releases",
"unordered"
],
"type": "object"
},
"wanted": {
"type": "string"
}
},
"required": [
"name",
"from",
"status"
],
"type": "object"
},
"type": "array"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
},
"summary": {
"additionalProperties": false,
"properties": {
"behindInRange": {
"description": "Dependencies with at least one release inside toWanted.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"cves": {
"items": {
"type": "string"
},
"type": "array"
},
"dependencies": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"tracked": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"withSecurity": {
"description": "Dependencies missing a security release or a CVE fix in either interval.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"dependencies",
"tracked",
"behindInRange",
"withSecurity",
"cves"
],
"type": "object"
}
},
"required": [
"summary",
"dependencies"
],
"type": "object"
}
},
{
"description": "Full-catalog search across product names and release history. Returns matching products and releases with permalinks.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"category": {
"description": "Limit results to one product category.",
"enum": [
"Developer Tools",
"Frameworks & Libraries",
"Languages & Runtimes",
"Infrastructure & DevOps",
"Databases & Data",
"Security & Privacy",
"Games",
"Gaming Tools",
"Operating Systems",
"System Utilities",
"Browsers",
"Communication",
"Media",
"Creative Tools",
"AI",
"Productivity",
"Lifestyle & Apps",
"Firmware",
"Drivers"
],
"type": "string"
},
"query": {
"description": "Search products and release notes. At least 2 characters.",
"maxLength": 200,
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_releases",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"category": {
"description": "Limit results to one product category.",
"enum": [
"Developer Tools",
"Frameworks & Libraries",
"Languages & Runtimes",
"Infrastructure & DevOps",
"Databases & Data",
"Security & Privacy",
"Games",
"Gaming Tools",
"Operating Systems",
"System Utilities",
"Browsers",
"Communication",
"Media",
"Creative Tools",
"AI",
"Productivity",
"Lifestyle & Apps",
"Firmware",
"Drivers"
],
"type": "string"
},
"note": {
"description": "Present when nothing matched.",
"type": "string"
},
"products": {
"items": {
"additionalProperties": false,
"properties": {
"archived": {
"description": "Whether the upstream repository is archived; absent when unknown.",
"type": "boolean"
},
"category": {
"enum": [
"Developer Tools",
"Frameworks & Libraries",
"Languages & Runtimes",
"Infrastructure & DevOps",
"Databases & Data",
"Security & Privacy",
"Games",
"Gaming Tools",
"Operating Systems",
"System Utilities",
"Browsers",
"Communication",
"Media",
"Creative Tools",
"AI",
"Productivity",
"Lifestyle & Apps",
"Firmware",
"Drivers"
],
"type": "string"
},
"description": {
"type": "string"
},
"homepage": {
"description": "The vendor's own site.",
"type": "string"
},
"labels": {
"description": "Provenance to keep with any quote, e.g. “Sample data”.",
"items": {
"type": "string"
},
"type": "array"
},
"language": {
"type": "string"
},
"license": {
"description": "SPDX expression as the product's own source states it, e.g. MIT or LicenseRef-proprietary; absent when unknown.",
"type": "string"
},
"name": {
"type": "string"
},
"platforms": {
"items": {
"type": "string"
},
"type": "array"
},
"slug": {
"type": "string"
},
"url": {
"description": "This product's page on What's New.",
"type": "string"
},
"vendor": {
"type": "string"
}
},
"required": [
"slug",
"name",
"vendor",
"category",
"description",
"url",
"homepage"
],
"type": "object"
},
"type": "array"
},
"query": {
"description": "The query as searched — trimmed and capped.",
"type": "string"
},
"releases": {
"items": {
"additionalProperties": false,
"properties": {
"changes": {
"items": {
"additionalProperties": false,
"properties": {
"category": {
"enum": [
"added",
"changed",
"fixed",
"removed",
"deprecated",
"security"
],
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"category",
"text"
],
"type": "object"
},
"type": "array"
},
"channel": {
"description": "The source's own classification, e.g. “longterm”.",
"type": "string"
},
"date": {
"description": "ISO 8601 timestamp.",
"type": "string"
},
"labels": {
"description": "Provenance to keep with any quote, e.g. “Pre-release”.",
"items": {
"type": "string"
},
"type": "array"
},
"prerelease": {
"const": true,
"type": "boolean"
},
"product": {
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
}
},
"required": [
"slug",
"name"
],
"type": "object"
},
"sourceUrl": {
"description": "The vendor's own release notes.",
"type": "string"
},
"summary": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"description": "This release's page on What's New.",
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"title",
"date",
"url",
"sourceUrl",
"product"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"query",
"products",
"releases"
],
"type": "object"
}
},
{
"description": "Before or after upgrading dependencies — package.json / lockfile / requirements changes, npm update, pip install -U, a Gradle version catalog, go.mod, a workflow's actions — pass each package with the version you run and the version you are moving to. Returns every tracked release in between with the vendor's own breaking-change, deprecation, migration and security sections verbatim, the categorized change list, CVE ids and deterministic signals (major bump, removed/deprecated items, breaking mentions) — including breaking changes shipped in minor or patch versions. Pass repository (from the package's own package.json) for scoped or renamed packages; it makes the match exact. A Maven/Gradle, Go, NuGet or GitHub Actions package goes by its purl (e.g. pkg:maven/com.squareup.okhttp3/okhttp), or by its own coordinate as the name (group:artifact, a module path, owner/repo@ref), and is matched exactly or not at all. A Maven, Go or NuGet package this server does not track is checked against deps.dev after the answer and counted, to decide what to track next; pass recordMisses: false for private packages.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"dependencies": {
"description": "Up to 20 per call; split a larger upgrade.",
"items": {
"properties": {
"from": {
"description": "The version installed now — a version, not a range: read it from the lockfile.",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"name": {
"description": "The package as its ecosystem spells it: \"better-auth\", \"@tanstack/react-query\", a Maven \"group:artifact\", a Go module path, or an Action's \"owner/repo@ref\".",
"maxLength": 214,
"minLength": 1,
"type": "string"
},
"purl": {
"description": "The package as a purl (package URL), e.g. \"pkg:maven/com.squareup.okhttp3/okhttp\", \"pkg:golang/github.com/spf13/cobra\" or \"pkg:nuget/Newtonsoft.Json\" — what an SBOM, OSV or Renovate already names it by. Takes precedence over name and registry; a version inside it is ignored in favour of the versions passed beside it.",
"maxLength": 300,
"pattern": "^[Pp][Kk][Gg]:",
"type": "string"
},
"registry": {
"description": "Default npm — unless purl, or the name's own shape (group:artifact, a Go module path), says otherwise.",
"enum": [
"npm",
"pypi",
"crates",
"rubygems"
],
"type": "string"
},
"repository": {
"description": "The package's source repository — its package.json `repository`, or the repo a Maven or NuGet package is built from (any GitHub URL, github:owner/repo or owner/repo). Resolves scoped and renamed packages the name alone cannot, and makes the match exact.",
"maxLength": 300,
"type": "string"
},
"to": {
"description": "The version being moved to. Omit for everything after `from` that is tracked.",
"maxLength": 100,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"from"
],
"type": "object"
},
"maxItems": 20,
"minItems": 1,
"type": "array"
},
"recordMisses": {
"description": "Default true. A Maven, Go or NuGet package this server does not track is checked against deps.dev after the answer and counted per day, with nothing about the caller, to decide what to track next. Pass false for private packages.",
"type": "boolean"
}
},
"required": [
"dependencies"
],
"type": "object"
},
"name": "upgrade_notes",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"dependencies": {
"items": {
"additionalProperties": false,
"properties": {
"changes": {
"description": "Every categorized change across the interval, merged across releases, removed/deprecated/security first.",
"items": {
"additionalProperties": false,
"properties": {
"category": {
"enum": [
"added",
"changed",
"fixed",
"removed",
"deprecated",
"security"
],
"type": "string"
},
"items": {
"items": {
"additionalProperties": false,
"properties": {
"synthesized": {
"const": true,
"description": "Summarized from commit messages because the vendor published no notes.",
"type": "boolean"
},
"text": {
"type": "string"
},
"versions": {
"description": "The versions that shipped it, newest first — several when a fix landed on more than one branch.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"text",
"versions"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"category",
"items"
],
"type": "object"
},
"type": "array"
},
"changesTruncated": {
"const": true,
"type": "boolean"
},
"compareMarkdownUrl": {
"description": "The same interval as markdown, with every release's notes.",
"type": "string"
},
"compareUrl": {
"description": "The interval as one page on What's New.",
"type": "string"
},
"from": {
"type": "string"
},
"interval": {
"additionalProperties": false,
"properties": {
"ahead": {
"const": true,
"description": "`from` is newer than anything we track.",
"type": "boolean"
},
"from": {
"additionalProperties": false,
"properties": {
"date": {
"description": "ISO 8601, when tracked.",
"type": "string"
},
"label": {
"type": "string"
},
"tracked": {
"description": "Whether this exact version is in the history we hold.",
"type": "boolean"
},
"url": {
"description": "The release's page here, when tracked.",
"type": "string"
}
},
"required": [
"label",
"tracked"
],
"type": "object"
},
"newest": {
"description": "The newest version we hold.",
"type": "string"
},
"oldest": {
"description": "The oldest version we hold.",
"type": "string"
},
"releases": {
"description": "Releases numbered inside the interval.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"to": {
"additionalProperties": false,
"description": "Absent when the call named no `to`.",
"properties": {
"date": {
"description": "ISO 8601, when tracked.",
"type": "string"
},
"label": {
"type": "string"
},
"tracked": {
"description": "Whether this exact version is in the history we hold.",
"type": "boolean"
},
"url": {
"description": "The release's page here, when tracked.",
"type": "string"
}
},
"required": [
"label",
"tracked"
],
"type": "object"
},
"truncated": {
"const": true,
"description": "`from` sits below the history we hold, so `releases` is a lower bound.",
"type": "boolean"
},
"unordered": {
"description": "Rows the comparator could not place against it.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"from",
"releases",
"unordered"
],
"type": "object"
},
"match": {
"additionalProperties": false,
"properties": {
"matchedKey": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"tier": {
"description": "identifier: a registry id, a purl or a repository the catalog tracks. namespace: the package sits under a namespace the product claims (a Maven group, say) — the notes are the family's. name: a name-only guess — check the product before trusting it, and pass purl or repository to make it exact.",
"enum": [
"identifier",
"namespace",
"name"
],
"type": "string"
},
"url": {
"description": "The product's page on What's New.",
"type": "string"
},
"vendor": {
"type": "string"
}
},
"required": [
"slug",
"name",
"vendor",
"url",
"tier",
"matchedKey"
],
"type": "object"
},
"name": {
"type": "string"
},
"notes": {
"description": "How the package and its versions were resolved, and what was cut.",
"items": {
"type": "string"
},
"type": "array"
},
"purl": {
"description": "The package as a versionless purl, as it was matched.",
"type": "string"
},
"registry": {
"description": "The registry, when the package is in one of these four; absent for a Maven, Go, NuGet or Actions package.",
"enum": [
"npm",
"pypi",
"crates",
"rubygems"
],
"type": "string"
},
"releases": {
"description": "Newest first.",
"items": {
"additionalProperties": false,
"properties": {
"breakingMention": {
"const": true,
"description": "The vendor's own words say “breaking change”.",
"type": "boolean"
},
"cveIds": {
"items": {
"type": "string"
},
"type": "array"
},
"date": {
"description": "ISO 8601 timestamp.",
"type": "string"
},
"deprecated": {
"const": true,
"type": "boolean"
},
"labels": {
"description": "Provenance to keep with any quote, e.g. “Sample data”.",
"items": {
"type": "string"
},
"type": "array"
},
"notesOmitted": {
"const": true,
"description": "Past the per-call body budget: listed by version only; the permalink has the notes.",
"type": "boolean"
},
"removed": {
"const": true,
"type": "boolean"
},
"sections": {
"description": "What the vendor filed under its own breaking / security / deprecation / migration headings.",
"items": {
"additionalProperties": false,
"properties": {
"heading": {
"type": "string"
},
"key": {
"enum": [
"breaking",
"security",
"deprecated",
"migration"
],
"type": "string"
},
"text": {
"description": "Verbatim from the vendor's notes.",
"type": "string"
},
"truncated": {
"const": true,
"description": "Cut at the cap; the release's permalink has it whole.",
"type": "boolean"
},
"under": {
"description": "The heading this section sits under — in a monorepo's release note, the package it is about.",
"type": "string"
}
},
"required": [
"key",
"heading",
"text"
],
"type": "object"
},
"type": "array"
},
"sectionsOmitted": {
"const": true,
"description": "A budget cut a section or left one out; the permalink has them all.",
"type": "boolean"
},
"security": {
"const": true,
"type": "boolean"
},
"sourceUrl": {
"description": "The vendor's own release notes; present when the notes were read.",
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"description": "This release's page on What's New.",
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"version",
"title",
"date",
"url"
],
"type": "object"
},
"type": "array"
},
"signals": {
"additionalProperties": false,
"description": "Deterministic, over every release in the interval: a SemVer major bump, Keep a Changelog removed/deprecated/security items, the vendor's literal “breaking” wording, CVE ids. No model judged anything.",
"properties": {
"breakingMentions": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"cves": {
"items": {
"type": "string"
},
"type": "array"
},
"deprecated": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"majorBump": {
"type": "boolean"
},
"removed": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"security": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"majorBump",
"breakingMentions",
"removed",
"deprecated",
"security",
"cves"
],
"type": "object"
},
"status": {
"description": "ok answers; untracked is not in the catalog; unreadable is a from/to the version grammar cannot read (a range is not a version); the rest name why the pair has no interval.",
"enum": [
"ok",
"untracked",
"unreadable",
"unversioned",
"unplaceable",
"same",
"reversed",
"unorderable"
],
"type": "string"
},
"to": {
"type": "string"
},
"uncategorized": {
"description": "Versions in the interval with no categorized changes.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"name",
"from",
"status"
],
"type": "object"
},
"type": "array"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"dependencies"
],
"type": "object"
}
},
{
"description": "A product's newest releases with notes. Pass since_version (the version you run) to get only what shipped after it, with per-category change counts.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"description": "Releases to return, default 10.",
"maximum": 25,
"minimum": 1,
"type": "integer"
},
"product": {
"description": "Product slug or name, e.g. \"next-js\" or \"Next.js\".",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"since_version": {
"description": "The version you run. Returns only the releases above it in the history, matched exactly or as the same version spelled with fewer trailing zeros. A version we do not hold is reported as a miss rather than guessed into an ordering.",
"maxLength": 100,
"type": "string"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "whats_new",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"changeCounts": {
"additionalProperties": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"description": "Change items across the whole span, even when truncated.",
"propertyNames": {
"enum": [
"added",
"changed",
"fixed",
"removed",
"deprecated",
"security"
],
"type": "string"
},
"type": "object"
},
"newerCount": {
"description": "Releases above the pinned version, before the limit.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"notes": {
"description": "How the product or the version was resolved.",
"items": {
"type": "string"
},
"type": "array"
},
"product": {
"additionalProperties": false,
"properties": {
"archived": {
"description": "Whether the upstream repository is archived; absent when unknown.",
"type": "boolean"
},
"category": {
"enum": [
"Developer Tools",
"Frameworks & Libraries",
"Languages & Runtimes",
"Infrastructure & DevOps",
"Databases & Data",
"Security & Privacy",
"Games",
"Gaming Tools",
"Operating Systems",
"System Utilities",
"Browsers",
"Communication",
"Media",
"Creative Tools",
"AI",
"Productivity",
"Lifestyle & Apps",
"Firmware",
"Drivers"
],
"type": "string"
},
"description": {
"type": "string"
},
"homepage": {
"description": "The vendor's own site.",
"type": "string"
},
"labels": {
"description": "Provenance to keep with any quote, e.g. “Sample data”.",
"items": {
"type": "string"
},
"type": "array"
},
"language": {
"type": "string"
},
"license": {
"description": "SPDX expression as the product's own source states it, e.g. MIT or LicenseRef-proprietary; absent when unknown.",
"type": "string"
},
"name": {
"type": "string"
},
"platforms": {
"items": {
"type": "string"
},
"type": "array"
},
"slug": {
"type": "string"
},
"url": {
"description": "This product's page on What's New.",
"type": "string"
},
"vendor": {
"type": "string"
}
},
"required": [
"slug",
"name",
"vendor",
"category",
"description",
"url",
"homepage"
],
"type": "object"
},
"releases": {
"items": {
"additionalProperties": false,
"properties": {
"body": {
"type": "string"
},
"bodyTruncated": {
"const": true,
"description": "The body was cut at the cap; the permalink has it all.",
"type": "boolean"
},
"changes": {
"items": {
"additionalProperties": false,
"properties": {
"category": {
"enum": [
"added",
"changed",
"fixed",
"removed",
"deprecated",
"security"
],
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"category",
"text"
],
"type": "object"
},
"type": "array"
},
"channel": {
"description": "The source's own classification, e.g. “longterm”.",
"type": "string"
},
"date": {
"description": "ISO 8601 timestamp.",
"type": "string"
},
"labels": {
"description": "Provenance to keep with any quote, e.g. “Pre-release”.",
"items": {
"type": "string"
},
"type": "array"
},
"prerelease": {
"const": true,
"type": "boolean"
},
"sourceUrl": {
"description": "The vendor's own release notes.",
"type": "string"
},
"summary": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"description": "This release's page on What's New.",
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"title",
"date",
"url",
"sourceUrl"
],
"type": "object"
},
"type": "array"
},
"returned": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"sinceVersion": {
"description": "The version you passed.",
"type": "string"
},
"sinceVersionFound": {
"description": "Whether that version was found in the history. False means the releases below are the latest, not the ones after yours.",
"type": "boolean"
},
"truncated": {
"const": true,
"type": "boolean"
}
},
"required": [
"product",
"returned",
"releases"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b24bf2d8f3644c8669c039221585dc5be2676906cec9ff3ce9f65bea2da03d32 | sha256sum