Problem
Workstream C (#229) ships the /pipefy:login slash command and .mcp.json MCP server entry using uvx --from "git+https://github.com/gbrlcustodio/pipefy-mcp-server#subdirectory=packages/<pkg>". Two real costs:
- Every plugin install pays a full git clone + setuptools/hatchling build pass for each workspace member that gets pulled in (
pipefy-cli → pipefy-auth → pipefy-sdk). Slow first-run, slow every --refresh.
- The bare-form URL (
uvx --from git+<repo> pipefy-cli) fails on the workspace-root pyproject.toml because setuptools default-discovers the flat packages/ + skills/ layout. #subdirectory= is a workaround, not a fix.
pipefy-auth is a workspace dep declared in packages/cli/pyproject.toml and packages/mcp/pyproject.toml. uvx with #subdirectory=packages/<pkg> cannot resolve sibling workspace members through [tool.uv.sources] from a remote install — only --with chains save it. Manifest bloat.
Goal
Point the plugin at the pre-built wheels the release pipeline already ships to GitHub Releases. Today's release.yml (.github/workflows/release.yml:67-100) runs uv build --all-packages -o dist --wheel --sdist and verifies one SDK + CLI + MCP + Auth wheel per tag. Latest v0.2.0-beta.1 already carries three of the four (the Auth wheel will land in the next tag, since packages/auth was added on dev after the current tag).
Target .mcp.json:
{
"mcpServers": {
"pipefy": {
"command": "uvx",
"args": [
"--with", "https://github.com/gbrlcustodio/pipefy-mcp-server/releases/download/v0.2.0-beta.2/pipefy_sdk-0.2.0b2-py3-none-any.whl",
"--with", "https://github.com/gbrlcustodio/pipefy-mcp-server/releases/download/v0.2.0-beta.2/pipefy_auth-0.2.0b2-py3-none-any.whl",
"--from", "https://github.com/gbrlcustodio/pipefy-mcp-server/releases/download/v0.2.0-beta.2/pipefy_mcp_server-0.2.0b2-py3-none-any.whl",
"pipefy-mcp-server"
]
}
}
}
Same shape for commands/login.md (swap the MCP wheel for the CLI wheel).
Scope
- Prerequisite tag: cut
v0.2.0-beta.2 (or the next beta) from main after dev → main merge that includes packages/auth. Release workflow produces all four wheels and uploads them.
.mcp.json rewrite: drop #subdirectory= form; pin each --with / --from to release-wheel URLs at the new tag.
commands/login.md rewrite: same swap for the CLI wheel; preserve $ARGUMENTS passthrough.
- Plugin version bump:
.claude-plugin/plugin.json version and .claude-plugin/marketplace.json plugins[].version track the underlying release tag.
- Release-workflow automation: extend
release.yml to patch .claude-plugin/plugin.json, .claude-plugin/marketplace.json, .mcp.json, and commands/login.md to point at the just-cut tag's wheel URLs, then commit + push to main (or open a follow-up PR) on each tag. Without this, every release requires a manual plugin-manifest bump.
- README +
docs/setup.md Plugin install blocks: drop the uvx --from git+...#subdirectory=... callouts; just show /plugin install pipefy (wheel URLs are an implementation detail of the manifest).
Why this is separate from #229
#229 has to ship something that works today against the current dev snapshot, before a new release tag exists. The release-wheel path requires (a) the next beta tag and (b) the workflow automation. Doing it inside #229 blocks the slash command until the release cycle catches up.
Acceptance
Related
Out of scope
- Refactoring root
pyproject.toml to make bare uvx --from git+<repo> pipefy-mcp-server work directly (option 2a / meta-package in the prior discussion). Release-wheel URLs make that refactor unnecessary.
Problem
Workstream C (#229) ships the
/pipefy:loginslash command and.mcp.jsonMCP server entry usinguvx --from "git+https://github.com/gbrlcustodio/pipefy-mcp-server#subdirectory=packages/<pkg>". Two real costs:pipefy-cli→pipefy-auth→pipefy-sdk). Slow first-run, slow every--refresh.uvx --from git+<repo> pipefy-cli) fails on the workspace-rootpyproject.tomlbecause setuptools default-discovers the flatpackages/+skills/layout.#subdirectory=is a workaround, not a fix.pipefy-authis a workspace dep declared inpackages/cli/pyproject.tomlandpackages/mcp/pyproject.toml.uvxwith#subdirectory=packages/<pkg>cannot resolve sibling workspace members through[tool.uv.sources]from a remote install — only--withchains save it. Manifest bloat.Goal
Point the plugin at the pre-built wheels the release pipeline already ships to GitHub Releases. Today's
release.yml(.github/workflows/release.yml:67-100) runsuv build --all-packages -o dist --wheel --sdistand verifies one SDK + CLI + MCP + Auth wheel per tag. Latestv0.2.0-beta.1already carries three of the four (the Auth wheel will land in the next tag, sincepackages/authwas added ondevafter the current tag).Target
.mcp.json:{ "mcpServers": { "pipefy": { "command": "uvx", "args": [ "--with", "https://github.com/gbrlcustodio/pipefy-mcp-server/releases/download/v0.2.0-beta.2/pipefy_sdk-0.2.0b2-py3-none-any.whl", "--with", "https://github.com/gbrlcustodio/pipefy-mcp-server/releases/download/v0.2.0-beta.2/pipefy_auth-0.2.0b2-py3-none-any.whl", "--from", "https://github.com/gbrlcustodio/pipefy-mcp-server/releases/download/v0.2.0-beta.2/pipefy_mcp_server-0.2.0b2-py3-none-any.whl", "pipefy-mcp-server" ] } } }Same shape for
commands/login.md(swap the MCP wheel for the CLI wheel).Scope
v0.2.0-beta.2(or the next beta) frommainafterdev→mainmerge that includespackages/auth. Release workflow produces all four wheels and uploads them..mcp.jsonrewrite: drop#subdirectory=form; pin each--with/--fromto release-wheel URLs at the new tag.commands/login.mdrewrite: same swap for the CLI wheel; preserve$ARGUMENTSpassthrough..claude-plugin/plugin.jsonversionand.claude-plugin/marketplace.jsonplugins[].versiontrack the underlying release tag.release.ymlto patch.claude-plugin/plugin.json,.claude-plugin/marketplace.json,.mcp.json, andcommands/login.mdto point at the just-cut tag's wheel URLs, then commit + push tomain(or open a follow-up PR) on each tag. Without this, every release requires a manual plugin-manifest bump.docs/setup.mdPlugin install blocks: drop theuvx --from git+...#subdirectory=...callouts; just show/plugin install pipefy(wheel URLs are an implementation detail of the manifest).Why this is separate from #229
#229 has to ship something that works today against the current
devsnapshot, before a new release tag exists. The release-wheel path requires (a) the next beta tag and (b) the workflow automation. Doing it inside #229 blocks the slash command until the release cycle catches up.Acceptance
v0.2.0-beta.2(or successor) release on GitHub carries all four wheels (SDK + CLI + MCP + Auth).claude plugin install pipefy@pipefyresults in MCP server spawn that runs without git clone or local build —claude plugin details pipefystill reportsMCP servers (1) pipefy./pipefy:loginruns the OAuth flow using only the release wheel URLs (pipefy_cli-*.whl+pipefy_auth-*.whl+pipefy_sdk-*.whl).docs/setup.md"Plugin install (Claude Code)" blocks no longer reference#subdirectory=or any git URL.Related
#subdirectory=workaround applies there; release-wheel approach unblocks both.PIPEFY_AUTH_URL) — independent, can land in either order.Out of scope
pyproject.tomlto make bareuvx --from git+<repo> pipefy-mcp-serverwork directly (option 2a / meta-package in the prior discussion). Release-wheel URLs make that refactor unnecessary.