Claudish

MCP mode of the Claudish CLI: send prompts to non-Anthropic models and run them as Claude Code sessions

By MadAppGang TypeScript Local · stdio AI and MLDeveloper tools

58 popularity score ★ 1.0k ↓ 1.9k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs OPENROUTER_API_KEY. Replace each <NAME> with your value.

FirstTerminal
npm install -g claudish
Claude CodeTerminal
claude mcp add claudish -e OPENROUTER_API_KEY=<OPENROUTER_API_KEY> -- claudish --mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "claudish": {
      "command": "claudish",
      "args": [
        "--mcp"
      ],
      "env": {
        "OPENROUTER_API_KEY": "<OPENROUTER_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "claudish": {
      "command": "claudish",
      "args": [
        "--mcp"
      ],
      "env": {
        "OPENROUTER_API_KEY": "<OPENROUTER_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "claudish": {
      "type": "stdio",
      "command": "claudish",
      "args": [
        "--mcp"
      ],
      "env": {
        "OPENROUTER_API_KEY": "<OPENROUTER_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.claudish]
command = "claudish"
args = ["--mcp"]

[mcp_servers.claudish.env]
OPENROUTER_API_KEY = "<OPENROUTER_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e OPENROUTER_API_KEY=<OPENROUTER_API_KEY> claudish claudish -- --mcp

Settings 10

OPENROUTER_API_KEY secret Required: OpenRouter key from the documented setup. Another provider key such as GEMINI_API_KEY, OPENAI_API_KEY or META_API_KEY, a `claudish login` subscription or a local model server can be used instead.
CLAUDISH_MCP_TOOLS Optional: Tool group to expose: all, low-level, agentic, session or debug. Any other value exposes all tools. Default all.
GEMINI_API_KEY secret Optional: Google Gemini key for g@ and google@ models.
OPENAI_API_KEY secret Optional: OpenAI key for oai@ models.
MOONSHOT_API_KEY secret Optional: Kimi (Moonshot) key for kimi@ models. KIMI_API_KEY also works.
ANTHROPIC_API_KEY secret Optional: Anthropic key handed to the internal proxy.
CLAUDISH_DEBUG Optional: 1 or true writes a debug log to logs/ in the working directory.
CLAUDISH_TELEMETRY Optional: 1 sends error reports without asking. 0, false or off turns reporting off. For report_error.
Set together: meta
META_API_KEY secret Optional: Meta Model API key for metered meta@ models. The muse@ subscription signs in with `claudish login muse` and never uses this key.
META_BASE_URL Optional: Endpoint for meta@ models. Default https://api.meta.ai.

What it does

Claudish is first of all a command-line wrapper that runs Claude Code on other models through a local Anthropic-compatible proxy. It can route to OpenRouter, Gemini, OpenAI, Kimi, GLM, MiniMax, Meta, Vertex AI and many more, or to a local Ollama, LM Studio, vLLM or MLX server. Start it with `claudish --mcp` and the same program speaks MCP over stdio, so an assistant like Claude Code can pass a question or a whole task to another model without leaving the conversation.

At v14.7.0 the server registers 16 tools in four groups. The low-level group sends one prompt to one model and lists or searches models. The agentic group runs several models on one task with anonymised answers and optional blind judging (`team`), shows which provider would serve a model (`preflight`), reports the remaining allowance of a local Codex account pool, and files error reports. The session group starts full Claude Code sessions on an external model in headless terminal panes, then lets you type into them, read their screen and output, resize, list, diagnose and cancel them. The debug group holds `compare_models`, which sends one prompt to several models in turn.

`CLAUDISH_MCP_TOOLS` picks the group: `all` (the default), `low-level`, `agentic`, `session` or `debug`. The old value `channel` was renamed to `session` and now selects every tool with a warning on stderr. Progress reaches the client as ordinary progress notifications, and the server no longer announces a channel capability. Inside a pane that claudish itself started, the server drops to the four one-shot tools, so sessions cannot start more sessions.

What it needs

RuntimeNode.js 18+
Runs onmacOS, Windows, Linux
OpenRouterPaid planKey used in the documented setup. Another provider key, a `claudish login` subscription or a local model server can stand in for it.
Also
  • Claude Code CLI on PATH for team, create_session and Claude model names
  • magmux 0.18.0+ for team and the session tools (bundled on macOS and Linux)

Node.js 18+ or Bun 1.0+, per the package's engines field. Install with `npm install -g claudish`. Provider keys go in the client's env block. A `.env` in the working directory is read at startup but only for provider keys and model settings (`CLAUDISH_MODEL`, `CLAUDISH_MODEL_*`), so put other settings in the shell or the env block. Subscriptions sign in with `claudish login` (codex, antigravity, grok, kimi, or muse for Meta's Muse Code). The pane tools need magmux 0.18.0 or newer, which ships with the npm package on macOS and Linux and otherwise comes from `brew install MadAppGang/tap/magmux`.

Limits

  • Platform `team` and the session tools do not run on Windows and fail with `magmux_unavailable` when magmux is missing. The other tools work on every platform.
  • Size cap At most 48 live panes per user across all claudish processes. Past that, a new run or session fails with `pane_limit`.
  • Not covered `search_models` searches only OpenRouter's listing, so a model missing from it may still be routable through another provider.
  • Not covered In a session claudish started, only `run_prompt`, `compare_models`, `list_models` and `search_models` are offered, whatever CLAUDISH_MCP_TOOLS says.
  • Not covered `allowance_status` only covers a Codex account pool. Without one it returns null with a reason.
  • Cost Calls to cloud models bill the provider account behind the key or draw on a subscription quota.
  • Size cap A session's events.jsonl record is capped at 4 MB.

`team`, `create_session` and the other pane-based features do not work on Windows and refuse with `magmux_unavailable` when magmux is missing; the other tools work on every platform. At most 48 live panes per user across all claudish processes. `team` session paths must sit inside the current working directory. `search_models` only covers OpenRouter's listing, so a model missing from it may still be routable. Session record files are capped (events.jsonl at 4 MB). The MCP guide's configuration example uses a `claudish-mcp` command, but the npm package (v10.6.1) installs only `claudish`; use `claudish --mcp` or `npx claudish@latest --mcp`.

Who it suits

Suits developers already in Claude Code who want a second opinion from GPT, Gemini, Grok, Kimi, Muse or a local model mid-session, or who want several models to try one task and be judged blind by others. The team and session tools need macOS or Linux plus the Claude Code CLI, so on Windows it is limited to single prompts and model lookup. Claudish is made by MadAppGang, not by Anthropic or any of the providers it calls. Every cloud call costs money or quota, so anyone who wants to spend nothing can point it at Ollama or LM Studio instead.

Tools 16

10 only read, 6 change things. A ? marks an optional parameter.

run_prompt
Sends one prompt to one model and returns the answer, with no tools or session. A Claude model name runs once on your own Claude Code login.model: stringprompt: stringsystem_prompt?: stringeffort?: enumuser_required_provider?: booleanuser_required_model?: boolean
list_models
Lists the models claudish recommends for coding and the suggested reasoning effort per model and task type.
search_models
Searches OpenRouter's model listing by name, provider or capability and matches results to claudish's own catalog.query: stringlimit?: number
compare_models
Debug tool that sends the same prompt to several models one after another and shows the answers side by side.models: arrayprompt: stringsystem_prompt?: string
preflight
For a list of models, says which provider would serve each, whether it is metered or subscription, and whether it answers now.models: arrayprobe?: booleantimeout_ms?: number
team changes
Runs several models on one task as Claude Code panes with anonymised outputs and optional blind judging, plus status, list, capture, resize and cancel modes.mode: enumpath?: stringmodels?: arrayjudges?: arrayefforts?: objectinput?: stringinput_file?: stringrun_id?: stringslot?: stringsince_seq?: numberspans?: booleancols?: integerrows?: integeruser_required_provider?: arrayuser_required_model?: arrayrequire_pattern?: stringmin_output_bytes?: numberagent?: stringclaude_flags?: string
report_error changes
Posts a sanitised claudish error report, optionally with local log and session files, to the developers. Meant to be called only after the user agrees.error_type: enummodel?: stringcommand?: stringstderr_snippet?: stringexit_code?: numbererror_log_path?: stringsession_path?: stringadditional_context?: stringauto_send?: boolean
allowance_status
Reports the local Codex account pool's remaining allowance, burn rate and projected gaps, without contacting any vendor.provider?: enumhorizon_hours?: numbersections?: array
create_session changes
Starts a Claude Code session on an external model in a headless pane, one-shot with a prompt or interactive without one.model: stringprompt?: stringwork_dir?: stringsetup_from?: stringtimeout_seconds?: integeragent?: stringclaude_flags?: stringeffort?: enumuser_required_provider?: booleanuser_required_model?: boolean
send_input changes
Queues a prompt for a running session, or delivers it at once when the session is waiting.session_id: stringtext: string
get_output
Returns the assistant text from each finished turn of a session.session_id: stringtail_lines?: number
cancel_session changes
Stops a session. A second call changes nothing.session_id: string
list_sessions
Lists sessions with their state, activity and idle time, finished ones on request.include_completed?: boolean
get_diagnostics
Explains a session after the fact: final screen, upstream errors, model chain, accounting and record paths.session_id: stringevent_limit?: number
capture_session
Reads a session's current terminal screen, with a sequence number for cheap polling.session_id: stringsince_seq?: numberspans?: boolean
resize_session changes
Changes a session's terminal size, clamped to at least 40 columns by 24 rows.session_id: stringcols: integerrows: integer

Similar servers