MCP server that lets Claude Code delegate coding tasks and image generation to OpenAI Codex, with supervised turns, model policy, quota handoff, git worktree isolation, checkpoints and cross-review.
Strong tool naming (verb_noun pattern consistently applied: codex_get_*, codex_delegate, codex_continue, codex_task_status, codex_interrupt, codex_review, codex_generate_image, codex_checkpoint, codex_restore, codex_diff, codex_server_info). All 12 tools have descriptions (avg ~180 chars, within 10-1024 baseline). Input schemas present with type definitions for all parameters. However, output schemas are not documented in the source, LLMs cannot predict return structure. Parameter descriptions are generally good but some lack format/constraint details (e.g., 'workingDirectory' lacks path format guidance). Error handling is mentioned in descriptions (quota_exhausted, status field) but recovery guidance is sparse. No tool annotations (readOnlyHint/destructiveHint) visible in schema.
Snapshot the current state of a task's working directory or worktree. Checkpoints are git commits, so you can restore to them later with codex_restore, or inspect diffs with codex_diff.
Send a follow-up instruction into an existing Codex thread, keeping all of its prior context. Use it to iterate on review feedback instead of re-delegating from scratch.
Hand a self-contained coding task to Codex as a subagent. Starts a fresh Codex thread, runs the task, and returns the result plus the files it changed. Checks quota first: if Codex has no quota left it returns status 'quota_exhausted' with a handoff so you can finish the work yourself instead of waiting for a reset. If the task outlives waitSeconds you get status 'running' — wait for it with codex_task_status, never re-delegate.
Show the diff between two checkpoints, or between a checkpoint and the current state.
Generate images with Codex. Returns a task you can poll with codex_task_status. Images are written to disk and previewed inline. Codex respects your quota: if it runs out mid-generation, you get what it finished plus a handoff.
Output schemas not documented. LLMs cannot predict return structure (fields, types, pagination). Descriptions mention 'returns a task' or 'returns findings' but lack formal schema documentation.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) in schemas. LLMs cannot distinguish safe reads from destructive writes without parsing descriptions.
Parameter format constraints missing. 'workingDirectory' lacks path format guidance; 'waitSeconds' lacks min/max bounds (spec says max 1800s but not enforced in schema); 'model' enum not visible in schema definition.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Read Codex usage limits, normalized by window duration (300 min -> '5h', 10080 min -> 'weekly'), with usedPercent, remainingPercent, resetsAt and rateLimitReached per window, plus a delegation verdict. Check this before delegating anything large.
Codex models with their tier, what each is good for, and the reasoning efforts the router allows (after the policy cap). Read live from the Codex catalogue. Use it to match model strength to task difficulty before codex_delegate.
Stop the turn Codex is running for a task. Guaranteed to take the task out of 'running': if Codex does not confirm within a few seconds, the router checks the thread's real state and, failing that, marks the turn interrupted itself (reported as forced: true). The thread survives, so codex_continue can pick it back up.
Roll a task's working directory or worktree back to a checkpoint. Files created after the checkpoint are left in place unless you pass removeExtra: true.
Ask Codex to review changes and report findings. Use it on YOUR OWN work for a second opinion before you ship, or on a Codex task's output with a different model. Codex reviews read-only and changes nothing. Returns a review task you can poll or extend with codex_continue.
Diagnostics: the Codex app-server process, pending requests, restarts, and uptime.
Current state of a task: status, progress (health, running/idle seconds, current step, last message and command), changed files, diff, images, worktree, checkpoints, and any watchdog interventions. Pass waitSeconds to block until the task finishes instead of polling in a loop. Omit taskId to list all tasks.
Error recovery guidance sparse. Descriptions mention 'quota_exhausted' status and 'handoff' but do not explain what the LLM should do next (retry, ask user, abort).
Pagination not documented. 'codex_task_status' with omitted taskId 'lists all tasks' but no limit, offset, or next_cursor parameters visible in schema.