local-agent-mcp
Provides local Git integration, allowing agents to inspect repository status, view diffs, and create commits for explicitly listed files without pushing.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@local-agent-mcpRun the tests in my local project and fix any failures."
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.
Local Agent MCP
English · Permissions · Architecture
Let ChatGPT Pro work directly on your local computer
You assign tasks in ChatGPT, and it can call local MCP tools: read projects, modify files, run tests, check Git Diff, create Commits.
Complex tasks can be handed off to local Codex. ChatGPT continues to handle breaking down steps, checking progress, adding requirements, and final review.
ChatGPT Pro
→ Local Agent MCP
→ 本地文件 / 测试 / Git / CodexNo need to repeatedly copy code, and no need to route every task through Codex.
This is an unofficial community project. It is not an OpenAI product and does not represent OpenAI.
Related MCP server: chatgpt-codex-tools-mcp
Quick Start
Prerequisites
Prepare the following:
macOS or Linux
Python 3.11 or later
Git
OpenAI official
tunnel-clientA ChatGPT environment that supports custom MCP Apps
A Tunnel ID
A corresponding Tunnel Runtime Key
On macOS, you can install the basic tools first:
brew install uv tmux
brew install openai/tools/tunnel-clientOne sentence to hand it to AI
Send this sentence to an AI that can operate a local terminal:
Install https://github.com/ezra-y/local-agent-mcp on my computer, and follow the README to complete configuration, startup, and verification.
Manual installation: see Install to ChatGPT.
Highlights
Highlight | Description |
ChatGPT directly operates local projects | Common file, test, and Git operations are done by ChatGPT calling local tools directly. |
ChatGPT acts as the overall director | Simple tasks are completed directly; complex tasks can be handed off to local Codex. |
Agents can be extended further | Codex is the first Adapter; future Agents go into the same control layer. |
Task status is queryable | Workflow, Step, and Job are saved to local SQLite and remain viewable after restart. |
Prevents duplicate execution | The same |
Clear Git process | Check status and Diff first, then commit explicitly listed files; no automatic Push. |
Transparent permissions | Both Tools and Resources can return current permission information. |
28 Tools
Category | Tools | Purpose |
Permissions |
| View the current root directory, hard limits, and high-permission entry points. |
Files |
| List, read, create, overwrite, or partially modify text files. |
Commands & Tests |
| Run commands or tests, and view or stop background Jobs. |
Git |
| View status, view Diff, commit explicitly listed files; safe Commit disables Hooks and signing, and rejects Git Filters. |
Workflows |
| Create a Workflow, create a Step, start a Job, query overall status. |
One-shot read-only Codex |
| Have local Codex do a one-time read-only check. |
Codex Threads / Turns |
| Read old Threads, start, resume, supplement, stop, and check Codex Turns. |
Health check |
| View service status, active Job count, and Artifact capacity warnings. |
A direct delete_file Tool is not exposed. apply_patch also refuses to delete entire files.
git_commit disables repository Hooks and commit signing by default. When a clean / process Git Filter is detected, it refuses to commit to avoid structured Commits implicitly running repository programs. git_diff also disables external Diff and textconv.
Permissions Resource
In addition to the get_permissions Tool, the service also provides:
local-agent://permissionsThe content includes:
当前允许访问哪里
哪些目录和文件被禁止
读写是否开启
有没有直接删除工具
高权限入口有哪些get_permissions will continue to be kept for clients that do not yet display MCP Resources.
Permissions and Privilege Reduction
Default Scope
Structured file and Git tools can access the current user's Home by default:
$HOMEThis usually includes Desktop, Downloads, Documents, and other projects in personal directories.
Things Forbidden by Code
Structured file tools will refuse:
.ssh
.aws
.azure
.codex
.docker
.gnupg
.kube
.Trash
Library
.env 和 .env.*
常见凭据文件
.pem / .key / .p12 / .pfx 私钥文件
符号链接路径Additionally:
There is no direct file deletion Tool.
apply_patchcannot delete entire files.There is no Git Push Tool.
git_commitonly commits explicitly listed paths.
Narrowing the Structured Scope
Set before startup:
export LOCAL_AGENT_MCP_ROOT="$HOME/Projects"The old config name CODEX_MCP_ROOT remains compatible.
After that, these tools can only access $HOME/Projects:
list_files
read_file
write_file
apply_patch
git_status
git_diff
git_commitForeground startup example:
export LOCAL_AGENT_MCP_ROOT="$HOME/Projects"
./scripts/run_tunnel.shHigh-Permission Entry Points
Capability | Actual Scope |
| Will execute project code. Test code can create, modify, or delete files. |
| The invoked local program may access locations outside the structured root directory. |
Full Codex Turn | Can read/write, run commands, and access the network, and may also access locations outside the structured root directory. |
LOCAL_AGENT_MCP_ROOT is the hard boundary for structured file and Git tools, not a system sandbox for the entire process.
When repository Hooks, Git LFS, or other Filters are needed, commit manually, or use the high-permission run_command after explicitly checking the repository configuration.
v0.5.1 does not yet have per-Tool hide or disable configuration. For stronger isolation, use a separate system user, virtual machine, container, or maintain a version with trimmed Tools.
Full details: docs/permissions.md.
Install to ChatGPT
1. Download and test
git clone https://github.com/ezra-y/local-agent-mcp.git
cd local-agent-mcp
uv sync --locked --all-groups
uv run pytest -qLocal Codex lookup order:
The path specified by
CODEX_BIN.codexinPATH.The Codex built into the macOS ChatGPT App.
2. Save the Runtime Key
macOS:
./scripts/save_tunnel_key.shLinux:
export CONTROL_PLANE_API_KEY="<你的 Runtime Key>"3. Generate Tunnel configuration
export CONTROL_PLANE_TUNNEL_ID="tunnel_<32位小写十六进制>"
./scripts/configure_tunnel.shLocal configuration is saved at:
.runtime/profiles/4. Start the Tunnel
Foreground:
./scripts/run_tunnel.shBackground:
tmux new-session -d \
-s local-agent-mcp-tunnel \
-c "$PWD" \
./scripts/run_tunnel.shWait for the service to be ready:
for i in {1..30}; do
curl -fsS http://127.0.0.1:8741/readyz && break
sleep 1
doneOn success it returns:
readyLocal status page:
http://127.0.0.1:8741/ui5. Connect in ChatGPT
Open Settings → Apps.
Enable Developer Mode.
Create or connect the corresponding custom MCP App.
After the Tunnel starts, click Refresh / Scan tools.
Start a new chat and select
@Local Agent.
6. Verify
Send in a new chat:
@Local Agent
调用 get_permissions。
报告当前工具总数、版本和 allowed_root。Expected result for v0.5.1:
工具总数:28
版本:0.5.1
allowed_root:你的 Home,或你设置的 LOCAL_AGENT_MCP_ROOTIf the client supports Resources, try reading:
local-agent://permissionsRun Local stdio MCP Only
When not using the ChatGPT Tunnel:
./scripts/run_mcp.shYou can also install it as a global command:
uv tool install .
local-agent-mcpThe old command local-codex-mcp still works.
Daily Use
The project parameter in tools is usually a path relative to $HOME:
Documents/Codex/local-agent-mcp
Downloads/my-project
Desktop/example-projectAbsolute paths inside Home are also supported. project="." represents the entire structured root directory; with default settings, that is the entire Home.
A Common Task
@Local Agent
在 Downloads/my-project 修复登录失败问题。
检查相关代码和 Git 状态,完成修改、测试、Diff 和 Commit。Common flow:
get_permissions
→ git_status / list_files / read_file
→ write_file / apply_patch
→ run_tests
→ git_diff
→ git_commitFor complex tasks, you can add an explicit Workflow or local Codex.
How Workflows Run
Five Concepts
Concept | Meaning |
Workflow | The whole thing the user asks for. |
Step | A stable, explicit action within a Workflow. |
Job | One actual execution of a Step. |
Codex Thread | The chat and work context saved by Codex. |
Codex Turn | One round of work within a Thread. |
Execution Order
create_workflow
→ create_step
→ start_step
→ get_job / get_workflowcreate_step currently supports four execution types:
| Purpose |
| Run tests. |
| Run a local command in argument-array form. |
| Have Codex do a one-time read-only check. |
| Start a Codex Turn that keeps working. |
File reading and modification are still done directly by read_file, write_file, and apply_patch.
Example: Creating a Test Step
create_workflow(
project="Downloads/my-project",
title="验证登录修复"
)
→ workflow_idcreate_step(
workflow_id=workflow_id,
position=1,
name="运行测试",
executor_kind="tests",
spec={
"argv": ["uv", "run", "pytest", "-q"],
"cwd": ".",
"timeout_seconds": 900
},
write_scope="worktree"
)
→ step_idstart_step(
workflow_id=workflow_id,
step_id=step_id,
attempt=1
)
→ job_idget_job(job_id)
get_workflow(workflow_id)The execution identity is:
workflow_id + step_id + attemptStarting again with the same number returns the original Job and does not execute again. For an explicit rerun, use a new attempt, e.g. attempt=2.
Parallel Rules
同一个 Codex Thread:同一时间一个活动 Turn
同一个 Worktree:同一时间一个写入者
同一个仓库:不同 Worktree 可以并行Use steer_codex_turn to add requirements to an active Turn, and interrupt_codex_turn to stop it.
Local State and Logs
When running from source:
.runtime/state.sqlite3
.runtime/artifacts/<job_id>/The installed command uses by default:
$HOME/.local/state/local-agent-mcp/state.sqlite3Custom location:
export LOCAL_AGENT_MCP_STATE_PATH="/自定义位置/state.sqlite3"The old config name CODEX_WORKFLOW_STATE_PATH remains compatible. Existing old state databases will continue to be read.
Long logs are stored in Artifact files. SQLite saves the path, size, and SHA-256.
Artifacts are not deleted automatically. When the total recorded amount exceeds 1 GiB, ping returns a warning.
Updates
git pull
uv sync --locked --all-groups
uv run pytest -qThen restart the Tunnel and click Refresh / Scan tools in ChatGPT.
Project Structure
src/local_agent_mcp/
├── server.py MCP 入口与公共 Tool / Resource
├── adapters/ 本地 Agent Adapter;当前包含 Codex
├── workflow_*.py Workflow、Step、Job、锁和 SQLite
├── command_jobs.py 后台命令与测试
├── workspace_tools.py 文件读写与 Patch
└── git_tools.py Git 状态、Diff 和 Commit
tests/ 单元测试与集成测试
docs/ 权限和架构说明
scripts/ MCP 与 Tunnel 启动脚本Test files are kept in the repository. They are used to verify permission boundaries, cross-platform operation, packaging, and compatibility; the installed wheel only contains runtime code.
Development Checks
uv run pytest -q
uv run python scripts/check_public_release.py
zsh -n scripts/*.sh
uv buildThe main MCP entry point is src/local_agent_mcp/server.py. src/codex_bridge.py is kept as a compatibility alias for old imports and old startup methods.
Uninstall and Local Data
The uninstaller does not automatically delete SQLite, Artifacts, Tunnel profiles, or the source directory. Please check first and decide which data to keep.
License
MIT, see LICENSE.
⚠️ The default configuration opens fairly broad local permissions: ChatGPT can read and write most projects under the current user's Home, and can run tests, commands, and local Agents; only use this on computers, accounts, and projects you trust.
Available Tools
28 toolsapply_patchApply project patchBDestructive
Apply an authorized Begin Patch block transactionally.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | ||
| project | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds 'transactional' which implies atomicity, but it does not explain what gets destroyed, whether changes are reversible, or what authorization is required for the patch. Given the annotations cover the safety profile, a 3 is appropriate—some added context but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words. The verb is front-loaded, and the qualifier 'transactionally' is placed right after. Every word earns its place; it is concise without sacrificing the core meaning.
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 destructive, state‑modifying tool, the description omits essential context: what the patch applies to, what 'project' refers to, and what happens on failure. The output schema exists, so return values are covered, but the input semantics and operational expectations are incomplete. An agent would need to guess or consult external docs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must document parameters, but it does not explain 'project' at all. It vaguely implies that 'patch' contains a 'Begin Patch block' but does not define the format or relationship. With two required parameters and no explanation, an agent cannot infer correct usage from the description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (apply) and resource (Begin Patch block), with a qualifier ('transactionally') that adds precision. It distinguishes from siblings like write_file by referencing a specific patch format, so an agent can tell it apart without opening the schema.
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?
No guidance is provided on when to use this tool versus alternatives such as write_file or run_command. The description does not mention prerequisites, when not to use it, or which sibling to prefer. This is a clear gap for a tool that modifies project state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_codexAsk local CodexARead-only
Start a read-only local Codex job and return its job ID immediately.
The project is a path relative to the configured Codex root. The server rejects paths outside that root and always runs Codex in read-only mode. Use get_codex_job to retrieve the final result.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| attempt | No | ||
| project | No | . | |
| step_id | No | ||
| workflow_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral details beyond the annotations: 'always runs Codex in read-only mode' (redundant with readOnlyHint but reinforces) and 'server rejects paths outside that root' (security constraint). It also discloses that it returns immediately and that retrieval is separate, implying asynchronous behavior. This complements the annotations, which already cover read-only safety.
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 compact and well-structured: the first sentence states the core action immediately, followed by a second sentence clarifying constraints and the follow-up retrieval path. No redundant wording, and it front-loads the most important information first.
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 5 parameters and an output schema, but only 'project' is explained. The description omits guidance on 'attempt', 'step_id', and 'workflow_id', which could be crucial for workflow integration. While the return value is hinted (job ID) and the output schema likely covers it, input-side completeness is lacking for an agent to invoke correctly with intent.
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 schema description coverage at 0%, the description must compensate for parameter explanations. It only addresses 'project' ('The project is a path relative to the configured Codex root'). The other parameters (prompt, attempt, step_id, workflow_id) remain unexplained, limiting an agent's ability to set them correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Start a read-only local Codex job and return its job ID immediately.' It specifies a distinct verb, resource type, and return value. By pointing to get_codex_job for retrieval, it distinguishes its role from that sibling, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by noting the project path constraint and read-only mode, and explicitly directs to use get_codex_job to retrieve results. However, it does not explicitly contrast with other start-like siblings (e.g., start_codex_job or start_codex_turn), so an agent may not know when to prefer this tool over those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_codex_jobCancel local Codex jobBIdempotent
Cancel a local Codex job; force only releases unconfirmed state.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as mutating (readOnlyHint=false) and idempotent (idempotentHint=true). The description adds the nuance that 'force only releases unconfirmed state', which is a behavioral detail beyond annotations. However, it does not disclose what cancellation entails (e.g., termination of running processes) or the meaning of 'unconfirmed state'. Given the annotation coverage, this is adequate but not rich.
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, compact sentence that front-loads the main action and follows with the critical nuance about 'force'. Every word earns its place; there is zero redundancy or filler.
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 an output schema and annotations covering idempotency and mutation, so the description need not repeat those. However, it does not address potential consequences of cancellation (e.g., whether jobs are killed immediately) or the meaning of 'local' in contrast to remote jobs. For a cancellation operation, this is a moderate gap; an agent might benefit from more context about side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the 'force' parameter ('only releases unconfirmed state'), adding meaning beyond the boolean type. 'job_id' is self-explanatory from its name and context. However, the explanation of 'force' is terse and does not fully clarify when it should be set or what 'unconfirmed state' means, so it only partially compensates for the coverage 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 the action 'Cancel a local Codex job' with a specific resource (Codex job) and verb (cancel). It distinguishes from the more generic sibling 'cancel_job' by specifying 'local Codex'. However, it doesn't explicitly differentiate from other Codex-related cancellation tools, so it loses one point.
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?
No guidance is given on when to use this tool versus alternatives like 'cancel_job'. The description does not mention exclusions, prerequisites, or conditions that would select this tool over the generic cancellation tool. The agent is left to infer from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_jobCancel command jobCDestructiveIdempotent
Cancel a unified job; force only releases unconfirmed state.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description adds a small behavioral detail about force semantics. However, it does not explain the consequences of cancellation or what 'unconfirmed state' means, leaving significant ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and front-loaded with the primary verb and resource. There is no wasted text, but the brevity borders on under-specification rather than efficient communication.
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 appears to target a generic 'unified job' system, but the description does not clarify how it differs from codex-specific tools like cancel_codex_job. Given the simple schema and annotations, more context about the force parameter and the job lifecycle is expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for both parameters. It provides a partial explanation for 'force' (releasing unconfirmed state) but gives no information about 'job_id' or how to obtain it. The meaning is too vague to be actionable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('cancel') and a specific resource ('unified job'), which distinguishes it from sibling tools like cancel_codex_job. The term 'unified' is somewhat ambiguous without further context, but the core purpose is understandable.
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 'force only releases unconfirmed state' hints at when the force parameter should be used, but there is no guidance on when to use this tool versus alternatives such as cancel_codex_job. No explicit conditions or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_stepCreate workflow stepCIdempotent
Create an immutable executable Step inside one Workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| spec | Yes | ||
| position | Yes | ||
| workflow_id | Yes | ||
| write_scope | No | read_only | |
| executor_kind | Yes | ||
| worktree_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'immutable' and 'executable' beyond what annotations convey. It clarifies that the created step is immutable and executable, which is not evident from readOnlyHint=false or idempotentHint=true. This is valuable behavioral context not present in structured fields.
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, which is concise and front-loaded, but it is too terse to be useful. It omits critical parameters and usage context, so brevity comes at the expense of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested objects, output schema) and the absence of schema descriptions, this one-sentence description is severely incomplete. It lacks parameter explanations, usage guidance, and behavioral details beyond immutability, leaving agents to rely on trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides zero explanation of any of the 7 parameters (workflow_id, position, name, executor_kind, spec, write_scope, worktree_path). The enum values and nested spec object are entirely undocumented, leaving agents to guess at required semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Create') and a specific resource ('immutable executable Step inside one Workflow'), which distinguishes it from broader tools like 'create_workflow'. It doesn't contrast with sibling step-related tools (e.g., 'start_step') but the core purpose is unambiguous.
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?
No guidance is provided on when to use this tool versus alternatives like 'start_step' or 'create_workflow'. The description only states what it does, not when to invoke it or prerequisites like having an existing workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workflowCreate workflowB
Create a durable Workflow for a multi-Step task.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| project | Yes | ||
| metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the write nature is known. The description adds 'durable', hinting at persistence, which is additional context not in annotations. However, it does not disclose behavior like side effects, failure modes, or whether the workflow is immediately executable. It adds some value but not rich behavioral detail, consistent with the lower bar set by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately states the core purpose. There is zero redundancy or filler. It is front-loaded with the main action and scoping qualifier. Without the need for more length due to its minimalism, this is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks essential context. It does not explain what constitutes a 'multi-Step task', how the workflow relates to steps, whether the workflow is created in a draft state, or any preconditions like project existence. For a create operation with three parameters, the description is far from complete. An agent would struggle to know the full context without additional investigation.
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 0% schema description coverage, the description must compensate by explaining the meaning, constraints, or format of parameters. It does not mention any of title, project, or metadata. The schema provides only names and types, but the description adds nothing about their purpose, relationship, or potential values. This is a significant 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 the verb 'Create', the resource 'Workflow', and adds the qualifier 'durable for a multi-Step task'. This distinguishes it from sibling tools like create_step (which likely creates a single step) and get_workflow (which reads). It is specific and non-tautological.
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 usage for creating a multi-step workflow but provides no explicit guidance on when to choose this over alternatives, nor does it mention exclusions or prerequisites. It lacks any 'when not to use' or comparison to siblings like create_step or start_step. The single sentence leaves the selection logic entirely to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_codex_jobGet local Codex jobBRead-onlyIdempotent
Get the status and result of a local Codex job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not need to repeat those. It adds that the tool returns 'status and result', which is useful but not detailed. No additional behavioral traits (e.g., potential blocking, error cases, size of result) are disclosed, but given the annotations cover the safety profile, a 3 is appropriate.
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, focused sentence with no extraneous content. It front-loads the core purpose and does not waste tokens. This is an ideal level of conciseness for a simple read-only tool.
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 an output schema and annotations for safety, the description is mostly adequate. However, it omits any clarification of 'local' versus other job types, nor does it indicate that the job must have been started by start_codex_job. An agent might confuse it with get_job or get_codex_turn_status without explicit context. Thus, it is minimally complete but with noticeable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely for the parameter 'job_id'. It implies job_id identifies a local Codex job but provides no details on provenance (e.g., how to obtain it from start_codex_job), format, or validation. This minimal information is barely sufficient for an agent to understand what to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and a precise resource ('status and result of a local Codex job'), clarifying the tool's scope and distinguishing it from siblings like start_codex_job or cancel_codex_job. The qualifier 'local' also sets it apart from the more generic get_job, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention get_job, start_codex_job, or other codex-related tools, nor does it state conditions or exclusions. An agent must infer usage purely from the name, which is insufficient for selecting between overlapping tools like get_job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_codex_turn_statusGet local Codex turn statusARead-onlyIdempotent
Get status, items, and final agent message for one Codex turn.
| Name | Required | Description | Default |
|---|---|---|---|
| turn_id | Yes | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not need to restate safety. It adds the return contents (status, items, final agent message) which provides some behavioral context, but it does not disclose any edge cases or error behavior. With annotations covering safety, this is acceptable but not rich.
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, front-loaded sentence with no wasted words. It states exactly what the tool does and what it returns, making it easy to scan quickly.
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 simple read-only getter with an output schema present, the description is complete. It lists the key return elements and is consistent with the annotations. No additional information is needed for an agent to call this 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?
With 0% schema description coverage, the description must compensate for parameter explanation. It does not explicitly define thread_id or turn_id, but the phrase 'for one Codex turn' gives context that these IDs identify the turn. The parameter names are self-explanatory, providing baseline understanding, but no additional detail or format is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the specific resource: 'status, items, and final agent message for one Codex turn.' This distinguishes it from sibling tools like get_codex_job (which operates at the job level) and list_codex_threads (which lists threads). The scope is unambiguous.
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 usage when you need turn-level status, but it does not explicitly state when to use this tool versus alternatives like get_codex_job or read_codex_thread. No exclusions or conditions are provided, so an agent is left to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobGet command jobARead-onlyIdempotent
Get unified command, test, Codex, or Codex Turn job status.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds the scope of job types, which is useful, but it does not disclose behavior like error responses or what happens with invalid job IDs. Given the annotations, it is adequate but not rich.
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, front-loaded sentence with no filler. It immediately communicates the tool's purpose and scope. Every word earns its place.
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?
This is a simple read-only getter with one parameter and an output schema present (though not shown). The description covers the input scope and job types. The presence of an output schema means return format need not be described. The description is sufficient for an agent to call this tool correctly; only minor details like error behavior are absent, which are likely in the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, job_id, which is self-explanatory from its name. However, schema description coverage is 0%, and the description does not add any additional meaning or format details for the parameter. The parameter name is intuitive, so the description's silence is acceptable, but it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('job status'), and explicitly enumerates the job types it covers ('unified command, test, Codex, or Codex Turn'). This distinguishes it from siblings like get_codex_job and get_codex_turn_status, making it clear this is the general status endpoint.
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 does not provide any guidance on when to use this tool versus the more specific siblings (e.g., get_codex_job, get_codex_turn_status). It does not mention alternatives or exclusions, leaving the agent to infer that 'unified' implies general coverage. This is a clear gap for a tool with multiple similar siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_permissionsGet effective permissionsARead-onlyIdempotent
Return the effective root, hard boundaries, and tool-use policy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states what information is returned ('effective root, hard boundaries, and tool-use policy'), which adds specificity beyond the annotations. Since readOnlyHint=true and idempotentHint=true already signal that this is a safe, non-mutating operation, the description aligns with that and provides additional detail about the response. No additional behavioral context (e.g., side effects, authorization needs) is mentioned, but given the annotations cover the safety profile, this is acceptable.
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, compact sentence with no filler words. It directly names the key resources returned, and every word carries meaning. The structure is highly efficient and front-loaded with the core action. This meets the standard for a well-written, concise description.
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 that the tool has no parameters and an output schema is present (as indicated by the context signals), the description does not need to elaborate on return format or edge cases. The one-sentence description fully covers what the tool does. The read-only and idempotent annotations further ensure the agent knows it is safe to call at any time. Nothing essential is missing.
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 tool has zero parameters, so per the rubric the baseline is 4. The description does not need to clarify any parameter meanings. The schema coverage is 100%, and there are no parameters to document. The description adds value by explaining what the response will contain, which is relevant even without inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') and identifies the exact resources ('effective root', 'hard boundaries', 'tool-use policy'). It clearly distinguishes this tool from the many other tools in the sibling list, which are focused on code execution, workflow management, or file operations. An agent can immediately understand the purpose without needing to inspect the schema.
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 does not explicitly state when to use this tool versus alternatives, nor does it mention any context or exclusions. However, given the tool's obvious purpose as a read-only query for permissions, the usage is implied by the name and description. There are no competing sibling tools that appear to overlap in function, so the lack of explicit guidance is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflowGet workflowBRead-onlyIdempotent
Get a durable Workflow with its Steps and Job attempts.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not need to restate safety. It does add context by specifying that the workflow includes Steps and Job attempts, which clarifies the returned data. Since the description aligns with the annotations and provides a bit of extra behavioral detail, a 3 is appropriate.
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, clear sentence with no filler or repetition. It front-loads the core purpose and includes the key details (Steps, Job attempts) without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (single parameter), the presence of an output schema (so return values are covered there), and annotations that declare safety, the description is largely adequate. It adds value by specifying the composition of the workflow (Steps and Job attempts). The missing usage guidance is a gap, but for a straightforward getter this is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the only parameter, workflow_id. The description does not elaborate on the parameter beyond its existence. While the ID parameter is self-explanatory for a get-by-id tool, the description should ideally mention that the workflow_id identifies the target workflow. It does not add value beyond the schema's minimal 'Workflow Id' label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'durable Workflow with its Steps and Job attempts.' It identifies what the tool returns, which distinguishes it from sibling tools like get_job or get_codex_job that fetch different entities. However, it does not explicitly name alternatives, so it falls short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_job or get_codex_job. There is no mention of prerequisites, selection criteria, or exclusion conditions. The agent must infer usage solely from the tool name and resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_commitCreate Git commitBDestructive
Commit authorized paths without hooks, signing, filters, or pushing.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | ||
| message | Yes | ||
| project | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the commit skips hooks, signing, filters, and pushing, which adds context beyond the destructiveHint annotation. However, it does not explain what happens on success or failure, nor the meaning of 'authorized paths'. The description aligns with annotations (destructive=true) and adds some behavioral detail, but not enough to fully understand side effects or prerequisites.
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, concise sentence that front-loads the primary action and key qualifiers. There is no redundant information or filler, and it is easy to parse at a glance.
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 mutation tool with destructive behavior and three required parameters, the description is insufficient. It does not explain the meaning of 'authorized paths', the role of project and message, or what the output schema returns. The description leaves too much to inference, making it incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has three required parameters (paths, message, project) with zero descriptions, and schema coverage is 0%. The description does not explain what these parameters represent or how they are used. The only hint is 'authorized paths', which ambiguously refers to the paths parameter but leaves project and message undefined. This is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (commit) and resource (paths), and adds specific qualifiers ('without hooks, signing, filters, or pushing') that differentiate it from a generic git commit. However, it does not explicitly name an alternative tool like run_command, so the distinction is implicit rather than explicit.
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 a use case by mentioning the conditions under which the commit is performed (no hooks, etc.), but it does not explicitly state when to use this tool versus alternatives like run_command or git_status. It lacks clear when-to-use / 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.
git_diffGet Git diffARead-onlyIdempotent
Return a bounded workspace or staged diff and its stat.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| scope | No | workspace | |
| project | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent. The description adds useful context: 'bounded' suggests a limited scope, and 'and its stat' informs the user that both diff and stat are returned. No contradiction with annotations observed.
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?
A single sentence with zero filler. The key action and scope are front-loaded, making it immediately scannable. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the existing output schema, and safety annotations, the description covers the essential behavior. However, it does not mention that `project` is required or that `path` filters to a specific file, though these are evident from the schema. 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?
Schema description coverage is 0%, so the description must compensate. It mentions 'workspace or staged' which partially explains the `scope` parameter, but gives no detail on `path` or `project` beyond what the schema already shows. The compensation is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('return'), a clear resource ('diff'), and the scope ('workspace or staged'), which distinguishes it from siblings like git_status (status) and git_commit (committing). The purpose is unambiguous.
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 when to use it (when you need a diff) but provides no explicit guidance on when to choose this tool over alternatives like git_status. It lacks exclusions or naming of sibling tools for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_statusGet Git statusARead-onlyIdempotent
Return branch, HEAD, modified, staged, and untracked files.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, covering the safety profile. The description adds specific output fields (branch, HEAD, modified, staged, untracked), which is useful behavioral context beyond annotations. No contradictions and no side effects are mentioned, but read-only makes that unnecessary.
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?
Single sentence, front-loaded with the action 'Return' and immediately lists the returned data. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with an output schema, the description covers the return values but omits explanation of the required 'project' parameter. Given 0% schema coverage, this is a notable gap. No prerequisites or error conditions are mentioned, but these may not be critical for such a straightforward operation.
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 sole parameter 'project' has 0% schema description coverage. The description does not explain what 'project' should be (e.g., path, name, or repository identifier), leaving the agent to guess the argument format. With such low schema coverage, the description needed to compensate but did not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool returns branch, HEAD, modified, staged, and untracked files. This is a specific verb and resource list, distinguishing it from siblings like git_diff and git_commit. The content list provides unambiguous scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this over siblings like git_diff or git_commit. The description implies it's for checking repo state but doesn't state when not to use it or what conditions favor it. Given overlapping siblings, more direction would help the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interrupt_codex_turnInterrupt local Codex turnCDestructiveIdempotent
Interrupt an active local Codex turn.
| Name | Required | Description | Default |
|---|---|---|---|
| turn_id | Yes | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description adds no new behavioral context. It does not describe side effects (e.g., whether the turn is terminated, whether state is lost), authentication requirements, or what happens if the turn is not active. Since annotations are present, the bar is lower, but the description still adds zero value beyond the flags.
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, concise sentence: 'Interrupt an active local Codex turn.' It is front-loaded with the action and purpose, with no unnecessary words. While it is short, it is not verbose; it earns its place as a clear statement. A higher score would require more structured content, but for a simple tool, this is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool performs a destructive action and has only two parameters, the description is incomplete. It does not clarify what constitutes an 'active' turn, what the result of interruption is, or whether the operation is reversible. With an output schema present but not described, the agent lacks information on what to expect. The description should provide at least minimal context for safe 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 coverage is 0%, meaning the input schema provides no descriptions for thread_id or turn_id. The description does not mention either parameter or explain their purpose, so an agent must guess from the parameter names alone. This is insufficient for a destructive operation; the description should at least clarify that both parameters identify the specific turn.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Interrupt') and resource ('an active local Codex turn'), which is clear about the action's target. However, it does not explicitly differentiate from sibling tools like cancel_codex_job or steer_codex_turn, which could be ambiguous in a list of tools. The clarity is good but not exceptional.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention conditions for interrupting a turn, how it differs from cancel_codex_job, or any prerequisites. An agent has to infer usage entirely from the tool name and context signals, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_codex_threadsList local Codex threadsBRead-onlyIdempotent
List local Codex app-server threads, optionally filtered by project.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| project | No | ||
| archived | No | ||
| search_term | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows the operation is safe and repeatable. The description adds the useful context that it lists 'local' threads and supports filtering by project, which goes slightly beyond the annotations. However, it does not disclose pagination behavior (via cursor/limit) or the search/archived filters, missing opportunities to provide richer behavioral context. Since annotations cover the safety profile, a 3 is appropriate.
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 wasted words, and it front-loads the primary action ('List') before adding the optional filter. It is appropriately concise for a simple listing tool, though it could benefit from slightly more detail without becoming verbose. The structure is clear and efficient, earning a high but not perfect score.
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 five optional parameters, zero schema-level descriptions, and no output schema shown, the description is notably incomplete. It omits critical usage details such as pagination (cursor, limit), search functionality, and the 'archived' filter, which an agent would need to call the tool effectively. While the output schema may exist, the description itself fails to contextualize the tool's full capabilities, leaving significant gaps for an agent to discover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameter meaning. The only parameter mentioned is 'project', which is referred to as an optional filter. The other four parameters (limit, cursor, archived, search_term) are not explained at all, and their purposes (pagination, search, archival filtering) are left to the agent's inference from names. This is insufficient for a tool with five parameters, justifying a below-average score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List') and resource ('local Codex app-server threads'), which clearly distinguishes it from sibling tools like 'read_codex_thread' (which reads a single thread) and 'start_codex_turn' (which starts a turn). It also hints at a filter capability, reinforcing the listing scope. This is not a tautology and provides immediate clarity.
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 'optionally filtered by project' gives some usage context, implying that the tool can be used to list threads with an optional project filter. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. The usage guidance is implied but not fully articulated, so it only meets a minimal standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesList project filesARead-onlyIdempotent
List readable files in a project under the configured structured root.
Set include_all to true to include dependencies, runtime state, Git internals, and caches. Credential files and credential directories are always excluded. Paths are relative to the selected project.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | . | |
| include_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows it's safe and deterministic. The description adds valuable behavioral context: credential files/directories are always excluded, and paths are relative to the selected project. It also explains the effect of include_all. No contradictions with annotations; the additional details go beyond what the annotations provide, though they don't cover all edge cases (e.g., whether it follows symlinks).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The purpose is front-loaded, and the include_all behavior is explained in a compact sentence. Every word earns its place; it is concise and well-structured.
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 listing tool with a clear purpose, the description is complete. It covers the core behavior, parameter semantics, and constraints (credential exclusion, relative paths). The presence of an output schema likely details the return format, so the description doesn't need to. Nothing critical is missing for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters. It does: it explains include_all in detail ('includes dependencies, runtime state, Git internals, and caches') and clarifies that credential files are always excluded. For 'project', it notes 'Paths are relative to the selected project,' which gives context. This compensates well for the missing schema descriptions, though it could be more explicit about the project parameter's format (e.g., path vs. name).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List readable files in a project under the configured structured root.' This specific verb ('list') and resource ('files') with the context of 'project' distinguishes it from sibling tools like read_file (which reads content) and write_file (which writes). The mention of 'readable files' and exclusion of credentials further sharpens the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: for enumerating files in a project with an option to include all (dependencies, caches, etc.). It does not explicitly name alternatives or state when not to use it, but the context signals make it clear it's for listing, not reading or modifying. The lack of explicit exclusions is a minor gap, but the 'under the configured structured root' constraint adds some usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingCheck local MCP bridgeARead-onlyIdempotent
Return bridge process health without accessing project files.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering safety and idempotence. The description adds the behavioral detail that the tool does not access project files, which is useful context beyond annotations and aligns with the read-only nature. No contradictions.
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?
A single, concise sentence that front-loads the core action ('Return bridge process health') and immediately adds the key constraint ('without accessing project files'). No wasted words, perfectly sized for a zero-parameter health check.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters), the presence of an output schema, and rich annotations, the description is complete. It tells the agent exactly what to expect and the key limitation, leaving nothing essential missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description has no parameter burden. The baseline for no parameters is 4, and the description correctly avoids inventing any parameters. The output schema provides return structure, so no additional parameter semantics needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return'), a clear resource ('bridge process health'), and a distinguishing constraint ('without accessing project files'). It immediately tells the agent what the tool does and sets it apart from file-oriented siblings like list_files and read_file.
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 a health check but does not explicitly state when to use it versus alternatives or provide any context like 'use before other operations to verify connectivity.' The lack of explicit guidance leaves the agent to infer typical usage, which is acceptable but not exceptional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_codex_threadRead local Codex threadBRead-onlyIdempotent
Read thread metadata and a bounded, paginated page of turns.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| thread_id | Yes | ||
| turn_limit | No | ||
| include_turns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not need to repeat safety. It adds the useful detail of 'bounded, paginated page,' which informs the agent that not all turns are returned at once. It does not disclose auth requirements or error behavior, but the strong annotation base makes a 4 appropriate.
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?
A single, concise sentence that front-loads the action and scope with no fluff. However, it is too short to carry all necessary information, so it is concise but under-specified rather than optimally structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema that covers return values, the description is insufficient for an agent to call this correctly: no parameter semantics, no pagination mechanics, and no guidance on when to use it versus siblings. The agent would need to infer how to set cursor and turn_limit, and what include_turns does, making the description incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning no parameter descriptions exist in the schema. The description does not explain thread_id, cursor, turn_limit, or include_turns. The mention of 'bounded, paginated' hints at cursor and turn_limit but does not define their behavior, so the agent must guess parameter semantics—a significant 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 this tool reads thread metadata and a bounded, paginated page of turns. It distinguishes from list_codex_threads (which likely lists thread summaries) and get_codex_turn_status (which targets a single turn's status) by specifying the resource and scope. However, it does not explicitly name a sibling alternative, so it stops short of a perfect 5.
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 this tool is for reading thread content, but provides no explicit guidance on when to choose it over list_codex_threads, resume_codex_thread, or get_codex_turn_status. With many sibling tools, a clear 'use this when...' statement is absent, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileRead project fileARead-onlyIdempotent
Read one UTF-8 text file from a selected project.
Both the project and file path are constrained to the configured root. Common credential files and credential directories are excluded; Git files, dependencies, and runtime configuration are readable.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| project | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and idempotentHint=true. The description adds valuable behavioral context beyond these: path constraints to the root, exclusion of credential files, and types of files that are readable. This helps the agent understand both scope and limitations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, then providing constraints. Every sentence earns its place; there is no redundancy or filler. The structure is optimal for quick comprehension.
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 two simple parameters, an output schema, and annotations covering safety/idempotence, the description covers the essential context: what it reads, safety exclusions, and accessibility. It doesn't detail error behavior or return format, but the output schema exists, and these are minor for a read operation. The description is sufficiently complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for parameters, so the description must compensate. It does clarify that 'project' is the selected project and 'path' is the file path, and that both are constrained to the root. However, it does not specify whether the path is relative to the project root or absolute, nor does it give format examples. This is adequate but could be more explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Read one UTF-8 text file') and the resource ('from a selected project'). It adds specific constraints (root path, credential exclusions) that distinguish it from sibling tools like write_file, apply_patch, and list_files. The purpose is unambiguous and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: to read a UTF-8 text file within a project, with exclusions for credentials and permission for Git files, dependencies, and runtime config. It does not explicitly name alternatives, but the constraints imply when this tool is appropriate versus write/patch tools. The lack of explicit 'use instead of X' guidance prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_codex_threadResume local Codex threadADestructive
Load an existing local Codex thread with unattended full access.
This is a high-privilege entry point. Use it only after explicit user authorization under the permission policy returned by get_permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'unattended full access' phrasing adds behavioral context beyond the annotations — it signals that the tool runs autonomously without further user interaction and with broad capability. This complements annotations already declaring destructiveHint=true, readOnlyHint=false, and openWorldHint=true, and there is no contradiction between the description and the annotations. The high-privilege framing reinforces the mutating nature of the operation.
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 paragraphs with the primary action front-loaded in the first sentence. The second paragraph earns its place by stating the critical authorization precondition. No fluff or repetition of schema data. It could fold a brief parameter note in given the 0% schema coverage, but as written it is tight and hits the key points efficiently.
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?
An output schema exists (so return-value explanation is not required) and annotations are rich, but this is a high-privilege mutation entry point whose description omits operational context: what happens after the thread resumes (does it run to completion unattended? does it return a turn status, tying into start_codex_turn / get_codex_turn_status siblings?). The authorization precondition is covered, but the post-resume lifecycle that an agent needs to orchestrate follow-up calls is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining the two parameters (thread_id, project). It mentions neither. While the names are trivially inferable — thread_id is clearly the thread to resume and project the scoping context — the description does not clarify what 'project' scoping means, the expected format of thread_id, or defaults beyond the schema. The description fails to compensate for the missing schema-documented parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (Load/Resume), resource (existing local Codex thread), and mode ('unattended full access'). It is clear what the tool does. However, differentiation from siblings like read_codex_thread, list_codex_threads, and start_codex_turn is only implicit through the verb 'resume' — no sibling is named or contrasted, so the agent infers the distinction rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit, actionable precondition: 'Use it only after explicit user authorization under the permission policy returned by get_permissions.' This tells the agent when it is permitted to call the tool and what to check first. It lacks explicit when-not guidance against alternatives (e.g., when to use read_codex_thread for inspection instead), so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_commandRun project commandADestructive
Start an argv-based command job and return its ID immediately.
This is a high-privilege entry point. No shell is inserted, but the chosen executable can access paths outside the structured root. Use it only under the explicit policy returned by get_permissions. Use get_job for output and cancel_job to stop it.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | . | |
| argv | Yes | ||
| attempt | No | ||
| project | Yes | ||
| step_id | No | ||
| workflow_id | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds crucial behavioral context beyond the annotations. It warns about high privilege, explains that no shell is inserted, and notes the executable can access paths outside the structured root. It also conveys the asynchronous nature by mentioning it returns an ID immediately, which is complemented by the annotations' destructive hint and openWorldHint. There is no contradiction.
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 efficient and well-structured: the main action is stated in the first sentence, followed by a concise security warning and explicit pointer to related tools. Every sentence adds value and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the action, security context, and follow-up tools, and thanks to the output schema, return values are not required. However, with 7 parameters and zero schema descriptions, the lack of parameter explanations leaves a significant gap. An agent cannot confidently supply correct values for fields like step_id or workflow_id without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only hints at the meaning of 'argv' ('argv-based command job') but fails to explain other parameters such as project, cwd, timeout_seconds, step_id, workflow_id, and attempt. An agent would have to guess the purpose of several parameters without any guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Start an argv-based command job and return its ID immediately.' This is a specific verb and resource, and it distinguishes the tool from siblings like run_tests or codex jobs by focusing on argv-based command execution. The reference to 'No shell is inserted' further clarifies its nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use it only under the explicit policy returned by get_permissions.' It also names the follow-up tools, 'Use get_job for output and cancel_job to stop it,' providing clear guidance on the workflow. This effectively routes an agent to the correct sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_testsRun project testsADestructive
Start authorized project tests as a background job.
Test code can create files and execute project-controlled code.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | . | |
| argv | No | ||
| attempt | No | ||
| profile | No | pytest | |
| project | Yes | ||
| step_id | No | ||
| workflow_id | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds valuable context: tests can 'create files and execute project-controlled code,' and runs as a background job. This goes beyond the annotations by specifying what side effects to expect, and it is consistent with the destructive hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the core purpose, and the second adds a crucial behavioral caveat. Every word earns its place.
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 8 parameters, an output schema, and a background-job workflow, the description is too sparse. It does not explain how to track the job, interpret results, or handle failures. While the output schema may cover return structure, the description omits essential operational context (e.g., async behavior, retrieval via get_job), making it incomplete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility for parameter explanation. It mentions none of the eight parameters (project, cwd, argv, attempt, profile, etc.), leaving the agent to guess at their semantics and usage. Some names are self-explanatory, but this is insufficient given the tool's complexity.
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 'Start authorized project tests as a background job' clearly states the verb (start), the resource (project tests), and the mode (background job). It distinguishes this tool from generic command execution and other job-related siblings by focusing on tests specifically.
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?
No guidance is provided on when to use this tool versus alternatives like run_command or other job tools. The description does not mention any context, prerequisites, or exclusion criteria, leaving the agent to infer when running tests via this route is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_codex_jobStart local Codex jobCRead-only
Start a read-only Codex inspection job and return immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| attempt | No | ||
| project | No | . | |
| step_id | No | ||
| workflow_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description repeats 'read-only' but adds the valuable detail 'return immediately', implying asynchronous behavior. However, it does not disclose what the job does beyond 'inspection', how to track its progress, or any permissions needed. The description adds minimal context beyond the annotations, and no contradiction is present.
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, front-loaded sentence that mentions the core action and the immediate-return behavior. It is concise and efficient, though it could have included a bit more without becoming verbose. No wasted words, but it sacrifices depth for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, async job semantics, multiple related tools), the description is far too brief. It does not explain return value (despite an output schema existing), how to retrieve results, or how this job relates to workflows and steps. The presence of an output schema doesn't alleviate the need for usage context, and the description fails to make the tool understandable in the broader ecosystem.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation for any of the five parameters (prompt, attempt, project, step_id, workflow_id). The schema only offers bare type and default info, so the description carries no semantic weight. For a tool with several context-dependent parameters, this is a major 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 the verb 'start' and the resource 'read-only Codex inspection job', and adds the behavioral detail 'return immediately'. This is specific enough to distinguish from generic 'ask_codex' or 'start_codex_turn', though it does not explicitly name any sibling as an alternative. The phrase 'read-only inspection' hints at the tool's scope but doesn't fully differentiate it from other start-type tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus its siblings such as 'ask_codex', 'start_codex_turn', or 'start_step'. The description does not mention when not to use it, nor any prerequisites (e.g., needing a project or workflow context). The agent is left to infer usage from the name and vague 'inspection' wording, which is insufficient given the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_codex_turnStart local Codex turnADestructive
Start a persistent app-server turn and return its IDs immediately.
Omit thread_id to create a new local Codex thread. Poll with get_codex_turn_status; the turn continues after this MCP call returns. This is a high-privilege entry point and may access paths outside the structured tool root.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | ||
| effort | No | ||
| prompt | Yes | ||
| attempt | No | ||
| project | No | ||
| step_id | No | ||
| thread_id | No | ||
| workflow_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, openWorldHint), the description discloses important behavioral traits: the turn is persistent and runs asynchronously, and it is a high-privilege entry point that may access paths outside the structured root. This adds value over the structured metadata, making the agent aware of long-running side effects and security implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally well-structured: three sentences, with the primary action and return immediately stated first, followed by the crucial async behavior and security warning. Every sentence carries significant information without fluff, making it both concise and effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity — 8 parameters, async behavior, security implications, and an output schema — the description covers only the most essential points (async, polling, thread creation, privilege level). It omits guidance on the remaining parameters, error handling, and does not describe the return format beyond 'IDs'. While the output schema exists and might fill some gaps, the lack of parameter documentation makes the description incomplete for correct usage.
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 0% schema description coverage, the description is the only source of parameter meaning. It only explains thread_id ('Omit thread_id to create a new local Codex thread') and implicitly mentions polling. The other seven parameters (model, effort, attempt, project, step_id, workflow_id) are left entirely unexplained, forcing the agent to guess their purpose. This is insufficient for a tool with 8 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start a persistent app-server turn') and the immediate outcome ('return its IDs'). It distinguishes itself from job-based siblings by explicitly naming it a 'local Codex turn' and referencing persistent async behavior, though it does not directly compare to tools like start_codex_job. The core purpose is unambiguous.
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?
It provides concrete usage context: the turn is asynchronous and continues after the call returns, with an explicit instruction to poll via get_codex_turn_status. It also explains how to create a new thread vs. continue an existing one by omitting or providing thread_id. While it does not mention when not to use it or name explicit alternatives, the given guidance is actionable and sufficient for correct invocation in most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_stepStart workflow stepAIdempotent
Start one explicit Step attempt or return its existing Job.
| Name | Required | Description | Default |
|---|---|---|---|
| attempt | Yes | ||
| step_id | Yes | ||
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by explaining what idempotentHint means in practice: it either starts a new attempt or returns the existing Job. This clarifies the side-effect profile and aligns with the openWorldHint annotation, though it does not elaborate on external side effects or 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, compact sentence with no filler. It front-loads the core action and the alternative return value, making it highly efficient. No unnecessary words or clauses.
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 3 required parameters and zero schema descriptions, the description is severely incomplete. It does not explain the parameters, nor does it provide any guidance on when to choose this over siblings. Although an output schema exists, the missing parameter semantics and usage guidance leave the description inadequate for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of explaining parameters, but it does not mention workflow_id, step_id, or attempt at all. The schema only provides titles, which are insufficient. The description fails to add any meaning to the 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 uses a specific verb 'Start' and identifies the resource 'Step attempt', and adds the key behavior 'or return its existing Job'. This clearly distinguishes it from sibling tools like start_codex_job which deal with codex jobs, making the tool's purpose unambiguous.
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 when to use the tool (to start a step attempt or retrieve an existing job) but does not explicitly mention alternatives or state when not to use it. There is no exclusions or comparison against siblings, so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steer_codex_turnSteer local Codex turnBDestructive
Send additional instructions to an authorized active Codex turn.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| turn_id | Yes | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, covering the fact that this mutates and can be destructive. The description adds 'authorized' as a prerequisite but does not disclose side effects, reversibility, or interaction with the turn beyond adding instructions. It adds marginal value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the action verb ('Send') and immediately conveys the target. There is zero fluff; every word contributes to meaning.
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 three required parameters and zero schema descriptions, the description fails to explain parameter roles. It also does not clarify what 'authorized' means, how to identify a turn, or what happens after sending instructions. While an output schema exists (not shown), the missing parameter semantics and lack of usage context make this incomplete for an agent to call 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 does not explain any of the three parameters (thread_id, turn_id, prompt). With schema_description_coverage at 0%, the description was the only chance to clarify that thread_id identifies the conversation, turn_id identifies the specific turn, and prompt carries the additional instructions. It offers no such detail, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Send'), a resource ('Codex turn'), and the intent ('additional instructions'). It clearly differentiates from siblings like start_codex_turn (which initiates) and interrupt_codex_turn (which halts) by focusing on adding input to an existing active turn.
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 'to an authorized active Codex turn' implies it should only be used when a turn is already running and authorized, but it does not explicitly state when not to use it or mention alternative tools like start_codex_turn for new turns. Guidance is 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.
write_fileWrite project fileCDestructiveIdempotent
Create or replace one UTF-8 file after explicit user authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| project | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds the requirement of explicit user authorization and specifies UTF-8 encoding, providing context beyond the annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no redundancy, front-loading the core action. However, it is extremely terse, and the lack of parameter details might be a trade-off, but for conciseness it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and annotations, the description leaves out critical context: how the project parameter relates, whether directories are created, failure behavior, and how it compares to similar file-writing tools. A destructive operation with three undocumented parameters needs more detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It mentions none of the three parameters (project, path, content). The agent gets zero semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Create or replace one UTF-8 file') with a specific resource and scope. It is distinct from siblings like apply_patch, but it doesn't explicitly name or differentiate them, so it falls short of a 5.
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?
No guidance on when to use this tool versus alternatives such as apply_patch or run_command. The only usage note is 'after explicit user authorization', which is a safety precondition, not a tool-selection guideline.
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.
28 tool updates
v0.5.1- First observed
apply_patch - First observed
ask_codex - First observed
cancel_codex_job - First observed
cancel_job - First observed
create_step - First observed
create_workflow - First observed
get_codex_job - First observed
get_codex_turn_status - First observed
get_job - First observed
get_permissions - First observed
get_workflow - First observed
git_commit - First observed
git_diff - First observed
git_status - First observed
interrupt_codex_turn - First observed
list_codex_threads - First observed
list_files - First observed
ping - First observed
read_codex_thread - First observed
read_file - First observed
resume_codex_thread - First observed
run_command - First observed
run_tests - First observed
start_codex_job - First observed
start_codex_turn - First observed
start_step - First observed
steer_codex_turn - First observed
write_file
TDQS
Several tools have near-identical purposes: ask_codex and start_codex_job both start read-only Codex jobs, and get_codex_job/cancel_codex_job duplicate functionality already covered by the unified get_job/cancel_job. The distinction between Codex jobs, Codex turns, and workflows is also fuzzy, making selection error-prone.
Most tools follow verb_noun snake_case (e.g., list_files, cancel_job), but there are inconsistencies: 'ask_codex' uses an unconventional verb, 'ping' is a bare noun, and the mix of ask/start/steer/intrerupt for Codex operations lacks a clear pattern. Still, the majority are consistent enough to be readable.
With 28 tools, the surface is heavy, especially given the redundant job/turn management tools. Several tools could be merged or eliminated (e.g., ask_codex/start_codex_job, get_codex_job/get_job), suggesting the count is inflated beyond what the domain requires.
The surface covers core local agent operations well: file read/write/patch/list, git status/diff/commit, command and test execution, workflow management, and Codex interactions (jobs, turns, threads). Minor gaps exist (no delete file or git push), but the main workflows are supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Persistent cross-session memory shared by Codex, Claude Code, ChatGPT, and other AI agents.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Git-backed platform for skills, tools, and context for AI agents
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables ChatGPT to remotely orchestrate local Codex and Claude Code agents for file editing and command execution via a secure Cloudflare tunnel, bridging cloud AI planning with local execution.1MIT
- AlicenseNot gradedqualityAmaintenanceEnables ChatGPT to inspect and edit local projects through a secure MCP interface, offering workspace management, file operations, git integration, and safe command execution.4MIT
- AlicenseNot gradedqualityAmaintenanceBridges ChatGPT with local computer for controlled file and project management, featuring session-based collaboration and diff tracking.4Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables ChatGPT to securely control a local workstation via an MCP tunnel, exposing 44 tools for file/project editing, git, process supervision, browser automation, and Office document handling across macOS, Linux, and Windows.5MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ezra-y/local-agent-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server