codex-async-mcp
Provides asynchronous job management for OpenAI Codex CLI, allowing long-running code generation and editing tasks without blocking, including start, poll, list, and cancel operations.
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., "@codex-async-mcpStart codex job to change format to number_to_currency in prorate_calculation_service.rb"
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.
agent-async-mcp
Local MCP server that runs Codex, Cursor, and Gemini CLI tasks asynchronously — returns a job_id immediately instead of blocking, so the orchestrating agent never hits the MCP 60-second timeout.
How it works
Claude (orchestrator)
│
├─ codex_start(prompt, cwd) → job_id (instant)
│
└─ codex_wait(job_id) → blocks up to 50 s, returns result
loop again on timeoutA sequential queue ensures only one agent process runs at a time. Jobs are persisted in SQLite so the queue survives server restarts.
Install
curl -fsSL https://raw.githubusercontent.com/benzkittisak/claude-codex-mcp/master/install.sh | bashThe installer will:
Clone this repo to
~/.local/share/agent-async-mcp/Create an isolated Python venv
Symlink
agent-asyncto~/.local/bin/Detect Claude Code, Codex, Cursor, Claude Desktop and ask which to register
Uninstall:
curl -fsSL https://raw.githubusercontent.com/benzkittisak/claude-codex-mcp/master/install.sh | bash -s uninstall
# or, if already installed:
agent-async uninstallCLI
agent-async list-agents # show detected / registered agents
agent-async add-agent claude-code # register with Claude Code CLI
agent-async add-agent codex # register with Codex CLI
agent-async add-agent cursor # register with Cursor IDE
agent-async add-agent claude-desktop # register with Claude Desktop
agent-async remove-agent <agent> # unregister
agent-async status # open real-time job monitor
agent-async update # pull latest + reinstall
agent-async check-update # check without installing
agent-async enable-auto-update # schedule daily auto-update (09:00)
agent-async disable-auto-update # remove scheduled auto-update
agent-async uninstall # remove everythingRequirements
Python 3.11+
One or more agent CLIs:
codex,cursor,gemini(optional — only needed for the tools you use)Claude Code CLI (recommended orchestrator)
MCP Tools (13 total)
Codex
Tool | Description |
| Queue a Codex task → returns |
| Block until done; loop on |
| Block until ANY queued job completes |
Cursor
Tool | Description |
| Queue a Cursor headless task → |
| Block until done |
Gemini
Tool | Description |
| Queue a Gemini CLI task → |
| Block until done |
| Ask Gemini to draft/publish a Confluence page |
| Ask Gemini to draft/publish a PR |
Shared / Queue
Tool | Description |
| List recent jobs (all agents), newest first |
| Cancel running or pending job |
|
|
| Called BY an agent to signal completion |
approval_policy values
Value | Behavior |
| No prompts, no sandbox (use for automation) |
| Auto-applies edits |
| Read-only — pauses for interactive input (avoid in automation) |
Permissions (settings.local.json)
Add to your Claude Code project's .claude/settings.local.json:
{
"permissions": {
"allow": [
"mcp__agent-async__codex_start", "mcp__agent-async__codex_wait",
"mcp__agent-async__cursor_start", "mcp__agent-async__cursor_wait",
"mcp__agent-async__gemini_start", "mcp__agent-async__gemini_wait",
"mcp__agent-async__queue_status", "mcp__agent-async__job_list",
"mcp__agent-async__job_cancel", "mcp__agent-async__agent_notify_done",
"mcp__agent-async__codex_await_any"
]
}
}Usage pattern
# Start a job (returns immediately)
result = codex_start(
prompt="In app/services/foo.rb line 42, change X to Y. Do not change anything else.",
cwd="/path/to/repo",
approval_policy="full-auto"
)
job_id = result["job_id"]
# Wait in a loop (each call blocks up to 50 s)
while True:
result = codex_wait(job_id, timeout_seconds=50)
if result["status"] == "timeout":
continue
break # "done" | "error" | "cancelled"Job data
Jobs are persisted in ~/.agent-async/:
~/.agent-async/
queue.db ← SQLite: job metadata, status, token usage
jobs/<job_id>/
output.txt ← stdout + stderr from the agent processTroubleshooting
agent-async: command not found
~/.local/bin not in PATH. Run:
source ~/.zshrc # or ~/.bashrcOr open a new terminal. The installer adds it automatically.
status: "error" immediately after *_start
The agent CLI failed to start. Check output:
cat ~/.agent-async/jobs/<job_id>/output.txtMessage | Fix |
| Install codex: |
| Install gemini CLI from github.com/google-gemini/gemini-cli |
|
|
status: "running" forever
The subprocess is hung. Most common cause: approval_policy="suggest" waiting for interactive input. Always use "full-auto" for automation.
agent-async status # open monitor to see live stateCancel a stuck job:
job_cancel(job_id="<job_id>")Old jobs filling up disk
find ~/.agent-async/jobs -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +Project structure
agent-async-mcp/
├── install.sh
├── mcp-monitor.py
├── pyproject.toml
└── src/
└── agent_async_mcp/
├── server.py # MCP entry point, tool definitions
├── job_manager.py # queue, spawn, wait, cancel
├── db.py # SQLite schema + helpers
├── config.py # paths, timeouts, agent binaries
└── cli.py # agent-async CLIDevelopment
git clone https://github.com/benzkittisak/claude-codex-mcp
cd claude-codex-mcp
pip install -e ".[dev]"
pytest tests/ -vResources
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/benzkittisak/claude-codex-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server