fix(deps): cap mcp<2 — mcp_server is broken on main (no bumps available) - #1
Open
petronijus wants to merge 1 commit into
Open
fix(deps): cap mcp<2 — mcp_server is broken on main (no bumps available)#1petronijus wants to merge 1 commit into
petronijus wants to merge 1 commit into
Conversation
mcp 2.0.0 removed `mcp.server.fastmcp`, which mcp_server/server.py imports. mcp_server/requirements.txt declared an unbounded `mcp>=1.0.0`, so a fresh `pip install -r mcp_server/requirements.txt` resolves 2.0.0 and the server dies at import with ModuleNotFoundError. Capping below 2.0 resolves 1.29.0 and server.py imports cleanly again. No other dependency changed. requirements.txt carries only `>=` floors with no pins and no lockfile, so under update_policy=patch there is nothing to bump — the floors already resolve to the newest release on every install. That is also why this break was possible; see the PR for the pinning recommendation. Verified against a fresh Python 3.11 resolve (matching the Dockerfile): every third-party import the app uses still resolves — apscheduler, authlib, dotenv, flask, flask_limiter (now 4.1.1, a major above the >=3.5 floor), flask_talisman, flask_wtf, werkzeug, pytz — and mcp_server/server.py imports.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Monthly automated dependency maintenance.
update_policy: patch.No version bumps — and that is the finding
requirements.txtandmcp_server/requirements.txtcontain only>=floors, no pins, and no lockfile. There is nothing a patch-level bump can act on: every install already resolves to the newest release on PyPI. The one-line change in this PR is a repair, not a bump.🔴
mcp_serveris broken onmainmcp2.0.0 removedmcp.server.fastmcp, whichmcp_server/server.pyimports. Against the unboundedmcp>=1.0.0floor, a fresh install resolves 2.0.0:mcp>=1.0.0,<2resolves 1.29.0 andmcp_server/server.pyimports cleanly again.What was verified
There is no test suite, no lint config, and no build step beyond the Docker image (and this box has no Docker daemon), so the available gate is an import-surface check against a real resolve — a fresh Python 3.11 venv matching the Dockerfile, installed from
requirements.txt.apscheduler.{executors.pool,jobstores.base,jobstores.sqlalchemy,schedulers.background}authlib.integrations.flask_client.OAuthflask.{Flask,Blueprint,has_request_context,…}flask_limiter.Limiter+flask_limiter.util.get_remote_addressflask_talisman.Talismanflask_wtf.csrf.CSRFProtectwerkzeug.middleware.proxy_fix.ProxyFixdotenv.load_dotenv,pytzmcp.server.fastmcp.FastMCPThe app was not executed: importing
mindbaboon.pystarts the scheduler and sends a startup email, which is not something an unattended run should trigger.Worth noting what today's floors actually resolve to — several are well past their floor:
Flask>=2.3.2Flask-Limiter>=3.5gunicorn(no constraint)SQLAlchemy>=2.0.0Authlib>=1.3Flask-Limiteris already a full major above its floor and the import surface still holds, but that is luck rather than design.Recommendation
Pin these. Either commit a compiled lockfile (
uv pip compile requirements.txt -o requirements.lock, install with--require-hashesor the plain lock) or add upper bounds. As it stands, everydocker compose up --buildis an unpinned resolve against the live index — the container that ships is not the container that was last tested, and themcpbreak above is exactly what that costs.🤖 Generated with Claude Code