codex-dobby-mcp
Enables Reddit browsing for research and brainstorming via the fetchaller-mcp integration.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@codex-dobby-mcpreview the latest pull request in the repo"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Codex Dobby MCP
A local stdio MCP server that lets Claude delegate scoped work to Codex with structured results, persistent artifacts, and guardrails around filesystem access, review fan-out, and reverse-engineering workflows.
It gives Claude a sharper tool surface than a raw shell handoff: planning stays read-only, builds stay scoped, reviews can require specialist subagents, and every run leaves behind inspectable logs and outputs. It's especially useful for long-running analysis, Ghidra sessions, and deeper code review passes.
Tools
Tool | Description |
| Break down a task and propose a scoped plan without editing files. |
| Investigate code, docs, and context in read-only mode and report findings. |
| Evaluate an idea, scope an MVP, and recommend whether it is worth building. |
| Implement a change, run focused verification, and report results. |
| Run existing repo validation commands (build, test, lint) and report the results. |
| Review code or changes directly for one selected agent, or fan out to one Codex subagent per selected review agent when multiple agents are selected. |
| Use reverse-engineering tooling and broader roots to investigate binaries. |
| Start any Dobby tool in the background and return immediately with a task id. |
| Fetch the status or final result for a background run by task id. |
| Block until one or more background runs finish (or a timeout elapses), then return the first result. |
| List recent runs for a repo so you can recover task ids and results after timeouts. |
Related MCP server: Codex Capability Bridge
Requirements
Python 3.12+
uvCodex CLI installed and authenticated
A git worktree for the target repo
Optional MCP dependencies
Some tools work best (or only work) when specific MCP servers are available in the parent environment:
researchandbrainstorm: fetchaller-mcp MCP server for web search, URL fetching, and Reddit browsing. Without it, these tools fall back to codebase-only analysis.reverse_engineer: ghidra-mcp bridge for binary analysis via Ghidra. Without it, reverse engineering is limited to whatever other tools are available in the sandbox.
Dobby auto-detects these integrations from the active Codex MCP config. If an integration is not installed or not configured for the run, Dobby does not try to use it: the worker prompt explicitly tells Codex not to call it and to continue with the best non-integration path available.
Install
Recommended local tool install:
uv tool install .
codex-dobby-mcpOne-off local execution without installing:
uvx --from . codex-dobby-mcpWhen this package is published to PyPI, replace . with codex-dobby-mcp.
Development checkout:
uv syncRun From Source Checkout
uv run codex-dobby-mcpEvery tool requires an explicit absolute repo_root. Dobby does not use MCP metadata or the server process's cwd as an implicit target: stdio clients do not reliably transmit their active workspace, and source-checkout launchers often run from Dobby's own repo. Requiring the root prevents a request from silently running against the Dobby checkout or another unrelated worktree.
Example launch with an installed tool:
{
"mcpServers": {
"codex-dobby": {
"command": "codex-dobby-mcp"
}
}
}Example launch from a source checkout:
{
"mcpServers": {
"codex-dobby": {
"command": "uv",
"args": ["--project", "/ABSOLUTE/PATH/TO/codex-dobby-mcp", "run", "codex-dobby-mcp"]
}
}
}Recommended Claude Code setup
If you use Dobby from Claude Code, add this to your CLAUDE.md so Claude delegates correctly:
## Delegating Work to Dobby (codex-dobby MCP)
Offload grunt work — build/test, code review, research, planning, implementation, brainstorming, reverse engineering — to the `codex-dobby` MCP tools instead of doing it inline. Saves tokens and context.
- Give focused prompts with a concrete outcome. One task per call — if you have multiple things to ask, make multiple Dobby calls (in parallel when independent) instead of bundling them into one vague prompt.
- Call `mcp__codex-dobby__*` directly. Never wrap them in a general-purpose Agent/Task subagent.
- Always pass the absolute path of the current repository as `repo_root` on every Dobby call, including `get_run`, `wait_run`, and `list_runs`.
- Don't lower `timeout_seconds` below the default. Err too long — a short timeout kills the run; a long one costs nothing because Dobby returns as soon as it's ready.
- For long work, start it with `mcp__codex-dobby__start_run` and then either block on `mcp__codex-dobby__wait_run` (parent sleeps in the tool call) or poll `mcp__codex-dobby__get_run` (parent keeps working). On Claude Code, `/loop` or `ScheduleWakeup` can schedule the polls for you so the parent is free between checks.
- To resume, continue, or check on a background run, call `wait_run`/`get_run` with its `task_id` — a Dobby run takes no further input once started, so to change course let it finish (or cancel) and `start_run` again.Requests
Every tool requires repo_root, the absolute path to the target git worktree. Worker tools also take prompt; their other common params are files, important_context, timeout_seconds, extra_roots, model, and reasoning_effort. Tool-specific: danger (build, reverse_engineer), agents (review).
review agents: generalist (default), security, performance, architecture, correctness, ux, regression. Pass multiple for multi-agent review.
start_run takes the same params as the target tool, plus required tool. If timeout_seconds is omitted, it defaults to that target tool's normal timeout. Non-empty agents are only accepted when tool is review; other tools reject them with a validation error.
get_run params: task_id, repo_root.
wait_run params: repo_root, optional task_id (single run), optional task_ids (list — first-to-finish wins), timeout_seconds (default 540s / 9 min, clamped to [1, 100_000] / ~27.8 hours — matching Claude Code's MCP_TOOL_TIMEOUT default of 100000000 ms). Omit both task_id and task_ids to wait on every currently-live run for the repo. Passing both is rejected; an empty task_ids list is rejected. On timeout returns a running lookup whose pending_task_ids lists the ids still outstanding, and whose summary instructs the caller to re-call wait_run with that list until one finishes. Pick timeout_seconds below your MCP client's own tools/call ceiling — Claude Code defaults to ~28 hours (so the full clamp is usable); Codex CLI defaults to 60s per [mcp_servers.<id>].tool_timeout_sec (so raise that in ~/.codex/config.toml before using long waits from Codex); Claude Desktop / Cursor / Cline / Continue vary and may cap low.
list_runs params: repo_root, optional limit.
For clients with a short tools/call ceiling (Claude Desktop ~60s, unconfigured Codex CLI 60s), prefer start_run + get_run/list_runs for long review, research, build, validate, or reverse_engineer work. Where the ceiling is raised (Claude Code defaults to ~28h, Codex CLI with tool_timeout_sec overridden), start_run + wait_run is usually fewer round-trips than polling.
Defaults
Default model is gpt-5.6-sol for all tools and review subagents. Any explicit timeout_seconds must be at least 300s.
Tool | Timeout | Reasoning | Sandbox |
| 600s | high | read-only |
| 1200s | medium | read-only |
| 600s | high | read-only |
| 600s default, 1200s recommended for multi-agent | medium | read-only |
| 600s | medium | workspace-write via |
| 1200s | high | workspace-write via |
| 1800s | high | workspace-write via |
build and reverse_engineer switch to danger-full-access when danger=true.
start_run, get_run, and list_runs are control-plane tools and return immediately. start_run uses the selected target tool's timeout budget. wait_run is also a control-plane tool, but it intentionally blocks up to its own timeout_seconds (capped at 100_000s / ~27.8h, matching Claude Code's MCP_TOOL_TIMEOUT default) waiting for a background run to finish.
Behavior
Child Codex runs inherit the parent's environment, but Dobby seeds a private per-run
CODEX_HOMEunder the system temp directory (.../codex-dobby/<task-id>/codex-home) instead of pointing children at the user's global Codex home directly.researchprefers codebase evidence and uses fetchaller MCP tools when available. If fetchaller is not installed or not configured for the run, the worker is told not to call it and to continue without web MCP support.validateruns in workspace-write--full-autobecause validation often needs temp or cache writes; the worker prompt still forbids source edits and commits.reviewuses a direct single-lens path for one agent, or multi-agent orchestration (viaspawn_agentovercodex exec --json) for multiple. Single-agent review defaults togpt-5.6-solatmediumreasoning. Multi-agent review uses agpt-5.6-solparent atmediumreasoning and injectsgpt-5.6-solreviewer subagents, also atmediumby default.reverse_engineerincludes a Ghidra MCP workflow only when Ghidra is installed and configured for the run. When Dobby can discover Ghidra from the active Codex configs (CODEX_HOME/config.tomland repo-local.codex/config.toml), it adds the configured Ghidra MCP helper repo as a writable helper root. When a live Ghidra UDS socket runtime directory is discoverable, Dobby also mounts that runtime path so child reverse-engineering workers can reach the already-running Ghidra instance. In that live-UDS case, Dobby enables workspace-write network access and passes the discovered socket roots throughnetwork.allow_unix_socketsfor the child Codex run. If Ghidra is not installed or not configured, the worker is told not to callmcp__ghidra__*.reverse_engineerresponses includereverse_engineer_details.ghidra, which reports whether Ghidra was configured, whether the run used direct MCP calls or the mounted helper fallback, and which Ghidra calls were observed.start_runlaunches the selected Dobby tool in the server process and returns atask_idimmediately.get_runfirst checks any still-live in-memory run, then falls back to the run artifacts on disk.wait_runawaits the same live in-memory task viaasyncio.wait_forwithasyncio.shield, so if the caller is cancelled (client disconnect, outer MCP timeout) the underlying background run keeps going and can still be recovered withget_run/wait_run. If the task isn't in the live registry — e.g. the server restarted —wait_runfalls through to the on-disk artifact lookup without polling.Multi-task
wait_run(task_ids=[...]or no ids → all-live) usesasyncio.wait(..., return_when=FIRST_COMPLETED)over shielded futures and returns the first run to finish. The response'spending_task_idslists the still-outstanding ids; callers should re-callwait_run(task_ids=pending_task_ids)until it's empty. On timeout the primary entry is the first id in the input list;pending_task_idsholds every id still waiting.Result artifacts are replaced atomically, so
get_runsees either the startup placeholder or the final persisted response instead of a partially writtenresult.json.Synchronous worker tool calls (
review,research, etc.) can still hit the caller's outertools/callceiling. Preferstart_run+wait_run/get_runwhen that's a concern.
Filesystem and Safety
Read-only tools run in Codex
read-only. Dobby still mounts the per-run artifact directory plus any in-repoextra_roots;extra_rootsoutside the repo are exposed as additional read-only roots, not writable roots.Mutating tools run in workspace-write and mount
extra_rootswritable via--add-dir.Mutating tools also ensure
.codex-dobby/is present in.gitignore. Unsafe.gitignoretargets, such as symlinks or multiply-linked files, fail closed.External worktree mutations during a read-only run (you editing files in another terminal, another process touching the repo) are surfaced as a warning, not an error. Codex's OS-level read-only sandbox blocks codex itself from writing, so detected changes are by definition external. The run still escalates to
stop_reason: sandbox_violationonly when the worker self-reports having modified files that the wrapper also observed.Child Codex runs no longer need write access to the parent
~/.codex/sessions. Dobby seeds the child home fromCODEX_HOME/auth.jsonandCODEX_HOME/config.tomlwhen those files exist, mirrors referenced helper files fromCODEX_HOMEandCLAUDE_CONFIG_DIRinto a private runtime, then points the child at that private temp home. The server process therefore needs read access to the parent Codex and Claude config files plus read/write access to the temp runtime directory.CODEX_DOBBY_ACTIVE=1is set on child runs and Dobby refuses to run if already set. Inheritedcodex-dobby-mcpentries are disabled so workers can't call back.Commits are forbidden. A mutating worker that creates or moves a commit returns
status: "error".Artifact access fails closed on invalid
task_idvalues and symlinked artifact roots or paths. Wrapper writes also fail closed on unsafe.gitignoretargets.
Artifacts
Each run writes to <target-root>/.codex-dobby/runs/<task-id>/: request.json, prompt.txt, stdout.log, stderr.log, last_message.txt, result.json, output-schema.json, events.jsonl. Multi-agent review logs are also JSONL inside stdout.log. events.jsonl is the durable record of streaming progress events for the run (one ACP-shaped event per line; see Streaming progress below). Treat .codex-dobby/ as unredacted local logs.
Worker-facing tools (plan, research, brainstorm, build, validate, review, reverse_engineer) return task_id, tool, status, summary, completeness, important_facts, next_steps, files_changed (this run only), file_diffs (mutating tools only — see File diffs), artifact_paths, sandbox_violations, repo_root, exit_code, duration_ms, warnings, raw_output_available, model, reasoning_effort, result_state, and stop_reason (see Stop reasons). review responses also include review_details, where requested_review_agents is the raw caller-supplied list and effective_review_agents is the normalized/defaulted list Dobby actually used. reverse_engineer responses also include reverse_engineer_details.ghidra, with mode, summary, and the observed mcp_calls and helper_calls.
Streaming progress
Every run writes ACP-shaped events to <run-dir>/events.jsonl, regardless of whether anyone is listening. When the MCP caller passes a progressToken in the tools/call _meta, Dobby also forwards each event live as an MCP notifications/progress. The numeric progress field is an event counter, message is a short human-readable label (the tool title or event type), and the structured event lives in _meta.acpEvent for clients that want it. Clients that don't pass a token receive nothing — runs continue normally.
Event vocabulary borrows ACP's session/update payload shapes: agent_message_chunk for streamed model text, tool_call / tool_call_update for tool invocations (with kind ∈ read|edit|delete|move|search|execute|think|fetch|other), and plan for worker outlines. The codex --json event types we map (and ignore) are documented in src/codex_dobby_mcp/events.py.
For background runs (start_run + wait_run), live events are forwarded only to whichever wait_run caller is currently subscribed. The full history stays available in events.jsonl regardless.
Stop reasons
Each ToolResponse carries a stop_reason that classifies why the run ended. The first five values mirror ACP's StopReason enum verbatim:
end_turn— model finished naturally (the typical success case)max_tokens— reserved; defined for a future ACP bridge but not currently emitted (codex surfaces no token-budget signal the runner maps)max_turn_requests— reserved; defined but not currently emittedrefusal— worker explicitly refused the task (worker output setrefused: true)cancelled— Dobby was cancelled or killed before completion
Plus four Dobby-specific extensions for failure modes ACP doesn't model:
timeout— run hittimeout_secondsstall— codex went idle for too long and Dobby killed itsandbox_violation— read-only tool tried to write, mutating tool tried to commiterror— codex exited non-zero or returned malformed output
Legacy run artifacts written before this field existed are still readable; stop_reason is optional on RunLookupResponse.
File diffs
Mutating tools (build, validate, reverse_engineer) populate a file_diffs: list[FileDiff] field with one entry per changed file:
{
"path": "/abs/repo/src/foo.py",
"oldText": "...", // null for new files
"newText": "...", // null for deleted files
"truncated": false // true for files Dobby couldn't represent as text
}Field names use ACP's camelCase shape (oldText/newText) on the wire, in result.json, and in events.jsonl. The Pydantic model uses Pythonic snake_case fields internally with camelCase aliases, and every serialization path passes by_alias=True so on-disk and on-the-wire shapes match. Worker JSON also uses camelCase (the oldText/newText schema is enforced).
Files larger than 2 MB or that look binary are reported with truncated: true and both texts left as null. Files outside the repo root are not diffed. The wrapper detects diffs from snapshot deltas; workers may also attach file_diffs in their structured output, which Dobby uses to fill in gaps the wrapper couldn't capture (e.g. a stashed snippet of a very large file).
Read-only tools always have file_diffs: [].
Async control tool return shapes
start_runreturns anAsyncRunHandlewithtask_id,tool,state,summary,repo_root,artifact_paths,model, andreasoning_effortget_runreturns aRunLookupResponsewithtask_id,state,summary,repo_root, optionaltool, optionalstatus, optionalresult_state, optionalstop_reason, optional finalresult, artifact metadata, and warningswait_runreturns the sameRunLookupResponseshape asget_runplus an optionalpending_task_idslist (populated whenever the caller passedtask_idsor used the all-live mode). On timeoutstateisrunningandresultis unset, on completionstateisfinishedwith the finalresultpopulatedlist_runsreturns the resolvedrepo_rootplus recent run summaries for that repo
Async Runs
If your MCP client gives up on long blocking tool calls before Dobby finishes, use the async path:
{
"tool": "start_run",
"arguments": {
"tool": "review",
"prompt": "Review the current uncommitted state",
"repo_root": "/ABSOLUTE/PATH/TO/TARGET-REPO",
"files": ["src/foo.ts", "ui/main.ts"]
}
}This returns quickly with a task_id. Then poll or recover the result:
{
"tool": "get_run",
"arguments": {
"task_id": "<task-id>",
"repo_root": "/ABSOLUTE/PATH/TO/TARGET-REPO"
}
}If you lost the id because a previous blocking call timed out, list_runs reads .codex-dobby/runs/ and shows recent task ids and summaries.
If you'd rather block than poll, call wait_run:
{
"tool": "wait_run",
"arguments": {
"task_id": "<task-id>",
"repo_root": "/ABSOLUTE/PATH/TO/TARGET-REPO"
}
}To be woken by whichever of several runs finishes first, pass task_ids instead:
{
"tool": "wait_run",
"arguments": {
"task_ids": ["<task-id-1>", "<task-id-2>", "<task-id-3>"],
"repo_root": "/ABSOLUTE/PATH/TO/TARGET-REPO"
}
}Omit both task_id and task_ids to wait on every currently-live run for the repo. On completion / timeout semantics, see the wait_run params in Requests — the short version: the response's pending_task_ids tells you what to re-call wait_run with.
States reported by get_run and wait_run:
running: the server still has the run alive in memoryfinished: a finalToolResponseis available andresult_stateisfinalunknown: the run directory exists but no readable final result is available; ifresult_stateisplaceholder, only the startup placeholder artifact was writtennot_found: there is no matching run directory, or the suppliedtask_idis invalid
Important limitation: live background tracking is in-process. If the server restarts, running background work is lost. Completed results remain recoverable from .codex-dobby/runs/.
Development
uv run pytest
uv build --offline --no-build-isolation
uv run mcp dev src/codex_dobby_mcp/server.py:app
uv run python -m codex_dobby_mcpAvailable Tools
11 toolsbrainstormC
Evaluate an idea, scope an MVP, and recommend whether it is worth building. Recommended timeout: 10 minutes (600s).
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | ||
| model | No | ||
| prompt | Yes | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. | |
| extra_roots | No | ||
| timeout_seconds | No | ||
| reasoning_effort | No | ||
| important_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | |
| model | Yes | |
| status | Yes | |
| summary | Yes | |
| task_id | Yes | |
| warnings | No | |
| exit_code | No | |
| repo_root | Yes | |
| file_diffs | No | |
| next_steps | No | |
| duration_ms | No | |
| stop_reason | No | |
| completeness | Yes | |
| result_state | No | |
| files_changed | No | |
| artifact_paths | Yes | |
| review_details | No | |
| important_facts | No | |
| reasoning_effort | Yes | |
| sandbox_violations | No | |
| raw_output_available | No | |
| reverse_engineer_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral traits. It only mentions a recommended timeout, lacking information on side effects, authorization needs, rate limits, or internal operations (e.g., external API calls). Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (two sentences) and front-loaded with the primary purpose. However, it could include essential parameter hints without becoming verbose, so it slightly underperforms on completeness for the conciseness trade-off.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 8 parameters and an output schema, the description does not explain what the outputs look like or how to use optional parameters. Leaves significant gaps for an agent to infer proper usage, especially given the lack of schema descriptions.
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 low (13%), so the description must compensate. However, it adds no parameter-level details beyond the recommended timeout. Parameters like 'files', 'model', 'reasoning_effort' remain unexplained, leaving the agent without guidance on usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool evaluates an idea, scopes an MVP, and recommends whether to build. The verb 'evaluate' and resources 'idea' and 'MVP' provide specific purpose. Implicitly distinguishes from sibling tools like 'plan' and 'research' by focusing on evaluation and recommendation.
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 tool versus siblings. Does not mention prerequisites, suitable idea types, or when to avoid. Only provides a recommended timeout, which is a parameter hint, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buildC
Implement a change, run focused verification, and report results. Recommended timeout: 20 minutes (1200s).
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | ||
| model | No | ||
| danger | No | ||
| prompt | Yes | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. | |
| extra_roots | No | ||
| timeout_seconds | No | ||
| reasoning_effort | No | ||
| important_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | |
| model | Yes | |
| status | Yes | |
| summary | Yes | |
| task_id | Yes | |
| warnings | No | |
| exit_code | No | |
| repo_root | Yes | |
| file_diffs | No | |
| next_steps | No | |
| duration_ms | No | |
| stop_reason | No | |
| completeness | Yes | |
| result_state | No | |
| files_changed | No | |
| artifact_paths | Yes | |
| review_details | No | |
| important_facts | No | |
| reasoning_effort | Yes | |
| sandbox_violations | No | |
| raw_output_available | No | |
| reverse_engineer_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It hints at potentially destructive behavior ('implement a change') but does not detail safety, reversibility, permissions, or verification scope.
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 essential purpose. Every sentence adds value with zero waste.
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 9 parameters (many optional), an existing output schema, and no annotation support, the description is far too sparse to guide correct invocation. It omits critical context about parameters, return values, and 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 only 11%, and the tool description adds no parameter meaning. The sole schema description for 'repo_root' is helpful, but the description itself ignores all 9 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool implements a change, runs verification, and reports results. It provides a specific verb-resource combination but does not differentiate from sibling tools like 'review' or 'validate'.
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?
Only a recommended timeout is provided. No guidance on when to use this tool versus alternatives (e.g., brainstorm, plan, review). No context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_runA
Get the status or final ToolResponse for a Dobby run by task id. This can recover results from .codex-dobby/runs even after a blocking tools/call timed out.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | |
| state | Yes | |
| result | No | |
| status | No | |
| summary | Yes | |
| task_id | Yes | |
| warnings | No | |
| repo_root | Yes | |
| stop_reason | No | |
| result_state | No | |
| artifact_paths | No | |
| pending_task_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially reveals behavior (read operation, file-based recovery) but lacks details on idempotency, error handling, or auth requirements. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each adding value: first states core function, second adds important context. No redundancy or 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?
For a simple retrieval tool with an output schema (not shown), the description gives sufficient context. Missing a note on task_id origin or error cases, but overall complete enough.
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 50% and the description adds no information about the parameters themselves. The need for repo_root is only explained in the schema, not the description. No additional semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the status or final ToolResponse for a Dobby run using a task ID, distinguishing it from siblings like start_run or wait_run. It is specific 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 provides a specific use case (recovering results after a timed out call), but does not explicitly exclude other contexts or compare to alternatives like wait_run otherwise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_runsB
List recent Dobby runs for a repo. Useful for recovering task ids and results after a caller-side timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. |
Output Schema
| Name | Required | Description |
|---|---|---|
| runs | No | |
| repo_root | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It states 'List' implying a read-only operation, but does not discuss what 'recent' means, whether results are ordered, if it shows incomplete runs, or any potential side effects. It lacks details on pagination, rate limits, or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the first sentence stating the core purpose and the second providing a practical use case. It is front-loaded, no redundant or filler content, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with an output schema (present but not visible), the description is adequate but not complete. It does not clarify ordering, time frame for 'recent', or behavior of 'limit'. These gaps could lead to incorrect assumptions by the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention parameters at all. The input schema covers repo_root with a description and limit with a default, but 50% of parameters lack schema descriptions. The main text adds no additional meaning beyond what the schema provides, failing to explain how 'limit' works or constraints like the path requirement.
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 'List recent Dobby runs for a repo,' which conveys a specific action on a specific resource. It also adds context about recovering task ids after timeout, which helps understand its utility. However, it does not explicitly differentiate from sibling tools like 'get_run' or 'wait_run', though the plural 'runs' implies listing multiple.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case: 'recovering task ids and results after a caller-side timeout.' This is helpful for when to use. However, it does not mention exclusion criteria, such as not using this tool to get a single run (use 'get_run' instead) or to monitor ongoing runs (use 'wait_run'). No guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
planB
Break down a task and propose a scoped plan without editing files. Recommended timeout: 10 minutes (600s).
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | ||
| model | No | ||
| prompt | Yes | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. | |
| extra_roots | No | ||
| timeout_seconds | No | ||
| reasoning_effort | No | ||
| important_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | |
| model | Yes | |
| status | Yes | |
| summary | Yes | |
| task_id | Yes | |
| warnings | No | |
| exit_code | No | |
| repo_root | Yes | |
| file_diffs | No | |
| next_steps | No | |
| duration_ms | No | |
| stop_reason | No | |
| completeness | Yes | |
| result_state | No | |
| files_changed | No | |
| artifact_paths | Yes | |
| review_details | No | |
| important_facts | No | |
| reasoning_effort | Yes | |
| sandbox_violations | No | |
| raw_output_available | No | |
| reverse_engineer_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description states 'without editing files', indicating it is non-destructive. However, it does not disclose other behavioral aspects such as side effects (e.g., if it saves state), required permissions, or behavior on timeout. With zero annotation coverage, the description carries the full burden but only partially addresses it.
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 primary purpose. Every sentence adds value: purpose and a timeout recommendation. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 8 parameters and no annotations. The description omits explanations of key parameters (e.g., prompt, files, model) and does not clarify the plan's output format despite an output schema. It is insufficient for an agent to correctly invoke the tool without additional knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 8 parameters with only 13% coverage (repo_root described in schema). The tool description adds no parameter documentation whatsoever, leaving the agent to guess the meaning of prompt, files, model, etc. Given low schema coverage, the description must compensate but fails to do so.
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 'Break down a task and propose a scoped plan without editing files', which clearly identifies the action (break down, propose), the resource (a scoped plan), and distinguishes from siblings like build (edits files) or brainstorm (generates ideas).
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 a recommended timeout, which helps in usage, but does not specify when to use this tool versus alternatives like brainstorm or build. No explicit when-to-use or when-not-to-use guidance besides the implication from 'without editing files'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
researchC
Investigate code, docs, and context in read-only mode and report findings. Recommended timeout: 20 minutes (1200s).
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | ||
| model | No | ||
| prompt | Yes | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. | |
| extra_roots | No | ||
| timeout_seconds | No | ||
| reasoning_effort | No | ||
| important_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | |
| model | Yes | |
| status | Yes | |
| summary | Yes | |
| task_id | Yes | |
| warnings | No | |
| exit_code | No | |
| repo_root | Yes | |
| file_diffs | No | |
| next_steps | No | |
| duration_ms | No | |
| stop_reason | No | |
| completeness | Yes | |
| result_state | No | |
| files_changed | No | |
| artifact_paths | Yes | |
| review_details | No | |
| important_facts | No | |
| reasoning_effort | Yes | |
| sandbox_violations | No | |
| raw_output_available | No | |
| reverse_engineer_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It states 'read-only mode and report findings', implying no side effects, and recommends a timeout. However, it does not disclose timeouts, error handling, what constitutes a 'report', or how results are structured (output schema exists but not described).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences but lacks structure; it frontloads purpose but omits parameter guidance. Every sentence serves a function, yet more detail on parameter usage would improve utility without adding excessive length.
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 8 parameters (many optional), low schema coverage, and no annotations, the description is incomplete. It does not explain how parameters interact or when to use optional fields, leaving significant gaps for correct invocation. Output schema exists but is not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13% (low); only 'repo_root' has a schema description. The description does not explain the meaning or usage of the other 7 parameters (e.g., 'files', 'model', 'reasoning_effort'), failing to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose ('Investigate code, docs, and context in read-only mode and report findings') with a specific verb and resource. It distinguishes from siblings like 'build' or 'review' but does not explicitly differentiate from similar analysis tools like 'brainstorm' or 'reverse_engineer'.
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 a recommended timeout ('20 minutes (1200s)') but offers no guidance on when to use this tool versus alternatives, no when-not-to-use conditions, and no mention of prerequisites or selection criteria among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reverse_engineerC
Use reverse-engineering tooling and broader roots to investigate binaries. Recommended timeout: 30 minutes (1800s).
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | ||
| model | No | ||
| danger | No | ||
| prompt | Yes | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. | |
| extra_roots | No | ||
| timeout_seconds | No | ||
| reasoning_effort | No | ||
| important_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | |
| model | Yes | |
| status | Yes | |
| summary | Yes | |
| task_id | Yes | |
| warnings | No | |
| exit_code | No | |
| repo_root | Yes | |
| file_diffs | No | |
| next_steps | No | |
| duration_ms | No | |
| stop_reason | No | |
| completeness | Yes | |
| result_state | No | |
| files_changed | No | |
| artifact_paths | Yes | |
| review_details | No | |
| important_facts | No | |
| reasoning_effort | Yes | |
| sandbox_violations | No | |
| raw_output_available | No | |
| reverse_engineer_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the full burden is on the description. It does not disclose whether the tool is read-only, what side effects exist, or what kind of output to expect. The only behavioral hint is the recommended timeout.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, but the phrase 'broader roots' is unclear and wastes space. The timeout recommendation is useful but could be integrated more elegantly. The description is not front-loaded with the most critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, required prompt and repo_root) and lack of output schema details, the description is insufficient. It does not explain what the tool returns or how to interpret results, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 11% (only repo_root is described). The tool description does not explain any of the 9 parameters, leaving their purposes largely undefined. The agent would have no way to understand parameters like 'extra_roots' or 'important_context' without additional context.
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 investigates binaries using reverse-engineering tooling. It is specific about the resource (binaries) and the action (investigate). However, the phrase 'broader roots' is vague and does not add 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 description mentions a recommended timeout but gives no guidance on when to use this tool vs sibling tools (e.g., research, review). No context about prerequisites or typical scenarios is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reviewB
Review code with one agent (default) or fan out to multiple specialist agents. Recommended timeout: 10 minutes single-agent, 20 minutes multi-agent (pass timeout_seconds=1200 when using multiple agents).
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | ||
| model | No | ||
| agents | No | Review lenses to run. Only used for `review`, or for `start_run` when `tool` is `review`. Supported values: generalist, security, performance, architecture, correctness, ux, regression. | |
| prompt | Yes | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. | |
| extra_roots | No | ||
| timeout_seconds | No | ||
| reasoning_effort | No | ||
| important_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | |
| model | Yes | |
| status | Yes | |
| summary | Yes | |
| task_id | Yes | |
| warnings | No | |
| exit_code | No | |
| repo_root | Yes | |
| file_diffs | No | |
| next_steps | No | |
| duration_ms | No | |
| stop_reason | No | |
| completeness | Yes | |
| result_state | No | |
| files_changed | No | |
| artifact_paths | Yes | |
| review_details | No | |
| important_facts | No | |
| reasoning_effort | Yes | |
| sandbox_violations | No | |
| raw_output_available | No | |
| reverse_engineer_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It mentions the default single-agent behavior and fan-out capability, but does not disclose whether the tool is read-only, destructive, requires authentication, or what side effects (e.g., file modifications) occur. Key behavioral traits are missing.
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 zero wasted words. It front-loads the core purpose and then provides practical timeout guidance. Every sentence adds value, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, output schema present), the description is incomplete. It does not explain what the tool returns, how it uses parameters like 'files' or 'extra_roots,' or the meaning of 'important_context.' The output schema exists but is not referenced, leaving the agent without guidance on expected results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 22%, but the description does not compensate. It only implicitly guides the 'timeout_seconds' parameter via a recommendation, and fails to explain important parameters like 'prompt', 'files', 'model', 'reasoning_effort', or 'important_context.' The description adds minimal semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Review code with one agent (default) or fan out to multiple specialist agents.' This is a specific verb+resource combination that distinguishes it from sibling tools like 'brainstorm' or 'build.' The mention of multiple specialist agents adds clarity about capability.
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 context on when to use single vs. multi-agent review and provides recommended timeouts, but it does not explicitly state when not to use the tool or how it compares to siblings like 'validate' or 'research.' No explicit exclusion or alternative references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_runA
Start a Dobby tool in the background and return immediately with a task id. Follow up with wait_run(task_id=...) to block on one run, or call start_run several times and then wait_run(task_ids=[...]) to be woken by whichever finishes first. get_run/list_runs remain available for a non-blocking peek. Recommended when your MCP client enforces short tools/call timeouts.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | ||
| files | No | ||
| model | No | ||
| agents | No | Review lenses to run. Only used for `review`, or for `start_run` when `tool` is `review`. Supported values: generalist, security, performance, architecture, correctness, ux, regression. | |
| danger | No | ||
| prompt | Yes | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. | |
| extra_roots | No | ||
| timeout_seconds | No | ||
| reasoning_effort | No | ||
| important_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | |
| model | Yes | |
| state | Yes | |
| summary | Yes | |
| task_id | Yes | |
| repo_root | Yes | |
| artifact_paths | Yes | |
| reasoning_effort | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully bears the transparency burden. It clearly states the tool returns immediately with a task id and runs in the background. It doesn't disclose cancellation, error handling, or resource limits, but the core async behavior is well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences plus a recommendation, all front-loaded with the core action. Every sentence adds value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, many optional) and presence of an output schema, the description explains the output (task id) and how to use it with siblings. It doesn't detail the output schema structure, but the core flow is covered. It adequately addresses the tool's role among 11 siblings.
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 low (18%), so the description should compensate. It mentions tool, prompt, repo_root as parameters implicitly but does not elaborate on all 11 parameters. The description adds context for usage but doesn't map to individual parameters beyond the overall flow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action: 'Start a Dobby tool in the background and return immediately with a task id.' It clearly distinguishes from sibling tools like wait_run, get_run, and list_runs by explaining the asynchronous behavior and follow-up patterns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance (short timeouts), follow-up patterns (wait_run with single or multiple task_ids), and alternatives (get_run/list_runs for non-blocking peek). This gives the agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validateA
Run existing repo validation commands (build, test, lint) and report the results. Recommended timeout: 10 minutes (600s).
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | ||
| model | No | ||
| prompt | Yes | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. | |
| extra_roots | No | ||
| timeout_seconds | No | ||
| reasoning_effort | No | ||
| important_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | |
| model | Yes | |
| status | Yes | |
| summary | Yes | |
| task_id | Yes | |
| warnings | No | |
| exit_code | No | |
| repo_root | Yes | |
| file_diffs | No | |
| next_steps | No | |
| duration_ms | No | |
| stop_reason | No | |
| completeness | Yes | |
| result_state | No | |
| files_changed | No | |
| artifact_paths | Yes | |
| review_details | No | |
| important_facts | No | |
| reasoning_effort | Yes | |
| sandbox_violations | No | |
| raw_output_available | No | |
| reverse_engineer_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It states the tool runs validation commands and reports results, and mentions timeout. However, it does not clarify whether commands modify files, fail behavior, or permission needs, leaving gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and a key recommendation. Every sentence contributes value with 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?
Despite having an output schema, the description is minimal for a tool with 8 parameters, no annotations, and low schema coverage. It does not explain the role of most parameters or the output structure, leaving an agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13% (one param documented). The description adds meaning only for timeout, leaving 7 parameters (files, model, extra_roots, etc.) unexplained. The tool description fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Run existing repo validation commands') and the resource ('repo'), with specific verbs (build, test, lint) and result reporting. It distinguishes from siblings like 'build' (which likely only builds) and 'review'.
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 a recommended timeout (10 minutes), offering practical usage guidance. It does not explicitly contrast with sibling tools, but the name and context make the purpose clear. No when-not or alternative directives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_runA
Call after start_run to block until a background run finishes. Pass task_id for one run, task_ids=[...] to wait for whichever of several finishes FIRST, or omit both to wait on every currently-live run for the repo. On completion returns the winning run's final ToolResponse (pending_task_ids lists any still-running siblings); on timeout returns a RUNNING lookup whose summary says to keep calling wait_run with pending_task_ids until one finishes. Background tasks are shielded from waiter cancellation, so re-calling never loses work. Default 540s (9 min); clamped to [1, 100_000s / ~27.8h], matching Claude Code's MCP_TOOL_TIMEOUT default. Pick timeout_seconds below your own MCP client's tools/call ceiling — Claude Code defaults to ~28h (the full clamp is usable); Codex CLI defaults to 60s per [mcp_servers.].tool_timeout_sec (raise that first); Claude Desktop / Cursor / Cline / Continue vary.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | ||
| task_ids | No | ||
| repo_root | Yes | Absolute path to the target git worktree. Always pass the caller's active repository root; Dobby deliberately has no implicit repo fallback. | |
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | |
| state | Yes | |
| result | No | |
| status | No | |
| summary | Yes | |
| task_id | Yes | |
| warnings | No | |
| repo_root | Yes | |
| stop_reason | No | |
| result_state | No | |
| artifact_paths | No | |
| pending_task_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains blocking behavior, return on completion vs. timeout, cancellation shielding ('Background tasks are shielded from waiter cancellation'), timeout clamping, and details of return format (ToolResponse for completion, RUNNING lookup for timeout).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph but well-organized: front-loaded main purpose, then parameter usage, then timeout details. Every sentence adds value, though slightly verbose with client-specific timeout examples. Could be split into bullet points for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (blocking vs. timeout, multiple modes, cancellation, clamping) and presence of an output schema, the description covers essential behaviors: return values for both completion and timeout, shielding from cancellation, timeout bounds. It doesn't discuss error cases like invalid task_id, but that's acceptable for a wait tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (repo_root has description). The description adds meaning to all parameters: task_id (wait for one run), task_ids (wait for first of several), repo_root (always pass active root), timeout_seconds (default and clamp details). This compensates well for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool blocks until a background run finishes, with specific usage modes for one run (task_id), multiple runs (task_ids for whichever finishes first), or all live runs. The verb 'wait' matches the name, and it's distinct from siblings like get_run (non-blocking) and start_run (launches work).
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?
Description explicitly says 'Call after start_run' and details parameter variations. It gives timeout guidance with client-specific defaults (Claude Code, Codex CLI, etc.). While it doesn't explicitly say 'don't use this for non-blocking checks', the context makes it clear that this is for blocking; alternatives like get_run are implied but not named.
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.
11 tool updates
v0.1.4- First observed
brainstorm - First observed
build - First observed
get_run - First observed
list_runs - First observed
plan - First observed
research - First observed
reverse_engineer - First observed
review - First observed
start_run - First observed
validate - First observed
wait_run
TDQS
Each tool has a uniquely defined purpose with no overlap. brainstorming, building, planning, researching, reviewing, validating, and reverse-engineering are clearly distinct activities, and run-management tools are separate.
Most tools use a single verb (brainstorm, build, plan, etc.) while run-management tools use verb_noun pattern (start_run, get_run). This is mostly consistent with minor deviation.
11 tools is well-scoped for a code development assistant. Each tool serves a distinct phase or function without unnecessary duplication.
The tools cover the full lifecycle from idea evaluation (brainstorm), planning, implementation (build), review, validation, reverse engineering, and run management. No obvious gaps for the stated purpose.
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
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
An MCP server that gives your AI access to the source code and docs of all public github repos
MCP server for generating rough-draft project plans from natural-language prompts.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server enabling Claude to consult Codex (GPT-5.x) mid-task for second opinions, plan/diff review, brainstorming, and codebase exploration via structured debates and permission-controlled interactions.2MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables Claude to discover and delegate tasks to local Codex Skills and plugins, bridging Claude's natural language understanding with Codex's execution capabilities.Apache 2.0
- AlicenseAqualityBmaintenanceAn MCP server for running Claude Code and the Codex CLI as a pair: Claude drives, and hands self-contained tasks to Codex as background jobs.8MIT
- AlicenseAqualityBmaintenanceA local MCP server that lets Claude Code orchestrate Codex CLI and OpenCode CLI as sub-agents with strict security, concurrency, and output limits.41MIT
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/Averyy/codex-dobby-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server