Codex Control Plane MCP
The Codex Control Plane MCP server provides durable, asynchronous orchestration of Codex Desktop tasks without requiring a long-lived MCP connection. Key capabilities include:
Durable Task & Operation Management
Submit long-running tasks (
codex_submit_task) and poll their status (codex_get_operation_status)Retry-safe idempotency via
client_request_idto recover from timeouts without duplicate turns
Plan Mode Workflows
Start (
codex_start_plan_workflow), poll (codex_get_workflow_status), approve (codex_approve_plan), and execute plans — managing both planning and execution phases
Approvals & Interaction Handling
List and answer pending interactions (
codex_list_pending_interactions,codex_answer_pending_interaction) so active turns can continue
Turn Control
Steer active turns with additional context, interrupt running turns (
codex_interrupt_turn) by turn/thread/operation/workflow ID
Chat & Project Management
List projects and chats, search across history and transcripts, get chat status and full content (
codex_list_projects,codex_search_chats,codex_get_chat, etc.)
Compatibility Write Tools
codex_start_chat,codex_send_message,codex_execute_planfor legacy clients
App-Server Management
Check and restart the
codex-app-serversubprocess (codex_get_app_server_status,codex_restart_app_server)
Runtime Capabilities & Health
Inspect models, sandbox readiness, hooks, and skills (
codex_get_runtime_capabilities); get a quick health check (codex_health_summary)
Diagnostics & Repair
Collect full diagnostic snapshots (
codex_collect_diagnostics), read redacted logs (codex_get_diagnostic_logs), analyze root causes (codex_analyze_issue), and run safe allowlisted repairs (codex_repair_issue, dry-run by default)
Progress Journaling
Compact journal of progress events (assistant text, plan deltas, token usage, model reroutes) available via status tools for orchestrators and troubleshooting
Operation state is persisted in a local SQLite database, enabling recovery across client timeouts and MCP process restarts.
Provides tools for driving Codex Desktop automation via MCP, with support for Hermes as a first-class client. It offers durable async operations, Plan Mode workflows, approvals, diagnostics, and recovery for long-running tasks.
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 Control Plane MCPstart a plan mode workflow to refactor the authentication module"
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.
Codex Control Plane MCP
English | Русский
Reliable Codex Desktop automation for long tasks.
codex-control-plane-mcp turns Codex Desktop and codex-app-server into a
durable worker that an MCP client can drive safely. Send a task, get an
operationId or workflowId right away, poll until the work finishes, approve
Plan Mode when needed, then read the final report.
The server handles the awkward parts that thin wrappers usually leave to the caller: app-server startup, thread and turn creation, retry safety, duplicate prompt protection, Plan Mode, approvals, local history, diagnostics, and repair.
OpenClaw and Hermes are first-class clients, but the server is useful for any local orchestrator that needs Codex Desktop to do long-running work without holding one MCP call open for hours.
The short version
MCP client / orchestrator
-> submit a task or start a Plan Mode workflow
<- receive operationId or workflowId immediately
-> poll status
-> answer approvals or approve the plan
<- read final report, diagnostics, threadId, and turnIdThat gives you a simple contract:
no multi-hour MCP calls;
no duplicate Codex turns after a client retry;
no blind fire-and-forget task submission;
a local SQLite record of operations, workflows, turns, hooks, and diagnostics.
Related MCP server: Codex Workflows MCP Server
Why not just call Codex directly?
Capability | Thin Codex wrapper | Codex Control Plane MCP |
Multi-hour tasks | blocking / fragile | durable async operation |
Client timeout recovery | manual | retry-safe |
Duplicate turn protection | no | active prompt detection |
Plan Mode workflow | human / manual | pollable workflow state |
Approvals and questions | blocking / opaque | pending interactions API |
Restart recovery | ad hoc | persisted operation state |
Diagnostics | logs only | health, diagnostics, repair tools |
For a more detailed decision guide, see docs/THIN_WRAPPERS.md.
Current support
Full live target: Windows with Codex Desktop and
codex-app-server.Linux and macOS: protocol-only checks for now.
Local-first: not intended to be exposed as a public network service.
Security model
This is a local-first control plane for trusted Codex Desktop environments.
Do not expose it as a network service without authentication.
Recommended first-run posture:
use
read-onlyfor untrusted repositories;use
on-requestapproval when testing new workflows;Plan Mode never runs with a
read-onlysandbox. If a caller requestsread-only, MCP raises that turn toworkspace-writeand reports the adjustment in status output;keep
state/,logs/,.env, and.codex/private.
What it does
Durable async queue for Codex write operations.
Retry-safe
client_request_idhandling.Active duplicate prompt detection.
SQLite leases and heartbeats for competing MCP processes.
Recovery after MCP restart during
thread/startorturn/start.Durable
turn/steerfor adding context to an active turn without creating a second turn.Durable
thread/forkfor branching an existing thread, with or without an initial message.Plan Mode workflows: start plan, poll, approve, execute, read final report.
Plan Mode runtime floor:
workspace-write, withruntimePolicyAdjustedin status when MCP raises aread-onlyrequest.Code review workflows through app-server
review/start, with polling and final report capture.Structured final reports with
output_schema.Thread lifecycle tools for archive, unarchive, and pollable compaction.
Workflow goal sync with Codex Desktop thread goals.
Image and local image inputs for turns that start through
turn/start.Pending approvals and questions exposed as pollable MCP state.
Turn interrupts by
threadId/turnId,operationId, orworkflowId.Runtime inventory for models, permission profiles, sandbox readiness, hooks, skills, provider features, account status, usage bands, rate-limit state, and supported app-server methods.
Health checks, diagnostics, issue analysis, and dry-run repairs.
MCP-owned hook history in SQLite for search, summaries, and fallback reads.
Redacted app-server progress journal for deltas, warnings, model reroutes, and token usage.
Structured MCP errors that automation code can branch on.
Write and control actions go through codex-app-server. The server does not
mutate Codex internal SQLite databases or transcript files.
Install
Recommended:
pipx install codex-control-plane-mcpOr run directly:
uvx codex-control-plane-mcpFrom GitHub:
python -m pip install "codex-control-plane-mcp @ git+https://github.com/aresyn/codex-control-plane-mcp.git"For local development:
git clone https://github.com/aresyn/codex-control-plane-mcp.git
cd codex-control-plane-mcp
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
python -m pytest -qMCP client config
After installation, generate a config:
codex-control-plane-mcp-admin init --state-db .\state\codex-mcp-state.sqlite3 --projects-root C:\Users\you\ProjectsMinimal stdio entry:
{
"mcpServers": {
"codex-control-plane": {
"command": "codex-control-plane-mcp",
"args": []
}
}
}More copy-paste examples for Claude Desktop, Cursor, VS Code-style MCP clients,
local checkouts, installed packages, and central worker mode are available in
examples/mcp-client-configs.md.
Run the MCP stdio server:
codex-control-plane-mcpOr run it as a module:
py -m codex_control_plane_mcp.serverThe old openclaw-codex-mcp and openclaw-codex-mcp-hooks commands remain as
compatibility aliases for one release line.
Central worker mode
The default inline mode is still the simplest setup: one MCP process can submit
and execute operations. For OpenClaw, Hermes, or any setup with several MCP
clients, use a central worker instead.
Recommended local shape:
every MCP client uses the same
CODEX_HOMEandCODEX_MCP_STATE_DB;OpenClaw gateway entries run with
CODEX_MCP_EXECUTION_MODE=client;one long-running
codex-control-plane-mcp-workerprocess ownscodex-app-server, leases, queue slots, and resource locks;clients call
codex_submit_task, then poll status. They do not execute queued operations themselves.
Worker command:
$env:CODEX_MCP_EXECUTION_MODE = "worker"
codex-control-plane-mcp-workerSafe observation mode, useful before switching a live gateway:
codex-control-plane-mcp-worker --observeConcurrency defaults:
CODEX_MCP_MAX_ACTIVE_TURNS_GLOBAL=4
CODEX_MCP_MAX_ACTIVE_TURNS_PER_PROJECT=3
CODEX_MCP_MAX_ACTIVE_TURNS_PER_AGENT=3
CODEX_MCP_MAX_ACTIVE_TURNS_PER_THREAD=1
CODEX_MCP_MAX_ACTIVE_WRITE_TURNS_PER_PROJECT=1
CODEX_MCP_MAX_APP_SERVER_PENDING_REQUESTS=8For write turns in the same project, pass resource_keys to
codex_submit_task. Without them, workspace-write and danger-full-access
turns take a broad project write lock. With disjoint keys, the worker may run
several write turns in parallel.
New status tools:
codex_get_worker_statuscodex_get_queue_statuscodex_get_concurrency_statuscodex_get_worker_command_status
codex_get_operation_status also returns queueState, workerState,
slotState, and resourceLockState. A running turn has
slotState.claimed=true and a slotClaim with the worker id, slot type, and
claim time. codex_get_queue_status separates queued work from running turn
operations, auxiliary operations, active turn slots, and lock conflicts.
When a workflow is waiting for capacity, codex_get_workflow_status mirrors the
nested operation queue state in workflowOperationQueueState. Use
nextRecommendedAction="wait_for_worker_slot" for slot pressure and
nextRecommendedAction="wait_for_resource_lock" for write lock conflicts. Do
not create another operation for the same work while either action is returned.
First setup
The admin helper can generate a fuller client config, install hooks, and run a protocol smoke:
codex-control-plane-mcp-admin init --state-db .\state\codex-mcp-state.sqlite3 --projects-root C:\Users\you\ProjectsThe command prints a JSON block you can copy into an MCP client config. It does not print secrets or private prompts.
You can also install only the Codex hooks:
codex-control-plane-mcp-hooks install --state-db .\state\codex-mcp-state.sqlite3
codex-control-plane-mcp-hooks status
codex-control-plane-mcp-hooks doctorThe installer backs up ~/.codex/hooks.json, merges its handlers with your
existing hooks, stores stateDb as an absolute path, and writes prompts, visible
agent progress text, final answers, and turn status into the MCP state DB. Tool
calls and command outputs are not recorded by default. Restart Codex after
installing or changing hooks.
For turns launched through codex-app-server, the server mirrors the accepted
prompt, visible assistant messages, and turn status into the same SQLite
history. That keeps search and status reads useful even when app-server does not
execute user hooks itself.
Main workflows
Submit a durable task:
codex_submit_task
-> operationId
codex_get_operation_status(operationId)
-> queued / running / waiting_for_approval / completed / failedUse the same client_request_id when a caller retries after a transport timeout.
The retry returns the existing operation instead of creating another turn.
Attach screenshots or other image evidence:
codex_submit_task(
operation_type="start_chat",
message="Analyze this screen.",
input_items=[
{"type": "localImage", "path": ".\\screens\\error.png", "detail": "low"},
{"type": "image", "url": "https://example.com/screenshot.png", "detail": "high"}
]
)Image inputs are accepted only for operation types that start a new turn:
start_chat, send_message, execute_plan, and fork_thread with an initial
message. MCP sends the path or URL to codex-app-server, but operation status
and diagnostics return only safe metadata such as type, detail, size, extension,
and hashes. Binary image content, raw URLs, and full local image paths are not
stored in public status payloads.
Steer an active turn:
codex_submit_task(operation_type="steer_turn", thread_id=..., expected_turn_id=..., message=...)
-> operationId
codex_get_operation_status(operationId)
-> follows the target turn until completed / failed / interruptedUse steer_turn only while the target turn is active. For a completed thread,
use send_message instead.
Fork a thread:
codex_submit_task(operation_type="fork_thread", source_thread_id=...)
-> operationId
codex_get_operation_status(operationId)
-> completed, threadId=<forkedThreadId>Start work in the fork right away:
codex_submit_task(operation_type="fork_thread", source_thread_id=..., message=...)
-> operationId
codex_get_operation_status(operationId)
-> follows the first turn in the forked threadUse client_request_id for retry-safe fork requests. Without it, each call is
treated as a new fork request. threadId in operation status is the forked
thread; the source thread is reported in forkState.sourceThreadId.
Manage thread lifecycle:
codex_archive_thread(thread_id)
-> completed
codex_unarchive_thread(thread_id)
-> completed
codex_start_thread_compaction(thread_id)
-> actionId
codex_get_thread_compaction_status(actionId)
-> running / completed / unknown_after_app_server_exitArchive and unarchive are audit actions around app-server thread/archive and
thread/unarchive. They refuse to run while the thread has an active turn or a
pending interaction. Compaction uses its own lightweight actionId because
thread/compact/start is asynchronous. Public thread/delete is intentionally
not exposed.
Ask for a structured final report:
codex_submit_task(operation_type="start_chat", message=..., output_schema={...})
codex_approve_plan(workflowId, output_schema={...})
-> operationId / executionOperationId
codex_get_operation_status(operationId)
codex_get_workflow_status(workflowId)
-> finalReport.text + finalReport.structuredoutput_schema is passed to app-server turn/start and is tracked by a schema
hash in status output. Object schemas must use the strict form required by Codex:
set additionalProperties to false. MCP stores the final assistant message
as readable text, then parses JSON object output into finalReport.structured
when Codex returns valid JSON. Plain text still works and stays available in
finalReport.text.
MCP does not extract hidden chain-of-thought and does not store raw tool payloads or command output in final reports.
Drive Plan Mode:
codex_start_plan_workflow
-> workflowId
codex_get_workflow_status(workflowId)
-> wait_plan / review_plan / execute_plan
codex_approve_plan(workflowId)
-> executionOperationId
codex_get_workflow_status(workflowId)
-> finalReportPlan Mode has a runtime floor. The public default write policy is still
read-only and on-request, but Plan Mode needs a writable workspace on
Windows. If the caller or server default resolves to read-only, MCP sends
workspace-write to codex-app-server and returns requestedSandbox,
effectiveSandbox, and runtimePolicyAdjusted in workflow and operation
status.
Mirror a workflow goal into Codex Desktop when the client has one:
codex_start_plan_workflow(goal="Review the migration plan", goal_completion_action="clear")
codex_get_workflow_status(workflowId, refresh_live_goal=true)
-> threadGoal.syncState + threadGoal.currentGoalMCP writes a thread goal only when the client passes goal. Managed goals use
clear after completion by default. Use set_complete or leave when the goal
should remain visible after the workflow ends. Normal workflow polling is
passive; use refresh_live_goal=true only when you want MCP to call live
app-server goal methods.
Run a Codex code review:
codex_start_review_workflow(thread_id=..., target_type="base_branch", base_branch="main")
-> workflowId
codex_get_workflow_status(workflowId)
-> wait_review / read_review_reportOr let MCP create a service thread for a local checkout:
codex_start_review_workflow(cwd=..., target_type="uncommitted_changes")
-> workflowId
codex_get_workflow_status(workflowId)
-> reviewThreadId + reviewTurnId + finalReportReview workflows do not write files by themselves. They run inside the selected
Codex sandbox and approval policy. Use client_request_id when a caller may
retry the start request after a transport timeout.
Handle approvals and questions:
codex_list_pending_interactions
codex_answer_pending_interactionStart diagnostics with:
codex_get_runtime_capabilities
codex_health_summary
codex_collect_diagnostics
codex_analyze_issue
codex_repair_issueRepair actions default to dry_run=true.
Status and diagnostic tools also return agentGuidance and
agentGuidanceText when MCP sees a blocker, failed state, stale run, pending
interaction, duplicate prompt, auth problem, rate limit, or unsafe recovery
loop. Agents should follow agentGuidance.instructions before deciding to
retry or stop. If agentGuidance.loopGuard.allowed=false, stop automatic
recovery, collect diagnostics, and ask a human. Do not create a new
client_request_id after a timeout unless the guidance explicitly says to start
a replacement workflow.
For a broken Plan Mode workflow, use
retry_workflow_with_runtime_policy. It creates a new workflow with the selected
sandbox and approval policy, links it to the old workflow through
workflowRetryState, and does not revive the old terminal turn.
codex_health_summary is about current readiness by default. Old stale or
orphaned rows are reported in historicalDebt, but they do not make fresh
orchestration look broken when the worker, queue, and app-server are currently
healthy. Use targeted cleanup for that debt instead of blocking new work.
Status payloads now separate freshness signals:
operationRowAgeSeconds: age of the durable operation row;turnFreshness.lastProgressAgeSeconds: age of the last turn progress event;workerFreshness.heartbeatAgeSeconds: age of the worker heartbeat;stalenessMeaning="operation_row_age"for the compatibilitystalenessSecondsfield.
Public status payloads are agent-safe. Operation and workflow status return
requestSummary instead of raw request; it contains ids, runtime policy,
scheduling intent, input item state, output schema hash, resource keys, and
text hashes. It does not include the full prompt, full instructions, raw title,
raw image URL/path, exact token counts, raw command output, or private paths.
Use your own stored task text plus requestSummary.*.sha256 for correlation.
codex_get_queue_status only recommends wait_for_worker_slot when there is
actual queued work blocked by slots. If there are running turns but
queueSummary.queued == 0, the queue action is none.
Runtime capabilities
Use codex_get_runtime_capabilities before orchestration or after reconnect. It
starts the MCP-owned app-server if needed, calls short best-effort inventory
methods, and returns a cached snapshot for five minutes.
In client mode, the client process does not start its own app-server for live
inventory. It returns a passive worker-managed snapshot when one exists. With
refresh=true, it queues a worker command and returns refreshCommandId; poll
codex_get_worker_command_status to read the refreshed inventory.
The response includes:
model count, default model, hidden flags, input modalities, reasoning efforts, and service tier count;
permission profiles by
idanddescription;Windows sandbox readiness;
provider capabilities for web search, image generation, and namespace tools;
hook and skill counts without raw hook commands or absolute skill paths;
redacted account status, coarse usage bands, and operational rate-limit state;
supported app-server schema methods with a compact source, version, and hash.
Account inventory is safe to show to an orchestrator. It reports whether Codex is authenticated, the account and plan type, whether an email exists, whether usage data is available, and whether a rate limit or credits issue is visible. It does not return raw email, account identifiers, credit balances, spend limits, exact spend used, daily usage buckets, or exact token counts.
If one inventory method times out or fails, the tool still returns ok=true
with runtimeCapabilities.status="partial" and a machine-readable warning in
methodResults. Set refresh=true to bypass the cache. codex_health_summary
shows a small runtimeCapabilities subset from the last collected snapshot and
does not start app-server on its own. Pass include_account=false when a client
does not need account, usage, or rate-limit status.
Progress journal
codex_get_turn_status and codex_get_operation_status include a compact
progressEvents block by default. It captures app-server-visible progress such
as assistant text deltas, plan deltas, reasoning summary text, token usage,
model reroutes, and warnings.
The journal helps with orchestration and troubleshooting. It does not extract hidden chain-of-thought. It also does not store raw tool payloads, command output, or full unified diffs by default. Diff events are reduced to safe counts, such as changed line count and diff size.
Use progress_events=0 when a client wants the older, message-only status
shape. Use progress_max_chars to cap returned progress text.
Public status returns token usage as coarse bands, not exact token counts. Raw
audit surfaces may keep redacted event payloads for debugging, but orchestrators
should treat tokenUsage.totalTokensBand and related band fields as the public
contract.
Tool surface
Stable orchestration tools:
codex_submit_taskcodex_get_operation_statuscodex_start_plan_workflowcodex_start_review_workflowcodex_get_workflow_statuscodex_approve_plancodex_list_pending_interactionscodex_answer_pending_interactioncodex_interrupt_turncodex_archive_threadcodex_unarchive_threadcodex_start_thread_compactioncodex_get_thread_compaction_statuscodex_get_runtime_capabilitiescodex_health_summarycodex_collect_diagnosticscodex_repair_issue
Compatibility and read tools:
codex_start_chatcodex_send_messagecodex_execute_plancodex_list_projectscodex_list_project_chatscodex_list_active_chatscodex_search_chatscodex_get_chat_statuscodex_get_chatcodex_get_turn_statuscodex_restart_app_servercodex_get_app_server_statuscodex_get_diagnostic_logscodex_analyze_issue
New clients should use durable operations and workflows. Low-level write tools stay available for compatibility.
Read and diagnostic calls are bounded for agent loops. codex_list_projects
defaults to compact cached output, codex_search_chats can return
timeBudgetExhausted=true instead of blocking on a full refresh, and chat reads
prefer tracked turn plus hook history before legacy KB fallback. Diagnostics are
scoped-first: scopedFindings drive the next action, while
backgroundFindings are historical context.
See docs/API_CONTRACT.md for schemas, error shape, stable tool groups, and versioning rules.
Result contract
Every tool declares an outputSchema and returns MCP structuredContent.
Success:
{"ok": true}Domain or tool error:
{
"ok": false,
"error": {
"code": "CODEX_ERROR_CODE",
"message": "Human readable message",
"details": {},
"retryable": false
}
}Call codex_health_summary on startup and reconnect. The version block
contains serverName, serverVersion, contractVersion, toolSurfaceHash,
guideHash, guideVersion, recommended startup/write tools, and
stable/compatibility tool lists.
Agents can discover the operating contract without reading this README.
tools/list includes:
codexMcpGuide: compact machine-readable guide with capabilities, flows, global rules, and runtime limits;toolGroups: ordered groups of preferred tools;recommendedStartupTool="codex_health_summary";recommendedPrimaryWriteTool="codex_submit_task".
Every tool also has annotations.codexMcp with its role, follow-up tools,
idempotency rule, passive-read flag, and mayStartTurn flag. If a client
library hides top-level tools/list fields, call
codex_get_agent_contract(detail="compact") or
codex_get_agent_contract(detail="full", include_examples=true).
Configuration
Configuration can come from environment variables or from a JSON file referenced
by CODEX_CONTROL_PLANE_MCP_CONFIG. The old OPENCLAW_CODEX_MCP_CONFIG name is
still accepted as a fallback.
Common variables:
CODEX_HOME: Codex home directory. Defaults to%USERPROFILE%\.codex.CODEX_PROJECTS_ROOT: project root scanned by catalog and read tools.CODEX_ALLOWED_ROOTS: semicolon-separated path allowlist.CODEX_PROJECTS_REGISTRY: optional JSON project registry.CODEX_MCP_STATE_DB: local MCP state DB.CODEX_CONTROL_PLANE_MCP_LOG: log file path.CODEX_MCP_HOOK_HISTORY_ENABLED: enables SQLite hook history. Defaults totrue.CODEX_MCP_HOOK_HISTORY_MAX_TEXT_CHARS: per-message hook capture limit.CODEX_KB_HISTORY_PROJECTS_ROOT: optional legacy normalized KB history root.CODEX_BINARY_PATH: optional explicit Codex binary path.CODEX_MCP_DEFAULT_SANDBOX: default write sandbox. Defaults toread-only.CODEX_MCP_DEFAULT_APPROVAL_POLICY: default write approval policy. Defaults toon-request.CODEX_MCP_DEFAULT_MODEL: default Codex model passed to app-server.CODEX_MCP_DEFAULT_EFFORT: default effort level.CODEX_MCP_MAX_IMAGE_INPUT_ITEMS: max image attachments percodex_submit_task. Defaults to10.CODEX_MCP_MAX_IMAGE_INPUT_BYTES: max bytes for one local image input. Defaults to20000000.CODEX_MCP_TURN_STALL_TIMEOUT_SECONDS: inactivity threshold for stalled-turn reporting. Defaults to900.CODEX_MCP_STALLED_TURN_ACTION: stalled-turn policy. Defaults todiagnose_only.CODEX_MCP_APPROVAL_RESPONSE_TIMEOUT_SECONDS: pending interaction timeout.DEEPSEEK_ENV_PATH: optional.envfile for DeepSeek summary settings.DEEPSEEK_SUMMARY_ENABLED: enables or disables remote summary calls.
The write policy values are defaults, not hard limits. A client call can pass
sandbox or approval_policy explicitly when a trusted workflow needs a
different posture.
Plan Mode is the exception to pure pass-through behavior: read-only is treated
as too restrictive for Plan Mode on Windows and is raised to workspace-write.
More permissive per-call values, such as workspace-write, are passed through.
Example:
$env:CODEX_CONTROL_PLANE_MCP_CONFIG = Join-Path (Get-Location) "examples\codex-control-plane-mcp.config.json"
$env:CODEX_MCP_DEFAULT_SANDBOX = "read-only"
$env:CODEX_MCP_DEFAULT_APPROVAL_POLICY = "on-request"
py -m codex_control_plane_mcp.serverSee examples/codex-control-plane-mcp.config.json.
Reliability model
The server is built for common local orchestration failures:
MCP client timeout after task submission.
Repeated submit with the same
client_request_id.Repeated submit without an idempotency key but with the same active prompt.
MCP process restart between app-server
thread/startandturn/start.Two MCP processes sharing one SQLite state DB.
App-server exit while a turn is active.
Pending approval tied to an old app-server generation.
App-server or transcript gaps where hook history still captured the prompt, visible agent text, final answer, and completion status.
These cases are stored in durable operation, workflow, turn, hook, and pending
interaction state. Terminal statuses are explicit.
unknown_after_app_server_exit is not treated as success.
Safety
Live smoke prompts must include
MCP LIVE TEST / DO NOT MODIFY FILES.Repairs default to
dry_run=true.Forced app-server restart can mark active turns as unknown or orphaned. Prefer
restart_app_server_idle.
Checks
Fast local checks:
python -m pytest -q
python -m compileall -q openclaw_codex_mcp codex_control_plane_mcp tests scripts
git diff --checkProtocol-only MCP smoke:
python .\scripts\mcp_live_smoke.py --scenario protocolSafe live smoke with real Codex Desktop/app-server:
python .\scripts\mcp_live_smoke.py --scenario safe-operation --cwd <PROJECT_ROOT>Full live regression:
python .\scripts\mcp_live_smoke.py --scenario full --safe-restart --cwd <PROJECT_ROOT>External MCP client for development and long live tests:
python .\scripts\external_mcp_client.py daemon-start
python .\scripts\external_mcp_client.py daemon-restart-mcp --reason after_code_change
python .\scripts\external_mcp_client.py run-live-test --scenario full --archive-reportUse the external client when you need to test the current checkout as a real MCP
client without restarting Codex Desktop. It runs an independent daemon, keeps
its own MCP stdio subprocess, and can restart only that subprocess after code
changes. Live test findings are written to corrective_action_plan.md; previous
reports can be archived with --archive-report.
See docs/EXTERNAL_MCP_CLIENT.md for the daemon commands and the available live scenarios.
See docs/RELEASE_CHECKLIST.md. For public launch positioning, see docs/PUBLICATION_GUIDE.md.
Packaging
Build locally:
python -m pip install build
python -m buildThe wheel includes the MCP server, the hook installer, the admin helper, and the bundled Codex hook module.
The normal install path is:
pipx install codex-control-plane-mcpor:
uvx codex-control-plane-mcpContributing
Read CONTRIBUTING.md and SECURITY.md before opening issues that include diagnostics.
Good GitHub topics for this repo:
python, mcp, mcp-server, model-context-protocol, openai-codex,
codex, codex-desktop, agent-tools, ai-agents, developer-tools,
automation, orchestration, agentic-workflows, long-running-tasks,
openclaw, hermes, hermes-agent.
Available Tools
38 toolscodex_adopt_workflow_planB
Adopt a valid newer Plan Mode candidate already present in the workflow thread. Use this only when status or diagnostics reports an adoptable plan. Next poll codex_get_workflow_status.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | ||
| candidate_turn_id | Yes | ||
| candidate_plan_hash | Yes | ||
| client_request_id | No | ||
| adoption_note | No | ||
| message_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only states the action and a follow-up step. It does not disclose side effects, error behavior, authorization needs, or rate limits. For a mutating tool, more transparency is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, under 50 words, and front-loads the core action. It is concise but the first sentence could be clearer about 'Plan Mode candidate' and 'workflow thread' for a broader audience.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters (3 required) with no descriptions, and an output schema not explained, the description is incomplete. It provides purpose and a usage hint but fails to cover parameter meanings, return values, or error handling. The agent would need external knowledge to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any of the 6 parameters. Parameter names are somewhat self-explanatory (e.g., workflow_id, candidate_turn_id), but the lack of any description or hints means the agent must guess. This is inadequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'adopt' and the resource 'valid newer Plan Mode candidate', and specifies it is within a workflow thread. It provides a condition for usage, which adds context. However, it does not explicitly differentiate from sibling tools like codex_approve_plan or codex_execute_plan, leaving slight ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit conditions: 'Use this only when status or diagnostics reports an adoptable plan' and advises 'Next poll codex_get_workflow_status'. This provides clear context on when to use and what to do afterward. It lacks mention of when not to use or alternative tools, but still offers strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_analyze_issueA
Analyze scoped diagnostics and recommend safe next actions. Use this after collect_diagnostics or when a human needs a compact root-cause summary. Follow agentGuidance rather than inventing retries.
| Name | Required | Description | Default |
|---|---|---|---|
| problem_text | No | ||
| operation_id | No | ||
| workflow_id | No | ||
| thread_id | No | ||
| turn_id | No | ||
| action_id | No | ||
| command_id | No | ||
| since_minutes | No | ||
| include_evidence | No | ||
| record | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides key behavioral traits: it recommends actions (not executes), defers to agentGuidance, and is analytical in nature. It lacks details on side effects (likely none) and doesn't explicitly state it's read-only, but the context implies non-mutative behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each purposeful. First sentence states purpose, second gives usage context, third provides behavioral guidance. No unnecessary words, front-loaded effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 10 optional parameters and no schema descriptions, the description is insufficient. It does not help the agent understand how to scope diagnostics using the parameters. The output schema exists but doesn't compensate for missing input guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description fails to explain any of the 10 parameters. Despite 0% schema description coverage, it does not mention problem_text, operation_id, since_minutes, etc. or how to use them. The agent has no guidance on parameter selection beyond defaults in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: analyze scoped diagnostics and recommend safe next actions. It specifies the verb 'analyze', the resource 'scoped diagnostics', and the outcome. It also distinguishes from sibling tools by mentioning after collect_diagnostics and for compact root-cause summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: after collect_diagnostics or when a human needs a compact root-cause summary. Also provides a behavioral constraint: 'Follow agentGuidance rather than inventing retries', which guides correct usage and prevents inappropriate retries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_answer_pending_interactionB
Answer one pending Codex interaction so a turn can continue. Use this only for a listed interaction id. Next poll the owning operation, turn, or workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| interaction_id | Yes | ||
| decision | No | ||
| decision_payload | No | ||
| answers | No | ||
| action | No | ||
| content | No | ||
| permissions | No | ||
| scope | No | turn | |
| strict_auto_review | No | ||
| raw_response | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It implies mutation ('Answer') and consequence ('so a turn can continue'), but does not disclose side effects, authorization needs, or behavior of individual parameters. Basic transparency but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, front-loaded with the core action, and avoids redundancy. However, it lacks parameter documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and 10 parameters, the description is minimal. It does not explain the 'answer' process, decision options, or how the output schema relates, leaving the agent underinformed for a moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description mentions only 'interaction id' without explaining other critical parameters (decision, action, answers, etc.). It fails to add meaning beyond the schema for the 10 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Answer' and the resource 'pending Codex interaction', and the purpose 'so a turn can continue'. This distinguishes it from siblings like codex_list_pending_interactions (list) and codex_interrupt_turn (different action).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to use only for a listed interaction id and to poll the owning operation, turn, or workflow next. This provides clear context and next steps, though it lacks explicit when-not-to-use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_approve_planA
Approve the latest ready plan and queue execution. Use this after codex_get_workflow_status reports plan_ready and a valid latestPlan. Next poll codex_get_workflow_status with the same workflowId.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | ||
| client_request_id | No | Stable retry idempotency key for workflow approval/execution. | |
| message | No | Implement the plan. | |
| output_schema | No | Optional JSON Schema passed to app-server outputSchema for the execution turn final assistant message. | |
| approval_policy | No | on-request | |
| sandbox | No | read-only | |
| timeout_seconds | No | ||
| first_message_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With empty annotations, the description must disclose behavioral traits. It mentions 'queue execution' but does not elaborate on side effects, permissions required, or whether the plan is locked after approval. The description is functional but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, direct and front-loaded with the action. Every sentence serves a purpose, and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 8 parameters and an output schema, the description is too sparse. It does not explain optional parameters like message, approval_policy, or timeout_seconds, nor does it describe the return value or expected outcome. More detail is needed for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (2 of 8 parameters have descriptions). The tool description does not add any parameter-specific meaning beyond the schema. It mentions workflowId in the narrative but without clarifying its role. For a tool with many parameters, more guidance is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Approve the latest ready plan and queue execution.' It specifies the resource (plan) and verb (approve), and distinguishes it from sibling tools like codex_adopt_workflow_plan and codex_execute_plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: after codex_get_workflow_status reports plan_ready and a valid latestPlan. It also indicates the next step: poll codex_get_workflow_status with the same workflowId. It does not explicitly state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_archive_threadB
Archive a known Codex thread through the worker or app-server command lane. Use this only when the thread has no active work. Next poll codex_get_worker_command_status when commandId is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | ||
| project_id | No | ||
| timeout_seconds | No | ||
| refresh_catalog | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions asynchronous operation via command lane and return of commandId, but lacks details on destructive effects, reversibility (though a sibling unarchive tool exists), auth requirements, or side effects. The description does not contradict annotations but is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the purpose and then adding a precondition and follow-up. Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters with 0% schema coverage, no annotations, and an output schema, the description is incomplete. It addresses use precondition and follow-up but does not document parameter meanings or detailed behavior. The agent would need to infer too much.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must explain parameters. It only mentions that a commandId is returned, but gives no guidance on thread_id, project_id, timeout_seconds, or refresh_catalog. The agent has no help understanding parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Archive') and the resource ('a known Codex thread'), and specifies the mechanism ('through the worker or app-server command lane'). It distinguishes from the sibling tool 'codex_unarchive_thread' by indicating the thread should have no active work, implying a complementary use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('only when the thread has no active work') and recommends a follow-up action ('Next poll codex_get_worker_command_status when commandId is returned.'). It does not explicitly list when not to use or alternatives, but the precondition is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_collect_diagnosticsB
Collect a scoped diagnostic snapshot with compact evidence and guidance. Use this before repair when status reports failed, stale, orphaned, or degraded state. It does not execute repairs.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | No | ||
| workflow_id | No | ||
| thread_id | No | ||
| turn_id | No | ||
| since_minutes | No | ||
| include_logs | No | ||
| log_limit | No | ||
| event_limit | No | ||
| include_timeline | No | ||
| timeline_limit | No | ||
| refresh_catalog | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It states the tool collects diagnostic snapshots and does not execute repairs, implying it is a read-only operation. However, it does not explicitly state that it does not modify any state, leaving some ambiguity about potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, consisting of two sentences that state purpose and usage context without any wasted words. It is well-structured for quick reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 11 parameters with zero schema descriptions and no annotations, the description should provide more guidance on scoping and optional behavior. It only mentions 'scoped diagnostic snapshot' without explaining how to control scope via parameters, leaving significant gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It contains no information about any of the 11 parameters (e.g., operation_id, since_minutes, include_logs), leaving the agent without guidance on how to specify the scope or customize the diagnostic snapshot.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Collect' and resource 'diagnostic snapshot', clearly stating the tool's purpose. However, it doesn't explicitly differentiate from sibling tools like 'codex_get_diagnostic_logs' or 'codex_health_summary', though the mention of 'compact evidence and guidance' hints at a distinct output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use ('before repair when status reports failed, stale, orphaned, or degraded state') and what the tool does not do ('does not execute repairs'). This provides clear context, but it does not mention alternative tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_execute_planB
Compatibility write for executing an approved plan. Prefer codex_approve_plan or codex_submit_task with operation_type='execute_plan'. In client mode this delegates to durable workflow execution.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | No | ||
| chat_id | No | ||
| project_id | No | ||
| client_request_id | No | ||
| message | No | Implement the plan. | |
| output_schema | No | Optional JSON Schema passed to app-server outputSchema for the execution turn final assistant message. | |
| force | No | ||
| timeout_seconds | No | ||
| first_message_timeout_seconds | No | Deprecated and ignored. Plan execution returns after turn/start; poll codex_get_workflow_status or codex_get_turn_status. | |
| first_message_max_chars | No | ||
| approval_policy | No | on-request | |
| sandbox | No | read-only |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description must disclose behavioral details. It mentions 'compatibility write' and 'delegates to durable workflow execution', but lacks specifics on side effects, modifications, or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise at two sentences, no wasted words. However, the first sentence could be more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (12 parameters, enums, output schema), the description is too sparse—missing purpose of parameters, output details, and complete usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17% (2 of 12 parameters have descriptions). The tool description does not explain any parameters, failing to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it is a compatibility write for executing an approved plan, which is clear but uses jargon. It distinguishes from siblings by mentioning alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises preferring codex_approve_plan or codex_submit_task with operation_type='execute_plan', providing clear when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_agent_contractA
Read the machine-readable agent guide for this MCP server. Use this when tools/list metadata was unavailable or when a client wants the full contract examples. It is passive and the next normal startup call is codex_health_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | compact | |
| client_type | No | ||
| include_examples | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the tool is 'passive' (indicating read-only behavior) but lacks details on authentication requirements, error conditions, or whether the agent guide is always available. With empty annotations, more behavioral context would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action. However, it could include brief parameter guidance without losing conciseness. Currently, it omits essential parameter context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the output schema exists (reducing need to describe return values), the tool's three parameters are completely undocumented. The description's use cases ('full contract examples') do not link to parameter values, leaving the agent guessing. This is insufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description provides no information about the three parameters (detail, client_type, include_examples). The agent cannot infer how to set these based on the description alone, which is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads a machine-readable agent guide for this MCP server. It specifies two distinct use cases: when tools/list metadata is unavailable or when full contract examples are needed. This distinguishes it from sibling tools like codex_get_runtime_capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly specifies when to use the tool ('when tools/list metadata was unavailable or when a client wants the full contract examples') and mentions the next normal startup call (codex_health_summary). This provides clear context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_app_server_statusA
Read MCP-owned app-server status without starting it. Use this with worker, queue, and concurrency status to verify active work. In client mode prefer worker-derived active turns over local guesses.
| Name | Required | Description | Default |
|---|---|---|---|
| include_recent_events | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so description must cover behavior. It states it's a read-only operation ('without starting it'), but does not detail side effects, authorization, or error conditions. Adequate but lacks depth expected from absent annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler. Front-loaded with the core action and key differentiator. Missing parameter detail slightly reduces conciseness value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, return format is covered elsewhere. However, the description omits parameter documentation and does not address prerequisites or edge cases, leaving some gaps for a tool with moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description does not mention the parameter 'include_recent_events' or its effect. The agent must infer meaning from the parameter name alone, which is insufficient for informed invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads app-server status without starting it, and distinguishes it from related tools by specifying its use with worker, queue, and concurrency status. The phrase 'MCP-owned' clarifies the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using with worker, queue, and concurrency status to verify active work, and advises preferring worker-derived active turns in client mode. Does not explicitly list alternatives or situations to avoid, but provides clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_chatB
Read bounded chat content from hook history, transcripts, or legacy fallback. Use this for context recovery and final report inspection. It is not a write path and should not trigger retries.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | ||
| project_id | No | ||
| range | No | ||
| include_tool_calls | No | ||
| include_tool_outputs | No | ||
| include_command_outputs | No | ||
| include_reasoning | No | ||
| include_metadata | No | ||
| include_items | No | ||
| tail_max_messages | No | ||
| tail_max_chars | No | ||
| force_refresh_summary | No | ||
| response_budget_chars | No | ||
| format | No | structured |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds some behavioral info (read-only, no retries). Yet it omits details like pagination, rate limits, or side effects. The statement 'Read bounded chat content' hints at limits but does not explain bounding behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, each earning its place. It front-loads the core purpose and immediately adds usage guidance. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 params, nested range object, many options), the description is far too sparse. It does not explain how to use the range modes, include flags, formatting, or budget parameters. The output schema exists but the description offers no guidance on interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides no explanation of any of the 14 parameters, despite 0% schema description coverage. Key parameters like chat_id, range, include_* flags, format, and budgets are completely unaddressed, forcing the agent to rely solely on parameter names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads bounded chat content from specific sources (hook history, transcripts, legacy fallback), and mentions use cases (context recovery, final report inspection). It distinguishes from sibling getters by specifying 'bounded chat content' rather than status or diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides when to use ('context recovery', 'final report inspection') and what not to do ('not a write path', 'should not trigger retries'). However, it does not explicitly contrast with sibling tools or mention when to avoid it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_chat_statusA
Read lightweight chat status and safe previews. Use this to inspect a known thread without starting live work. Next call codex_get_chat for content or codex_submit_task for a new operation.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | ||
| project_id | No | ||
| preview_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the burden. It implies read-only behavior via 'inspect' and 'safe previews,' but does not explicitly guarantee idempotence or declare lack of side effects. The term 'lightweight' hints at low cost, but more explicit safety assurances would be better.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a guidance sentence. No filler, front-loaded with purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema (exists) and only three parameters (one required), the description is functionally complete for a simple read operation. However, it lacks parameter descriptions and does not elaborate on the preview behavior (e.g., default char limit). Adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It mentions 'previews' hinting at preview_max_chars, but does not explain chat_id or project_id semantics. The parameter roles and how they affect behavior are left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('lightweight chat status and safe previews'). It distinguishes from siblings by explicitly naming alternative tools (codex_get_chat, codex_submit_task) and their different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use this to inspect a known thread without starting live work.' And provides clear next steps: 'Next call codex_get_chat for content or codex_submit_task for a new operation.' This helps the agent decide among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_concurrency_statusC
Read active turn counts and scheduler resource locks. Use this with queue status when diagnosing parallel work. Active locks are not a retry instruction by themselves.
| Name | Required | Description | Default |
|---|---|---|---|
| include_locks | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It correctly indicates a read operation and adds a behavioral caveat about not misinterpreting active locks. However, it lacks details on permissions, rate limits, or side effects, which would be helpful for a diagnostic tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The structure is front-loaded with the purpose, then guidance. However, the second sentence is somewhat terse and could benefit from slight expansion for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, return values are not required in the description. However, the tool has two undocumented parameters, and the description does not cover their semantics. This incompleteness lowers the overall utility, despite good usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain the parameters. It does not mention `include_locks` (boolean) or `limit` (integer), leaving the agent to guess their roles. This is a major gap that hinders correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'active turn counts and scheduler resource locks', which directly aligns with the tool name 'concurrency status'. However, it does not explicitly differentiate from sibling tools like get_queue_status or get_operation_status, though the mention of 'parallel work' provides some distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using this tool 'with queue status when diagnosing parallel work', which gives context for when to invoke it. It also cautions that 'Active locks are not a retry instruction by themselves', preventing misuse. However, it does not specify when not to use it or list alternative tools for other types of status checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_diagnostic_logsA
Read redacted diagnostic log and app-server audit entries with filters. Use this only for targeted troubleshooting, not normal polling. Raw payload mode is for local audit and remains secret-redacted.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | all | |
| workflow_id | No | ||
| thread_id | No | ||
| turn_id | No | ||
| process_generation | No | ||
| since_minutes | No | ||
| severity | No | ||
| limit | No | ||
| max_line_chars | No | ||
| include_payload | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that logs are redacted and that raw payload mode remains 'secret-redacted', but does not address destructive behavior, authentication, rate limits, or idempotency. The read-only nature is implied but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the purpose and then providing usage guidelines. Every sentence adds value with no repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks sufficient detail for a tool with 10 parameters and no parameter descriptions. It does not explain the structure of the output, the effect of filters, or error conditions, leaving significant gaps for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'filters' and 'raw payload mode' but does not explain any of the 10 parameters individually. Given 0% schema description coverage, the description should compensate, but it only hints at the purpose without detailing source, severity, time filters, or other inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads redacted diagnostic logs and app-server audit entries with filters, specifying the verb 'Read' and the target resources. It differentiates from siblings like codex_collect_diagnostics by emphasizing targeted troubleshooting rather than normal polling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this only for targeted troubleshooting, not normal polling,' providing clear usage context. It also explains that raw payload mode is for local audit, but does not name alternative tools for polling, which prevents a score of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_operation_statusA
Poll a durable operation from storage. Use this after codex_submit_task and follow nextRecommendedAction, pollRecommended, queueState, and agentGuidance. Never create a new retry while an existing operation is active.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | Yes | ||
| last_messages | No | ||
| message_max_chars | No | ||
| progress_events | No | ||
| progress_max_chars | No | ||
| include_events | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It reveals that the tool polls durable operations and advises against concurrent retries, but does not disclose behaviors like rate limits, idempotency, or response to missing operations. The description is adequate but leaves room for ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences that front-load the core action and quickly move to usage guidance. Every sentence adds value without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters and an output schema, the description is relatively sparse. It covers usage sequence and a key constraint but omits details about parameter semantics and what to expect in the response. The output schema mitigates some gaps but the description still feels incomplete for a polling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides no information about any of the 6 parameters (schema coverage 0%). Although parameter names like 'operation_id' and 'last_messages' are somewhat self-explanatory, the description adds no extra meaning or constraints beyond the schema defaults and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Poll a durable operation from storage,' which clearly identifies the action and resource. However, among sibling tools like codex_get_worker_command_status and codex_get_workflow_status, the description does not explicitly differentiate this tool from other status-polling tools, though it does specify usage after codex_submit_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance: 'Use this after codex_submit_task' and instructs to 'follow nextRecommendedAction, pollRecommended, queueState, and agentGuidance.' It also warns 'Never create a new retry while an existing operation is active.' However, it does not mention alternative tools or scenarios where this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_queue_statusA
Read durable queue state, queued reasons, running operations, and worker assignment. Use this to understand slot pressure or lock waits. Do not retry when queued work already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It declares a read operation ('Read') and gives behavioral advice (do not retry). While it doesn't cover auth or rate limits, it sufficiently describes the read nature and outputs for this context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, no fluff. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values are covered. However, the description lacks guidance on input parameters (status filter, limit) which is needed for proper use. It is borderline adequate but missing key parameter context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description should explain parameters. However, the description mentions 'queued reasons, running operations, worker assignment' but does not describe the 'status' filter or 'limit' pagination parameter. These are significant omissions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads 'durable queue state, queued reasons, running operations, and worker assignment', specifying a verb and resource. This distinguishes it from sibling tools like codex_get_worker_status and codex_get_operation_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Use this to understand slot pressure or lock waits' and a clear directive: 'Do not retry when queued work already exists'. This helps the agent decide when to invoke the tool and what not to do.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_runtime_capabilitiesA
Read compact runtime capabilities, models, permissions, hooks, account state, and supported methods. Use this after health or before new work. In client mode refresh queues a worker command.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | ||
| cwd | No | ||
| timeout_seconds | No | ||
| include_models | No | ||
| include_hooks | No | ||
| include_skills | No | ||
| include_account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It correctly identifies the operation as a read and discloses the side effect of refresh: 'In client mode refresh queues a worker command.' However, it does not detail other behaviors like idempotency or the scope of capabilities returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first sentence states the purpose, and the second adds a behavioral note. It is front-loaded, but could benefit from structured bullet points for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lists what is read (capabilities, models, permissions, hooks, account state, supported methods) but omits skills, which are controlled by an include_skills parameter. It also does not address cwd or timeout. Given the existence of an output schema, the lack of output details is acceptable, but parameter coverage is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds no information about the 7 parameters (refresh, cwd, timeout_seconds, include_*). The only implicit hint is that refresh triggers a worker command, but no parameter details are provided, leaving the agent to rely solely on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Read compact runtime capabilities, models, permissions, hooks, account state, and supported methods,' specifying a read verb and listing the resources. This distinguishes it from sibling tools like codex_health_summary (which checks health) and other read tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context: 'Use this after health or before new work.' It gives a sequential positioning but does not explicitly exclude cases or mention alternatives beyond the implicit distinction from health checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_thread_compaction_statusA
Poll a thread compaction action. Use this with actionId from codex_start_thread_compaction. It is passive and should return a bounded status or guidance.
| Name | Required | Description | Default |
|---|---|---|---|
| action_id | Yes | ||
| include_events | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so description carries full burden. It labels the tool as 'passive' and says it returns 'bounded status or guidance', indicating read-only behavior and predictable output. No side effects disclosed, but this suffices for a polling tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action verb 'Poll'. Every line adds essential context: purpose then usage and behavior. No redundancies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, return values are covered. However, the description doesn't mention the optional parameter or elaborate on what 'bounded status' means. It could more clearly differentiate this from generic status tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description only implicitly addresses the action_id parameter by noting its source, but the optional include_events parameter is completely unexplained. This leaves an agent guessing about the boolean's effect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool polls a thread compaction action and ties it to 'codex_start_thread_compaction'. This differentiates it from other status tools like 'codex_get_operation_status' by specifying the resource and verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs to use the actionId from codex_start_thread_compaction, giving clear context for when to invoke. It implies a sequential usage pattern but stops short of listing when not to use or suggesting alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_turn_statusB
Read one tracked Codex turn, including safe progress and terminal evidence. Use this when you have threadId and turnId. Do not infer stalled state from row age alone.
| Name | Required | Description | Default |
|---|---|---|---|
| turn_id | Yes | ||
| thread_id | No | ||
| last_messages | No | ||
| message_max_chars | No | ||
| progress_events | No | ||
| progress_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool reads safe progress and terminal evidence, and warns against inferring stall from row age. Yet it lacks details on side effects (none), authorization, rate limits, or output format. The warning adds value but the description could be more comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no unnecessary words. Purpose is front-loaded, followed by usage hint and a warning. Excellent efficiency for a read operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters and an output schema, the description is too sparse. It does not explain what 'terminal evidence' means, how the parameters control output (e.g., message count limits), or summarize the return structure. The agent is left with significant gaps despite the output schema existing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (six parameters have no inline descriptions). The description only indirectly references turn_id and thread_id ('use this when you have threadId and turnId'), but says nothing about the other four parameters (last_messages, message_max_chars, progress_events, progress_max_chars). This forces the agent to rely solely on schema types and defaults, which is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a tracked Codex turn, with specific verb 'Read' and resource 'one tracked Codex turn'. It mentions included data (safe progress, terminal evidence). While it distinguishes from sibling 'get' tools by specifying 'turn', it does not explicitly contrast with similar status tools, but the name and context suffice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Use this when you have threadId and turnId.' Additionally adds a caution: 'Do not infer stalled state from row age alone.' This helps the agent decide when to use it. However, it does not list alternative tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_worker_command_statusA
Poll a worker command created by a client-mode control action. Use this for archive, unarchive, compaction, restart, runtime refresh, and delegated lifecycle commands. Keep include_result=false unless the result is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| command_id | Yes | ||
| include_result | No | ||
| max_result_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior but only notes that it polls a command and provides a parameter hint. It does not mention idempotency, error handling, authentication requirements, or rate limits. The polling nature is implied but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with purpose, and contains no redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the listing of command types, the description is adequate for basic usage. However, it lacks depth on parameter specifics and error scenarios. The output schema may compensate for return value details, but the description itself is only partially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It only provides semantic guidance for the include_result parameter ('Keep include_result=false unless needed'), leaving command_id and max_result_chars unexplained. This is insufficient for a tool with three parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Poll' and the resource 'worker command created by a client-mode control action'. It lists specific command types (archive, unarchive, compaction, etc.) which helps distinguish this tool from siblings like codex_get_worker_status or codex_get_thread_compaction_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists the types of commands to use this for (archive, unarchive, compaction, etc.) and advises on when to set include_result=false. It does not provide explicit when-not-to-use guidance or alternative tools, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_worker_statusB
Read central worker heartbeat and execution-mode state without starting app-server. Use this when health or queue guidance says inspect_worker_health. Next compare with queue and concurrency status.
| Name | Required | Description | Default |
|---|---|---|---|
| include_recent_commands | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so the description carries the burden. It discloses that the tool is a read operation that does not start the app-server, which is useful. However, it does not mention permissions, rate limits, or behavior if the worker is unavailable, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core function. Efficient, though the second and third sentences could potentially be merged. No unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has two parameters with no schema descriptions and no parameter info in the description, which is a major gap for completeness. While the output schema exists (so return values are assumed covered), the parameter ambiguity undermines overall completeness. For a read tool, more detail on parameters is expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation for either parameter ('include_recent_commands' and 'limit'). The agent cannot determine what these parameters control or how to use them, severely impacting tool invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads central worker heartbeat and execution-mode state, distinguishing it from starting the app-server. It provides context for when to use (health or queue guidance says inspect_worker_health) and suggests follow-up with queue and concurrency status, effectively differentiating from sibling tools like codex_get_queue_status and codex_get_concurrency_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies a condition for use ('when health or queue guidance says inspect_worker_health') and advises comparing results with queue and concurrency status. It does not explicitly list when not to use or provide alternative tool names, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_get_workflow_statusA
Poll workflow state from storage by default. Use this for Plan Mode, execution, and review workflows. Follow nextRecommendedAction and do not create replacement work unless guidance tells you to.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | ||
| last_messages | No | ||
| message_max_chars | No | ||
| include_events | No | ||
| refresh_live | No | Reserved explicit live refresh flag. Default polling is passive. | |
| refresh_live_goal | No | Best-effort live thread/goal sync. Defaults to false so frequent workflow polling stays passive and cannot create app-server requests. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With empty annotations, the description carries full behavioral burden. It reveals default polling behavior ('from storage by default'), passive nature (via refresh_live descriptions), and usage rule ('do not create replacement work'). This adds significant value beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, containing no fluff. Every sentence adds meaning: purpose, usage context, and a critical behavioral guideline. It is front-loaded with the primary action and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters (1 required), empty annotations, and an output schema, the description provides sufficient context for usage. It covers polling behavior, live refresh nuances, and usage boundaries. The output schema covers return values, so no need to elaborate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 33% (only refresh_live and refresh_live_goal have descriptions). The overall description does not elaborate on the other four parameters (workflow_id, last_messages, message_max_chars, include_events). The refresh_live descriptions are well-covered, but the majority lack additional meaning from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Poll workflow state from storage by default' with a specific verb and resource. It further distinguishes usage by specifying contexts: 'Use this for Plan Mode, execution, and review workflows.' This effectively differentiates it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage contexts ('Plan Mode, execution, and review workflows') and behavioral guidance ('Follow nextRecommendedAction and do not create replacement work'). While it does not mention alternatives, the context is clear enough for the agent to decide when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_health_summaryA
Read compact MCP readiness and contract metadata. Use this first on startup, reconnect, and after MCP restart. Next inspect runtime capabilities or follow agentGuidance if health is degraded.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | No | ||
| workflow_id | No | ||
| thread_id | No | ||
| turn_id | No | ||
| action_id | No | ||
| command_id | No | ||
| since_minutes | No | ||
| stale_after_minutes | No | ||
| include_recent_errors | No | ||
| max_recent_errors | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly labels the tool as a 'Read' operation, implying no side effects or destructive actions. However, it does not mention caching, latency, or any rate limits, which is acceptable for a lightweight health read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence states the core purpose, and the second provides clear usage guidance. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need not be described. However, with 10 parameters and a health-check tool, more context on parameter usage (e.g., filters, defaults) would improve usability. The description is adequate for the simplest use but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning no parameter descriptions exist in the schema. The tool description adds no information about any of the 10 parameters (e.g., operation_id, since_minutes). The agent must infer their meaning from names alone, which is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Read' and identifies clearly the resource: 'compact MCP readiness and contract metadata'. It also distinguishes this tool as a first-step health check among many sibling tools like codex_get_runtime_capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use this first on startup, reconnect, and after MCP restart.' It also provides follow-up actions: 'Next inspect runtime capabilities or follow agentGuidance if health is degraded,' guiding the agent in decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_interrupt_turnB
Interrupt a running Codex turn by direct ids or durable operation/workflow context. Use this for explicit cancellation or stop conditions. Next poll status until terminal evidence is visible.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | No | ||
| turn_id | No | ||
| operation_id | No | ||
| workflow_id | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of disclosing behavior. It only says 'Interrupt a running Codex turn' and suggests polling after. It does not describe whether the interrupt is synchronous or asynchronous, whether it requires authentication, what side effects occur (e.g., resource cleanup), or any rate limits. This is insufficient for an agent to understand the full behavioral implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences covering purpose and a usage hint. It is front-loaded with the core action. There is no extraneous information, though the phrase 'Next poll status until terminal evidence is visible' could be considered slightly ambiguous but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no annotations, and an output schema (not described), the description lacks completeness. It does not explain valid parameter combinations, the meaning of timeout_seconds, or the expected output (though output schema exists). The instruction to poll is helpful but insufficient to fully guide an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It vaguely groups parameters into 'direct ids' (likely thread_id and turn_id) and 'durable operation/workflow context' (operation_id and workflow_id), but does not individually define them. The timeout_seconds parameter is not mentioned at all. An agent would not know the meaning or valid combinations of these parameters from the description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Interrupt a running Codex turn'. It specifies the verb (interrupt) and resource (running Codex turn) and indicates two ways to specify the target (direct ids or durable operation/workflow context). This distinguishes it from sibling tools like codex_get_turn_status or codex_start_chat, which serve different functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case: 'Use this for explicit cancellation or stop conditions.' It also provides a follow-up action: 'Next poll status until terminal evidence is visible.' However, it does not explicitly state when not to use this tool or mention alternatives, but given its unique function among siblings, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_list_active_chatsA
List chats that look active from tracked, hook, transcript, or cached evidence. Use this for operator inspection, not for creating retries. Next call codex_get_turn_status or codex_get_operation_status when ids are available.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| include_waiting_for_user | No | ||
| include_waiting_for_approval | No | ||
| include_running | No | ||
| active_window_minutes | No | ||
| include_evidence | No | ||
| title_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It mentions the evidence sources (tracked, hook, transcript, cached) but does not disclose if the operation is read-only or any side effects. The behavior is implied to be non-destructive, but not explicitly stated, leaving room for ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first describes purpose, second provides usage guidance. No unnecessary words. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, output schema exists), the description covers core purpose and usage but lacks details on how activity is determined, pagination, sorting, or result set behavior. It's minimal but passes the threshold for basic understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any parameters. Parameters like 'include_waiting_for_user', 'active_window_minutes', and 'title_max_chars' have self-explanatory names but could benefit from annotation. The description adds no value beyond the schema, which is insufficient for a tool with 7 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists chats that look active based on various evidence sources, and specifies use for operator inspection. However, it does not explicitly differentiate from sibling tools like codex_list_project_chats or codex_search_chats, missing a chance to clarify when to choose this over alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('operator inspection'), when not to ('not for creating retries'), and provides next-step suggestions ('Next call codex_get_turn_status or codex_get_operation_status when ids are available'). This is clear, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_list_pending_interactionsA
List pending approvals, input requests, or elicitation requests. Use this when operation or workflow status reports pending interaction. Next answer with codex_answer_pending_interaction or ask a human.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | No | ||
| turn_id | No | ||
| operation_id | No | ||
| workflow_id | No | ||
| status | No | pending | |
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It reveals the tool lists pending interactions but lacks details on limits, pagination, or side effects. It does not contradict annotations (none exist).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences: first states the action, second provides usage context and next steps. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 optional parameters and an output schema, the description is insufficient. It does not explain filtering or parameter usage, leaving gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the 6 parameters (e.g., thread_id, status, limit). The agent must infer meaning from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists pending interactions including approvals, input requests, and elicitation requests. It distinguishes from siblings by naming the types and providing next steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use context ('when operation or workflow status reports pending interaction') and suggests next actions (answer or ask human), but does not explicitly mention when not to use or compare to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_list_project_chatsA
List chats for one project from the bounded read model. Use this to find existing threads before continuation or review. Next call codex_get_chat_status, codex_get_chat, or codex_submit_task.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| include_archived | No | ||
| limit | No | ||
| cursor | No | ||
| include_preview | No | ||
| title_max_chars | No | ||
| preview_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions 'bounded read model' hinting at scope, but omits behavioral traits like pagination, authorization, or mutability. Does not contradict annotations (none).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each serving a clear purpose: first defines function, second gives usage guidance. No fluff, front-loaded effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no annotations, but output schema exists. The description covers primary function and usage but lacks details on pagination, filtering, and preview options. Adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description adds no detail on parameters like include_archived, cursor, limit, etc. Beyond stating 'list chats,' it fails to compensate for empty schema descriptions, leaving agents guessing about optional controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as listing chats for one project from a bounded read model, distinguishing it from siblings like codex_list_active_chats (cross-project) and codex_search_chats (search). The verb 'list' and object 'chats' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states use case: 'find existing threads before continuation or review.' Also suggests next calls. Lacks explicit when-not-to-use or alternatives, but the provided context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_list_projectsA
List known Codex projects from registry, hook history, transcripts, and cached Codex state. Use this before preflight or submit when you need a project reference; later tools accept projectId, project name, or project path and return canonical projectId. Next call codex_preflight_project_run for a concrete project.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | ||
| limit | No | ||
| refresh | No | ||
| include_private_details | No | ||
| roots | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description discloses multiple data sources and the mapping from references to canonical projectId. However, it does not mention side effects, permissions, or the behavior of the refresh parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two sentences, front-loads the main purpose, and includes actionable guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Overall context is good with usage flow, but parameter semantics are missing. Output schema exists but is not described. The complexity of 5 undocumented parameters is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and description provides no explanation for any of the 5 parameters (compact, limit, refresh, include_private_details, roots). Despite the requirement to compensate, no parameter details are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'List', resource 'Codex projects', and data sources (registry, hook history, transcripts, cached state). It distinguishes from sibling tools by noting this is used before preflight/submit to obtain project references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this before preflight or submit when you need a project reference' and recommends next call to codex_preflight_project_run. Also explains that later tools accept projectId, name, or path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_preflight_project_runA
Check whether a project is safe to use before a Codex run. Use this after project discovery and before write operations. Do not treat skipped worker-managed account checks as hard auth failures.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| cwd | No | ||
| model | No | ||
| sandbox | No | ||
| approval_policy | No | ||
| workflow_kind | No | plan | |
| live_probe | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description lacks detail on what checks are performed, whether it's read-only, or side effects. Only mentions skipped worker-managed account checks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having output schema, description fails to cover parameter semantics and behavioral details, leaving significant gaps for an 8-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and description does not explain any of the 8 parameters, including enums. Agent has no guidance on parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb (check) and resource (project safety). It distinguishes from siblings by being a preflight check, not execution or management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'after project discovery and before write operations.' Also provides guidance on handling skipped checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_repair_issueB
Run an allowlisted repair action with dry-run first by default. Use this only when diagnostics or agentGuidance recommends a specific action. Stop when loopGuard.allowed is false.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| diagnosis_id | No | ||
| thread_id | No | ||
| turn_id | No | ||
| operation_id | No | ||
| workflow_id | No | ||
| client_request_id | No | ||
| reason | No | ||
| sandbox | No | ||
| approval_policy | No | ||
| dry_run | No | ||
| force | No | ||
| stale_after_minutes | No | ||
| older_than_days | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose all behavioral traits. It mentions dry-run by default and a stopping condition, but fails to warn about potentially destructive actions (e.g., force_restart_app_server) or explain what allowlisted means. More detail is needed for safe use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, front-loading the core purpose and usage condition. It could be slightly more structured but is efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (making return value documentation unnecessary), the tool has 15 parameters and the description is too brief to be complete. It does not explain how different actions relate to parameters or provide sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning to any of the 15 parameters. Parameters like diagnosis_id, thread_id, etc., are not explained, leaving the agent without guidance on how to set them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs an allowlisted repair action with dry-run first by default. It distinguishes from sibling tools like codex_collect_diagnostics or codex_get_* status tools by specifying repair actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use only when diagnostics or agentGuidance recommends an action, and to stop when loopGuard.allowed is false. This provides clear conditions for use, though it doesn't explicitly name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_restart_app_serverA
Restart only the MCP-owned codex-app-server subprocess. Use this only when guidance recommends restart and active work is absent or explicitly handled. In client mode this delegates to the worker command lane.
| Name | Required | Description | Default |
|---|---|---|---|
| start_after_restart | No | ||
| timeout_seconds | No | ||
| force | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that in client mode the action is delegated to the worker command lane, and implies that active work should be absent, indicating potential disruption. However, it does not explain other behavioral traits such as whether the restart is graceful, what happens to app state, or authorization requirements. With empty annotations, more transparency would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at three sentences, immediately stating the core purpose ('Restart only the MCP-owned codex-app-server subprocess'), then providing usage and behavioral context. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the primary purpose, usage conditions, and a special behavioral note for client mode. However, it lacks details on parameter semantics, return values (though output schema exists but is not described), and safety considerations beyond the active-work caveat. Given the tool's moderate complexity (3 optional parameters) and no annotations, the description is partially complete but leaves important questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has three parameters (start_after_restart, timeout_seconds, force) with no descriptions (0% coverage). The tool description does not explain or expand on any of these parameters, leaving the agent without guidance on their purpose or impact. This is a significant gap for a tool with optional parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action (restart) and the target (MCP-owned codex-app-server subprocess), which is a specific verb+resource combination. It distinguishes from related tools like codex_get_app_server_status by focusing on restarting the subprocess, a unique operation among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: only when guidance recommends restart and active work is absent or handled. It also notes behavior differences in client mode, helping the agent understand context. No alternative is mentioned, but no alternative exists among siblings, so it's sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_search_chatsB
Search chat history through the MCP-owned index and safe fallback sources. Use this for discovery or recovery when ids were lost. Do not use search results as proof that a turn is still active.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| match_mode | No | auto | |
| project_id | No | ||
| include_archived | No | ||
| limit | No | ||
| cursor | No | ||
| include_snippets | No | ||
| snippets_per_chat | No | ||
| snippet_max_chars | No | ||
| refresh_index | No | ||
| index_time_budget_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions using 'safe fallback sources' but does not detail what those are, nor does it address auth, rate limits, or data freshness. The caution about active turns adds some transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (two sentences) with no waste, but it omits parameter details, making it under-informative for a tool with many parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description fails to cover the 11 parameters, no annotations, and no parameter semantics. This is severely incomplete for a search tool with complex filtering and pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the tool description provides no explanation of any of the 11 parameters (query, match_mode, etc.). The description is silent on parameter behavior, leaving agents without guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches chat history via MCP-owned index and fallback sources, specifying the use case for discovery/recovery when IDs are lost. This distinguishes it from sibling tools like codex_get_chat or codex_list_active_chats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Guidelines specify when to use (discovery/recovery of lost IDs) and include a caution not to use results as proof of active turns. However, it does not explicitly mention when to avoid this tool in favor of siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_send_messageA
Compatibility write for sending a message to an existing Codex thread. Prefer codex_submit_task with operation_type='send_message' for durable long work. In client mode this delegates to the durable queue.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | ||
| project_id | No | ||
| message | Yes | ||
| mode | No | normal | |
| timeout_seconds | No | ||
| first_message_timeout_seconds | No | Deprecated and ignored. This tool now returns immediately after turn/start; use codex_get_turn_status for messages. | |
| first_message_max_chars | No | ||
| approval_policy | No | on-request | |
| collaboration_mode | No | ||
| sandbox | No | read-only |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so description carries burden. It labels as 'Compatibility write' and mentions delegation, but does not clarify that the call returns immediately (only hinted in parameter description) or other behavioral traits like error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with front-loaded purpose and clear guidance. Minimal waste, but could be slightly more structured to include parameter or behavior highlights.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (10 params, enums, output schema), the description covers purpose and a sibling alternative but omits parameter semantics, prerequisites (existing thread), and return value orientation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 10% (one parameter described). The description adds no parameter explanations, leaving the agent to infer from names and enums, which is insufficient for many parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a message to an existing Codex thread and distinguishes from codex_submit_task by noting preference for durable long work. It uses specific verbs and resource references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to avoid this tool ('Prefer codex_submit_task...') and mentions delegation to durable queue in client mode, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_start_chatB
Compatibility write for starting a new Codex chat. Prefer codex_submit_task with operation_type='start_chat' for durable long work. In client mode this delegates to the durable queue.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| message | Yes | ||
| title | No | ||
| cwd | No | ||
| model | No | ||
| sandbox | No | read-only | |
| approval_policy | No | on-request | |
| collaboration_mode | No | ||
| timeout_seconds | No | ||
| first_message_timeout_seconds | No | Deprecated and ignored. This tool now returns immediately after turn/start; use codex_get_turn_status for messages. | |
| first_message_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only mentions 'compatibility write' and delegation. Lacks details about side effects, return behavior, idempotency, or mutation scope. The parameter description (in schema) reveals that tool returns immediately, but this is not in the main description. Insufficient disclosure for a write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is three sentences, no fluff, and front-loaded with purpose and usage guidance. However, it sacrifices necessary detail for brevity. Still, it is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, no annotations, and many siblings, the description is grossly incomplete. It does not explain parameters, output schema, error conditions, or lifecycle. A tool of this complexity requires far more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 9%; most parameters have no description. The tool description adds no parameter meaning—it doesn't explain any of the 11 parameters, their defaults, or relationships. Fails to compensate for low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states tool is for starting a new Codex chat ('Compatibility write for starting a new Codex chat'). It distinguishes itself from codex_submit_task, which is preferred for durable long work, and mentions delegation behavior in client mode. This differentiates it clearly from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance to prefer codex_submit_task with operation_type='start_chat' for durable long work, and notes that in client mode it delegates to durable queue. This tells the agent when not to use this tool and suggests an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_start_plan_workflowB
Start a durable Plan Mode workflow and return workflowId immediately. Use this when a plan must be prepared before implementation. Next poll codex_get_workflow_status, then call codex_approve_plan when latestPlan is ready.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| message | Yes | ||
| title | No | ||
| cwd | No | ||
| model | No | ||
| sandbox | No | read-only | |
| approval_policy | No | on-request | |
| client_request_id | No | ||
| goal | No | Optional explicit Codex thread goal objective mirrored through app-server thread/goal/set after the workflow thread exists. | |
| goal_token_budget | No | ||
| goal_completion_action | No | What MCP should do with its managed Codex thread goal after workflow completion. | clear |
| goal_completion_objective | No | Optional objective used when goal_completion_action is set_complete. | |
| timeout_seconds | No | ||
| first_message_timeout_seconds | No | Deprecated and ignored. Workflow start returns after turn/start; poll codex_get_workflow_status for plan readiness. | |
| first_message_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description bears full responsibility. It states the workflow is durable and returns immediately, but fails to disclose side effects, error handling, rate limits, or any behavioral traits beyond the high-level flow. Insufficient for a complex tool with 15 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences with no fluff. It front-loads the core action. Could be slightly more informative without losing efficiency, but remains effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (15 parameters, many with enums, no annotations, low schema coverage), the description is incomplete. It omits explanation of output schema, parameter usage, and full lifecycle details beyond the one-liner.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 27%, requiring the description to compensate. However, the description adds no parameter-level information beyond implying project_id and message. Most parameters (e.g., model, sandbox, approval_policy) remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'start' and resource 'durable Plan Mode workflow', clearly distinguishes from sibling tools by outlining the workflow lifecycle (start, poll, approve), and states when to use: 'when a plan must be prepared before implementation'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit next steps: poll codex_get_workflow_status, then call codex_approve_plan. Clearly implies usage context (plan preparation before implementation), but does not explicitly list when not to use or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_start_review_workflowB
Start a durable Codex review workflow and return workflowId immediately. Use this for code review tasks. Next poll codex_get_workflow_status for progress and final report.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | No | ||
| project_id | No | ||
| cwd | No | ||
| target_type | Yes | ||
| base_branch | No | ||
| commit_sha | No | ||
| commit_title | No | ||
| instructions | No | ||
| delivery | No | ||
| client_request_id | No | ||
| model | No | ||
| sandbox | No | read-only | |
| approval_policy | No | on-request | |
| timeout_seconds | No | ||
| first_message_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the workflow is durable and returns immediately, implying asynchronous behavior and need for polling. However, it does not mention side effects, state changes, or constraints like idempotency, which would be helpful for understanding the tool's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at three sentences with front-loaded purpose and clear follow-up action. No redundant information; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 15 parameters and an output schema, the description is incomplete. It omits guidance on how to configure parameters like target_type, sandbox, or instructions, which are essential for correct usage. The return value is partially covered by mentioning workflowId, but not fully detailed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides no information about the 15 parameters, their meanings, or how they affect behavior. This is a critical gap, as the agent must rely solely on the schema, which lacks descriptive text. The description should summarize key parameters like target_type and delivery.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts a durable Codex review workflow and returns a workflowId immediately. It specifies the action (start), the resource (review workflow), and the context (code review tasks), effectively distinguishing it from sibling tools like codex_start_plan_workflow and codex_start_chat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells users to use this tool for code review tasks and to poll codex_get_workflow_status afterward. However, it does not explicitly mention when not to use it or provide alternatives, such as when to use codex_start_plan_workflow instead, which is a guideline gap given the number of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_start_thread_compactionA
Start context compaction for a known thread and return actionId. Use this after active work is terminal. Next poll codex_get_thread_compaction_status.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | ||
| project_id | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the operation as starting compaction (async) and returning actionId. No annotations exist, but the description gives essential behavioral context. Minor gap: no mention of failure modes or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff, front-loaded with purpose and usage. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides essential flow but lacks details on preconditions (e.g., thread must be active), error conditions, or output format beyond actionId. Output schema exists but description doesn't leverage it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds no meaning for thread_id, project_id, or timeout_seconds. The agent must guess parameter roles beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool starts context compaction for a known thread and returns an actionId. Differentiates from sibling tools by specifying the next step to poll compaction status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use after active work is terminal and instructs to poll codex_get_thread_compaction_status next, providing clear context for when and how to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_submit_taskA
Queue a durable Codex write operation and return operationId immediately. For project-scoped work, pass project_id from codex_list_projects.projectId; project name or project path are accepted aliases and MCP stores the canonical projectId. Always pass client_request_id and poll codex_get_operation_status.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_type | Yes | ||
| client_request_id | No | Stable retry idempotency key. If omitted, MCP creates a new operation and relies on prompt deduplication to prevent active duplicate turns. | |
| agent_id | No | Optional orchestrator/agent id used by the central worker scheduler for per-agent limits. | |
| resource_keys | No | Optional write-scope keys. Disjoint keys allow parallel workspace-write/danger-full-access turns in the same project. | |
| priority | No | normal | |
| estimated_cost_class | No | normal | |
| thread_mode | No | Explicit thread intent. Defaults to new_thread for start_chat and continue_thread for send_message/execute_plan. | |
| dedup_policy | No | Controls prompt duplicate handling without changing client_request_id idempotency. | |
| allow_historical_continuation | No | Opt-in only. Allows fuzzy duplicate matching to continue a completed historical thread. | |
| project_id | No | Project reference for start_chat and other project-scoped operations. Prefer the canonical projectId returned by codex_list_projects; the listed project name or full project path are also accepted and canonicalized before durable writes. | |
| chat_id | No | ||
| thread_id | No | Required for operation_type='steer_turn'. Target thread that owns the active turn. | |
| source_thread_id | No | Required for operation_type='fork_thread'. Source thread to fork from. | |
| expected_turn_id | No | Required for operation_type='steer_turn'. Active turn id precondition passed to Codex app-server. | |
| workflow_id | No | ||
| message | No | Required for all operation types except fork_thread. For fork_thread, omit it for fork-only or provide it to start the first turn in the forked thread. | |
| input_items | No | Optional image inputs appended to the text message for operation types that start a new turn. Supports image URL and localImage file path items only. | |
| title | No | ||
| cwd | No | ||
| model | No | ||
| fork_config | No | ||
| ephemeral | No | ||
| output_schema | No | Optional JSON Schema passed to app-server outputSchema for this turn final assistant message. | |
| collaboration_mode | No | ||
| approval_policy | No | on-request | |
| sandbox | No | read-only | |
| force | No | ||
| timeout_seconds | No | ||
| first_message_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It states the operation is durable and returns immediately, and mentions idempotency via client_request_id. It does not discuss potential side effects, rate limits, or failure behavior, which is a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, efficiently front-loading the core action and key usage notes without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 29 parameters and many siblings, the description is too brief. It does not explain how to choose operation types, the meaning of many parameters, or the overall workflow, leaving much to the schema and agent's interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 45%, so many parameters are already documented. The description adds value by highlighting client_request_id and project_id importance, but does not elaborate on most other parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queues a durable write operation and returns an operationId. It mentions the return behavior and project-scoped work, but does not clearly differentiate from sibling tools like codex_start_chat or codex_send_message, which may be specific operation types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: pass project_id for project-scoped work, always provide client_request_id, and poll codex_get_operation_status. However, it does not mention when not to use this tool or list alternatives for specific use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codex_unarchive_threadA
Unarchive a known Codex thread through the worker or app-server command lane. Use this only for an existing archived thread. Next poll codex_get_worker_command_status when commandId is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | ||
| project_id | No | ||
| timeout_seconds | No | ||
| refresh_catalog | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| agentGuidance | No | |
| agentGuidanceText | No | |
| recoveryAttemptState | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the mechanism (worker or app-server command lane) and that it returns a commandId, but does not detail side effects, permissions, or state changes beyond 'unarchive'. With no annotations, more detail would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that efficiently convey purpose, usage condition, and follow-up step. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers core purpose and a follow-up step, but lacks details on parameter semantics and prerequisite conditions. Given the 4 parameters and no schema descriptions, more completeness would be warranted despite the presence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 4 parameters with 0% description coverage. The description does not explain any parameter beyond the core action, leaving timeout_seconds and refresh_catalog ambiguous. The parameter names provide some hints, but the description adds no value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (unarchive) and the resource (Codex thread), and the phrase 'known Codex thread' distinguishes it from similar tools like codex_archive_thread.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (only for existing archived thread) and provides a next step (poll codex_get_worker_command_status). No explicit when-not-to-use, but the condition is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v0.2.1- Changed
codex_analyze_issue3 fields changed- added
Input schema / properties / action_idAdded value: +{ + "default": null, + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / command_idAdded value: +{ + "default": null, + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / recordAdded value: +{ + "default": false, + "type": "boolean" +}
- Added
codex_get_agent_contract - Added
codex_get_concurrency_status - Added
codex_get_queue_status - Added
codex_get_worker_command_status - Added
codex_get_worker_status - Changed
codex_get_workflow_status2 fields changed- added
Input schema / properties / refresh_liveAdded value: +{ + "default": false, + "description": "Reserved explicit live refresh flag. Default polling is passive.", + "type": "boolean" +} - added
Input schema / properties / refresh_live_goalAdded value: +{ + "default": false, + "description": "Best-effort live thread/goal sync. Defaults to false so frequent workflow polling stays passive and cannot create app-server requests.", + "type": "boolean" +}
- Changed
codex_health_summary2 fields changed- added
Input schema / properties / action_idAdded value: +{ + "default": null, + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / command_idAdded value: +{ + "default": null, + "type": [ + "string", + "null" + ] +}
- Changed
codex_list_projects5 fields changed- added
Input schema / properties / compactAdded value: +{ + "default": true, + "type": "boolean" +} - added
Input schema / properties / include_private_detailsAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "default": 200, + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / refreshAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / rootsAdded value: +{ + "default": [], + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
codex_submit_task8 fields changed- added
Input schema / properties / agent_idAdded value: +{ + "default": null, + "description": "Optional orchestrator/agent id used by the central worker scheduler for per-agent limits.", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / allow_historical_continuationAdded value: +{ + "default": false, + "description": "Opt-in only. Allows fuzzy duplicate matching to continue a completed historical thread.", + "type": "boolean" +} - added
Input schema / properties / dedup_policyAdded value: +{ + "default": null, + "description": "Controls prompt duplicate handling without changing client_request_id idempotency.", + "enum": [ + "idempotency_only", + "active_prompt_guard", + "allow_parallel_with_resource_keys", + null + ], + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / estimated_cost_classAdded value: +{ + "default": "normal", + "enum": [ + "light", + "normal", + "heavy" + ], + "type": "string" +} - added
Input schema / properties / priorityAdded value: +{ + "default": "normal", + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" +} - added
Input schema / properties / project_id / descriptionAdded value: +"Project reference for start_chat and other project-scoped operations. Prefer the canonical projectId returned by codex_list_projects; the listed project name or full project path are also accepted and canonicalized before durable writes." - added
Input schema / properties / resource_keysAdded value: +{ + "default": null, + "description": "Optional write-scope keys. Disjoint keys allow parallel workspace-write/danger-full-access turns in the same project.", + "items": { + "maxLength": 300, + "minLength": 1, + "type": "string" + }, + "maxItems": 50, + "type": [ + "array", + "null" + ] +} - added
Input schema / properties / thread_modeAdded value: +{ + "default": null, + "description": "Explicit thread intent. Defaults to new_thread for start_chat and continue_thread for send_message/execute_plan.", + "enum": [ + "new_thread", + "continue_thread", + "auto", + null + ], + "type": [ + "string", + "null" + ] +}
33 tool updates
- Added
codex_adopt_workflow_plan - Changed
codex_analyze_issue3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_answer_pending_interaction3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_approve_plan3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_archive_thread3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_collect_diagnostics3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_execute_plan3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_get_app_server_status3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_get_chat3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_get_chat_status3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_get_diagnostic_logs3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_get_operation_status3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_get_runtime_capabilities3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_get_thread_compaction_status3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_get_turn_status3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_get_workflow_status3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_health_summary3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_interrupt_turn3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_list_active_chats3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_list_pending_interactions3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_list_project_chats3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_list_projects3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Added
codex_preflight_project_run - Changed
codex_repair_issue8 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "recover_stale_operations", - "refresh_catalog_and_history", - "refresh_catalog_and_kb", - "mark_orphaned_after_exit", - "restart_app_server_idle", - "force_restart_app_server", - "mark_stale_turns_orphaned", - "expire_stale_pending_interactions", - "refresh_catalog", - "rebuild_search_index", - "validate_paths_and_config", - "interrupt_turn", - "cleanup_prompt_submissions" -]New value: +[ + "recover_stale_operations", + "refresh_catalog_and_history", + "reconcile_workflow_from_thread", + "retry_workflow_with_runtime_policy", + "refresh_catalog_and_kb", + "mark_orphaned_after_exit", + "restart_app_server_idle", + "force_restart_app_server", + "mark_stale_turns_orphaned", + "expire_stale_pending_interactions", + "refresh_catalog", + "rebuild_search_index", + "validate_paths_and_config", + "interrupt_turn", + "cleanup_prompt_submissions" +] - added
Input schema / properties / approval_policyAdded value: +{ + "default": null, + "enum": [ + "never", + "on-request", + "on-failure", + "untrusted", + "ask_openclaw", + null + ], + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / client_request_idAdded value: +{ + "default": null, + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / reasonAdded value: +{ + "default": null, + "maxLength": 4000, + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / sandboxAdded value: +{ + "default": null, + "enum": [ + "read-only", + "workspace-write", + "danger-full-access", + null + ], + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_restart_app_server3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_search_chats3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_send_message3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_start_chat3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_start_plan_workflow3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_start_review_workflow3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_start_thread_compaction3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_submit_task3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
codex_unarchive_thread3 fields changed- added
Output schema / properties / agentGuidanceAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Output schema / properties / agentGuidanceTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / recoveryAttemptStateAdded value: +{ + "additionalProperties": true, + "type": "object" +}
10 tool updates
v0.1.3- Changed
codex_approve_plan1 field changed- added
Input schema / properties / output_schemaAdded value: +{ + "additionalProperties": true, + "default": null, + "description": "Optional JSON Schema passed to app-server outputSchema for the execution turn final assistant message.", + "type": [ + "object", + "null" + ] +}
- Added
codex_archive_thread - Changed
codex_execute_plan1 field changed- added
Input schema / properties / output_schemaAdded value: +{ + "additionalProperties": true, + "default": null, + "description": "Optional JSON Schema passed to app-server outputSchema for the execution turn final assistant message.", + "type": [ + "object", + "null" + ] +}
- Changed
codex_get_runtime_capabilities1 field changed- added
Input schema / properties / include_accountAdded value: +{ + "default": true, + "type": "boolean" +}
- Added
codex_get_thread_compaction_status - Changed
codex_start_plan_workflow4 fields changed- added
Input schema / properties / goalAdded value: +{ + "default": null, + "description": "Optional explicit Codex thread goal objective mirrored through app-server thread/goal/set after the workflow thread exists.", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / goal_completion_actionAdded value: +{ + "default": "clear", + "description": "What MCP should do with its managed Codex thread goal after workflow completion.", + "enum": [ + "clear", + "set_complete", + "leave", + null + ], + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / goal_completion_objectiveAdded value: +{ + "default": null, + "description": "Optional objective used when goal_completion_action is set_complete.", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / goal_token_budgetAdded value: +{ + "default": null, + "maximum": 10000000, + "minimum": 1, + "type": [ + "integer", + "null" + ] +}
- Added
codex_start_review_workflow - Added
codex_start_thread_compaction - Changed
codex_submit_task10 fields changed- added
Input schema / properties / ephemeralAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / fork_configAdded value: +{ + "additionalProperties": true, + "default": null, + "type": [ + "object", + "null" + ] +} - added
Input schema / properties / input_itemsAdded value: +{ + "default": null, + "description": "Optional image inputs appended to the text message for operation types that start a new turn. Supports image URL and localImage file path items only.", + "items": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "detail": { + "default": "auto", + "enum": [ + "auto", + "low", + "high", + "original", + null + ], + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "image" + ], + "type": "string" + }, + "url": { + "maxLength": 8192, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "detail": { + "default": "auto", + "enum": [ + "auto", + "low", + "high", + "original", + null + ], + "type": [ + "string", + "null" + ] + }, + "path": { + "minLength": 1, + "type": "string" + }, + "type": { + "enum": [ + "localImage" + ], + "type": "string" + } + }, + "required": [ + "type", + "path" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "type": [ + "array", + "null" + ] +} - added
Input schema / properties / message / defaultAdded value: +null - added
Input schema / properties / message / descriptionAdded value: +"Required for all operation types except fork_thread. For fork_thread, omit it for fork-only or provide it to start the first turn in the forked thread." - changed
Input schema / properties / message / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / operation_type / enumPrevious value: -[ - "start_chat", - "send_message", - "execute_plan", - "steer_turn" -]New value: +[ + "start_chat", + "send_message", + "execute_plan", + "steer_turn", + "fork_thread" +] - added
Input schema / properties / output_schemaAdded value: +{ + "additionalProperties": true, + "default": null, + "description": "Optional JSON Schema passed to app-server outputSchema for this turn final assistant message.", + "type": [ + "object", + "null" + ] +} - added
Input schema / properties / source_thread_idAdded value: +{ + "default": null, + "description": "Required for operation_type='fork_thread'. Source thread to fork from.", + "type": [ + "string", + "null" + ] +} - changed
Input schema / requiredPrevious value: -[ - "operation_type", - "message" -]New value: +[ + "operation_type" +]
- Added
codex_unarchive_thread
26 tool updates
v0.1.2- First observed
codex_analyze_issue - First observed
codex_answer_pending_interaction - First observed
codex_approve_plan - First observed
codex_collect_diagnostics - First observed
codex_execute_plan - First observed
codex_get_app_server_status - First observed
codex_get_chat - First observed
codex_get_chat_status - First observed
codex_get_diagnostic_logs - First observed
codex_get_operation_status - First observed
codex_get_runtime_capabilities - First observed
codex_get_turn_status - First observed
codex_get_workflow_status - First observed
codex_health_summary - First observed
codex_interrupt_turn - First observed
codex_list_active_chats - First observed
codex_list_pending_interactions - First observed
codex_list_project_chats - First observed
codex_list_projects - First observed
codex_repair_issue - First observed
codex_restart_app_server - First observed
codex_search_chats - First observed
codex_send_message - First observed
codex_start_chat - First observed
codex_start_plan_workflow - First observed
codex_submit_task
TDQS
Each tool has a clearly distinct purpose with detailed descriptions that specify when to use it and what to do next. Overlaps like codex_execute_plan vs codex_approve_plan are resolved by marking the former as a compatibility wrapper. No two tools perform the same action.
All tools follow the consistent pattern codex_<verb>_<noun> with lowercase and underscores. Verbs like get, list, start, submit are used uniformly, and there is no mixing of styles.
38 tools is high but each serves a distinct operation within the control plane domain, covering workflow lifecycle, diagnostics, chat, worker, and project management. A few redundancies exist for backward compatibility, but overall the count is justified by the breadth of functionality.
The tool surface covers the complete lifecycle: health checks, diagnostics, planning, execution, review, chat management, project discovery, and cleanup (archive/unarchive). Missing operations like deletion are not essential for a control plane, and the set provides no dead ends for common workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Reliable async execution for agent tool calls: schema gating, retries, idempotency, audit trail.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Workflow planning, recovery checkpoints, coordination, fixtures, and compatibility tools for agents.
Hosted runtime for persistent agent teams, durable workflows, memory, schedules, and goals.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to execute formal, stateful workflows with typed contracts, postcondition enforcement, and structured retry logic.1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables durable multi-agent workflow runs for Codex with a live terminal dashboard, restartable agents, and bug-finding templates, all controllable through natural language.91963MIT
- AlicenseNot gradedqualityFmaintenanceEnables heavy computation and data processing tasks in Claude Desktop, including complex SQL operations, large-scale data transformations, and resilient batch processing with automatic retry mechanisms.MIT
- AlicenseNot gradedqualityBmaintenanceEnables Codex to offload expensive code reading, editing, and checking to a worker agent via Claude Code, supporting async jobs and long-running tasks.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/aresyn/codex-control-plane-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server