codex-quota-guard-mcp
This server is a local MCP quota guard for Codex/ChatGPT that monitors quota, admits bounded work, and supports resumable checkpoints and deferred resume after quota resets.
quota_status: reads the current adaptive Codex quota snapshot; no input needed, returns action summaries and deadlines.job_preflight: validates costly boundaries (builds, tests, deploys, migrations, training, packaging) by job class, workspace, description, and optional estimated minutes.checkpoint_create: persists redacted, resumable checkpoints with objective, completed/pending work, git status, test results, and resume notes.checkpoint_get: retrieves a specific checkpoint by ID or the latest checkpoint for a workspace/task.defer_until_reset: creates a checkpoint and prepares a same-task automation prompt to resume after the five-hour quota reset.Enforces security/lifecycle rules: requires authenticated ChatGPT session, uses local loopback core, leases, and bounded refresh.
Supports optional auto-reset handling via reset credits and follow-up reporting for qualified accounts.
Provides monitoring info, scheduling/resume behavior, and compatibility with Codex MCP task contexts.
Monitors and guards shared Codex/ChatGPT plan quota by reading app-server rate limits, learning job costs, and providing preflight, checkpoint, and defer decisions so concurrent Codex tasks can coordinate around five-hour resets.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@codex-quota-guard-mcpCheck the shared Codex quota before I start another long task."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Codex Quota Guard MCP 3.1.1
These docs describe 3.1.1. See changelog for Pro tier pacing and Spark support. Every update pushed to GitHub must increase the package version and synchronize the lockfile, runtime and current documentation.
If Guard is unavailable, report that quota is unverified and continue the user's work; repair Guard when requested and resume checks after recovery. A managed core automatically replaces a saved loopback port denied by the OS, preserving its identity and stored state. Occupied or unauthenticated endpoints are not replaced.
Windows VS Code tasks can now schedule quota resumes through the existing extension IPC owner. See IPC resume. Desktop heartbeat creation and attachment remain unchanged. IPC schedules persist across app closure but run only after the same task reconnects.
Desktop scheduler paths are runtime-only. Guard discovers current Desktop resources at core startup and revalidates on context binding. No saved server path or legacy server environment override is used. The host may provide current CODEX_ELECTRON_RESOURCES_PATH in memory; ambiguous discovery fails closed. Stable MCP capability and task context must pass before monitor availability.
defer_until_reset.earlyRecovery reports whether early wake is ready. If false, Codex must resolve the diagnostic and recheck before claiming early recovery; the original timed heartbeat can still be created. Existing defers without an original automation baseline are not automatically adopted: resume manually and create a new defer if still necessary. Reconnect Desktop once to load an updated Guard connector; scheduler rediscovery does not reinstall or stop the shared core.
Quota Guard is a local MCP server that reads the current Codex ChatGPT quota through the official codex app-server interface, admits bounded work segments, and stores redacted checkpoints for resume. It never creates a login, accepts an API key, or reads Codex authentication files.
quota_status and job_preflight return short action summaries by default (about 1 KB in normal cases). Use detail="full" for diagnostics or detail="compact" for deduplicated quota data. All modes use the same quota read and policy. See MCP API.
Security and lifecycle guarantees
Only the current stable
account.type === "chatgpt"session is supported. API-key, Bedrock, signed-out, external-token and unstable identities returnCHATGPT_LOGIN_REQUIRED; no quota percentage is read or cached for them.One authenticated
127.0.0.1core owns SQLite and quota refresh for a Codex profile. Every Codex task gets only a small stdio connector.Connectors register an in-memory lease at startup and renew it every 20 seconds, including while the host is idle. This lets pending recovery monitoring restart with Codex before any chat or tool call. A clean disconnect is observed immediately; a crashed connector expires after 60 seconds.
The core exits about five seconds after the last connector disappears and no request or scheduler dispatch is active. Pending defers do not keep it alive.
The five-minute early-recovery poll runs only when a connector is alive, a defer is waiting, and the current Codex task supplied a valid scheduler capability.
There is no Scheduled Task, service, daemon,
launchd,systemd,wscript, elevation request, Codex PID scan, browser login, or OAuth fallback.
Related MCP server: codex-mcp-swarm
Requirements
Node.js 22.13 or newer (Node 22 and 24 are CI-tested).
A current Codex installation signed in with ChatGPT.
PowerShell 7 (
pwsh) on Windows, used only to apply a private user DACL; elevation is not requested.
Windows 10/11 on physical hardware or in a VM is treated identically. Windows x64 uses x64 Node/Codex; Windows ARM64 uses native ARM64 binaries or Windows' own compatibility layer. The Guard never detects Parallels, VMware, UTM, or the macOS host.
Install
This project is not published to npm. Install it from its public GitHub checkout:
git clone https://github.com/valentine-89/codex-quota-guard-mcp.git
cd codex-quota-guard-mcp
npm ci
npm run check
node scripts/install.mjsAutomatic use of an already-banked Codex reset is opt-in. To record standing authorization in the local Guard policy, install with:
node scripts/install.mjs --enable-auto-resetThis never buys resets or usage credits. It only lets a compatible Codex agent act on a Guard recommendation when a valid banked reset is already reported. The default remains disabled.
The installer preserves unrelated config.toml content, creates a private local bearer and runtime settings, and registers the absolute Node executable with dist/connector.js. It does not start a persistent process. Restart or reconnect Codex after installation so it opens the new connector.
Guard configuration and state live inside the installed tool at data/core-<profile hash>/: guard.json holds policy (including automatic reset), runtime.json holds private connection settings, and state.sqlite holds quota cache, learning, checkpoints, defers and reset recommendations. Each Codex profile has its own directory. Only the MCP registration stays in Codex's config.toml. Keep the installation in a writable directory and retain data/ during future code updates; Git and npm packaging exclude it. Install/uninstall create no configuration backups.
For installations using the old external state directory, close Guard clients and run the old installation's node scripts/uninstall.mjs --purge before updating its code. Then install this release from the intended installation directory. This is a clean reinstall: old learning, checkpoints, defers, and reset records are deleted. There is no storage migration or fallback. Reapply --enable-auto-reset if desired. Review any previously scheduled Guard resume automations separately; deleting local state does not cancel them.
On a Windows machine that also uses WSL, run the installer with Windows Node from pwsh; both Windows and WSL tasks then use the Windows-hosted core and the same Windows profile. Native Linux and native macOS each use their own local Node, Codex login and state. See scheduler diagnostics for monitor.unavailableReason, capability requirements, and updating the saved server path. The early-recovery monitor accepts a verified Windows named pipe or POSIX Unix-domain socket when Codex supplies the scheduler capability. Do not share credential or state directories across hosts.
Uninstall
Remove only the MCP registration and stop an authenticated running managed core:
node scripts/uninstall.mjsAlso delete the validated Guard-owned private state directory:
node scripts/uninstall.mjs --purgeBoth modes preserve unrelated Codex configuration and create no removal backup. --purge can also finish cleanup after the registration or config file has already been removed, using only the current profile's standard managed directory. Redirected and unrecognized purge paths are rejected.
When asking Codex to uninstall, also have it review any Guard-owned resume automations, old data and configuration backups, and the installation folder. Those items require context and are not automatically deleted by this script. Close or disconnect existing Guard clients before removal.
MCP use
The public contract has eight tools:
quota_status: call near the beginning of long work withagentProtocol="auto-reset-v1".job_preflight: call with the same protocol marker and a stablejobIdbefore each substantial token-consuming segment.quota_profile,checkpoint_create,checkpoint_get,defer_until_reset,defer_automation_attach, andresume_preparesupport policy and controlled resume.Ordinary schedules call
resume_prepare(trigger="automation")withoutdeferId: quota is revalidated, no Guard wake is consumed/cancelled. Guard recovery schedules must supply the originaldeferId; invalid, early or replayed wakes still exit. Both paths must honoraction(continue,wait,exit) before preflight.Resume output uses only
action:continuepermits preflight,waitblocks work pending quota recovery,exitdiscards an invalid/early/consumed Guard wake. The oldcanResume,shouldExit, andcancellationBestEffortfields are removed without aliases. Empty metadata is omitted; non-emptyautomationIdsToCancelstill means best-effort cancellation of only those owned IDs. Quota is summarized; usequota_status(detail="full")for diagnostics. Update saved caller prompts to this contract.
Do not call the Guard before every shell command, small file read, or trivial edit. No tool accepts credentials, a force-refresh flag, or a model name.
Version 1 requires an auto-reset-aware agent. When enabled, quota_status.resetCredit.recommendation is emitted only for a fresh, known account with a valid banked reset, weekly remaining quota at or below Free/Go 5%, Plus 2%, or another recognized plan 1%, and a weekly reset more than 72 hours away. The agent calls the host consume_usage_reset tool with the exact returned idempotency key without asking again, then reports the exact result in quota_status.resetFollowup. Missing reset-credit data is treated as zero available resets. Cached recommendations are suppressed as soon as the configured reset horizon is reached.
After a definitive reset result, the Guard performs proof-bound rechecks after 3, 5, and 10 additional seconds. It verifies a changed weekly reset epoch or increased remaining percentage. If propagation is still not visible after 18 seconds, the epoch remains consumed and cannot produce another reset recommendation; later ordinary status calls continue bounded revalidation. Duplicate successful follow-ups preserve the consumed or verified state without restarting propagation checks; conflicting late outcomes are rejected.
Weekly-only pacing uses the weekly policy threshold as its reserve, not the five-hour reserve or a fixed percent conversion. With both 5h and weekly windows, each forecast uses its own reserve: the lane's adaptive reserve for 5h, and configured weeklyOnlyRemainingPercent for the weekly window. Forecasts are combined by time remaining, not by comparing raw percentages. Included weekly-only jobs may span periodic checks even at 4–10% remaining: check every five minutes above the caution band, every minute within it, or faster when forecast exhaustion is imminent. Pro pacing can extend these intervals when every reported window is healthy; five-hour constraints remain enforced. A detected account, plan (including Plus/Pro), or quota-mode change discards old pacing samples and forecasts, including when switching back; detection uses the next normal fresh quota read, never auth files or forced refresh. Checkpoints and owned wake records are not deleted by this pacing reset.
Ordinary quota refresh remains caller-driven. During active work, quota_status and job_preflight expose a checkAgainBy deadline: primary Pro x5/x20 work gets up to 10/20 minutes with a five-hour window or 30/60 minutes with only a weekly window when every window has at least 50% remaining and burn is low. At 20–49%, these Pro intervals halve. Other healthy weekly-only work gets up to five minutes; near-reserve or high-risk cases retain shorter checks. All Pro deadlines are capped by resets and half the forecast time to reserve. Absent an imminent reserve forecast, estimatedMinutes may exceed maxSegmentMinutes in every quota mode: a long job is allowed across periodic checks without a split/checkpoint warning solely due to duration. maxSegmentMinutes bounds unchecked work, not the entire job; revalidate at the deadline and continue the same job if admitted. Atomic operations still must fit the current admission. Group related small steps under one admission and avoid paired status/preflight calls. The shared refresh lease, backoff and forecast reserve limit still apply. With no request, no new background reader runs.
The installer automatically adds a marked Quota Guard instruction block to the active profile's global AGENTS.md (or non-empty AGENTS.override.md, which Codex prioritizes). This guides new tasks across all projects to discover and use Guard from the start, including preflight, checkpoint and resume. Personal instructions are preserved; repeated installation updates the same block. Uninstall removes only the marked block from both files. No backup files are retained. Run the installer again when upgrading or changing the global override file, then start a new task to load the guidance. Each separate CODEX_HOME needs its own installation. This is agent guidance, not a hard execution gate; explicit user and higher-priority/project instructions can change behavior.
Personalization contains only compact bootstrap rules; admission, freshness, lease, backoff and reset eligibility remain enforced by Guard code. Shared MCP instructions contain common action rules, with scheduling/reset details localized to the relevant tools rather than repeated for every tool. Regression tests cap the managed block and shared instructions to prevent prompt growth. The Codex AGENTS snippet is detailed reference documentation, not text to add alongside the installed block. Global precedence follows Codex documentation.
For a schedulable defer, the Guard returns a complete same-task one-shot automationRequest with the fixed Continue the work. prompt. Pass it unchanged to the host automation tool and attach only the returned ID; no automation inventory scan, scheduler-documentation lookup, or model-authored prompt is required.
The registered STDIO connector supports the stable MCP initialize/initialized lifecycle used by Codex by default. The authenticated loopback core also retains MCP 2026-07-28 support for internal clients. Connector startup ensures the core, binds inherited Desktop context when available, and registers a live-client lease. Discovery itself does not read quota. Background quota polling still requires pending recovery and a verified scheduler.
quota_status.monitor reports runtimeMode="shared-http", requiresLiveClientConnection=true, and lifecycleMode="codex-bound".
Verification has three distinct levels: a healthy authenticated /health response proves only that the shared core is running; a successful stable handshake and an eight-tool catalog in a fresh Codex thread prove that Desktop loaded the MCP; a Guard tool call recorded for that same thread proves that the agent used it. Do not infer the latter two from core health or an independent smoke test.
Verification
npm run check
npm run acceptance:install
npm audit
npm pack --dry-runThese portable checks run on Node 22/24 for Windows x64/ARM64, Ubuntu x64/ARM64, and macOS Intel/Apple Silicon in CI. npm run acceptance:live additionally verifies the currently installed registration and live quota on a signed-in host.
npm run acceptance:shared is a maintainer-only Windows desktop acceptance. It requires CODEX_HOME, the current real task ID in QUOTA_PROBE_TASK_ID, and an inherited desktop scheduler capability; it is not a portable installation check.
Release acceptance is recorded by guest OS. A Windows VM is simply a Windows acceptance result; there are no hypervisor-specific branches.
See architecture, security, monitor behavior, Windows and WSL, MCP API, and troubleshooting.
Active-work pacing
Quota checks follow the returned deadline during active work, independently of saved checkpoints. Both status and preflight use bounded shared freshness. Honor canStartSegment, validUntil and maxSegmentMinutes; long jobs may span multiple admissions. Save progress before expensive or detached GPU jobs. Idle GPU waiting is not active Codex work.
Forecasts use fresh quota samples and reset on account/plan/bucket changes, quota restoration, reset epochs, errors or long gaps. Healthy Pro primary windows permit longer admissions even at cold start; stale data cannot admit new work. These estimates are advisory and cannot interrupt a model generation. See MCP API for fields and limits.
Pro capacity is identified as prolite (x5) and pro (x20, four times x5). Reported percentages are never scaled. laneId=spark selects GPT-5.3-Codex-Spark for small work, independently of secondary (Luna reserve). Admission does not switch models or combine their quotas. Reuse admission until checkAgainBy; nextRefreshAt is cache eligibility, not a request to call again. See Pro and lightweight API rules.
Available Tools
5 toolscheckpoint_createA
Persist a redacted, resumable checkpoint in shared local state. Do not include credentials, full prompts, or full responses.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | Codex task/thread identifier when available. | |
| pending | Yes | ||
| lastTest | No | ||
| completed | Yes | ||
| gitStatus | No | ||
| objective | Yes | ||
| resumeNotes | No | ||
| workspaceRoot | Yes | Absolute workspace root path. | |
| pendingCommand | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Because no annotations are present, the description carries the full disclosure burden. It does add useful behavioral context: checkpoints must be redacted, must not include credentials/full prompts/full responses, and live in shared local state. However, it does not disclose side effects like overwriting an existing checkpoint, idempotency, or failure behavior, so disclosure is only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences that front-load the primary purpose before adding the security constraint. Every sentence earns its place, and there is no unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with nine parameters, no output schema, no annotations, and four required fields, this description leaves too much unstated: how to fill required parameters, whether the checkpoint is keyed or overwritten, and what the tool returns. It provides the core purpose and redaction guideline, but an agent would still need to infer or probe much of the contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 22% schema description coverage, the description is expected to compensate for undocumented parameters, but it names none of them. The redaction warning provides generic content guidance but does not clarify the meanings of objective, completed, pending, lastTest, gitStatus, resumeNotes, pendingCommand, or taskId beyond what their names imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'persist' with the resource 'checkpoint' and the destination 'shared local state', so it clearly states what the tool does. It also distinguishes the create/persist behavior from the sibling checkpoint_get by naming the action explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when an agent wants to save a resumable checkpoint, but it does not state when to choose this tool over the sibling tools or provide any exclusion criteria. There is no explicit mention of checkpoint_get for retrieval, so usage guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkpoint_getA
Read a specific checkpoint or the latest checkpoint for a workspace/task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | Codex task/thread identifier when available. | |
| checkpointId | No | ||
| workspaceRoot | Yes | Absolute workspace root path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It does convey that this is a read operation and that omitting checkpointId returns the latest checkpoint, which is useful behavioral information. However, it does not disclose return format, error behavior for missing checkpoints, or any permission/authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. The core action, resource, and key distinction are front-loaded and immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, the required parameter is present, and the main selection behavior is explained. There is no output schema, so a bit more detail on what the returned checkpoint contains would improve completeness, but it is not necessary for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by explaining that checkpointId is optional and that its absence means 'latest checkpoint.' It also ties workspaceRoot and taskId to the scoping of the read. The schema covers two parameter descriptions, but checkpointId itself has no description, so the tool description fills that gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Read') and resource ('checkpoint'), and differentiates the two access modes: a specific checkpoint or the latest checkpoint. This makes it obvious how it differs from sibling checkpoint_create even without naming it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: it is the tool to call when you need to retrieve a checkpoint for a workspace/task. It does not explicitly discuss when not to use it or compare with alternatives, but the sibling tools are not direct alternatives for this read operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
defer_until_resetB
Create a checkpoint and prepare a same-task Codex heartbeat automation prompt for the five-hour reset. The caller must create the automation.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | Codex task/thread identifier when available. | |
| pending | Yes | ||
| lastTest | No | ||
| completed | Yes | ||
| gitStatus | No | ||
| objective | Yes | ||
| resumeNotes | No | ||
| workspaceRoot | Yes | Absolute workspace root path. | |
| pendingCommand | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It does disclose key behavior: creating a checkpoint, preparing a prompt, and not creating the automation itself. Still, it omits side effects, prerequisites, persistence, or response behavior, so transparency is partial rather than complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences carry the full description with no filler. The main action is front-loaded, and the caller responsibility is stated separately and clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has nine parameters, no annotations, and no output schema, so the description must compensate. It explains the high-level purpose but not how to populate required inputs, what the prepared prompt should contain, what the tool returns, or what the five-hour reset workflow expects. This is not enough for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 22% (taskId and workspaceRoot have descriptions), yet the tool description names none of the nine parameters. Required fields like objective, completed, and pending are left for the agent to infer from context, which is insufficient for a tool with four required parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action — 'Create a checkpoint and prepare a same-task Codex heartbeat automation prompt' — and gives the context ('for the five-hour reset'). It is clear about the tool's role and distinct enough from sibling checkpoint_create by mentioning the automation prompt, though it never names the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for the five-hour reset' and 'The caller must create the automation' provide clear usage context and a caller responsibility. However, it does not explain when to choose this over checkpoint_create, checkpoint_get, or quota_status, leaving alternative selection mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_preflightB
Call before a costly boundary such as a long build, test, deploy, migration, training, or packaging job. Obey defer decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| jobClass | Yes | ||
| description | Yes | ||
| workspaceRoot | Yes | Absolute workspace root path. | |
| estimatedMinutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full behavioral burden. It discloses that the tool can produce defer decisions and that they should be obeyed. However, it does not state whether calling it is safe/read-only, whether it reserves resources, whether repeated calls are allowed, or what the actual response will look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight sentence with no filler, and the primary usage instruction is front-loaded. It is appropriately short, though it is terse enough to omit important behavioral and parameter context. Still, the structure is clean and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should explain what a preflight result looks like, what a 'defer decision' means, and how it relates to sibling tools like defer_until_reset or quota_status. None of that is present, so an agent is left without enough context to fully act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, with workspaceRoot documented. The description adds no guidance about jobClass choices, the purpose of the required description field, or why estimatedMinutes matters. The enum values 'small/medium/long' and numeric bounds give minimal hints, but the description fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the action context: call before costly boundaries such as builds, deploys, migrations, and training jobs. The phrase 'Obey defer decisions' signals that the tool returns a go/defer judgment, which distinguishes it from the sibling tools. It does not fully state what preflight checks or computes, but it is clear enough for an agent to know it is a job-approval gate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: call before long builds, tests, deploys, migrations, training, or packaging jobs. The examples give concrete triggers. It stops short of saying when not to call and does not explicitly name an alternative tool such as defer_until_reset, though 'obey defer decisions' implies that follow-up path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quota_statusA
Read the shared adaptive Codex quota snapshot. The server enforces cache TTL, lease, and backoff; callers cannot force refresh.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It meaningfully reveals that the server enforces cache TTL, lease, and backoff and that callers cannot force refresh. This goes beyond the empty schema and helps set expectations for callers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no wasted words. The key action and resource appear first, and the behavioral caveat follows directly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has zero parameters, no annotations, and no output schema, the description covers the core purpose and the most important runtime constraints. It doesn't state the return value format, but for a simple quota snapshot read this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the schema is already fully descriptive and there is nothing for the description to add. Baseline 4 applies as the tool has no parameter surface requiring explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Read') and a specific resource ('shared adaptive Codex quota snapshot'), clearly distinguishing this tool from the sibling tools, which involve preflight checks, checkpoints, and deferral. Its purpose is immediately obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a caller needs the current quota snapshot and clearly states that a forced refresh is not possible. It does not explicitly name alternatives or when-not conditions, but none of the sibling tools appear to overlap with quota status, so the guidance is adequate.
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.
5 tool updates
v0.1.0- First observed
checkpoint_create - First observed
checkpoint_get - First observed
defer_until_reset - First observed
job_preflight - First observed
quota_status
TDQS
Scored across 5 tools
Each tool targets a distinct action: reading quota status, preflight-gating expensive jobs, persisting checkpoints, reading checkpoints, and handling deferral. quota_status and job_preflight both relate to quota state, but their roles as snapshot reader versus execution gate are clear from the descriptions.
All names are lowercase snake_case and readable, but they mix conventions: quota_status and job_preflight are noun_noun, checkpoint_create and checkpoint_get are noun_verb, and defer_until_reset is a verb phrase. The inconsistency is noticeable but not chaotic.
Five tools is well-scoped for a quota-guard server. Each tool covers a necessary part of the workflow without redundancy, and the count feels appropriately minimal rather than padded.
The core lifecycle is covered: status checking, preflight gating, checkpoint persistence/retrieval, and deferral handling. Minor gaps like checkpoint deletion/update, listing checkpoints, or an explicit reset/release action are absent, but they are not essential to the server's stated purpose.
Maintenance
Related MCP Connectors
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Coordinate coding agents through MCP using existing AI plans, saved work, and independent checks.
Goal and task planning MCP for Codex and AI agents, with evidence-backed completion.
- AxisOAuthdev.useaxis
Coding agents from Claude Code, Cursor and Codex claim jobs and lock files on one shared board.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables Codex to orchestrate multi-agent coding by routing tasks to local Claude Code workers via CCSwitch, managing cost and model selection for planning, execution, and review.7MIT
- AlicenseAqualityDmaintenanceWraps OpenAI's Codex CLI with true parallel task execution, worktree isolation for conflict-free runs, and live monitoring of each task.638 PyPI17MIT
- AlicenseNot gradedqualityBmaintenanceA local, repository-scoped MCP coordination bridge that lets Claude Code and Codex work together in the same checkout via tasks, leases, and evidence-based completion, preventing conflicting edits and enabling bounded delegation.1MIT
- AlicenseAqualityCmaintenanceAdds guardrails around delegating tasks to OpenAI Codex, including quota preflight and handoffs, git worktree isolation, per-turn checkpoints and restore, read-only cross-reviews, and honest failure reporting.10MIT