v2.2.0
Removed
-
Automatic "update available" notices.
gateway.describe,gateway.invoke
andgateway.provisionno longer returnupdate_warning,
gateway.catalog_searchno longer returnsstale_updates, and the hourly
background stale-version indexer is gone. These fields are removed from the
tool output schemas, not merely left empty — a client reading them will no
longer find the keys, which previously appeared as explicit nulls.The gateway cannot determine which version of a package a running server is
actually executing. The recorded version was an upstream snapshot taken when
the server was last described, so a notice could both invent an update that
did not exist and hide one that did — particularly for a server configured in
both the manifest and.mcp.json. Eight separate attempts to source a
trustworthy version failed, and the only remaining method — running each
server's own--versionon a schedule — would mean executing third-party
package code with that server's credentials to produce an advisory message.gateway.update_serveris unchanged and remains the way to check and
apply updates: it probes the package, reports what it found, restarts the
server, and refuses servers pinned to a specific version.
Fixed
-
gateway.update_serverno longer orphans a process tree when its update
probe hangs. The probe runs the downstream package's own code (e.g.
npx <pkg> --help) with a 60-second timeout, but the process was spawned
without its own session and the timeout only abandoned the wait — it never
signalled the child. A package that ignores the probe flag and runs as a
server therefore left its whole tree alive, including grandchildren such as
the browser@playwright/mcplaunches, which holds the profile lock and
breaks the next launch. The probe now spawns as a process-group leader and
reaps the group on timeout or cancellation. -
Update notices are no longer fabricated for servers whose version is not a
release number. The version comparison extracted digits from whatever it was
given and had no way to say "I cannot read this", so a server reporting
nightly,build-1,main, or an empty string compared as older than any
real release and produced an "update available" notice that was never true.
An empty version is the default for servers built on the current MCP SDK, so
this was reachable in ordinary use.Comparison now uses
packaging.version(a new dependency), which implements
PEP 440 ordering and rejects anything that is not a release outright. Beyond
removing the false notices, this corrects ordering that the previous
digit-extraction approach got wrong: a pre-release such as1.0.0-rc1is now
correctly older than1.0.0(previously the real release was hidden), and a
build-metadata difference is no longer announced as a new release. Docker
images, whose "version" is a content digest rather than a number, are compared
for difference instead of order.