Skip to content

Release v0.9.1

Choose a tag to compare

@github-actions github-actions released this 04 Sep 00:00
· 24 commits to main since this release

Fixed

  • A continuation window no longer invents markup. parse_gemtext classified
    from the top of whatever string it was handed, but a window resumes
    mid-document, so a cut inside a ``` block read the block's contents as live
    markup: a fenced => url text line came back as a resolved link in
    document.links, the closing fence was read as an opening toggle, and every
    line after it was typed wrong. partial_line stays false on both windows, so
    nothing flagged it, and it needs no hostile capsule -- any page with a code
    block longer than the render cap does it. The tail of an over-long line had
    the same defect from the other side: 0.9.0 declines to parse the window that
    ends mid-line, but the window that starts mid-line was still parsed from
    the top, so a => just past the cap boundary arrived as a complete link to a
    target the capsule never offered. Both are one missing bit of state, and both
    contradicted what models.py and the API reference promise the model on every
    call.
  • The install docs no longer deny that the container image exists. README,
    docs/installation.md and docs/troubleshooting.md all said registry
    publishing was still to come and that the release on PyPI predated
    --version; both stopped being true when 0.9.0 published the image to
    ghcr.io/cameronrye/gopher-mcp and shipped the flag. The PyPI long
    description is immutable per release, so 0.9.0's copy keeps the old text and
    only a new release replaces it.
  • The changelog's own pre-0.3 tail. 0.2.1 and 0.2.2 carried January dates
    that were 8-11 months off their tags, 0.1.0 was dated 2025-01-XX, and the
    link definitions for 0.1.0 and 0.4.0 pointed at v0.1.0 and v0.4.1 tags
    in ways that 404'd or misnamed the release. Neither version was ever tagged,
    which is now stated rather than papered over.

Changed

  • The container image is built for linux/arm64 as well as linux/amd64. The
    0.9.0 image was a single-platform amd64 manifest because the publish step
    declared no platforms at all, so every Apple Silicon and ARM-server user ran
    it under emulation.
  • The release path runs the image before pushing it. publish-image built and
    pushed in one step and never started the container; the image it pushes is
    also not the one CI smoke-tested, because the Dockerfile resolves its
    dependency closure fresh from PyPI at build time. It now builds the host
    architecture, asserts --version matches the tag being released and that the
    registry annotation is present, and only then builds and pushes both
    platforms.
  • server.json advertises the container as an oci package, so the MCP
    registry lists it alongside the PyPI one. This needed three things that were
    all missing: the image carries the io.modelcontextprotocol.server.name
    annotation the registry verifies ownership with, publish-registry now waits
    for publish-image instead of racing it, and scripts/prepare-release.py
    bumps the version inside the image tag -- the registry forbids a version
    key on an OCI package, so the tag is the version, and nothing was moving it.
  • The container base image moves to python:3.14-slim, the top of the test
    matrix, now that the 3.14 legs have been green on CI.
  • The minimum-versions CI job runs on Python 3.14 as well as 3.11. The declared
    floors are not one set of versions: mcp markers its pydantic requirement by
    interpreter, so pydantic==2.11.0 is not merely untested on 3.14, it is
    unsolvable there.
  • Dependabot can propose a base-image minor bump again, reversing what 0.9.0
    said. The old rule ignored both major and minor updates for python, and the
    Dockerfile's tag has no patch component -- so no update of any kind could ever
    be proposed and the entry was structurally inert rather than conservative.
    Major stays ignored. What now protects the "base image must stay on an
    interpreter the matrix covers" rule is review rather than configuration, so
    check the matrix before merging one.
  • pyproject.toml records what should end the mcp<2 hold instead of leaving
    it open-ended, and notes that the first condition has already fired:
    llama-index-tools-mcp requires mcp>=2 as of 0.5.0, so installing it beside
    this package is already unsatisfiable. It also corrects which advisory sets
    the mcp>=1.28.1 floor -- the DNS-rebinding one was fixed in 1.23.0 and is
    not it -- and stops citing the container as the deployment the SDK's rebinding
    default protects, since the container's own CMD disables that check.
  • The release checklist no longer tells you to run a bare pre-commit autoupdate. Two hook revs deliberately track uv.lock, and a bare
    autoupdate bumps them out from under it; the checklist now scopes the
    update to the revs with no lockfile counterpart.
  • docs/development/repository-setup.md describes the branch protection that
    actually exists -- the main ruleset lists the admin role as an
    always-bypass actor -- and carries the API calls to re-check every claim on
    the page.

Release Information:

Installation:

pip install gopher-mcp==0.9.1

Verification:
All packages are signed and can be verified using Sigstore.