fix(ci): cap mcp below 2.0 — the backend suite has not run since 2026-07-29

mcp 2.0.0 shipped on 2026-07-28 and deleted mcp.server.fastmcp, the module
app/mcp/server.py imports. requirements.txt asked for `mcp>=1.0.0` with no
ceiling, so the very next CI run resolved the new major and died importing
test_mcp_tools.py.

That failure is a COLLECTION error, not a test failure: pytest aborts with
exit 2 before running anything, so all 295 unit tests have been silently
unrun on every push since. The workflow was red, but red for a reason
nobody's code caused.

The deploy venv escaped only by accident — it was built while 1.x was still
current, and deploy.sh rebuilds it when requirements.txt changes, so the
next rebuild would have walked into the same wall and taken the deploy gate
down with it.

Verified in a clean venv built from this file: resolves to mcp 1.29.0,
322 passed / 18 skipped, test_mcp_tools.py's 35 tests among them.

Raising the cap means porting to the 2.x server API (mcp.server.mcpserver).
This commit is contained in:
David Montero Crespo 2026-08-10 17:14:39 +02:00
parent 0b875d4440
commit 044b619d18
1 changed files with 8 additions and 1 deletions

View File

@ -9,7 +9,14 @@ pydantic>=2.11.0
pydantic-settings>=2.6.0
# httpx — iot_gateway proxy + MCP
httpx>=0.27.1
mcp>=1.0.0
# Capped below 2.0: mcp 2.0.0 (2026-07-28) deleted mcp.server.fastmcp, which
# app/mcp/server.py imports. The unbounded `>=1.0.0` meant CI resolved the new
# major the next day and every Backend Unit Tests run since 2026-07-29 died at
# COLLECTION — pytest exit 2, all 295 unit tests silently unrun. The deploy
# venv only escaped because it was built before 2.0.0 shipped; its next
# requirements-triggered rebuild would have hit the same wall.
# Lifting the cap means porting to the 2.x server API (mcp.server.mcpserver).
mcp>=1.0.0,<2
esptool>=4.7.0
# WASM runtime for Custom Chips on ESP32 (chip's WASM runs in the QEMU worker
# subprocess so I2C events get a synchronous response — see