MCP server for delegating tasks to Codex CLI subagents
Two tools are explicitly defined with the FastMCP decorator. spawn_agent has a basic description and a simple string input parameter with minimal documentation. spawn_agents_parallel has a description but accepts a list[dict] with almost no schema detail, the input is documented only in the description text, not in formal JSON Schema. Neither tool documents its output schema formally. Error handling is present in implementation (validation, error messages) but not reflected in tool definitions. No tool annotations (readonly, destructive, idempotent) are present. The server is functional but falls well short of production-grade definition quality.
Spawn a Codex agent to work inside the current working directory. The server resolves the working directory via ``os.getcwd()`` so it inherits whatever environment the MCP process currently has.
Spawn multiple Codex agents in parallel. Each spawned agent reuses the server's current working directory (``os.getcwd()``).
spawn_agents_parallel accepts list[dict] with no formal JSON Schema constraints. The 'agents' parameter is documented only in prose ('List of agent specs, each with a \'prompt\' entry') rather than as a proper JSON Schema array with object item schema and required properties.
Neither tool documents output schema. spawn_agent returns str, spawn_agents_parallel returns list[dict[str, str]], but LLMs have no formal specification of response structure, field names, or semantics. This forces LLMs to reason about response shape without a schema contract.
Tool descriptions do not state that spawn_agent and spawn_agents_parallel are WRITE operations with irreversible side effects. The description for spawn_agent says 'Spawn a Codex agent to work inside the current working directory' but does not warn that the agent may modify files, create resources, or execute code. Agents need to know which calls are safe to retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
spawn_agent and spawn_agents_parallel lack tool annotations. No readOnlyHint, destructiveHint, or idempotentHint are declared, despite spawn_agent being clearly destructive (executes arbitrary code in the working directory via Codex CLI with '--dangerously-bypass-approvals-and-sandbox').
No confirmation or dry-run mechanism for destructive operations. spawn_agent invokes '--dangerously-bypass-approvals-and-sandbox' which allows code execution without safety checks. No pattern to confirm intent, preview changes, or support rollback.
Parameter 'prompt' lacks constraints and detailed guidance. The description says 'All instructions/context the agent needs for the task' but does not specify minimum/maximum length, encoding constraints, or what happens if the prompt is too large or malformed. Agents may pass extremely long or invalid inputs.
spawn_agents_parallel output schema is vague. The docstring says 'List of results with \'index\', \'output\', and optional \'error\' fields' but the function signature returns list[dict[str, str]], implying all fields are strings. LLMs cannot determine if 'index' is a number (should be int) or string, and error structure is not formally defined.