Ship a Claude Code plugin: MCP server + skills in one install - #36
Merged
Conversation
The PyPI package ships only the MCP server; the coaching skills lived in skills/ and had to be cloned and copied into ~/.claude/skills by hand. Users who registered the server but skipped that step got the tools with no protocols — the coach had no Garmin connection flow, no onboarding, etc. Make the repo its own Claude Code plugin marketplace so one install bundles both halves: - .claude-plugin/marketplace.json — repo is the marketplace, plugin at root - .claude-plugin/plugin.json — version tracks the package (0.10.0) - .mcp.json — registers the server via `uvx performance-agent` The skills/ dir at the repo root is auto-discovered (16 skills). Verified with `claude plugin install` from a local marketplace: 16 skills + 1 MCP server load. README and docs/installing.md lead with the two-command plugin setup and keep the manual per-host path for non-Claude-Code clients. RELEASING.md now bumps plugin.json alongside pyproject.toml. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bump pyproject + plugin.json to 0.11.0, regenerate uv.lock, promote the CHANGELOG Unreleased section. Ships the Claude Code plugin. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Why
The PyPI package ships only the MCP server. The coaching skills live in
skills/and, until now, had to be cloned and copied into~/.claude/skills/by hand. Users who registered the server but skipped the copy got the 103 tools with no coaching protocols — no onboarding, no Garmin connection flow, no periodization guidance. (This is exactly what happened to a user's friend: tools present, "démarche" absent.)What
The repo is now its own Claude Code plugin marketplace, so one install bundles both halves:
.claude-plugin/marketplace.json— repo is the marketplace; the plugin lives at the repo root (source: "./").claude-plugin/plugin.json— metadata +mcpServers→.mcp.json;versiontracks the package.mcp.json— registers the server viauvx performance-agent(user scope), so one-folder-per-athlete still worksskills/at the repo root is auto-discovered — all 16 skills load with the serverClaude Code keeps the plugin updated (
/plugin marketplace update performance-agent).Verification
claude plugin validatepasses on the marketplace manifest (no warnings).claude plugin detailsreports 16 skills + 1 MCP server.tests/packaging/test_distribution.pystill green —skills/stay out of the PyPI wheel (they ship via the plugin/git, not PyPI).Docs
README and
docs/installing.mdlead with the two-command plugin setup and keep the manual per-host path (claude mcp add …+ skills copy) for non-Claude-Code clients (Cursor, Claude Desktop, Gemini, Codex…).RELEASING.mdnow bumpsplugin.jsonalongsidepyproject.toml.🤖 Generated with Claude Code