Cli Bridge Mcp

io.github.JoaoBernePublished by GitHub account JoaoBernev0.3.0Updated Oct 24, 2026

Other AI CLIs (Gemini, GPT, Claude, opencode, Ollama) as a council — ban-safe, no API keys.

VerifiedSTDIODesktop onlyDeveloper ToolsAI & ML

Overview

AI-generated overview

Lets an assistant consult other AI CLIs installed on your machine (Claude Code, Codex, Gemini, Ollama and more) as a multi-model council, without API keys.

What you can do
  • Consult other AI CLIs: ask a single lane, fan out to all free lanes, cascade cheapest-to-strongest, or let a router pick, and list or replay conversation threads
  • Build code through a delegate: isolated mode returns a worktree diff, direct mode writes inside a declared zone, with async jobs you can tail or steer
  • Review and compare: multi-model diff review, blind debates with peer voting, preset workflows, and commit or PR text from the staged diff
  • Operate lanes: check job status, rate lanes, record lane costs, run diagnostics and setup
  • Read usage and lane-health resources, and optionally enable batch fan-out and lane-state reset
When to use it
Useful when you want a second or third model's opinion on code, a bug, a plan or a migration decision, or want cross-model review and debate, using CLIs you already have installed and logged in rather than new API keys.
Requirements
Runs locally over stdio via uvx from the cli-bridge-mcp PyPI package. Needs Python 3.12+, uv, and at least one AI CLI installed and logged in. Optional environment variables such as CLI_BRIDGE_PROFILE, CLI_BRIDGE_CACHE_TTL_S, CLI_BRIDGE_TERSE and per-lane settings tune cost, caching and output style.
Before you install
Delegates can write files: direct mode edits real files inside a declared zone, and the human CLI's apply option lands diffs as unstaged changes. Paid lanes can consume credits or quota, so cost profiles and daily limits matter. The injection guard on delegate output is heuristic, so treat delegate output as data. Non-interactive use of vendor CLIs is not formally sanctioned everywhere, and token or credit figures are estimates.

Installation

In SourceWeft

  1. Open Cli Bridge Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

cli-bridge

[CI] [PyPI]

A Model Context Protocol server that lets the AI assistant you're talking to consult the other AI CLIs installed on your machine — Claude Code, Codex, Gemini, Mistral, opencode, Ollama, Apple fm, … Each lane spawns the official CLI as a subprocess: no API keys, no token extraction, read-only by default.

Dependencies: the Python stdlib and mcp (1.x or 2.x). No daemon.

What it does

ask_gemini(task="find the bug across ./src", cwd="path/to/repo")     # one lane (1M-token context)ask_apple(task="what's wrong in this UI?", images=["shot.png"])      # vision, on-device, $0ask_all(task="…")                                                    # every free lane in parallel + disagreement scoreask_cascade(task="…")                                                # cheapest→strongest, skips cooled-down lanesask_best(task="…", mode="deep")                                      # router picks; rate_lane teaches itask_build(lane="opencode", task="add retry with backoff")            # build in a throwaway worktree → diffreview_diff(base="origin/main", focus="security")                    # multi-model review, severity-rankeddebate(task="which migration strategy?", vote="borda")               # N blind answers, peer-rankedworkflow(preset="converge", task="is this migration safe?")          # author → blind arbiter → cross-family peersgit_text(kind="commit")                                              # Conventional Commit from the staged diff

Every ask_<lane> returns a thread id; reuse it (even on another lane) for a multi-model conversation that survives /compact. conversations lists or replays threads.

Tools

15 fixed tools + one ask_<lane> per installed CLI:

  • Consult: ask_<lane>, ask_all, ask_cascade, ask_best, conversations, list_models
  • Build: ask_build (mode=isolated → diff, mode=direct → zone-guarded writes; with mode=direct, async=true → steerable via job)
  • Review: review_diff (focus=code|security), debate (vote=judge|borda), workflow (presets: refine_plan, map_review, research_verify, fanout_compare, converge, premortem, test_plan, challenge), git_text (kind=commit|pr)
  • Operate: job (action=status|result|cancel|list|tail|steer), rate_lane, set_lane_cost, doctor, setup

