Skip to main content
Glama

breaking-changes-mcp

Stop your coding agent from hallucinating dependency migrations.

An MCP server that gives Claude, Cursor, and any MCP client accurate, source-grounded breaking-change briefings for any npm package — read straight from the real GitHub release notes and CHANGELOG, not from the model's stale training data.

LLMs are great at writing code and terrible at remembering exactly what changed between react@18 and react@19, or next@14 and next@16. That's where upgrades break. This server closes the gap: point it at a package and a version range, and the agent gets the actual breaking changes before it touches your code.

Why this exists

Tools like Context7 inject current docs. But the most dangerous moment for an agent is a version bump, and nobody serves the delta between two versions. breaking-changes-mcp is that missing piece.

Related MCP server: upgrade-pilot-mcp

Tools

Tool

What it does

breaking_changes_between

The headline tool. Returns only the breaking changes for a package between two versions, grouped per version, newest first. Reads GitHub Releases, falls back to CHANGELOG.md.

changelog_between

The full release notes (features, fixes, deprecations) across a version range — when breaking-only isn't enough.

list_versions

Published versions + release dates, newest first — to discover valid from/to values.

Every tool works on the public npm registry + GitHub with no API key required. Set GITHUB_TOKEN to raise GitHub's rate limit from 60 to 5000 requests/hour.

Quick start

npx breaking-changes-mcp

Claude Code

claude mcp add breaking-changes -- npx -y breaking-changes-mcp
# optional: higher GitHub rate limit
claude mcp add breaking-changes -e GITHUB_TOKEN=ghp_xxx -- npx -y breaking-changes-mcp

Claude Desktop / Cursor / Windsurf / any MCP client

{
  "mcpServers": {
    "breaking-changes": {
      "command": "npx",
      "args": ["-y", "breaking-changes-mcp"],
      "env": { "GITHUB_TOKEN": "ghp_xxx_optional" }
    }
  }
}

Example prompts

  • "I'm on react 18.2.0 and want to go to 19. Use breaking-changes to tell me exactly what will break."

  • "Before you upgrade next in this repo, check the breaking changes between the installed version and latest."

  • "Give me the full changelog for @tanstack/react-query from 4.0.0 to 5.0.0."

Config

Env var

Default

Purpose

GITHUB_TOKEN / GH_TOKEN

Personal access token to raise GitHub API limits (60→5000/hr). Read-only, no scopes needed for public repos.

NPM_REGISTRY

https://registry.npmjs.org

Override for private/mirror registries.

How it works

package + from..to
   │
   ├─ npm registry ──► all versions, dates, repository URL
   ├─ versions in (from, to]
   ├─ GitHub Releases ──► release bodies for those versions
   │        └─ fallback: raw CHANGELOG.md sliced between version headers
   └─ extract "### Breaking…" sections + "BREAKING CHANGE" lines ──► grouped briefing

Develop

npm install
npm run build
node dist/index.js   # speaks MCP over stdio

Caveats

  • Quality of output depends on the maintainer documenting breaking changes. If a project buries them in prose, breaking_changes_between says so and points you to changelog_between.

  • Monorepo tags (pkg@1.2.3) and prefixed tags (v1.2.3, release-1.2.3) are handled; exotic tag schemes may miss.

License

MIT © Anicodeth

Available Tools

3 tools
breaking_changes_betweenBreaking changes between two versionsA

