Skip to content

fix: make the hub installable outside its repo root - #17

Merged
CodeWithJuber merged 1 commit into
mainfrom
fix/global-install-plugin-manifests
Aug 13, 2026
Merged

fix: make the hub installable outside its repo root#17
CodeWithJuber merged 1 commit into
mainfrom
fix/global-install-plugin-manifests

Conversation

@CodeWithJuber

Copy link
Copy Markdown
Owner

Three things blocked installing this hub globally into MCP hosts.

1. Specs were unreachable from any working directory but the repo root

build_catalogue() and validate both did Path::new("specs"). MCP hosts launch stdio servers with an arbitrary cwd, so the server started with zero providers and no errorlist_providers just returned an empty array.

Specs are now resolved in order:

  1. CONNECTOR_HUB_SPECS_DIR — explicit override
  2. ./specs — repo-root invocation, unchanged behaviour
  3. specs/ found by walking up from the executable — covers crates/target/release/connector-hub

2. Both plugin manifests pointed at files that did not exist

.claude-plugin/plugin.json and .codex-plugin/plugin.json declare "mcpServers": "./.mcp.json" and "skills": "./skills/". Neither path existed in the repo, so neither plugin could load. Added:

  • .mcp.json — uses ${CLAUDE_PLUGIN_ROOT} and sets CONNECTOR_HUB_SPECS_DIR explicitly, which only works because of fix 1
  • skills/connector-hub/SKILL.md — search → describe → dry-run → call workflow, how to read the five execution states, and the rule that a non-Succeeded state is never "probably worked"

3. Manifest counts were stale

All four manifests advertised 21 providers / 278 operations. The catalogue has been 24 / 301 since the ops connectors landed — README.md already said so. Synced and bumped to 2.1.0 (parity check in validate still passes).

Also

hub-net/src/client.rs had a collapsible_match that fails cargo clippy --all-targets -- -D warnings on Rust 1.95+, which is what CI runs. Collapsed into a match guard; behaviour is identical (a null body on POST/PUT/PATCH still sends no JSON).

Verification

cargo fmt --check                     ok
cargo clippy --all-targets -D warnings  ok
cargo test --workspace                ok (26 tests)
cargo run -- validate                 301 operations, 24 providers, 32 destructive

Confirmed end to end: MCP handshake from a cwd outside the repo returns all 24 providers.

🤖 Generated with Claude Code

https://claude.ai/code/session_018Xs4hZtZhd9Vi6EJnVnwDf

Three things blocked installing this hub globally into MCP hosts:

1. `specs/` was resolved as a bare relative path, so any host that launches
   the binary with a different working directory got an empty catalogue —
   zero providers, no error. Specs are now resolved via
   `CONNECTOR_HUB_SPECS_DIR`, then `./specs`, then by walking up from the
   executable.
2. Both plugin manifests point at `./.mcp.json` and `./skills/`; neither
   existed, so the Claude Code and Codex plugins could not load. Added both.
   The MCP entry uses `${CLAUDE_PLUGIN_ROOT}` and sets the specs dir
   explicitly.
3. The four manifests advertised 21 providers / 278 operations; the catalogue
   has been 24 / 301 since the ops connectors landed. Synced, bumped to 2.1.0.

Also collapses a `collapsible_match` in hub-net that fails
`cargo clippy -- -D warnings` on Rust 1.95+, which is what CI runs.

Verified: cargo fmt --check, clippy -D warnings, test --workspace, and
`connector-hub validate` (301 operations, 24 providers) all pass.
@CodeWithJuber
CodeWithJuber merged commit f41c8dc 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