Skip to main content
Glama

Release Notes

CI npm downloads OpenSSF Scorecard License: MIT

What breaks if I upgrade? Coding agents answer upgrade questions from memory, and memory is where "express 5 removed req.param() in 5.0.0" (it was 5.0.0-alpha.2) and "requests 2.32 is a drop-in update" (it dropped Python 3.7) come from. Release Notes answers from the package's own changelog:

  • Before an upgrade, changes_between lists the breaking changes, removals, deprecations, security fixes and raised requirements (Node.js, Python...) between two versions, each tagged with its version, and says which major versions you cross. Pre-release notes count toward the release they lead to, which is where most breaking changes are written down.

  • When did it change? search_changelog finds every version whose notes mention an API or option, oldest first, with the section it was listed under ("remove", "deprecations").

  • One version's notes, cleaned of commit hashes and pull-request noise.

Notes come from the CHANGELOG file (a monorepo package's own first; Markdown, underlined and reStructuredText formats), or from GitHub releases when there is no file, or the file covers only the newest major. npm, PyPI, crates.io, Go, Maven and NuGet. No key needed; a GITHUB_TOKEN raises GitHub's limit of 60 anonymous API requests an hour.

Built and maintained by Arhan Canli.

Install

Install in Cursor Install in VS Code Install in Goose

Needs Node.js 20 or newer. No account or key.

Claude Code

claude mcp add release-notes -- npx -y release-notes-mcp

Claude Desktop: download release-notes-mcp-<version>.mcpb from the latest release and open it. The bundle is signed; verify it with gh attestation verify <file> --repo arhancanli/release-notes-mcp.

Any other client (Windsurf, Zed, Cline, Continue and others), in its MCP config file:

{
  "mcpServers": {
    "release-notes": {
      "command": "npx",
      "args": [
        "-y",
        "release-notes-mcp"
      ]
    }
  }
}

Docker

docker build -t release-notes-mcp https://github.com/arhancanli/release-notes-mcp.git && docker run -i --rm release-notes-mcp

Hosted (Streamable HTTP): node src/server.mjs --http serves stateless MCP at POST /mcp (port from PORT, default 3000).

Related MCP server: Modelmeter

Example

An agent calls changes_between with:

{
  "ecosystem": "npm",
  "package": "express",
  "from": "4.21.2",
  "to": "5.0.0"
}

and gets back (recorded from the live server on 2026-09-26):

{
  "versions": 5,
  "major_upgrades": [
    "5.x"
  ],
  "from_date": "2024-12-05",
  "to_date": "2024-09-10",
  "breaking": [
    "5.0.0: `res.status()` accepts only integers, and input must be greater than 99 and less than 1000",
    "5.0.0: will throw a `RangeError: Invalid status code: ${code}. Status code must be greater than 99 and less than 1000.` for inputs outside this range",
    "5.0.0: will throw a `TypeError: Invalid status code: ${code}. Status code must be an integer.` for non integer inputs"
  ],
  "removed": [
    "5.0.0: `path-is-absolute` dependency - use `path.isAbsolute` instead",
    "5.0.0-beta.1: Named matching groups no longer available by position in `req.params`",
    "5.0.0-beta.1: Remove `debug` dependency",
    "5.0.0-beta.1: Remove `hidden` option; use `dotfiles` option instead",
    "5.0.0-beta.1: Remove `express.static.mime` export; use `mime-types` package instead",
    "5.0.0-alpha.7: `path-to-regexp` dependency",
    "5.0.0-alpha.7: Remove `DEBUG_FD` environment variable support",
    "5.0.0-alpha.6: `res.redirect(url, status)` signature - use `res.redirect(status, url)`",
    "5.0.0-alpha.6: `res.send(status, body)` signature - use `res.status(status).send(body)`",
    "5.0.0-alpha.4: Remove Express 3.x middleware error stubs",
    "5.0.0-alpha.3: `res.json(status, obj)` signature - use `res.status(status).json(obj)`",
    "5.0.0-alpha.3: `res.jsonp(status, obj)` signature - use `res.status(status).jsonp(obj)`",
    "5.0.0-alpha.3: `res.vary()` (no arguments) -- provide a field name as an argument",
    "5.0.0-alpha.2: `app.param(fn)`",
    "5.0.0-alpha.2: `req.param()` -- use `req.params`, `req.body`, or `req.query` instead",
    "5.0.0-alpha.1: `app.del` - use `app.delete`",
    "5.0.0-alpha.1: `req.acceptsCharset` - use `req.acceptsCharsets`",
    "5.0.0-alpha.1: `req.acceptsEncoding` - use `req.acceptsEncodings`",
    "5.0.0-alpha.1: `req.acceptsLanguage` - use `req.acceptsLanguages`",
    "5.0.0-alpha.1: `res.json(obj, status)` signature - use `res.json(status, obj)`",
    "5.0.0-alpha.1: `res.jsonp(obj, status)` signature - use `res.jsonp(status, obj)`",
    "5.0.0-alpha.1: `res.send(body, status)` signature - use `res.send(status, body)`",
    "5.0.0-alpha.1: `res.send(status)` signature - use `res.sendStatus(status)`",
    "5.0.0-alpha.1: `res.sendfile` - use `res.sendFile` instead",
    "5.0.0-alpha.1: `express.query` middleware"
  ],
  "requirements": [
    "5.0.0-beta.1: Requires Node.js 4+"
  ],
  "source": "https://github.com/expressjs/express/blob/HEAD/History.md",
  "without_notes": "4.22.0, 4.22.1, 4.22.2, 4.22.3",
  "package": "express",
  "from": "4.21.2",
  "to": "5.0.0"
}

Tools

Tool

What it does

changes_between

Before an upgrade: breaking changes, removals, deprecations, security fixes and raised requirements (Node, Python...) between two versions of a package, from its changelog or GitHub releases, each tagged with its version. to defaults to the latest.

release_notes

The release notes of one version of a package (default the latest) from its changelog or GitHub release, with the release date and link. Short lines, commit and pull-request noise removed.

search_changelog

Finds the versions whose release notes mention a term (an API name, an option, 'deprecated', a CVE): each matching line with its version and date, oldest first, so you can see when something was added, deprecated or removed.

How it behaves

  • Read-only: no tool changes anything outside this process. Package names go to deps.dev, the npm registry and GitHub; nothing about your project is sent.

  • Network: HTTPS only, to the hosts listed in package.json under factory.allowHosts, with a deadline, a size cap and bounded retries. Nothing else is contacted, and nothing is logged except unexpected failures (to stderr, without your inputs).

  • Changelogs and release lists are cached for 30 minutes.

  • Classification is by the notes' own words and section labels. A change a project did not write down as breaking is not flagged; major_upgrades names the major versions crossed regardless.

  • Results are compact JSON with a matching output schema. Lists say how many items were left out.

Benchmark

Measured 2026-09-26 with gpt-5.4-mini, 9 fixed tasks graded by fixed checks (bench/tasks.json, raw results in bench/results/).

Server

Correct

Input tokens

Output tokens

Tool calls

Median time

This server

9/9

18046

675

16

4.8 s

mcp-server-fetch reading changelogs (no changelog server exists; this is what agents use today)

6/9

145935

1792

42

11.4 s

Performance

Measured 2026-09-26 from Dubai, home connection against the live upstream, Node 24.19.0 (bench/perf.json, scripts/perf.mjs in the factory).

Call

First call

Repeat

Result size

changes_between: express 4.21.2 to 5.0.0 (History.md)

1973 ms

1.6 ms

2,465 chars

changes_between: requests 2.31.0 to 2.32.3 (HISTORY.md)

2337 ms

0.9 ms

1,652 chars

changes_between: serde 1.0.150 to 1.0.200 (GitHub releases)

4497 ms

1.3 ms

253 chars

search_changelog: express, req.param

1756 ms

5.3 ms

650 chars

release_notes: react 18.0.0

3603 ms

8.1 ms

1,673 chars

search_changelog: react, useId

3533 ms

13.4 ms

1,209 chars

First call: a fresh server process, including the TLS connection and the upstream's own time. Repeat: the same call again, answered from the in-process cache, so it shows this server's own overhead.

Tool definitions the model reads on every turn (name, description, input schema): 1,792 characters, against 1,105 for mcp-server-fetch reading changelogs (no changelog server exists; this is what agents use today). The full tool list, with the output schemas and annotations clients use to validate results, is 2,732 characters (1,104 for the alternative).

Data sources

  • deps.dev (Open Source Insights) for versions, publish dates and repositories, and the npm registry for monorepo directories.

  • The package's GitHub repository: its CHANGELOG file and GitHub releases.

More MCP servers by Arhan Canli

  • Actions Check: Checks GitHub Actions workflows: outdated actions, old Node runtimes, retired runners, injection.

  • Config Check: Validates config files against their official schemas: tsconfig, compose, workflows, 1,400+ more.

  • Cron Check: Explains cron expressions, lists next run times in any time zone, converts between cron dialects.

  • Dockerfile Check: Checks Dockerfiles: build-breaking mistakes, base image tags that exist, digests, platforms, EOL.

  • Domain Health: Email and domain checks: SPF lookup limits, DKIM keys, DMARC, DNS records, registration expiry.

  • End of Life: Is this version still supported? EOL dates, latest patch and upgrade target for 470+ products.

  • Internet Standards: RFC sections, status, obsoleted-by chains, errata and IANA registries for coding agents.

  • Kube Check: Checks Kubernetes manifests for your version: removed APIs, unknown fields, Pod Security, risks.

  • The whole collection, 12 more

License

MIT, Copyright (c) 2026 Arhan Canli.

Available Tools

3 tools
changes_betweenWhat changed between two versionsA
Read-onlyIdempotent

Before an upgrade: breaking changes, removals, deprecations, security fixes and raised requirements (Node, Python...) between two versions of a package, from its changelog or GitHub releases, each tagged with its version. to defaults to the latest.

Inputs: from (required), package (required), ecosystem (required), to, +1 more. Returns: to, from, package

release_notesNotes for one versionA
Read-onlyIdempotent

The release notes of one version of a package (default the latest) from its changelog or GitHub release, with the release date and link. Short lines, commit and pull-request noise removed.

Inputs: package (required), ecosystem (required), version, max_chars. Returns: notes, package, version

search_changelogFind when something changedA
Read-onlyIdempotent

Finds the versions whose release notes mention a term (an API name, an option, 'deprecated', a CVE): each matching line with its version and date, oldest first, so you can see when something was added, deprecated or removed.

Inputs: text (required), package (required), ecosystem (required). Returns: hits, total, package

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 3 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: changes_between compares two versions, release_notes fetches a single version's notes, and search_changelog finds versions by term. There is no meaningful overlap or ambiguity in their intended use.

    Naming Consistency3/5

    All names use lowercase snake_case, but the pattern is mixed: changes_between and release_notes are noun phrases while search_changelog is verb-first. The naming is readable and predictable enough, but it does not follow a single consistent verb_noun convention.

    Tool Count5/5

    Three tools is a well-scoped set for a release-notes domain. Each tool covers a distinct and essential operation without redundancy or unnecessary bloat.

    Completeness5/5

    The surface covers the core workflows: retrieving notes for a version, comparing versions for upgrade impact, and searching across versions. There are no obvious dead ends or missing operations for this read-only domain.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Enables coding agents to query package release histories, version lists, and change summaries across PyPI, npm, crates.io, Packagist, NuGet, pub.dev, Go, and Maven Central to inform dependency upgrades and detect withdrawn versions.
      5
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables coding agents to query breaking API changes in dependencies since a model's training cutoff, retrieve project dependency change summaries, and look up model training cutoff dates.
      52 PyPI
      10
      MIT