Get an accurate, source-grounded list of BREAKING CHANGES for an npm package between two versions. Reach for this BEFORE writing or reviewing any dependency upgrade / migration — it defeats the model's stale, hallucinated migration knowledge by reading the real GitHub release notes (and CHANGELOG as fallback) for every version in the range. Returns breaking notes grouped per version, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget version you are upgrading TO, e.g. '19.0.0'. Inclusive upper bound. Use the package's latest if unsure.
fromYesCurrent/installed version you are upgrading FROM, e.g. '18.2.0'. Exclusive lower bound.
packageYesnpm package name, e.g. 'react', 'next', '@tanstack/react-query'.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description provides significant behavioral detail: it reads real GitHub release notes and CHANGELOG fallback, covers every version in the range, and returns grouped notes newest first. It discloses the data source and output structure, which are non-obvious. Minor gaps: no mention of network dependency or potential failures, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two well-structured sentences: the first states what the tool does, the second provides usage timing and behavioral detail (source-grounded, fallback, grouping). No filler or redundant information; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description clearly states the return format ('breaking notes grouped per version, newest first'). It covers purpose, usage context, data source, fallback behavior, and range semantics. It omits potential error conditions or performance implications, but for a read-only tool with 3 well-described params, the description is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level detail beyond the schema; it reinforces 'between two versions' but does not explain formats or edge cases. The schema already documents inclusive/exclusive bounds and package name examples, so the description adds no additional meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('source-grounded list of BREAKING CHANGES for an npm package between two versions'), clearly distinguishing it from siblings like changelog_between (full changelog) and list_versions (version list). The scope is precise and immediately actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Reach for this BEFORE writing or reviewing any dependency upgrade / migration'. It also explains why it's the right choice ('defeats the model's stale, hallucinated migration knowledge'). It does not name alternatives directly, but the timing and context make the intended usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

changelog_betweenFull changelog between two versionsA

Return the complete release notes (not just breaking lines) for every version of an npm package between from (exclusive) and to (inclusive), newest first. Use when you need full context — new features, fixes, deprecations — not only breaking changes, or when breaking_changes_between reports the maintainer wrote breaking notes prose-style.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesUpper-bound version (inclusive).
fromYesLower-bound version (exclusive).
packageYesnpm package name.
maxCharsNoTruncate combined output to this many characters (default 12000) to protect the context window.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of disclosing behavior. It reveals that the output includes all release notes (not just breaking lines), the inclusive/exclusive range semantics, and the newest-first ordering. It does not mention error handling or potential network behavior, but these are less critical for a read-only fetch. The addition of the prose-style nuance adds useful context beyond a bare description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action ('Return the complete release notes') and followed by direct usage guidance. Every phrase earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool with no output schema, the description provides enough operational context: purpose, boundaries, ordering, and use cases. The truncation behavior is covered by the maxChars parameter schema, so its absence from the description is not a gap. It does not specify what happens if the version range is invalid, but that is a minor omission for a tool of this simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with clear descriptions for all four parameters. The description's phrase 'between from (exclusive) and to (inclusive)' restates the schema's own descriptions, adding no new semantic information. The maxChars parameter is fully described in the schema, so the description adds no extra value there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns complete release notes between two versions, with explicit boundaries (from exclusive, to inclusive) and ordering (newest first). It distinguishes itself from the sibling tool breaking_changes_between by noting it returns 'not just breaking lines'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: when full context (new features, fixes, deprecations) is needed, or when breaking_changes_between reports prose-style breaking notes. It implicitly communicates when not to use it (when only breaking changes are needed), making the alternative clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_versionsList published versionsA

List published versions of an npm package with their release dates, newest first. Use this to discover valid from/to values before calling breaking_changes_between, or to see how far behind an installed version is.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax versions to return (default 40, newest first).
packageYesnpm package name.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It states the output is sorted newest first and includes release dates, which is useful behavioral context. It does not describe error handling or pagination, but for a read-only listing tool, the description provides adequate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states the primary function, and the second gives concrete use cases. Every word earns its place, and it is front-loaded with the essential purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, sorting, and use cases, and names the related sibling tool. It does not describe the exact return structure, but there is no output schema and the tool is simple. The guidance for discovering from/to values makes the context sufficiently complete for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes both parameters: package name and limit with default 40. The description adds no additional parameter-level meaning, so the schema does the heavy lifting. Baseline 3 is appropriate because schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool lists published versions of an npm package with release dates, sorted newest first. This is a specific verb ('list') plus resource ('published versions of an npm package') and scope ('release dates, newest first'), and it clearly distinguishes from siblings like breaking_changes_between and changelog_between.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use it before calling breaking_changes_between to discover valid from/to values, and also to see how far behind an installed version is. This names a sibling tool and a concrete use case, which is clear guidance on when to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv0.1.0
    • First observedbreaking_changes_between
    • First observedchangelog_between
    • First observedlist_versions

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: listing versions, fetching breaking changes, and fetching full changelog. The overlap between breaking_changes_between and changelog_between is well-defined, with descriptions explicitly stating breaking-only vs full release notes, so agents should not confuse them.

Naming Consistency4/5

All names use snake_case and are descriptive, but there is a minor mix: list_versions follows verb_noun while the other two follow noun_preposition. The '_between' suffix is consistent for the pair, making the set predictable overall.

Tool Count5/5

Three tools is well-scoped for the narrow domain of npm package release notes. Each tool earns its place, covering the essential workflow of discovering versions and retrieving release notes/breaking changes without redundancy.

Completeness4/5

The set covers the core lifecycle for the stated purpose: version discovery, breaking changes, and full changelog. A minor gap is that there is no direct way to get a single version's notes without specifying a 'from' version, but this can be worked around using list_versions and the between tools.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI agents to safely upgrade JavaScript and TypeScript projects through dependency analysis, upgrade path detection, breaking change identification, codemod application, and PR summary generation.
    14
    19
    MIT
  • F
    license
    A
    quality
    A
    maintenance
    Breaking-change diffs for npm packages, served over REST and MCP, so coding agents stop writing code against outdated API knowledge.
    2
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides structured migration briefs for LLM coding agents covering breaking changes, codemod coverage, and hallucination warnings for major version bumps of packages like tailwindcss, next, and react.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Anicodeth/breaking-changes-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server