Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Spawn multiple specialized Claude Code agents as MCP servers, each independently configured.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
ANTHROPIC_API_KEY, CLAUDE_TOOL_NAME, CLAUDE_MODEL, CLAUDE_PERMISSION_MODE, CLAUDE_ALLOWED_TOOLS, CLAUDE_APPEND_PROMPT, CLAUDE_FACTORY_ONLYValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"claude-octopus": {
"command": "npx",
"args": [
"-y",
"claude-octopus"
],
"env": {
"ANTHROPIC_API_KEY": "your-value",
"CLAUDE_TOOL_NAME": "your-value",
"CLAUDE_MODEL": "your-value",
"CLAUDE_PERMISSION_MODE": "your-value",
"CLAUDE_ALLOWED_TOOLS": "your-value",
"CLAUDE_APPEND_PROMPT": "your-value",
"CLAUDE_FACTORY_ONLY": "your-value"
}
}
}
}Run this in your terminal
claude mcp add claude-octopus --env ANTHROPIC_API_KEY=your-value --env CLAUDE_TOOL_NAME=your-value --env CLAUDE_MODEL=your-value --env CLAUDE_PERMISSION_MODE=your-value --env CLAUDE_ALLOWED_TOOLS=your-value --env CLAUDE_APPEND_PROMPT=your-value --env CLAUDE_FACTORY_ONLY=your-value -- npx -y claude-octopusFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"claude-octopus": {
"command": "npx",
"args": [
"-y",
"claude-octopus"
],
"env": {
"ANTHROPIC_API_KEY": "your-value",
"CLAUDE_TOOL_NAME": "your-value",
"CLAUDE_MODEL": "your-value",
"CLAUDE_PERMISSION_MODE": "your-value",
"CLAUDE_ALLOWED_TOOLS": "your-value",
"CLAUDE_APPEND_PROMPT": "your-value",
"CLAUDE_FACTORY_ONLY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"claude-octopus": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"claude-octopus"
],
"env": {
"ANTHROPIC_API_KEY": "your-value",
"CLAUDE_TOOL_NAME": "your-value",
"CLAUDE_MODEL": "your-value",
"CLAUDE_PERMISSION_MODE": "your-value",
"CLAUDE_ALLOWED_TOOLS": "your-value",
"CLAUDE_APPEND_PROMPT": "your-value",
"CLAUDE_FACTORY_ONLY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
CLAUDE_TOOL_NAME envCLAUDE_MODEL envCLAUDE_PERMISSION_MODE envCLAUDE_ALLOWED_TOOLS envCLAUDE_APPEND_PROMPT envCLAUDE_FACTORY_ONLY envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account xiaolai, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: ANTHROPIC_API_KEY
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.1.10) reached the registry 6 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, OpenTakeoff
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Construction takeoff for AI agents: load plans, set scale, measure, count, export with provenance.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
One brain, many arms.
An MCP server that wraps the Claude Agent SDK, letting you run multiple specialized Claude Code agents — each with its own model, tools, system prompt, and personality — from any MCP client.
Claude Code is powerful. But one instance does everything the same way. Sometimes you want a strict code reviewer that only reads files. A test writer that defaults to TDD. A cheap quick helper on Haiku. A deep thinker on Opus.
Claude Octopus lets you spin up as many of these as you need. Same binary, different configurations. Each one shows up as a separate tool in your MCP client.
claude CLI installationANTHROPIC_API_KEY env var) or an active Claude Code OAuth sessionThree paths, pick whichever matches your MCP client.
npm install claude-octopus
Skip the install entirely — reference claude-octopus@latest in your .mcp.json and the client will fetch on demand (see Quick Start below).
The server is published to the MCP Registry under the name `io.github.xiaolai/claude-octopus`. Registry-aware MCP clients can resolve and install it by that name without touching npm directly.
The fastest way to get started:
npx claude-octopus init
This interactive wizard lets you pick a template, detects your MCP client, and writes the config for you.
Or add to your .mcp.json manually:
{
"mcpServers": { "claude": { "command": "npx", "args": ["claude-octopus@latest"], "env": { "CLAUDE_PERMISSION_MODE": "bypassPermissions" } } } }
This gives you six tools:
| Tool | Purpose |
|---|---|
claude_code | Send a task, get a result |
claude_code_reply | Continue a conversation |
claude_code_timeline | Query the workflow timeline |
claude_code_transcript | Read full session transcripts |
claude_code_sessions | List Claude Code session history (this project, or all) |
claude_code_report | Generate HTML reports |
That's it — you have Claude Code as a tool, with full workflow observability built in.
The real power is running several instances with different configurations:
{
"mcpServers": { "code-reviewer": { "command": "npx", "args": ["claude-octopus@latest"], "env": { "CLAUDE_TOOL_NAME": "code_reviewer", "CLAUDE_SERVER_NAME": "code-reviewer", "CLAUDE_DESCRIPTION": "Strict code reviewer. Finds bugs and security issues. Read-only.", "CLAUDE_MODEL": "opus", "CLAUDE_ALLOWED_TOOLS": "Read,Grep,Glob", "CLAUDE_APPEND_PROMPT": "You are a strict code reviewer. Report real bugs, not style preferences.", "CLAUDE_EFFORT": "high" } }, "test-writer": { "command": "npx", "args": ["claude-octopus@latest"], "env": { "CLAUDE_TOOL_NAME": "test_writer", "CLAUDE_SERVER_NAME": "test-writer", "CLAUDE_DESCRIPTION": "Writes thorough tests with edge case coverage.", "CLAUDE_MODEL": "sonnet", "CLAUDE_APPEND_PROMPT": "Write tests first. Cover edge cases. TDD." } }, "quick-qa": { "command": "npx", "args": ["claude-octopus@latest"], "env": { "CLAUDE_TOOL_NAME": "quick_qa", "CLAUDE_SERVER_NAME": "quick-qa", "CLAUDE_DESCRIPTION": "Fast answers to quick coding questions.", "CLAUDE_MODEL": "haiku", "CLAUDE_MAX_BUDGET_USD": "0.02", "CLAUDE_EFFORT": "low" } } } }
Your MCP client now sees distinct tools for each agent — code_reviewer, test_writer, quick_qa — each purpose-built.
Agents can coordinate through a coordinator pattern: one agent has the others as inner MCP tools via CLAUDE_MCP_SERVERS, and its system prompt drives the pipeline.
{
"mcpServers": { "publishing-house": { "command": "npx", "args": ["claude-octopus@latest"], "env": { "CLAUDE_TOOL_NAME": "publishing_house", "CLAUDE_SERVER_NAME": "publishing-house", "CLAUDE_MODEL": "opus", "CLAUDE_PERMISSION_MODE": "bypassPermissions", "CLAUDE_APPEND_PROMPT": "You are a publishing house coordinator. Dispatch tasks to your specialist agents and drive the pipeline to completion.", "CLAUDE_MCP_SERVERS": "{\"researcher\":{\"command\":\"npx\",\"args\":[\"claude-octopus@latest\"],\"env\":{\"CLAUDE_TOOL_NAME\":\"researcher\",\"CLAUDE_SERVER_NAME\":\"researcher\",\"CLAUDE_MODEL\":\"sonnet\",\"CLAUDE_PERMISSION_MODE\":\"bypassPermissions\"}},\"architect\":{\"command\":\"npx\",\"args\":[\"claude-octopus@latest\"],\"env\":{\"CLAUDE_TOOL_NAME\":\"architect\",\"CLAUDE_SERVER_NAME\":\"architect\",\"CLAUDE_MODEL\":\"opus\",\"CLAUDE_PERMISSION_MODE\":\"bypassPermissions\"}}}" } } } }
The coordinator agent autonomously calls researcher, architect, etc. as MCP tools — fully autonomous, no human in the loop until it finishes. Every invocation is tracked in the shared timeline.
Don't want to write configs by hand? Add a factory instance:
{
"mcpServers": { "agent-factory": { "command": "npx", "args": ["claude-octopus@latest"], "env": { "CLAUDE_FACTORY_ONLY": "true", "CLAUDE_SERVER_NAME": "agent-factory" } } } }
This exposes a single create_claude_code_mcp tool — an interactive wizard. Tell it what you want ("a strict code reviewer that only reads files") and it generates the .mcp.json entry for you, listing all available options you can customize.
In factory-only mode, no query tools are registered — just the wizard. This keeps routing clean: the factory creates agents, the agents do work.
Don't want to edit JSON by hand? The init wizard gets you from zero to working in 30 seconds:
npx claude-octopus init
Claude Octopus — init wizard
One brain, many arms. Let's set up your agents.
Pick a template (or build your own):
Choice [1-6]:
It auto-detects installed MCP clients (Claude Desktop, Claude Code, Cursor, Windsurf), merges with existing config, and warns before overwriting.
npx claude-octopus init --template code-review-team
npx claude-octopus init --template tiered-models npx claude-octopus init --template publishing-house
Five built-in templates, battle-tested and ready to use:
| Template | Agents | Purpose |
|---|---|---|
code-review-team | code-reviewer (opus), test-writer (sonnet), security-auditor (opus) | Thorough code review pipeline |
publishing-house | researcher (sonnet), architect (opus), editor (sonnet), proofreader (haiku) | Multi-stage content/code pipeline |
tiered-models | quick-qa (haiku), coder (sonnet), deep-thinker (opus) | Right model for the job |
solo-agent | claude (default) | Single agent, quick setup |
factory | agent-factory | Generates configs on demand |
Each agent comes pre-tuned with appropriate model, tools, effort level, and system prompt.
Monitor your agents in real time:
npx claude-octopus dashboard
Opens a local web dashboard at http://localhost:3456 with:
# Custom port
npx claude-octopus dashboard --port 8080
The dashboard reads the same timeline index used by the _timeline and _report tools. No additional configuration needed.
Each non-factory instance exposes:
| Tool | Purpose |
|---|---|
| Send a task to the agent, get a response + session_id + run_id |
_reply | Continue a previous conversation by session_id |
_timeline | Query the cross-agent workflow timeline |
_transcript | Retrieve full session transcript from Claude Code's storage |
_sessions | List Claude Code session history — this project by default, or all projects with all_projects: true |
_report | Generate a self-contained HTML report for a run or all runs |
| Parameter | Description |
|---|---|
prompt | The task or question (required) |
run_id | Workflow run ID — groups related agent calls into one timeline. Auto-generated if omitted; returned in every response for propagation. |
cwd | Working directory override |
model | Model override (sonnet, opus, haiku, or full ID) |
tools | Restrict available tools (intersects with server restriction) |
disallowedTools | Block additional tools (unions with server blacklist) |
additionalDirs | Extra directories the agent can access |
plugins | Additional plugin paths to load |
effort | Thinking effort (low, medium, high, max) |
permissionMode | Permission mode (can only tighten, never loosen) |
maxTurns | Max agent-loop round trips (see effort counters) |
maxBudgetUsd | Max spend in USD |
systemPrompt | Additional prompt (appended to server default) |
Every agent invocation is recorded in a lightweight JSONL index at ~/.claude-octopus/timelines/timeline.jsonl. This solves the multi-agent correlation problem: when several agents participate in a workflow, the timeline tracks which sessions belong to the same run, in what order they executed, and what role each played.
Full session transcripts stay in Claude Code's own storage (~/.claude/projects/). The timeline is just the table of contents — ~200 bytes per entry — that cross-references via session_id.
graph TB
subgraph "Timeline Index (~200 bytes/entry)" TL["~/.claude-octopus/timelines/timeline.jsonl"] end
subgraph "Claude Code Session Storage (full transcripts)" S1["~/.claude/projects/.../ses-aaa.jsonl"] S2["~/.claude/projects/.../ses-bbb.jsonl"] S3["~/.claude/projects/.../ses-ccc.jsonl"] end
TL -->|"session_id cross-ref"| S1 TL -->|"session_id cross-ref"| S2 TL -->|"session_id cross-ref"| S3
and _reply call appends one line to the timelinerun_id, all agents sharing the same run_id are grouped into one runrun_id, one is auto-generated and returned in the response — pass it to subsequent agents to keep them grouped# List all runs
_timeline({})
_timeline({ run_id: "abc-123" })
_timeline({ session_id: "ses-xyz" })
_transcript({ session_id: "ses-xyz" })
Host: rOnly the beginning is shown; read the rest in the repo