Skip to content

fix: make the marketplace manifest installable, resolve the binary at runtime - #18

Merged
CodeWithJuber merged 2 commits into
mainfrom
fix/plugin-marketplace-schema
Aug 13, 2026
Merged

fix: make the marketplace manifest installable, resolve the binary at runtime#18
CodeWithJuber merged 2 commits into
mainfrom
fix/plugin-marketplace-schema

Conversation

@CodeWithJuber

Copy link
Copy Markdown
Owner

Follow-up to #17. Two things still stopped the repo from installing as a plugin.

1. marketplace.json was not a marketplace manifest

It contained tagline, tags, icon — display metadata — and none of name + owner + plugins, which the format requires. claude plugin marketplace add CodeWithJuber/connector-hub had nothing to read.

Rewritten with a plugins array whose single entry has source: "./" (the plugin is the repo root). claude plugin validate . now passes — one warning, for the interface block that the Codex and Kimi manifests use and Claude Code ignores.

2. .mcp.json pointed at a build artifact that does not exist at install time

It called ${CLAUDE_PLUGIN_ROOT}/crates/target/release/connector-hub directly. Plugin hosts install by cloning the repo — target/ is gitignored, so that path is always missing on a fresh install and the server failed to start with nothing useful on stderr.

Added bin/connector-hub-mcp, which resolves a binary in this order:

  1. $CONNECTOR_HUB_BIN — explicit override
  2. $CLAUDE_PLUGIN_ROOT/crates/target/release/connector-hub
  3. the debug build
  4. connector-hub on $PATH — covers anyone who already built it

If none resolve it exits with the exact cargo build --release command to run, instead of a silent failure. It also exports CONNECTOR_HUB_SPECS_DIR from the checkout when unset, so a binary found on $PATH still loads this checkout's catalogue rather than whichever one it was built next to.

Verification

bin/connector-hub-mcp (cwd=/, CLAUDE_PLUGIN_ROOT set)   24 providers, 301 operations
connector-hub validate                                   passed, manifests at 2.2.0
claude plugin validate .                                 passed

🤖 Generated with Claude Code

https://claude.ai/code/session_018Xs4hZtZhd9Vi6EJnVnwDf

… runtime

`.claude-plugin/marketplace.json` was not a marketplace manifest — it held
display metadata (tagline, tags, icon) and none of the three fields the format
requires, so `claude plugin marketplace add CodeWithJuber/connector-hub` had
nothing to read. Rewritten with `name`, `owner`, and a `plugins` array whose
single entry points at the repo root. `claude plugin validate .` now passes.

The plugin's `.mcp.json` also pointed straight at
`crates/target/release/connector-hub`. Plugin hosts install by cloning, so that
path never exists at install time and the server failed to start with no useful
message. Added `bin/connector-hub-mcp`, which resolves a binary from
`$CONNECTOR_HUB_BIN`, the release build, the debug build, or `$PATH`, and
otherwise exits with the exact cargo command to run. It also pins
`CONNECTOR_HUB_SPECS_DIR` to the checkout's own `specs/`, so a binary built
elsewhere still loads this checkout's catalogue.

Manifests bumped to 2.2.0; parity check still passes.

Verified: launcher serves MCP from an unrelated cwd and returns all 24
providers / 301 operations; `connector-hub validate` and
`claude plugin validate .` both pass.
MCP hosts launch stdio servers with a bare environment, so a plugin-installed
hub started with no provider credentials at all — every call returned
ConfigurationRequired even when the keys existed in the user's shell profile.

The launcher now sources $CONNECTOR_HUB_ENV, defaulting to
~/.config/connector-hub/env, before exec. One file per machine instead of the
same key pasted into every agent's MCP config. Documented in the README,
including why an empty-string value is worse than a commented-out one.
@CodeWithJuber
CodeWithJuber merged commit f693729 into main Aug 13, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant