loading…
Search for a command to run...
loading…
A TypeScript MCP server for launching, tracking, and managing external coding-agent runs across local and remote backends like Codex and Claude Code. It allows
A TypeScript MCP server for launching, tracking, and managing external coding-agent runs across local and remote backends like Codex and Claude Code. It allows top-level agents to orchestrate subagents through tools for spawning tasks, polling events, and handling interactive sessions.
TypeScript MCP server for launching and tracking external coding-agent runs.
The MCP surface stays stable while the internal execution backend can target:
codexclaude_coderemote_a2aThis lets a top-level agent call one MCP toolset while the orchestration layer decides whether subagents are local SDK processes or remote A2A-compatible agents.
cd orchestration-mcp
npm install
npm run build
cd orchestration-mcp
npm start
This starts the MCP server from dist/index.js.
If you want Codex to load this MCP server, add an entry like this to ~/.codex/config.toml:
[mcp_servers.orchestration-mcp]
command = "node"
args = ["/abs/path/to/orchestration-mcp/dist/index.js"]
enabled = true
Example using this repository path:
[mcp_servers.orchestration-mcp]
command = "node"
args = ["/Users/fonsh/PycharmProjects/Treer/nanobot/orchestration-mcp/dist/index.js"]
enabled = true
After updating the config, restart Codex so it reloads MCP servers.
The server registers these tools:
spawn_runget_runpoll_eventscancel_runcontinue_runlist_runsget_event_artifactspawn_run to create a subagent run.poll_events until you see a terminal event or a waiting state.input_required or auth_required, call continue_run.get_run for the latest run summary.artifact_refs, call get_event_artifact to fetch the full payload.spawn_run notesbackend: "codex", "claude_code", or "remote_a2a"role: orchestration role label such as planner, worker, or reviewerprompt: plain-text instruction for simple runsinput_message: optional structured message for multipart/A2A-style inputscwd: absolute working directorysession_mode: new or resumesession_id: required when resuming a prior sessionprofile: optional path to a persona/job-description file. When provided, orchestration loads the file and injects it into the agent context. Backends with native system prompt support use it there; other backends prepend it to the run context.Unless you are explicitly instructed to use a profile, leave profile empty.
output_schema: optional JSON Schema for structured final outputmetadata: optional orchestration metadata stored for correlation and auditingbackend_config: optional backend-specific settings. For remote_a2a, set agent_url and any auth headers/tokens here.For all backends, cwd is the orchestration-side working directory used for run/session storage.
For remote_a2a, spawn_run.cwd is also forwarded to the remote subagent and becomes that A2A task context's execution directory.
At least one of prompt or input_message is required.
Simple example:
{
"backend": "codex",
"role": "worker",
"prompt": "Inspect the repository and summarize the architecture.",
"cwd": "/abs/path/to/project",
"session_mode": "new"
}
Remote A2A example:
{
"backend": "remote_a2a",
"role": "worker",
"prompt": "Inspect the repository and summarize the architecture.",
"cwd": "/abs/path/to/project",
"session_mode": "new",
"backend_config": {
"agent_url": "http://127.0.0.1:53552"
}
}
This repository includes a ready-to-use reviewer setup for multi-agent coding workflows:
./profile/reviewer-remediator.mdRecommended spawn_run usage for a reviewer run:
{
"backend": "codex",
"role": "reviewer",
"cwd": "/abs/path/to/project",
"session_mode": "new",
"profile": "/abs/path/to/orchestration-mcp/profile/reviewer-remediator.md",
"prompt": "Review only the latest diff in the current working directory, apply low-risk fixes when clearly correct, validate them, and write a remediation report."
}
continue_run notesUse continue_run when a run enters input_required or auth_required and the backend supports interactive continuation.
Inputs:
run_idinput_messageget_event_artifact notesUse get_event_artifact when a sanitized event returned by poll_events contains event.data.artifact_refs and you need the full original payload.
Inputs:
run_idseqfield_path: JSON Pointer relative to event.data, for example /stdout, /raw_tool_use_result, or /input/contentoffset: optional byte offset, default 0limit: optional byte limit, default 65536Typical flow:
poll_events.event.data.artifact_refs on any sanitized event.get_event_artifact with the same run_id, the event seq, and one of the exposed field_path values.codex: uses the current @openai/codex-sdk defaults plus non-interactive execution settings already wired in the adapterclaude_code: uses @anthropic-ai/claude-agent-sdk with permissionMode: "bypassPermissions" so the MCP call stays non-blocking, and reuses persisted backend session ids for resumeremote_a2a: connects to a remote A2A-compatible agent using @a2a-js/sdk, streams task updates into normalized orchestration events, and supports continue_run for input_requiredFor claude_code, make sure the local environment already has a working Claude Code authentication setup before testing.
The repo includes helper modules for local A2A-wrapped test agents:
dist/test-agents/codex-a2a-agent.jsdist/test-agents/claude-a2a-agent.jsdist/test-agents/start-a2a-agent.jsThese export startup helpers that wrap the local Codex and Claude SDKs behind an A2A server so the orchestration MCP can test its internal remote_a2a backend against realistic subagents.
To start an interactive wrapper launcher:
npm run start:a2a-agent
The script will ask whether to wrap codex or claude_code.
After startup, it prints the agent_url and a ready-to-use spawn_run payload for the MCP layer. The wrapper no longer locks a working directory at startup. Each remote_a2a call uses the cwd provided to spawn_run, and the wrapper keeps that cwd fixed for the lifetime of the same A2A contextId.
Run data is stored under:
<cwd>/.nanobot-orchestrator/
runs/
<run_id>/
run.json
events.jsonl
result.json
artifacts/
000008-command_finished/
manifest.json
stdout.0001.txt
stdout.0002.txt
sessions/
<session_id>.json
Notes:
events.jsonl stores sanitized events intended for poll_events consumption.event.data.artifact_refs.run.json and result.json keep the current run snapshot and final result behavior..nanobot-orchestrator/ for backward compatibility with the existing implementation.Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"orchestration-mcp": {
"command": "npx",
"args": []
}
}
}