Skip to content

v2.2.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 12:58
· 88 commits to main since this release
v2.2.0
c326a4c

Removed

  • Automatic "update available" notices. gateway.describe, gateway.invoke
    and gateway.provision no longer return update_warning,
    gateway.catalog_search no longer returns stale_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 --version on a schedule — would mean executing third-party
    package code with that server's credentials to produce an advisory message.

    gateway.update_server is 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_server no 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/mcp launches, 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 as 1.0.0-rc1 is now
    correctly older than 1.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.