feat(plugin): install the MCP server from PyPI#368
Conversation
The bundled .mcp.json launched the server via uvx from git+...#subdirectory refs, so every plugin install and --refresh cloned the repo and built four workspace members from source. All five packages now publish to PyPI on every tag, so uvx resolves pipefy-mcp-server and its dependency closure (pipefy, pipefy-auth, pipefy-infra) straight from the index. --prerelease allow is needed while the 0.x line ships only pre-releases; it drops once a stable release exists. Updates the MCP package README's install and `claude mcp add` snippets to match. The CLI install blocks and the root README pre-1.0 policy prose are a separate follow-up.
There was a problem hiding this comment.
Summary
Moving the bundled plugin config from git subdirectory refs to PyPI is the right follow-up to #365 — it removes the clone/build cost on every /plugin install and keeps the diff focused on the programmatic install path (.mcp.json + MCP README).
I ran a clean-cache smoke test before reviewing:
uvx pipefy-mcp-server --version→ installs0.3.0a1withmcp 1.28.1, prints0.3.0-alpha.1, exit 0uvx --prerelease allow pipefy-mcp-server --version→ resolvesmcp 2.0.0b1, crashes onModuleNotFoundError: mcp.server.fastmcp, exit 1
So the proposed --prerelease allow flag both isn't needed for the named pre-release app and actively breaks the default install by upgrading transitive deps to MCP 2.x pre-releases.
What worked well
- PyPI migration aligns with #365 (all five wheels on the index) and supersedes the wheel-URL approach from #260.
.mcp.jsonandpackages/mcp/README.mdstay in sync.- Scope is deliberately tight; deferring root README /
commands/install.mdis reasonable.
Related PRs (merge context)
- #365 (merged) — prerequisite; PyPI publishing on every tag makes this PR possible.
- #367 (open) — sibling dep pinning + plugin manifest lockstep; independent of this diff but worth landing soon for published metadata correctness.
- #369 (draft, stacked on this branch) — user-scope Claude Code registration; should land after this PR settles the
.mcp.jsonshape.
Required before merge
- Drop
--prerelease allowfrom.mcp.jsonand the README snippets; use plainuvx pipefy-mcp-serverand update the prose that claims the flag is required while only pre-releases exist.
uvx resolves pipefy-mcp-server's own pre-release without the flag since no stable release exists. The global flag also lets transitive deps take pre-releases, pulling a broken mcp 2.0.0b1 that fails on 'from mcp.server.fastmcp import FastMCP'.
adriannoes
left a comment
There was a problem hiding this comment.
Summary
The follow-up commit addresses the blocking issue cleanly: .mcp.json and the MCP README now use plain uvx pipefy-mcp-server, and the README documents why a global --prerelease allow must not be added back.
Re-ran clean-cache smoke on the current PyPI index: uvx pipefy-mcp-server --version → 0.3.0-alpha.1, exit 0.
What worked well
- Fix matches the review feedback and the author's inline explanation on the thread.
- PyPI migration goal from #365 is preserved without the transitive
mcp 2.0.0b1regression. - Scope stays tight; deferred install surfaces remain appropriately out of band.
Good to merge into dev. #367 and #369 can proceed on their own tracks once this lands.
What
Switch the bundled plugin
.mcp.json(and the MCP package README's launch snippets) fromuvx --from git+...#subdirectory=...to a plain PyPI install:uvx --prerelease allow pipefy-mcp-server.Why
The bundled config launched the server from git subdirectory refs, so every
/plugin installand--refreshcloned the repo and built four workspace members (pipefy,pipefy-auth,pipefy-infra,pipefy-mcp-server) from source. All five packages now publish to PyPI on every tag (#365), souvxresolvespipefy-mcp-serverand its dependency closure straight from the index, with no clone or build.--prerelease allowis required while the 0.x line ships only pre-release versions (a plainuvx pipefy-mcp-serverfinds nothing installable when only pre-releases exist). It drops once a stable release is published; the README documents that.Scope
.mcp.json: the zero-config default the plugin ships.packages/mcp/README.md: the install block and theclaude mcp addsnippet, to match.Left for a separate follow-up (a broader docs pass, not the programmatic install path):
README.mdCLI install blocks (uvx --from git+...packages/cli) and its pre-1.0 "not yet on PyPI" policy prose.commands/install.md(the CLI installer command).Context
This is the surviving, still-relevant piece of the old #260 (install via release wheel URLs). #260's Release-wheel-URL approach is superseded now that PyPI publishing is live: PyPI is simpler and also removes the clone/build. #260 can be closed.
Test
.mcp.jsonparses as valid JSON.0.3.0a1), souvx --prerelease allow pipefy-mcp-serverresolves the full closure from the index.