Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Keep your MCP server package maintained

What we checked

We looked at your package’s publish history to gauge whether it’s actively maintained. The signal passes when there’s been a recent release. Otherwise:

Actively maintained: published recently
Infrequently maintained: last published a long time ago
Maintenance check failed: the registry has no such package, so there's no release history to read.
Maintenance check failed: the publisher has marked this version as deprecated on the registry, telling users to stop installing it.
Maintenance not yet verified: the publish date is in the future (anomalous, possibly a registry clock skew), so it can't be graded.
Maintenance history not yet determined.

Why it matters

Maintenance is a leading indicator, not busywork. An unmaintained package is where unpatched vulnerabilities pile up, where dependency advisories go unanswered, and where attackers look for a takeover target precisely because nobody’s watching. A steady release cadence, even small releases, signals that someone is still home and that a security fix would actually ship.

It’s a signal, not a verdict, and the package rubric weights it as one: a small, finished tool can be stable rather than abandoned. But for the median package, recency correlates strongly with being safe to depend on.

How recently must I publish to count as maintained?

There’s no magic number you have to hit; we’re looking for evidence that the package is still tended, not a specific date on the calendar. As a reference point for what “active” tends to mean across the industry, the OpenSSF Scorecard Maintained check awards its top score for roughly a commit a week over the previous 90 days. Small, routine releases (a dependency bump, a docs fix) are enough to read as maintained; a long, silent gap (well over a year without a release) is what tips a package into reading as stale.

How to fix it

Keep a visible cadence and keep dependencies current:

  • Publish regular releases, even small ones: a dependency bump or a docs fix is a real release.
  • Keep dependencies current so security updates flow through (pair this with patching known vulnerabilities).
  • Automate releases so cutting one is cheap. A tag-triggered workflow removes the friction that lets packages drift:
name: release
on:
push:
  tags: ["v*"]

permissions:
contents: read
id-token: write  # enables npm provenance attestations

jobs:
publish:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: 20
        registry-url: https://registry.npmjs.org
    - run: npm ci
    - run: npm publish --provenance --access public
      env:
        NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

My version is deprecated

A deprecated version scores 0 on maintenance however recently the package was published. The publisher has told everyone installing it to stop, so it isn’t a version anyone is maintaining. We read the flag for the exact version your registry entry names; a deprecated older version doesn’t count against a newer one.

  • If the version was superseded, publish a supported release (if there isn’t one already) and point your MCP registry entry at it.
  • If the deprecation was a mistake, remove it on the registry. For npm, deprecating with an empty message clears it:
npm deprecate my-package@1.2.3 ""

How we re-check

We re-read your publish history on our next crawl. Once a recent, correctly-dated release is visible, the signal flips to a pass on the following score refresh.

Give this to your AI

Paste this into Claude Code (or any coding agent) from inside your server's repository. It states the failing signal, the outcome we re-check for, and the format the fix has to take.

Prompt
Context: this repository publishes an MCP server. VerifyMCP's maintenance
check failed, which means there's been no recent release for long
enough that the package reads as unmaintained, the latest release
carries a timestamp in the future, or the version being scored has been
marked as deprecated on the registry.

Goal: a recent, correctly-dated, non-deprecated release is visible in
the publish history, so the next crawl records it.

Do this:
1. Check your package's publish history on the registry to see which
   case applies.
2. If stale: if there is real, unreleased work (dependency bumps, fixes,
   docs), cut a genuine release for it. If the project is instead
   intentionally finished and stable, ask me before forcing a release
   just to move the needle, the rubric treats a small, finished tool as
   a legitimate exception, not a defect.
3. Add a tag-triggered release workflow (push a `v*` tag, publish from
   CI) so future releases are cheap and the cadence doesn't drift again.
4. If future: check the system or CI runner clock and your release
   pipeline's timestamp handling, fix the actual source of the bad
   timestamp, then cut a fresh release with a correct date.
5. If deprecated: find out why the version was deprecated (the
   registry shows the deprecation message). If it was superseded,
   prepare a supported release and update the MCP registry entry to
   point at that version. If the deprecation was a mistake, tell me:
   removing it is my call.

Rules:
- Never run the publish command (`npm publish`, `twine upload`, `dotnet nuget
  push`, `cargo publish`, a release tag that triggers one) yourself. A
  published version is permanent and notifies every downstream consumer:
  prepare the change, show me the diff, and let me publish it.
- Never run `npm deprecate` (with or without a message) yourself, whether
  to add a deprecation or to remove one. It changes what every consumer
  is told about that version: tell me the command and let me run it.
- Never backdate, forward-date, or otherwise hand-edit a release
  timestamp to fake recency; fix the clock or pipeline that produced it.
- Never publish a release whose notes or version bump misrepresent what
  changed, an empty tag pushed purely to trip this check is not a real
  release.
- Ask me before deciding whether the project needs new work or is
  genuinely done.

Report back: which case applied, the release you published (or the clock
fix you made), and where I can see the corrected publish date on the
registry.

Reference: https://verifymcp.io/docs/packages/maintenance

Written by Stuart Blackler · Last reviewed 25 September 2026.