Skip to main content
Glama
aresyn

Codex Control Plane MCP

by aresyn

Codex Control Plane MCP

English | Русский

CI PyPI Python License MCP

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 turnId

That 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 client_request_id

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-only for untrusted repositories;

  • use on-request approval when testing new workflows;

  • Plan Mode never runs with a read-only sandbox. If a caller requests read-only, MCP raises that turn to workspace-write and 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_id handling.

  • Active duplicate prompt detection.

  • SQLite leases and heartbeats for competing MCP processes.

  • Recovery after MCP restart during thread/start or turn/start.

  • Durable turn/steer for adding context to an active turn without creating a second turn.

  • Durable thread/fork for 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, with runtimePolicyAdjusted in status when MCP raises a read-only request.

  • 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, or workflowId.

  • 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-mcp

Or run directly:

uvx codex-control-plane-mcp

From 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 -q

MCP 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\Projects

Minimal 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-mcp

Or run it as a module:

py -m codex_control_plane_mcp.server

The 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_HOME and CODEX_MCP_STATE_DB;

  • OpenClaw gateway entries run with CODEX_MCP_EXECUTION_MODE=client;

  • one long-running codex-control-plane-mcp-worker process owns codex-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-worker

Safe observation mode, useful before switching a live gateway:

codex-control-plane-mcp-worker --observe

Concurrency 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=8

For 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_status

  • codex_get_queue_status

  • codex_get_concurrency_status

  • codex_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\Projects

The 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 doctor

The 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 / failed

Use 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 / interrupted

Use 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 thread

Use 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_exit

Archive 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.structured

output_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)
  -> finalReport

Plan 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.currentGoal

MCP 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_report

Or 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 + finalReport

Review 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_interaction

Start diagnostics with:

codex_get_runtime_capabilities
codex_health_summary
codex_collect_diagnostics
codex_analyze_issue
codex_repair_issue

Repair 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 compatibility stalenessSeconds field.

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 id and description;

  • 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_task

  • codex_get_operation_status

  • codex_start_plan_workflow

  • codex_start_review_workflow

  • codex_get_workflow_status

  • codex_approve_plan

  • codex_list_pending_interactions

  • codex_answer_pending_interaction

  • codex_interrupt_turn

  • codex_archive_thread

  • codex_unarchive_thread

  • codex_start_thread_compaction

  • codex_get_thread_compaction_status

  • codex_get_runtime_capabilities

  • codex_health_summary

  • codex_collect_diagnostics

  • codex_repair_issue

Compatibility and read tools:

  • codex_start_chat

  • codex_send_message

  • codex_execute_plan

  • codex_list_projects

  • codex_list_project_chats

  • codex_list_active_chats

  • codex_search_chats

  • codex_get_chat_status

  • codex_get_chat

  • codex_get_turn_status

  • codex_restart_app_server

  • codex_get_app_server_status

  • codex_get_diagnostic_logs

  • codex_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 to true.

  • 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 to read-only.

  • CODEX_MCP_DEFAULT_APPROVAL_POLICY: default write approval policy. Defaults to on-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 per codex_submit_task. Defaults to 10.

  • CODEX_MCP_MAX_IMAGE_INPUT_BYTES: max bytes for one local image input. Defaults to 20000000.

  • CODEX_MCP_TURN_STALL_TIMEOUT_SECONDS: inactivity threshold for stalled-turn reporting. Defaults to 900.

  • CODEX_MCP_STALLED_TURN_ACTION: stalled-turn policy. Defaults to diagnose_only.

  • CODEX_MCP_APPROVAL_RESPONSE_TIMEOUT_SECONDS: pending interaction timeout.

  • DEEPSEEK_ENV_PATH: optional .env file 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.server

See 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/start and turn/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 --check

Protocol-only MCP smoke:

python .\scripts\mcp_live_smoke.py --scenario protocol

Safe 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-report

Use 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 build

The 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-mcp

or:

uvx codex-control-plane-mcp

