Move plugins under plugins/ and drop the -mcp suffix - #11
Merged
Conversation
Reorganizes for a repo that will hold more than MCP servers.
harbor-mcp/ -> plugins/harbor-hub/
tastytrade-mcp/ -> plugins/tastytrade/
Both moves are tracked as renames, so git log and git blame still resolve.
Breaking for installed copies. The plugin name is the install id and part of the
cache path, so harbor-mcp@walkerhughes and tastytrade-mcp@walkerhughes are
orphaned rather than upgraded; they must be uninstalled and reinstalled under
the new names.
The version gate needed care: its glob was */.claude-plugin/plugin.json, which
matches nothing once the plugins are one level deeper. That would not have
failed, it would have passed vacuously forever, which is the same invisible
failure the gate exists to prevent. Glob is now plugins/*/..., and the plugin
name is taken by stripping the manifest suffix rather than ${manifest%%/*},
which would now yield "plugins" for both.
Also fixes stale references the move exposed:
- The three harbor eval Dockerfiles installed from
github.com/walkerhughes/harbor-mcp, a repo consolidated into this one whose
last commit predates everything from the plugin work. They now install from
walkerhughes/claude with #subdirectory=plugins/harbor-hub.
- The tastytrade benchmark Dockerfile pointed at walkerhughes/tastytrade-mcp
and cloned CANDIDATE_REF=mcp-server-refactor, a branch that no longer exists,
so `make benchmark` could not build. The repo URL and the subdirectory paths
are corrected, but the two-ref baseline/candidate comparison has no second ref
to compare against any more. That needs a decision, so it is documented in the
Dockerfile rather than guessed at. Nothing in CI builds this image, which is
why it went unnoticed.
Workflow files renamed to match, so the check names read harbor-hub and
tastytrade.
Deliberately unchanged: the Python package names (harbor_mcp, src), the
pyproject project names, the harbor-mcp console script, ~/.tastytrade-mcp as the
credentials directory, and the tastytrade-mcp/<task> eval namespaces. None are
visible in the repo layout, and renaming the credentials path or task namespaces
would break a working setup and orphan published tasks.
Verified: both plugin manifests and the marketplace validate; harbor-hub 72
tests, tastytrade 106 tests at 93.00% coverage, ruff and mypy clean, 12 eval
verifiers pass. Both launchers complete an MCP handshake from an unrelated cwd
under env -i PATH=/usr/bin:/bin, returning 15 and 12 tools. The version gate was
simulated against this branch and correctly matches the new paths.
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.
Reorganizes for a repo that will hold more than MCP servers.
Both moves are tracked by git as renames, so
git logandgit blamestill resolve through them.Breaking for installed copies
The plugin name is the install id and part of the cache path, so
harbor-mcp@walkerhughesandtastytrade-mcp@walkerhughesare orphaned rather than upgraded. Migration is in the PR discussion below.The sharp edge
The version gate's glob was
*/.claude-plugin/plugin.json, which matches nothing once the plugins sit one level deeper. That would not have failed the build; it would have passed vacuously forever, which is precisely the invisible failure the gate exists to catch.Two changes were needed, not one:
${manifest%%/*}would now yieldpluginsfor both entries, silently gating the wrong directory. Simulated against this branch: the glob matches both manifests and each resolves to its own directory.Stale references the move exposed
The three harbor eval Dockerfiles installed from
github.com/walkerhughes/harbor-mcp, a repo consolidated into this one whose last commit is from Jul 18, predating all of the plugin work in #2 through #10. The evals have been testing week-old code. They now install fromwalkerhughes/claudewith#subdirectory=plugins/harbor-hub.The tastytrade benchmark Dockerfile pointed at
walkerhughes/tastytrade-mcp(last commit June 15) and clonedCANDIDATE_REF=mcp-server-refactor, a branch that no longer exists, somake benchmarkcould not build at all. The repo URL and subdirectory paths are corrected, but its two-ref baseline-vs-candidate comparison no longer has a second ref to compare against. That needs a decision from you, so it is documented in the Dockerfile rather than guessed at. Nothing in CI builds this image, which is why it went unnoticed.Deliberately unchanged
harbor_mcp,srcharbor-mcpconsole script~/.tastytrade-mcp/credentials.jsontastytrade-mcp/<task>eval namespacesHappy to do any of these as a follow-up, but none serve the layout goal.
Verification
claude plugin validateenv -i PATH=/usr/bin:/bin, 15 toolsLocal
.venvdirectories break on a move (their script shebangs hold absolute paths). Both were rebuilt withuv sync;.venvis gitignored so nothing ships.