Skip to content

mcphubEvery MCP server. One hub. The right tool on demand.

Connect each harness once. In lazy mode, agents can match the current task against your live catalog — including unpinned tools — then call the right capability through one gateway while mcphub keeps 15 agent configs in sync.

$ brew install abdul-hamid-achik/tap/mcphub
patch bay — live topologypinned + on-demand · 1 stdio connection
hitspeccortexbobcodemapvecgreppostgresmcphubgateway · stdioserver__toolyour agentClaude CodeCodexopencodeCopilot CLIGemini CLICrush

Capability routing

Unpinned does not mean unavailable

In lazy mode, mcphub keeps the catalog out of the prompt but not out of reach. Tool metadata and your use_when hints stay searchable, so an agent can resolve the current task, inspect the match, and call it through the gateway.

example catalog routesresolve → describe → call
  1. current task

    “Fetch a public HTTP response as Markdown for source-backed research”

    matched signals
    webpageHTTPMarkdownresearch
    recommended capabilityhitspechitspec__fetchBounded HTTP response → inline Markdown
  2. current task

    “Investigate evidence across code, CLI output, and databases”

    matched signals
    evidencecase filetool routingverification
    recommended capabilitycortexcortex__investigateBounded investigation with retained evidence
  3. current task

    “Inspect the repository plan before developing a feature”

    matched signals
    repositoryplanconvergenceread-only
    recommended capabilitybobbob__planDeterministic plan and digest before edits

See it run

Real output, not a mockup

One YAML file in, twelve synced harnesses out — and a local ledger of what every server actually costs you.

$ mcphub sync
» claude  (claude, gateway) → ~/.claude.json
    update   mcphub
» codex  (codex, gateway) → ~/.codex/config.toml
    update   mcphub
» copilot  (copilot, gateway) → ~/.copilot/mcp-config.json
    update   mcphub
» crush  (crush, gateway) → ~/.config/crush/crush.json
    update   mcphub
» hermes  (hermes, gateway) → ~/.hermes/config.yaml
    update   mcphub
» opencode  (opencode, gateway) → ~/.config/opencode/opencode.json
    update   mcphub

Dry run. Re-run with --write to apply (a .bak is saved first).

How it works

Three commands, and you never hand-edit a config again

  1. 1mcphub init

    Write mcphub.yaml once — or import the servers your agents already declare with --from-agents.

  2. 2mcphub sync --write

    Push the right config into every harness. Dry-run by default, a timestamped .bak before any write.

  3. 3mcphub mcp serve

    Your agent gets one gateway. Lazy mode resolves unpinned tools from use_when hints and live metadata, then records every call locally.

Syncs into 12 harnesses

  • Claude Code
  • opencode
  • Codex
  • Copilot CLI
  • Qwen Code
  • Gemini CLI
  • Kilo Code
  • Kimi Code CLI
  • Crush
  • Forge
  • Hermes
  • local-agent

Give every agent the whole catalog — without loading all of it.

one registry → the right capability → one gateway

Released under the MIT License.