Claudish
MCP mode of the Claudish CLI: send prompts to non-Anthropic models and run them as Claude Code sessions
Start, prompt and read coding agent sessions running in a self-hosted Codeman dashboard
By Ark0N (individual) TypeScript Local · stdio AI and MLDeveloper tools
64 popularity score ★ 832 ↓ 4.3k/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs CODEMAN_API_URL. Replace each <NAME> with your value.
claude mcp add codeman -e CODEMAN_API_URL=<CODEMAN_API_URL> -- npx -y aicodeman mcp{
"mcpServers": {
"codeman": {
"command": "npx",
"args": [
"-y",
"aicodeman",
"mcp"
],
"env": {
"CODEMAN_API_URL": "<CODEMAN_API_URL>"
}
}
}
}{
"mcpServers": {
"codeman": {
"command": "npx",
"args": [
"-y",
"aicodeman",
"mcp"
],
"env": {
"CODEMAN_API_URL": "<CODEMAN_API_URL>"
}
}
}
}{
"servers": {
"codeman": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"aicodeman",
"mcp"
],
"env": {
"CODEMAN_API_URL": "<CODEMAN_API_URL>"
}
}
}
}[mcp_servers.codeman]
command = "npx"
args = ["-y", "aicodeman", "mcp"]
[mcp_servers.codeman.env]
CODEMAN_API_URL = "<CODEMAN_API_URL>"gemini mcp add --scope user -e CODEMAN_API_URL=<CODEMAN_API_URL> codeman npx -- -y aicodeman mcpOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs CODEMAN_API_URL. Replace each <NAME> with your value.
git clone https://github.com/Ark0N/Codeman.git
cd Codeman
npm install
npm run buildclaude mcp add codeman -e CODEMAN_API_URL=<CODEMAN_API_URL> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js' mcp{
"mcpServers": {
"codeman": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js",
"mcp"
],
"env": {
"CODEMAN_API_URL": "<CODEMAN_API_URL>"
}
}
}
}{
"mcpServers": {
"codeman": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js",
"mcp"
],
"env": {
"CODEMAN_API_URL": "<CODEMAN_API_URL>"
}
}
}
}{
"servers": {
"codeman": {
"type": "stdio",
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js",
"mcp"
],
"env": {
"CODEMAN_API_URL": "<CODEMAN_API_URL>"
}
}
}
}[mcp_servers.codeman]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/index.js", "mcp"]
[mcp_servers.codeman.env]
CODEMAN_API_URL = "<CODEMAN_API_URL>"gemini mcp add --scope user -e CODEMAN_API_URL=<CODEMAN_API_URL> codeman node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js' mcpCODEMAN_API_URL |
Required: Address of the running Codeman server, e.g. http://127.0.0.1:3000 (https only when started with --https). Can also be passed as --url. |
|---|---|
CODEMAN_PASSWORD secret |
Optional: Codeman's HTTP Basic password, needed when the server has one set. Read from Codeman's data folder .env when unset. |
CODEMAN_USERNAME |
Optional: HTTP Basic user name sent with CODEMAN_PASSWORD. |
| Set together: host session | |
CODEMAN_MUX |
Optional: Set to 1 inside a Codeman pane so the server knows the session it runs in (pass it through in Codex). |
CODEMAN_SESSION_ID |
Optional: Id of the Codeman session the MCP client runs in, read only when CODEMAN_MUX is 1. |
Codeman is a self-hosted web dashboard that runs AI coding CLIs such as Claude Code, Codex, OpenCode, Gemini CLI, Grok and DeepSeek inside persistent tmux sessions. Its `codeman mcp` subcommand is a stdio MCP server that talks to a running Codeman instance over its HTTP API, so one assistant can hand work to other agents: open a new worker in any installed CLI, type a prompt into it, wait for the turn to finish and read back the reply, then close it.
The server adds no routes of its own. It uses the same API and password as the web dashboard, and workers show up there as tabs, so a person can watch or take over. A worker is started in a Codeman "case" (a folder). A new case name creates a fresh scratch folder, while an existing one runs the worker in that project. The run mode defaults to claude, and a plain shell is offered too.
A few things the README leaves out, read in src/mcp-server.ts and src/codeman-credentials.ts: read_output trims what it returns to 40,000 characters, and in terminal mode it reads the last 4000 bytes unless tail_bytes asks for anywhere from 100 to 200000. The Basic auth user is CODEMAN_USERNAME, which falls back to admin, and both it and CODEMAN_PASSWORD are looked up in Codeman's data folder .env when the environment lacks them. The README's client examples point CODEMAN_API_URL at https://127.0.0.1:3000, but a plain `codeman web` serves http on port 3000 unless started with --https, so use the address you open the dashboard at.
| Runtime | Node.js 22+ |
|---|---|
| Runs on | macOS, Linux |
| Codeman | Your own instanceA running Codeman server (codeman web) the MCP server can reach at CODEMAN_API_URL |
| Also |
|
Start Codeman with `codeman web` (localhost:3000 by default) before the MCP server is used. Windows works only through WSL. Building node-pty on Linux needs a compiler toolchain, which the getcodeman.com installer adds when missing.
Prompting, interrupting and deleting work only on sessions this server started (plus, inside a Codeman session, that session's own workers) unless it is launched with --allow-any-session; it never acts on the session it runs in. Listing, reading and waiting cover every session. A wait returns after 45 s by default and at most 600 s. send_prompt types a single line. read_output's last_answer and conversation come from transcripts only for claude, codex and deepseek sessions; other modes are read from the terminal. Without CODEMAN_API_URL or --url the server starts but every call only explains how to configure it.
Suits someone already running Codeman who wants an assistant in Claude Code, Codex, Cursor or Claude Desktop to farm out tasks to other agent CLIs on the same host and collect the answers, with every worker visible as a dashboard tab. It is a client of Codeman, not a standalone agent runner: without a Codeman server it does nothing. Because workers run with the CLIs' own logins and Codeman starts Claude sessions with --dangerously-skip-permissions by default, it suits a trusted single-user machine better than a shared one. Pick something else if you only need to call one model or do not want tmux-based sessions.
3 only read, 3 change things, 1 can delete or overwrite. A ? marks an optional parameter.
list_sessionsstart_session changescase: stringmode?: enumname?: stringwait_ready?: booleansend_prompt changessession_id: stringtext: stringwait?: booleantimeout_ms?: integerwait_for_sessionsession_id: stringuntil?: arraymatch?: stringfrom?: enumtimeout_ms?: integerread_outputsession_id: stringsource?: enumtail_bytes?: integerinterrupt_session changessession_id: stringdelete_session deletessession_id: string