Contributing

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 tools
codex_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflow_idYes
candidate_turn_idYes
candidate_plan_hashYes
client_request_idNo
adoption_noteNo
message_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
problem_textNo
operation_idNo
workflow_idNo
thread_idNo
turn_idNo
action_idNo
command_idNo
since_minutesNo
include_evidenceNo
recordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
interaction_idYes
decisionNo
decision_payloadNo
answersNo
actionNo
contentNo
permissionsNo
scopeNoturn
strict_auto_reviewNo
raw_responseNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflow_idYes
client_request_idNoStable retry idempotency key for workflow approval/execution.
messageNoImplement the plan.
output_schemaNoOptional JSON Schema passed to app-server outputSchema for the execution turn final assistant message.
approval_policyNoon-request
sandboxNoread-only
timeout_secondsNo
first_message_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYes
project_idNo
timeout_secondsNo
refresh_catalogNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
operation_idNo
workflow_idNo
thread_idNo
turn_idNo
since_minutesNo
include_logsNo
log_limitNo
event_limitNo
include_timelineNo
timeline_limitNo
refresh_catalogNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflow_idNo
chat_idNo
project_idNo
client_request_idNo
messageNoImplement the plan.
output_schemaNoOptional JSON Schema passed to app-server outputSchema for the execution turn final assistant message.
forceNo
timeout_secondsNo
first_message_timeout_secondsNoDeprecated and ignored. Plan execution returns after turn/start; poll codex_get_workflow_status or codex_get_turn_status.
first_message_max_charsNo
approval_policyNoon-request
sandboxNoread-only

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNocompact
client_typeNo
include_examplesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_recent_eventsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
project_idNo
rangeNo
include_tool_callsNo
include_tool_outputsNo
include_command_outputsNo
include_reasoningNo
include_metadataNo
include_itemsNo
tail_max_messagesNo
tail_max_charsNo
force_refresh_summaryNo
response_budget_charsNo
formatNostructured

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
project_idNo
preview_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_locksNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoall
workflow_idNo
thread_idNo
turn_idNo
process_generationNo
since_minutesNo
severityNo
limitNo
max_line_charsNo
include_payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
operation_idYes
last_messagesNo
message_max_charsNo
progress_eventsNo
progress_max_charsNo
include_eventsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo
cwdNo
timeout_secondsNo
include_modelsNo
include_hooksNo
include_skillsNo
include_accountNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
action_idYes
include_eventsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
turn_idYes
thread_idNo
last_messagesNo
message_max_charsNo
progress_eventsNo
progress_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
command_idYes
include_resultNo
max_result_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_recent_commandsNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflow_idYes
last_messagesNo
message_max_charsNo
include_eventsNo
refresh_liveNoReserved explicit live refresh flag. Default polling is passive.
refresh_live_goalNoBest-effort live thread/goal sync. Defaults to false so frequent workflow polling stays passive and cannot create app-server requests.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
operation_idNo
workflow_idNo
thread_idNo
turn_idNo
action_idNo
command_idNo
since_minutesNo
stale_after_minutesNo
include_recent_errorsNo
max_recent_errorsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idNo
turn_idNo
operation_idNo
workflow_idNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNo
include_waiting_for_userNo
include_waiting_for_approvalNo
include_runningNo
active_window_minutesNo
include_evidenceNo
title_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idNo
turn_idNo
operation_idNo
workflow_idNo
statusNopending
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
include_archivedNo
limitNo
cursorNo
include_previewNo
title_max_charsNo
preview_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
compactNo
limitNo
refreshNo
include_private_detailsNo
rootsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNo
cwdNo
modelNo
sandboxNo
approval_policyNo
workflow_kindNoplan
live_probeNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
diagnosis_idNo
thread_idNo
turn_idNo
operation_idNo
workflow_idNo
client_request_idNo
reasonNo
sandboxNo
approval_policyNo
dry_runNo
forceNo
stale_after_minutesNo
older_than_daysNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_after_restartNo
timeout_secondsNo
forceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
match_modeNoauto
project_idNo
include_archivedNo
limitNo
cursorNo
include_snippetsNo
snippets_per_chatNo
snippet_max_charsNo
refresh_indexNo
index_time_budget_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
project_idNo
messageYes
modeNonormal
timeout_secondsNo
first_message_timeout_secondsNoDeprecated and ignored. This tool now returns immediately after turn/start; use codex_get_turn_status for messages.
first_message_max_charsNo
approval_policyNoon-request
collaboration_modeNo
sandboxNoread-only

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
messageYes
titleNo
cwdNo
modelNo
sandboxNoread-only
approval_policyNoon-request
collaboration_modeNo
timeout_secondsNo
first_message_timeout_secondsNoDeprecated and ignored. This tool now returns immediately after turn/start; use codex_get_turn_status for messages.
first_message_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
messageYes
titleNo
cwdNo
modelNo
sandboxNoread-only
approval_policyNoon-request
client_request_idNo
goalNoOptional explicit Codex thread goal objective mirrored through app-server thread/goal/set after the workflow thread exists.
goal_token_budgetNo
goal_completion_actionNoWhat MCP should do with its managed Codex thread goal after workflow completion.clear
goal_completion_objectiveNoOptional objective used when goal_completion_action is set_complete.
timeout_secondsNo
first_message_timeout_secondsNoDeprecated and ignored. Workflow start returns after turn/start; poll codex_get_workflow_status for plan readiness.
first_message_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idNo
project_idNo
cwdNo
target_typeYes
base_branchNo
commit_shaNo
commit_titleNo
instructionsNo
deliveryNo
client_request_idNo
modelNo
sandboxNoread-only
approval_policyNoon-request
timeout_secondsNo
first_message_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYes
project_idNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
operation_typeYes
client_request_idNoStable retry idempotency key. If omitted, MCP creates a new operation and relies on prompt deduplication to prevent active duplicate turns.
agent_idNoOptional orchestrator/agent id used by the central worker scheduler for per-agent limits.
resource_keysNoOptional write-scope keys. Disjoint keys allow parallel workspace-write/danger-full-access turns in the same project.
priorityNonormal
estimated_cost_classNonormal
thread_modeNoExplicit thread intent. Defaults to new_thread for start_chat and continue_thread for send_message/execute_plan.
dedup_policyNoControls prompt duplicate handling without changing client_request_id idempotency.
allow_historical_continuationNoOpt-in only. Allows fuzzy duplicate matching to continue a completed historical thread.
project_idNoProject 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_idNo
thread_idNoRequired for operation_type='steer_turn'. Target thread that owns the active turn.
source_thread_idNoRequired for operation_type='fork_thread'. Source thread to fork from.
expected_turn_idNoRequired for operation_type='steer_turn'. Active turn id precondition passed to Codex app-server.
workflow_idNo
messageNoRequired 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_itemsNoOptional image inputs appended to the text message for operation types that start a new turn. Supports image URL and localImage file path items only.
titleNo
cwdNo
modelNo
fork_configNo
ephemeralNo
output_schemaNoOptional JSON Schema passed to app-server outputSchema for this turn final assistant message.
collaboration_modeNo
approval_policyNoon-request
sandboxNoread-only
forceNo
timeout_secondsNo
first_message_max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYes
project_idNo
timeout_secondsNo
refresh_catalogNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
errorNo
agentGuidanceNo
agentGuidanceTextNo
recoveryAttemptStateNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 10 tool updatesv0.2.1
    • Changedcodex_analyze_issue3 fields changed
      • addedInput schema / properties / action_id
        Added value: +{
        +  "default": null,
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / command_id
        Added value: +{
        +  "default": null,
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / record
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
    • Addedcodex_get_agent_contract
    • Addedcodex_get_concurrency_status
    • Addedcodex_get_queue_status
    • Addedcodex_get_worker_command_status
    • Addedcodex_get_worker_status
    • Changedcodex_get_workflow_status2 fields changed
      • addedInput schema / properties / refresh_live
        Added value: +{
        +  "default": false,
        +  "description": "Reserved explicit live refresh flag. Default polling is passive.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / refresh_live_goal
        Added 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"
        +}
    • Changedcodex_health_summary2 fields changed
      • addedInput schema / properties / action_id
        Added value: +{
        +  "default": null,
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / command_id
        Added value: +{
        +  "default": null,
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedcodex_list_projects5 fields changed
      • addedInput schema / properties / compact
        Added value: +{
        +  "default": true,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / include_private_details
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 200,
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / refresh
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / roots
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedcodex_submit_task8 fields changed
      • addedInput schema / properties / agent_id
        Added value: +{
        +  "default": null,
        +  "description": "Optional orchestrator/agent id used by the central worker scheduler for per-agent limits.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / allow_historical_continuation
        Added value: +{
        +  "default": false,
        +  "description": "Opt-in only. Allows fuzzy duplicate matching to continue a completed historical thread.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / dedup_policy
        Added 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"
        +  ]
        +}
      • addedInput schema / properties / estimated_cost_class
        Added value: +{
        +  "default": "normal",
        +  "enum": [
        +    "light",
        +    "normal",
        +    "heavy"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / priority
        Added value: +{
        +  "default": "normal",
        +  "enum": [
        +    "low",
        +    "normal",
        +    "high"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / project_id / description
        Added 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."
      • addedInput schema / properties / resource_keys
        Added 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"
        +  ]
        +}
      • addedInput schema / properties / thread_mode
        Added 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"
        +  ]
        +}
  2. 33 tool updates
    • Addedcodex_adopt_workflow_plan
    • Changedcodex_analyze_issue3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_answer_pending_interaction3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_approve_plan3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_archive_thread3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_collect_diagnostics3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_execute_plan3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_get_app_server_status3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_get_chat3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_get_chat_status3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_get_diagnostic_logs3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_get_operation_status3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_get_runtime_capabilities3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_get_thread_compaction_status3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_get_turn_status3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_get_workflow_status3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_health_summary3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_interrupt_turn3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_list_active_chats3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_list_pending_interactions3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_list_project_chats3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_list_projects3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Addedcodex_preflight_project_run
    • Changedcodex_repair_issue8 fields changed
      • changedInput schema / properties / action / enum
        Previous 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"
        +]
      • addedInput schema / properties / approval_policy
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "never",
        +    "on-request",
        +    "on-failure",
        +    "untrusted",
        +    "ask_openclaw",
        +    null
        +  ],
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / client_request_id
        Added value: +{
        +  "default": null,
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / reason
        Added value: +{
        +  "default": null,
        +  "maxLength": 4000,
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / sandbox
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "read-only",
        +    "workspace-write",
        +    "danger-full-access",
        +    null
        +  ],
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_restart_app_server3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_search_chats3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_send_message3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_start_chat3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_start_plan_workflow3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_start_review_workflow3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_start_thread_compaction3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_submit_task3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcodex_unarchive_thread3 fields changed
      • addedOutput schema / properties / agentGuidance
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedOutput schema / properties / agentGuidanceText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / recoveryAttemptState
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
  3. 10 tool updatesv0.1.3
    • Changedcodex_approve_plan1 field changed
      • addedInput schema / properties / output_schema
        Added value: +{
        +  "additionalProperties": true,
        +  "default": null,
        +  "description": "Optional JSON Schema passed to app-server outputSchema for the execution turn final assistant message.",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Addedcodex_archive_thread
    • Changedcodex_execute_plan1 field changed
      • addedInput schema / properties / output_schema
        Added value: +{
        +  "additionalProperties": true,
        +  "default": null,
        +  "description": "Optional JSON Schema passed to app-server outputSchema for the execution turn final assistant message.",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedcodex_get_runtime_capabilities1 field changed
      • addedInput schema / properties / include_account
        Added value: +{
        +  "default": true,
        +  "type": "boolean"
        +}
    • Addedcodex_get_thread_compaction_status
    • Changedcodex_start_plan_workflow4 fields changed
      • addedInput schema / properties / goal
        Added 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"
        +  ]
        +}
      • addedInput schema / properties / goal_completion_action
        Added 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"
        +  ]
        +}
      • addedInput schema / properties / goal_completion_objective
        Added value: +{
        +  "default": null,
        +  "description": "Optional objective used when goal_completion_action is set_complete.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / goal_token_budget
        Added value: +{
        +  "default": null,
        +  "maximum": 10000000,
        +  "minimum": 1,
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
    • Addedcodex_start_review_workflow
    • Addedcodex_start_thread_compaction
    • Changedcodex_submit_task10 fields changed
      • addedInput schema / properties / ephemeral
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / fork_config
        Added value: +{
        +  "additionalProperties": true,
        +  "default": null,
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / input_items
        Added 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"
        +  ]
        +}
      • addedInput schema / properties / message / default
        Added value: +null
      • addedInput schema / properties / message / description
        Added 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."
      • changedInput schema / properties / message / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / properties / operation_type / enum
        Previous value: -[
        -  "start_chat",
        -  "send_message",
        -  "execute_plan",
        -  "steer_turn"
        -]New value: +[
        +  "start_chat",
        +  "send_message",
        +  "execute_plan",
        +  "steer_turn",
        +  "fork_thread"
        +]
      • addedInput schema / properties / output_schema
        Added value: +{
        +  "additionalProperties": true,
        +  "default": null,
        +  "description": "Optional JSON Schema passed to app-server outputSchema for this turn final assistant message.",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / source_thread_id
        Added value: +{
        +  "default": null,
        +  "description": "Required for operation_type='fork_thread'. Source thread to fork from.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedInput schema / required
        Previous value: -[
        -  "operation_type",
        -  "message"
        -]New value: +[
        +  "operation_type"
        +]
    • Addedcodex_unarchive_thread
  4. 26 tool updatesv0.1.2
    • First observedcodex_analyze_issue
    • First observedcodex_answer_pending_interaction
    • First observedcodex_approve_plan
    • First observedcodex_collect_diagnostics
    • First observedcodex_execute_plan
    • First observedcodex_get_app_server_status
    • First observedcodex_get_chat
    • First observedcodex_get_chat_status
    • First observedcodex_get_diagnostic_logs
    • First observedcodex_get_operation_status
    • First observedcodex_get_runtime_capabilities
    • First observedcodex_get_turn_status
    • First observedcodex_get_workflow_status
    • First observedcodex_health_summary
    • First observedcodex_interrupt_turn
    • First observedcodex_list_active_chats
    • First observedcodex_list_pending_interactions
    • First observedcodex_list_project_chats
    • First observedcodex_list_projects
    • First observedcodex_repair_issue
    • First observedcodex_restart_app_server
    • First observedcodex_search_chats
    • First observedcodex_send_message
    • First observedcodex_start_chat
    • First observedcodex_start_plan_workflow
    • First observedcodex_submit_task

TDQS

A3.7/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aresyn/codex-control-plane-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server