MCP server that delegates tasks to coding agents — Claude Code via the Claude Agent SDK and Codex via the Codex App Server — from any MCP client.
Backends are optional extras; install the ones you use.
| Extra | Backend | Adds |
|---|---|---|
claude |
Claude Agent SDK | claude-agent-sdk (bundles the Claude Code CLI, ~100 MB) |
codex |
Codex App Server | openai-codex (bundles the Codex CLI, ~120–150 MB) |
all |
every backend |
uvx --with 'nexus-mcp[all]' nexus-mcp # run directly
pip install 'nexus-mcp[claude]' # or install
pip install 'nexus-mcp[codex]' # Codex onlyClaude Code MCP config:
{ "mcpServers": { "nexus": { "command": "uvx", "args": ["--with", "nexus-mcp[all]", "nexus-mcp"] } } }Authentication is the agent's own: log in with claude, or set ANTHROPIC_API_KEY; for Codex,
log in with codex login (credentials in ~/.codex are shared).
Windows: recent claude-agent-sdk releases ship no Windows wheel with a bundled CLI;
install Claude Code so claude is on PATH.
Runs one agent turn and returns its final answer.
| Parameter | Default | Meaning |
|---|---|---|
backend |
required | claude or codex |
prompt |
required | Task for the agent |
cwd |
required | Absolute project directory |
profile |
read_only |
Permission profile (below) |
session_id |
— | Continue this conversation |
fork |
false |
Branch session_id into a new conversation |
model |
provider default | Model id or alias |
timeout |
600 |
Seconds before the turn is cancelled |
Returns {backend, session_id, output, usage}. Conversations are stored by the agent itself
(~/.claude/projects, $CODEX_HOME/sessions), so a session_id keeps working after nexus-mcp
restarts.
Actions outside the chosen profile are denied automatically — nobody is prompted.
| Profile | Allows |
|---|---|
read_only |
Read/Glob/Grep; git diff/log/show with --no-ext-diff --no-textconv |
workspace_write |
Plus file edits inside cwd and Bash inside the OS sandbox |
full_access |
Everything |
Codex enforces profiles with its OS sandbox (read-only, workspace-write, danger-full-access)
and never asks for approval.
JSON list of {name, installed, models, hint}; hint gives the install command for a
missing extra. Codex lists its models; Claude reports null (any id or alias the CLI accepts).
| Variable | Default | Meaning |
|---|---|---|
NEXUS_CLAUDE_SETTINGS_PROFILE |
isolated |
Claude settings to load: isolated (none), project (project .claude/), inherit (all, including user settings). Profiles still bound every tool call. |
| v1 | v2 |
|---|---|
prompt(cli="codex") (codex exec) |
prompt(backend="codex", cwd=…) (App Server) |
prompt(cli=…, execution_mode="yolo") |
prompt(backend=…, profile="full_access", cwd=…) |
batch_prompt |
Parallel prompt calls from the client |
agent_start / agent_status / agent_result |
prompt (synchronous) |
agent_continue / agent_fork |
prompt(session_id=…) / prompt(session_id=…, fork=true) |
agent_review |
prompt(profile="read_only", prompt="Review …") |
agent_cancel |
Cancel the tool call in the client |
agent_respond, elicitation |
Removed — choose a profile instead |
| Preferences, model tiers, MCP prompts | Removed |
| OpenCode runners and tools | Removed |
NEXUS_* variables |
Removed except NEXUS_CLAUDE_SETTINGS_PROFILE |
uv sync --all-extras --all-groups
uv run pytest # unit + e2e
uv run pytest -m integration # real CLI (slow, makes model calls)
uv run mypy src/nexus_mcp && uv run ruff check . && uv run ruff format --check .MIT