Follows PR #79. main went red on that merge (run 2999) through no fault of the merged code.
What happened
ModuleNotFoundError: No module named 'mcp.server.fastmcp'
across all 12 MCP test modules. The identical tree passed on dev an hour earlier (run 2997). mcp 2.0.0 was published between the two runs and removed mcp.server.fastmcp, which src/scribe/mcp/server.py:4 imports to build the whole tool surface.
Capped mcp[cli]>=1.0,<2. Green on dev at aa850ac (run 3000). Lift the ceiling in the same change that ports server.py to the 2.x API.
Why main's build was skipped
CI failure skipped the image job, so :latest was not republished — the new GET /api/plugin/prior-art endpoint stayed unreachable even after #79 merged. This merge is what actually publishes it.
The larger problem this exposed — filed, not fixed here
uv.lock pinned mcp 1.27.2 and CI installed 2.0.0 anyway, because the workflow uses uv pip install -e ".[dev]", which resolves from pyproject and ignores the lockfile. So every dependency floats in CI regardless of the lock: runs aren't reproducible, and the Renovate dashboard-approval discipline is bypassed entirely — upstream can bump this project without a PR at any time. Only APScheduler and now mcp carry upper bounds.
Tracked as issue #2194 (Scribe), with uv sync --locked as the candidate fix and the three complications that make it more than a one-liner.
Follows PR #79. `main` went red on that merge (run 2999) through no fault of the merged code.
## What happened
```
ModuleNotFoundError: No module named 'mcp.server.fastmcp'
```
across all 12 MCP test modules. The identical tree passed on `dev` an hour earlier (run 2997). **`mcp` 2.0.0 was published between the two runs** and removed `mcp.server.fastmcp`, which `src/scribe/mcp/server.py:4` imports to build the whole tool surface.
Capped `mcp[cli]>=1.0,<2`. Green on `dev` at `aa850ac` (run 3000). Lift the ceiling in the same change that ports `server.py` to the 2.x API.
## Why main's build was skipped
CI failure skipped the image job, so `:latest` was not republished — the new `GET /api/plugin/prior-art` endpoint stayed unreachable even after #79 merged. This merge is what actually publishes it.
## The larger problem this exposed — filed, not fixed here
`uv.lock` pinned `mcp 1.27.2` and CI installed 2.0.0 anyway, because the workflow uses `uv pip install -e ".[dev]"`, which resolves from pyproject and **ignores the lockfile**. So every dependency floats in CI regardless of the lock: runs aren't reproducible, and the Renovate dashboard-approval discipline is bypassed entirely — upstream can bump this project without a PR at any time. Only `APScheduler` and now `mcp` carry upper bounds.
Tracked as issue #2194 (Scribe), with `uv sync --locked` as the candidate fix and the three complications that make it more than a one-liner.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01UaYUaouG9jjhATyuxCKrQs
`main` went red on the PR #79 merge (run 2999) with
`ModuleNotFoundError: No module named 'mcp.server.fastmcp'` across every MCP
test module. Not the merged code: the identical tree passed on `dev` an hour
earlier (run 2997). mcp 2.0.0 was published between the two runs.
`src/scribe/mcp/server.py` imports `mcp.server.fastmcp.FastMCP` to build the
entire tool surface, so 2.x is a genuine incompatibility, not a precaution.
Capped at `<2`; lift it in the same change that ports server.py.
Note what this exposes: `uv.lock` already pinned mcp 1.27.2 and CI installed
2.0.0 anyway, because the workflow uses `uv pip install -e ".[dev]"`, which
resolves from pyproject and ignores the lockfile. Every dependency is
therefore floating in CI regardless of what the lock says — this cap fixes
today's break, not that. Filed separately.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Follows PR #79.
mainwent red on that merge (run 2999) through no fault of the merged code.What happened
across all 12 MCP test modules. The identical tree passed on
devan hour earlier (run 2997).mcp2.0.0 was published between the two runs and removedmcp.server.fastmcp, whichsrc/scribe/mcp/server.py:4imports to build the whole tool surface.Capped
mcp[cli]>=1.0,<2. Green ondevataa850ac(run 3000). Lift the ceiling in the same change that portsserver.pyto the 2.x API.Why main's build was skipped
CI failure skipped the image job, so
:latestwas not republished — the newGET /api/plugin/prior-artendpoint stayed unreachable even after #79 merged. This merge is what actually publishes it.The larger problem this exposed — filed, not fixed here
uv.lockpinnedmcp 1.27.2and CI installed 2.0.0 anyway, because the workflow usesuv pip install -e ".[dev]", which resolves from pyproject and ignores the lockfile. So every dependency floats in CI regardless of the lock: runs aren't reproducible, and the Renovate dashboard-approval discipline is bypassed entirely — upstream can bump this project without a PR at any time. OnlyAPSchedulerand nowmcpcarry upper bounds.Tracked as issue #2194 (Scribe), with
uv sync --lockedas the candidate fix and the three complications that make it more than a one-liner.🤖 Generated with Claude Code
https://claude.ai/code/session_01UaYUaouG9jjhATyuxCKrQs