CLI_BRIDGE_TOOLS=all adds batch_run (journaled fan-out) and reset_lane_state; CLI_BRIDGE_TOOLS=default,batch_run extends the default; a plain comma list is exactly those. Usage and lane health are MCP resources (cli-bridge://usage-summary, cli-bridge://lane-stats). Full reference: docs/TOOLS.md.

There is also a human CLI, cli-bridge doctor|ask|ask-all|ask-best|build|review-diff|security-review|test-plan|premortem|stats|usage|jobs|set-cost (--json where it makes sense). cli-bridge build <lane> "<task>" prints the worktree diff; --apply lands it as unstaged changes.

Writing code safely

  • isolated (default): the delegate edits a throwaway git worktree and you get a diff. Your tree is untouched.
  • direct: writes real files, but only inside the zone you declare, behind a per-zone lock with a post-turn zone-violation check; undo is zone-scoped. async=true makes it steerable (job action=tail|steer) with an executable Definition-of-Done (dod_cmd).

CLI_BRIDGE_VERIFY_PLAN_READONLY=1 flags (never reverts) a read-only delegate that wrote files anyway. Re-entry is depth-capped (CLI_BRIDGE_MAX_DEPTH, default 1). Delegates run in the caller's cwd, else CLI_BRIDGE_DEFAULT_CWD, else the host's MCP workspace root.

Install

Prerequisites: Python 3.12+, uv, and at least one AI CLI installed and logged in.

bash
uvx --from cli-bridge-mcp cli-bridge doctor        # what cli-bridge can see (--deep probes each lane)

Wire it into your host:

  • Claude Code: claude mcp add cli-bridge -- uvx cli-bridge-mcp (or the plugin: claude plugin marketplace add JoaoBerne/cli-bridge-mcp && claude plugin install cli-bridge@cli-bridge-mcp).
  • Any other MCP host (Codex, Cursor, VS Code, Zed, Claude Desktop, …):
    json
    { "mcpServers": { "cli-bridge": { "command": "uvx", "args": ["cli-bridge-mcp"] } } }
    Per-host config paths: docs/HOSTS.md. Full example with env vars: examples/mcp.example.json. GUI hosts launch servers with a minimal PATH; cli-bridge also searches the usual install dirs, or point a lane at its binary with CLI_BRIDGE_<LANE>_BIN=/full/path.

Restart the host, then ask it to consult a lane ("ask gemini to read ./src and find the bug"). cli-bridge-mcp is the server entry point; cli-bridge is the human CLI.

Configuration

Everything is env (set in the MCP server entry) or ~/.config/cli-bridge/config.json (env wins). The knobs that matter:

bash
CLI_BRIDGE_PROFILE=balanced            # saver = free-only fan-out · balanced = paid when asked · max = bestCLI_BRIDGE_<LANE>_COST=free|limited|paidCLI_BRIDGE_<LANE>_ENABLED=false        # hide a laneCLI_BRIDGE_<LANE>_MODEL=<model-id>CLI_BRIDGE_<LANE>_DAILY_LIMIT=<runs/day>          # enforced at spawnCLI_BRIDGE_<LANE>_CREDITS_PER_1K=<credits>        # makes CLI_BRIDGE_DAILY_CREDIT_CAP enforceableCLI_BRIDGE_<LANE>_MIN_INTERVAL_S=2     # anti-burst pacing for a rate-limited free tierCLI_BRIDGE_TERSE=off|lite|full|ultraCLI_BRIDGE_GUARD=off|warn|strict       # injection guard on delegate outputCLI_BRIDGE_CACHE_TTL_S=0               # >0 enables the response cacheCLI_BRIDGE_TRACE_FOOTER=off            # hide the JSON trace footer in reportsCLI_BRIDGE_TOOLS=all                   # tool surface (see above)

doctor --deep (or doctor(deep=true)) live-checks every free lane, its CLI version and its model list, and reports what changed since the previous deep probe: run it weekly and you learn about a renamed flag or a new model before a delegation fails.

set_lane_cost (or cli-bridge set-cost) records what a lane costs you, persisted to the config file. Cost tiers are sourced defaults, never read from your account (docs/COSTS.md); the full spend model is in docs/BUDGET.md.

Lanes

Built-in: Claude Code, Codex (gpt), Gemini (+ Antigravity agy), Mistral (Vibe), opencode, Ollama (local, $0), Apple Foundation Models (fm, on-device, $0), Qwen Code, Copilot, Cursor, Grok, and Apple PCC (hidden until APPLE_FM_SERVE_URL is set — it talks to a fm serve you start from Terminal yourself; see examples/apple-fm-serve.lane.json).

images=[…] works on the vision lanes (apple, ollama, opencode, gpt, gemini); whether the image is actually read depends on the model behind the lane.

Other CLIs are a few lines of JSON via CLI_BRIDGE_LANES_FILE: examples/local-runtime.lane.json (LM Studio, MLX, llama.cpp; runtime table in examples/local-first-host.md), examples/community-lanes.json (Aider, Goose, Plandex, Amp, Crush, Amazon Q, Droid), and any OpenAI-compatible endpoint via curl or the bundled cli-bridge-openai bridge (examples/openai-compatible.lane.json).

Known limitations

  • No token or key extraction, but non-interactive use of a vendor CLI isn't formally sanctioned everywhere.
  • Async jobs are in-process: a server restart marks running jobs interrupted. batch_run / workflow journal each task and resume via resume_id.
  • The injection guard is heuristic. Treat delegate output as data.
  • Token/credit figures are estimates (chars/4 × your CREDITS_PER_1K).
  • Experimental lanes (qwen, copilot, grok, community, images=): doctor --deep checks each CLI's --help on your machine.

Development

bash
uv venv && uv pip install -e . pytest pytest-asyncio ruffpytest -q            # no real CLI or network neededruff check src/ tests/

Eval harness (deterministic scorer, outside the package): benchmarks/. History: CHANGELOG.md. Layout and rules: AGENTS.md, docs/ARCHITECTURE.md.

License

Apache 2.0

Source: README.md at commit ee62f24

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.3.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts