Repository navigation
Release v0.9.1
Fixed
- A continuation window no longer invents markup.
parse_gemtextclassified
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 textline 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_linestays 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 whatmodels.pyand the API reference promise the model on every
call. - The install docs no longer deny that the container image exists. README,
docs/installation.mdanddocs/troubleshooting.mdall 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-mcpand 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.1and0.2.2carried January dates
that were 8-11 months off their tags,0.1.0was dated2025-01-XX, and the
link definitions for0.1.0and0.4.0pointed atv0.1.0andv0.4.1tags
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/arm64as well aslinux/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-imagebuilt 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--versionmatches the tag being released and that the
registry annotation is present, and only then builds and pushes both
platforms. server.jsonadvertises the container as anocipackage, so the MCP
registry lists it alongside the PyPI one. This needed three things that were
all missing: the image carries theio.modelcontextprotocol.server.name
annotation the registry verifies ownership with,publish-registrynow waits
forpublish-imageinstead of racing it, andscripts/prepare-release.py
bumps the version inside the image tag -- the registry forbids aversion
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:mcpmarkers its pydantic requirement by
interpreter, sopydantic==2.11.0is 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 forpython, 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.tomlrecords what should end themcp<2hold instead of leaving
it open-ended, and notes that the first condition has already fired:
llama-index-tools-mcprequiresmcp>=2as of 0.5.0, so installing it beside
this package is already unsatisfiable. It also corrects which advisory sets
themcp>=1.28.1floor -- 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 ownCMDdisables that check.- The release checklist no longer tells you to run a bare
pre-commit autoupdate. Two hook revs deliberately trackuv.lock, and a bare
autoupdatebumps them out from under it; the checklist now scopes the
update to the revs with no lockfile counterpart. docs/development/repository-setup.mddescribes the branch protection that
actually exists -- themainruleset lists the admin role as an
always-bypass actor -- and carries the API calls to re-check every claim on
the page.
Release Information:
- Version: 0.9.1
- Release Date: 2026-09-03
- Commit: e38ca01
- Workflow: 33804509908
Installation:
pip install gopher-mcp==0.9.1Verification:
All packages are signed and can be verified using Sigstore.