cc-agent
Allows cloning GitHub repositories, creating branches, and managing workflows with multi-step plans and dependency enforcement.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cc-agentSpawn agent to add error handling to API endpoints in https://github.com/example/repo"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cc-agent
Distill and delegate.
MCP server for spawning Claude Code agents in GitHub repos. Give Claude Code the ability to branch itself — clone a repo and kick off a sub-agent to work on it autonomously, with persistent state across MCP restarts.
Built by @Gonzih.
Quickstart
claude mcp add cc-agent -- npx @gonzih/cc-agentSet one of:
CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-... # OAuth token (recommended)
ANTHROPIC_API_KEY=sk-ant-api03-... # API keyRestart Claude Code. You now have 13 new MCP tools.
Related MCP server: e2b-sandbox-mcp
MCP Tools
Tool | Description |
| Clone a repo, optionally create a branch, run Claude Code on a task |
| Check status of a specific job |
| Stream output lines from a job (supports offset for tailing) |
| List all jobs with status, recent tool calls, and exit info |
| Kill a running job |
| Write a message to a running agent's stdin mid-task |
| Total USD cost across all jobs, broken down by repo |
| Return the running cc-agent version |
| Spawn a dependency graph of agent jobs in one call |
| Auto-decompose a natural language goal into ordered stages and spawn all agents with stage-based dependency enforcement |
| Poll the status of a workflow created by |
| Return all wiki pages for a repo — structured knowledge auto-injected into every spawn_agent call |
| Return a single wiki page by name for a repo |
| Create or update a wiki page (markdown) for a repo |
| Delete a single wiki page for a repo |
| List all wiki page names for a repo |
| Save a named spawn config for repeated use with |
| List all saved profiles |
| Delete a named profile |
| Spawn a job from a saved profile with variable interpolation |
spawn_agent parameters
Parameter | Type | Required | Description |
| string | yes | Git repo to clone (HTTPS or SSH) |
| string | yes | Task prompt for Claude Code |
| string | no | Existing branch to check out after clone |
| string | no | New branch to create (e.g. |
| string | no | Per-job token override |
| boolean | no | Pass |
| number | no | Spend cap in USD (default: 20) |
| string | no | Session ID from a prior job's |
| string[] | no | Job IDs that must be |
| string | no | Token spend strategy: |
| boolean | no | If |
create_plan parameters
Parameter | Type | Required | Description |
| string | yes | High-level description of what this plan achieves |
| array | yes | Ordered list of steps to execute |
Each step in steps:
Field | Type | Required | Description |
| string | yes | Logical step ID (used for |
| string | yes | Git repo to clone |
| string | yes | Task prompt for Claude Code |
| string | no | New branch to create before running |
| string[] | no | Step IDs from this plan that must complete first |
| string | no | Token spend strategy for this step ( |
| boolean | no | If |
create_profile parameters
Parameter | Type | Required | Description |
| string | yes | Profile name (alphanumeric, dashes, underscores) |
| string | yes | Git repo to clone |
| string | yes | Task template — use |
| number | no | Default USD budget for jobs from this profile |
| string | no | Branch to check out after cloning |
| string | no | Human-readable profile description |
| string | no | Default effort level for all jobs spawned from this profile. |
| boolean | no | If |
spawn_from_profile parameters
Parameter | Type | Required | Description |
| string | yes | Name of the saved profile to use |
| object | no | Variables to interpolate into the task template |
| string | no | Use this task instead of the profile template |
| string | no | Override the profile's branch |
| number | no | Override the profile's default budget |
| string | no | Override the profile's default effort level for this spawn. |
| boolean | no | Override the profile's fast mode setting for this spawn. |
Usage examples
Basic agent
spawn_agent({
repo_url: "https://github.com/yourorg/yourrepo",
task: "Add error handling to all API endpoints. Open a PR when done.",
create_branch: "feat/error-handling",
max_budget_usd: 5
})
// → { job_id: "abc-123", status: "started" }
list_jobs()
// → [{ id: "abc-123", status: "running", recentTools: ["Read", "Edit", "Bash", ...] }]
get_job_output({ job_id: "abc-123", offset: 0 })
// → { lines: ["[cc-agent] Cloning...", "Reading src/api.ts...", ...], done: false }
send_message({ job_id: "abc-123", message: "Also update the tests." })
// → { sent: true }
cost_summary()
// → { totalJobs: 1, totalCostUsd: 1.23, byRepo: { "https://github.com/...": 1.23 } }Multi-step plan with dependencies
create_plan({
goal: "Refactor auth and update docs",
steps: [
{
id: "refactor",
repo_url: "https://github.com/yourorg/app",
task: "Refactor auth middleware to use JWT. Open a PR.",
create_branch: "feat/jwt-auth"
},
{
id: "docs",
repo_url: "https://github.com/yourorg/app",
task: "Update README to document the new JWT auth flow.",
create_branch: "docs/jwt-auth",
depends_on: ["refactor"]
}
]
})
// → { goal: "...", totalSteps: 2, steps: [{ stepId: "refactor", jobId: "abc-1", status: "cloning" }, { stepId: "docs", jobId: "abc-2", status: "pending" }] }Profiles for repeated tasks
// Save once:
create_profile({
name: "fix-issue",
repo_url: "https://github.com/yourorg/app",
task_template: "Fix issue #{{issue}}: {{title}}. Open a PR when done.",
default_budget_usd: 5
})
// Use many times:
spawn_from_profile({
profile_name: "fix-issue",
vars: { issue: "42", title: "Login broken on mobile" }
})Resume a prior session
// Get session ID from a completed job:
get_job_status({ job_id: "abc-123" })
// → { ..., session_id_after: "ses_xyz" }
// Resume it:
spawn_agent({
repo_url: "https://github.com/yourorg/app",
task: "Continue where you left off — finish the tests.",
session_id: "ses_xyz"
})Persistence
cc-agent v0.3.0+ stores all job state in Redis, which is auto-provisioned on startup — zero configuration needed.
Auto-provisioning
On startup, cc-agent tries to connect to Redis at localhost:6379. If unavailable:
Docker — runs
docker run -d --name cc-agent-redis -p 6379:6379 --restart=unless-stopped redis:alpineredis-server — if
redis-serveris on PATH, spawns it as a daemonIn-memory fallback — logs a warning and continues; jobs are not persisted across restarts
Once Redis is available, all job state, output, profiles, and plans survive MCP server restarts and are shared across all Claude Code sessions pointing at the same Redis instance.
Key schema
Key | Type | TTL | Contents |
| String (JSON) | 7 days | Full job record |
| List | — | Job IDs, newest first (capped at 500) |
| List | 7 days | Output lines (one entry per line) |
| String (JSON) | 30 days | Plan record with step→job mapping |
| String (JSON) | permanent | Profile config |
| Set | permanent | All profile names |
Disk fallback
When Redis is unavailable, cc-agent falls back to the original disk-based storage:
.cc-agent/jobs.json— job metadata.cc-agent/jobs/<id>.log— per-job output log~/.cc-agent/profiles.json— profiles
Existing disk profiles are automatically migrated to Redis on first startup with Redis available.
Job statuses
Status | Meaning |
| Waiting for |
| Cloning the repo |
| Claude Code is running |
| Completed successfully |
| Exited with an error (check |
| Cancelled by |
Tool call visibility
list_jobs returns recentTools — the last 10 tool names Claude called per job (e.g. ["Read", "Edit", "Bash", "Glob"]). get_job_output returns the full tool_calls array. This gives insight into what agents are actually doing during silent periods.
Budget control
Set max_budget_usd per job to cap spend. Default is $20. Claude Code is killed with SIGTERM when the budget is exhausted (exit code 143).
spawn_agent({ ..., max_budget_usd: 10 }) // up to $10 for this task
spawn_agent({ ..., max_budget_usd: 2 }) // quick/cheap taskAgent delegation pattern
The recommended mental model: you are the tech lead, agents are your team.
Spawn agents for any task touching a codebase (multiple files, running tests, opening PRs)
Do research, quick edits, and orchestration yourself
Always end agent prompts with the terminal steps:
gh pr create → gh pr merge → npm publish(or whatever ships the work)Monitor with
list_jobs+get_job_output, respawn if budget runs out
# Standard agent task prompt ending:
gh pr create --title "feat: ..." --body "..." --base main
gh pr merge --squash --auto
npm version patch && npm publish # if it's a libraryMCP config (claude.json)
{
"cc-agent": {
"command": "npx",
"args": ["@gonzih/cc-agent"],
"env": {
"CLAUDE_CODE_OAUTH_TOKEN": "sk-ant-oat01-..."
}
}
}How it works
spawn_agentcreates a job record (persisted to disk) and returns immediately with a job IDIn background:
git clone --depth 1 <repo>into a temp dirOptionally checks out an existing branch or creates a new one
Runs
claude --print --output-format stream-json --verbose --dangerously-skip-permissions --max-budget-usd <N> <task>Streams stdout/stderr into the job's output log (in memory + disk)
Tool calls are captured from the stream-JSON and stored in
tool_calls[]On exit: job marked done/failed, workdir cleaned up after 10 minutes
Jobs expire from memory after 1 hour (log file remains on disk)
Pending jobs are promoted automatically every 3 seconds when their dependencies complete
Environment variables
Variable | Description |
| Claude OAuth token or Anthropic API key |
| Claude OAuth token (alternative) |
| Anthropic API key (alternative) |
Requirements
Node.js 18+
claudeCLI:npm install -g @anthropic-ai/claude-codeGit
Related
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Gonzih/cc-agent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server