Skip to main content
Glama
quochuy
by quochuy

ai-coord-mcp

A shared coordination layer between multiple AI coding assistants — not an orchestrator.

This MCP server never launches, manages, or talks to any AI process. It only exposes a task queue, a per-task message thread, and progress reporting, all persisted as human-readable JSON on disk. Claude Code and OpenCode (or any other MCP-capable client) are launched manually, in separate terminals, and both point their MCP config at this server. Claude typically plays coordinator (creates/reviews tasks); OpenCode plays implementer (claims/updates/completes them) — but the server has no opinion about that, it just stores state.

Claude Code (Sonnet)                    OpenCode (DeepSeek/Qwen/etc.)
        │                                        │
        │ create_task, list_tasks,                │ claim_task, update_progress,
        │ approve_task, request_revision           │ complete_task, post_message
        ▼                                        ▼
              ai-coord-mcp  (this server)
                       │
                       ▼
              .ai/coordination/*.json  (on disk)

Design

  • Transport: stdio. Each client spawns its own copy of this server as a subprocess. "The same server" means the same storage directory (COORDINATION_DIR), not one process. Every tool call re-reads the relevant JSON file from disk before mutating it; writes go through temp-file-then-rename (writeJsonAtomic) so a reader never sees a half-written file; a cross-process mutex (withLock, src/storage/lock.ts) built on mkdir guards concurrent writers, with stale-lock reclaim after 10s and an ownership token per holder.

  • IDs: sequential task-0001, task-0002, … assigned under a short-lived lock. Validated against /^task-\d{4,}$/ before being joined into any filesystem path.

  • Optimistic concurrency: every task carries a version counter. Pass expected_version to any mutating tool to get a ConflictError instead of a silent overwrite.

  • Not implemented: binary attachments (the files field is path references only, not stored content), archiving (the archive/ directory exists but nothing writes to it), typed branch/commit fields (use the metadata convention below instead), structured Definition-of-Done / verify_command (use expected_output instead), task relationships / parent_id/blocks (use tags to group instead), MCP Resources / resources/subscribe (use wait_for_task instead).

Status model:

pending --claim_task--> claimed --update_progress--> in_progress
   ^                        |                              |
   |                        |     both claimed and in_progress can complete_task--> completed
   |                        |                                                            |
   |                        └──────────────────────cancel_task─────────────────┐  approve_task│request_revision
   |                                                                            |         |         |
   └───────────────reopen_task (from cancelled/completed/approved)◄────────────┘         ▼         ▼
                                                                                    approved   revision_requested
                                                                                               (loops back through
                                                                                                update_progress →
                                                                                                in_progress again)

update_progress auto-advances claimed or revision_requested to in_progress on its first call in that cycle — there's no separate "start_task" tool.

Related MCP server: MCP Agent Mail

Storage layout

.ai/coordination/
  tasks/task-0001.json       one file per task (includes its own audit history[])
  messages/task-0001.json    array of {id, taskId, author, timestamp, content}
  progress/task-0001.json    latest snapshot + full history of updates
  archive/                   reserved, unused
  .locks/                    transient lock directories, safe to delete if empty

Everything is plain JSON — cat .ai/coordination/tasks/task-0001.json works fine while the server is running.

Setup

cd ai-coord-mcp
pnpm install
pnpm run build

Both Claude Code and OpenCode need to point at the same COORDINATION_DIR (an absolute path) so they share state regardless of which directory each was launched from.

Claude Code — add to .mcp.json (project) or via claude mcp add:

{
  "mcpServers": {
    "ai-coord": {
      "command": "node",
      "args": ["/absolute/path/to/ai-coord-mcp/dist/index.js"],
      "env": {
        "COORDINATION_DIR": "/absolute/path/to/shared/.ai/coordination"
      }
    }
  }
}

OpenCode — add the equivalent entry to its MCP config (opencode.json / ~/.config/opencode/config.json, depending on your OpenCode version):

{
  "mcp": {
    "ai-coord": {
      "type": "local",
      "command": ["node", "/absolute/path/to/ai-coord-mcp/dist/index.js"],
      "environment": {
        "COORDINATION_DIR": "/absolute/path/to/shared/.ai/coordination"
      }
    }
  }
}

If COORDINATION_DIR is unset, the server defaults to <cwd>/.ai/coordination — only safe if you know both clients will be launched from the same working directory.

Getting started

  1. Build the server and wire up COORDINATION_DIR for both clients (Setup above).

  2. Launch Claude Code and OpenCode in separate terminals, both in the shared repo.

  3. In Claude Code, create a task:

    Create a task: title "Sort inventory list", description "Implement stable sort by SKU for the inventory panel, keep the existing filter hooks working", expected_output "inventory.ts updated, existing tests still pass, new test for empty list". → calls create_task, returns task-0001 (status pending).

  4. In OpenCode:

    Check ai-coord for any pending tasks. → calls claim_next_task, works the task, calls update_progress a few times, then complete_task.

  5. Back in Claude Code:

    Review task-0001 and approve or request revision. → reviews the diff, calls approve_task or request_revision (the latter posts feedback to the thread; OpenCode reads it via get_messages and repeats from update_progress).

Tools

Tool

Purpose

create_task

Create a task (status pending)

list_tasks

List task summaries (no history[], includes computed idleSeconds), filter by status / assignee / creator / tag

get_task

Fetch one task by id, full record including history[]

search_tasks

Substring search over title/description/tags, same summary shape as list_tasks

claim_task

pendingclaimed

claim_next_task

Atomically claim the first eligible pending task (optionally by tag) instead of a list_tasks + claim_task round trip; returns null if none available

wait_for_task

Block (polling, lock-free) until a task's status changes or timeout_seconds elapses, instead of looping get_task yourself

complete_task

claimed/in_progress/revision_requestedcompleted

approve_task

completedapproved

request_revision

completedrevision_requested (also posts the feedback as a message)

cancel_task

any open status → cancelled

reopen_task

cancelled/completed/approvedpending, clears assignee

post_message

Append to a task's conversation thread

get_messages

Read a task's thread, optionally only messages since an ISO timestamp

update_progress

Report percent (0-100) / current_step / notes; auto-advances status to in_progress

get_progress

Latest progress snapshot + history

All mutating tools accept an optional expected_version — pass the task's current version to get a ConflictError instead of clobbering a concurrent change.

Every status-changing tool above (claim_task through reopen_task) returns the same summary shape as list_tasks — no history[] — so an implementer with a small context window (a local model, say) isn't handed the whole growing transition/note log back on every call. Same for update_progress: it returns the current snapshot, not the growing history[]. get_task/get_progress remain the only tools that return full history.

Workflow conventions

  • Waiting for work: use wait_for_task over polling get_task/list_tasks — one call instead of N, blocks server-side without holding a lock, returns timed_out: true as a normal result.

  • Picking up work: use claim_next_task over list_tasks({status:"pending"}) + claim_task — same two steps, atomic, retries automatically if another claimer wins the race.

  • Git state: no typed branch/commit field. Convention: create_task's metadata carries { baseCommit, branch }; both agents read/write those same keys. expected_output plus this README is the Definition-of-Done contract.

  • Implementer loop: claim_next_task (or claim_task on a specific id) → work → a few update_progress calls → complete_task. If revision is requested, get_messages for the feedback, then repeat from update_progress.

  • Coordinator loop: create_taskwait_for_task (or check back later) → on completed, review the diff at working_directoryapprove_task or request_revision.

Tests

pnpm test

Runs node:test (via tsx) over every src/**/*.test.ts file: the storage layer (atomic writes, cross-process lock semantics including the stale-lock/ownership-token edge case, id generation, message/progress persistence) and the full tool surface (state-machine transitions, TASK_ID schema rejecting malformed/traversal ids, version conflicts) driven through the real registerXxx() functions against a fresh temp COORDINATION_DIR per test file.

Available Tools

16 tools
approve_taskA

Approve a completed task (typically called by the creator/reviewer after checking the implementer's work). Returns the task summary (no history[] — call get_task for that).

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
idYes
noteNo
expected_versionNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It does disclose a behavioral trait: the response excludes history, directing to get_task for that. However, it does not mention side effects (e.g., whether the task state changes irreversibly), required permissions, or idempotency. Some context is added, but significant gaps remain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that front-load the primary purpose and then add a useful behavioral note. Every word earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters, no output schema, and no annotations, the description provides some essential context (caller, timing, return format limitation) but omits details on parameter semantics for half the parameters and the state transition side effects. It is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description must compensate. It implicitly clarifies 'by' as the creator/reviewer and suggests 'id' refers to the task, but it does not explain 'note' or 'expected_version'. The compensation is partial and insufficient for four parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Approve') and resource ('a completed task'), and distinguishes it from sibling tools like complete_task or request_revision. It also adds context on the typical caller (creator/reviewer) and contrasts with get_task regarding history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool ('after checking the implementer's work') and mentions an alternative for a specific need ('call get_task for that' regarding history). It lacks explicit exclusions or a direct comparison to all siblings, but the guidance is helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_taskA

Cancel a task that is not already completed/approved/cancelled. Returns the task summary (no history[] — call get_task for that).

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
idYes
reasonNo
expected_versionNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden. It discloses the state precondition and the return payload shape, but it does not mention side effects, error/conflict behavior, or the role of expected_version. These are material gaps for a mutation tool, though the description is not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences, front-loaded with the core action and state restriction, and then a useful pointer to get_task. Every word earns its place, with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple cancel operation, the description covers the basic purpose and return shape, and the get_task pointer is helpful. However, the lack of parameter semantics and conflict/error behavior, combined with the absence of annotations and output schema, leaves the tool only marginally adequate for safe autonomous invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no explanation of id, by, reason, or expected_version. The agent must infer meaning solely from parameter names and schema constraints, leaving important semantics like optimistic concurrency undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Cancel a task') and the resource (a task), and it adds a meaningful state constraint ('not already completed/approved/cancelled'). It also distinguishes itself from get_task by noting that the returned summary omits history[], which helps agents pick the right sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly describes the valid use case: canceling a task that is not in a terminal state. It also points to get_task as an alternative for retrieving history. However, it doesn't go further to explain when cancel_task should be chosen over other mutation siblings or what to do if the task is already claimed or in progress.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

claim_next_taskA

Atomically claim the first eligible pending task (optionally filtered by tag) instead of a separate list_tasks + claim_task round trip. Skips tasks pre-assigned to someone else. Returns null if no eligible pending task is available, otherwise a task summary (no history[] — call get_task for that).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
assigneeYesName/identifier of the agent claiming, e.g. 'opencode'.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the burden. It discloses atomic claim behavior, skips pre-assigned tasks, returns null if no eligible task, and notes the absence of history[] while directing to get_task. This is transparent about side effects and return values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, followed by relevant details. No wasted words and all information is actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, no annotations, and no output schema, the description covers the key behavioral aspects, return value, and points to get_task for additional detail. It is complete for an agent to decide when and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers one parameter (assignee) with a clear description, and the description adds meaning for 'tag' by noting it is optional and filters eligible pending tasks. Both parameters are effectively documented, though the description could have explicitly mentioned the assignee parameter as well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Atomically claim the first eligible pending task' and distinguishes it from siblings by mentioning the alternative of a separate list_tasks + claim_task round trip. This is a specific verb+resource with clear scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool 'instead of a separate list_tasks + claim_task round trip', which provides clear context for when to use it over alternatives. It also points to get_task for retrieving history, but does not explicitly state when not to use it (e.g., when a specific task ID is known).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

claim_taskA

Claim a pending task as the implementer working on it. Fails if the task was pre-assigned to someone else. Returns the task summary (no history[] — call get_task for that).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
assigneeYesName/identifier of the agent claiming the task, e.g. 'opencode'.
expected_versionNoPass the task's current version to detect races with another claimer.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It discloses the failure behavior ('Fails if the task was pre-assigned'), the return value ('Returns the task summary'), and explicitly notes the absence of history, pointing to get_task. This is meaningful beyond schema but lacks details on permission requirements or state-change implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main action, no wasted words. The failure and return-info additions are purposeful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three params and no output schema, the description covers the core behavior, failure mode, and return format. It even directs users to get_task for history, covering a common follow-up. The only missing context (expected_version usage) is already in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents assignee and expected_version with descriptions, but the id parameter only has a pattern. The description adds no parameter-specific guidance, leaving id's semantics implicit. With 67% schema coverage, the description doesn't compensate for the un-annotated id, but schema covers the rest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+role: 'Claim a pending task as the implementer working on it.' It clearly distinguishes from siblings like claim_next_task and create_task by indicating this targets a specific pending task. The failure condition (pre-assigned) adds useful purpose detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies when to use: when an implementer wants to claim a specific pending task. It also provides an alternative for history: 'call get_task for that.' However, it doesn't explicitly contrast with claim_next_task or state when not to use, so it's clear context but missing explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

complete_taskA

Mark a claimed/in-progress/revision-requested task as completed and ready for the creator to review. Returns the task summary (no history[] — call get_task for that).

ParametersJSON Schema
NameRequiredDescriptionDefault
byYesWho is marking it complete (usually the assignee).
idYes
noteNoOptional summary of what was done.
expected_versionNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It usefully states that the tool returns the task summary without history and directs to get_task for that. But it does not mention permissions, reversibility, or potential errors like version mismatch, leaving some significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences: the first states the action and scope, the second reveals return behavior and points to an alternative. Every word earns its place, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description does a good job for a simple state transition, covering action, eligible states, and return format. However, it lacks operational details like prerequisites, version checking behavior, and error handling, which are more critical given the absence of annotations and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no information about any of the four parameters. The schema covers only 50% of parameters with descriptions, and the important 'expected_version' parameter is left unexplained in both schema and description, so the description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('mark... as completed'), the resource (task), and the eligible states (claimed/in-progress/revision-requested). This distinguishes it from sibling tools like approve_task and request_revision, which involve different workflow steps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool by specifying the task states it applies to, giving the agent context on eligibility. However, it does not explicitly mention when not to use it or point to alternatives, though the sibling list provides that context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_taskA

Create a new coordination task for an implementer (e.g. OpenCode) to pick up. Starts in status 'pending'.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFree-form labels for filtering/search.
filesNoRelevant file paths, relative to working_directory.
titleYesShort task title.
creatorYesName/identifier of the agent or user creating this task, e.g. 'claude'.
assigneeNoIf set, pre-assigns the task without requiring claim_task.
metadataNoArbitrary extra structured data.
priorityNoDefault 'medium'.
descriptionYesFull task description / instructions for the implementer.
expected_outputNoWhat 'done' looks like — files changed, tests passing, etc.
working_directoryNoAbsolute path the implementer should work in.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden of behavioral disclosure. It adds one useful behavior: tasks 'start in status pending'. It also implies a workflow where implementers pick up tasks. However, it doesn't mention whether permissions are needed, whether the task is immediately visible, or what the response is. This is minimal but acceptable for a straightforward creation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence front-loads the core action and target, the second adds a key state detail. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 10 parameters and no output schema, the description is reasonably complete for a creation operation. It sets the task status and the intended actor, which addresses workflow context. It doesn't explain return values, but that is often implicit for create actions. A bit more detail on how creation fits the overall task lifecycle (e.g., 'assignee' pre-claiming) would make it fully complete, but it's above minimum viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters, so the baseline is 3. The description adds no parameter-specific details—it doesn't elaborate on 'assignee', 'priority', or 'expected_output'. The phrase 'for an implementer to pick up' hints at assignee/claiming but not explicitly. Satisfies the baseline without exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Create a new coordination task'. It also specifies the target audience ('for an implementer (e.g. OpenCode) to pick up') and initial status, which differentiates this creation tool from sibling tools like list_tasks or claim_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool to create tasks for implementers to pick up. Though it doesn't explicitly mention alternatives, the purpose is unmistakable compared to siblings. It lacks an explicit 'when not to use' but that is not critical for a creation tool with obvious intent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_messagesA

Fetch a task's conversation thread, optionally only messages after a given ISO timestamp.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoISO timestamp; only return messages after this.
taskIdYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. "Fetch" implies a read-only operation, and the optional timestamp filter discloses a behavior. However, it does not describe return format, ordering, pagination, or whether messages are marked as read, leaving notable gaps for a fetch tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It states the core function and an optional parameter in a concise manner, scoring highly on efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with only two parameters and no output schema, the description covers the main purpose and optionality. However, it omits expected return structure, potential errors, or any preconditions (e.g., task must exist), making it minimally complete but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, and the description does not fully compensate. For 'since', the description merely repeats the schema's description. For 'taskId', it provides context by linking it to a task's thread, but the meaning of the parameters is still largely left to the schema. The description adds some clarity but not enough to fully cover the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb "Fetch" and a clear resource "a task's conversation thread," which distinguishes it from sibling tools like post_message (write) and get_task (task details). The optional timestamp filter is also mentioned, providing a clear scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to retrieve message threads for a task and mentions an optional filter, but it does not explicitly state when to use this over alternatives or any exclusions. No alternatives are named, and there is no guidance on when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_progressA

Fetch the latest progress snapshot (and history) for a task. Returns null if no progress reported yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden, and it does add the key behavior of returning null if no progress exists. However, it doesn't disclose other potential behaviors like error responses for invalid task IDs or read-only guarantees, though 'Fetch' implies no side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with the verb front-loaded. Every word adds value, including the null-return behavior, making it concise and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and simple parameters, the description is fairly complete: it states what is fetched and the null behavior. It doesn't specify the return structure or error handling for non-existent tasks, but for a simple fetch tool it's adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no parameter descriptions and covers 0% of semantics, so the description must compensate. It only says 'for a task', which adds little beyond the parameter name 'taskId' and doesn't explain the format or source of the ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a progress snapshot and history for a task, using a specific verb and resource. It distinguishes itself from siblings like get_task and update_progress by focusing on progress data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. There is no mention of using get_task for task details or that update_progress is for modifying progress, so the description lacks explicit usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_taskA

Fetch full details for a single task by id, including its status, version, and history.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTask id, e.g. 'task-0001'.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses the read-only nature via 'fetch' and lists included content (status, version, history), but it does not mention error handling, return format details, or any prerequisites. For a simple read operation this is a moderate disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the verb, object, qualifier, and key content. Every word contributes value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with no output schema, the description adequately conveys what is returned (full details, status, version, history) and the input required. It could mention error behavior or edge cases, but these are minor gaps for this tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single 'id' parameter is fully documented in the schema with a pattern and example. The description adds no extra parameter meaning beyond reinforcing 'by id', so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches full details for a single task by id, with a specific verb ('fetch') and resource ('task'), and uniquely identifies the scope ('by id') distinguishing it from siblings like list_tasks and search_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context is given: use when you need full details for one task by its id. No explicit exclusions or alternatives are named, but the 'by id' qualifier makes the appropriate usage obvious relative to sibling tools that list or search tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksA

List coordination tasks, optionally filtered by status, assignee, creator, or tag. Returns a lightweight summary per task (no history[], plus a computed idleSeconds while claimed/in_progress) so repeated polling stays cheap — call get_task for the full record including history.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
statusNo
creatorNo
assigneeNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It discloses that the output is a lightweight summary with no history[] and includes a computed idleSeconds while claimed/in_progress, and notes the cost benefit for polling. It does not explicitly state whether filters are combined with AND/OR, pagination, or ordering, but as a 'list' operation it clearly implies read-only behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no waste. The first sentence states the action and filters, the second provides important behavioral detail (lightweight summary, no history, idleSeconds) and points to get_task. Every clause contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 4 optional parameters and no output schema, the description gives useful context about return content and the trade-off vs get_task. However, it omits details about pagination, ordering, or result limits, which could matter in repeated polling. The presence of search_tasks as an alternative is not addressed, leaving some contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only lists the filter names (status, assignee, creator, tag) without adding meaning. It does not explain the expected format for assignee/creator, whether tag is exact/substring, or how multiple filters interact. The status enum is provided in the schema, but the description adds no parameter-level value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List coordination tasks' with optional filters by status, assignee, creator, or tag. It distinguishes itself from the sibling get_task by explicitly noting that this tool returns a lightweight summary and directing users to get_task for full records. This is a specific verb+resource+scope statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: repeated polling stays cheap, and for full records including history, call get_task. It names get_task as the alternative. However, it does not mention search_tasks, another sibling, leaving ambiguity about when to choose list_tasks vs search_tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_messageA

Post a message to a task's conversation thread (e.g. clarifications, review feedback, status notes).

ParametersJSON Schema
NameRequiredDescriptionDefault
authorYes
taskIdYes
contentYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits on its own. It only states the action without mentioning side effects, required permissions, rate limits, failure behavior, or whether the message is appended. For a mutating tool, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that includes practical examples without any redundancy. It is appropriately sized and front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with three self-explanatory parameters and no output schema, but the description lacks details about prerequisites (e.g., task must exist) and failure modes. It is adequate for a basic tool but has clear gaps given there are no annotations to provide safety/reversibility context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It implies the role of taskId and content via 'task's conversation thread' and examples, but it does not explicitly explain the author parameter or any additional constraints. The parameter names are self-explanatory, offering partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('post') and resource ('message to a task's conversation thread'), and the examples clarify the intended content types. It is distinct from sibling tools like get_messages, which is the read counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context through examples (clarifications, review feedback, status notes), implying when to use this tool. However, it does not explicitly mention alternatives or exclusions, such as 'for reading messages, use get_messages', so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reopen_taskA

Reopen a cancelled/completed/approved task back to pending, clearing its assignee and prior progress so it can be re-claimed. Returns the task summary (no history[] — call get_task for that).

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
idYes
reasonNo
expected_versionNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of explaining side effects. It explicitly discloses that the operation 'clears assignee and prior progress', which is critical and potentially destructive. It also notes the return value is a task summary without history. The description is transparent about these behaviors, though it does not discuss permissions or failure conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and every sentence adds value. It states the purpose, the side effects, and the return behavior without wasted words. The structure is clear and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose, side effects, and return value, but with four parameters and no output schema, it leaves significant gaps. It does not explain the meaning of 'by', 'reason', or 'expected_version', and does not mention potential error cases or prerequisites. The description is useful but not fully complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain any of the four parameters (id, by, reason, expected_version). It does not mention that 'reason' is likely optional or that 'expected_version' is for optimistic locking. The description adds no meaning beyond the raw schema, leaving the agent without guidance on how to fill these fields correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Reopen a cancelled/completed/approved task back to pending'. It uses a specific verb ('reopen') and identifies the resource ('task') and the state transition, distinguishing it from sibling tools like cancel_task or approve_task. The scope is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when a task needs to be reopened for re-claiming. It also contrasts with get_task by noting that history[] is not included, directing users to get_task if they need that. However, it does not explicitly state when not to use it or mention alternative tools for similar state changes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_revisionA

Send a completed task back to the implementer for changes. Posts the feedback as a message on the task's thread. Returns the task summary (no history[] — call get_task for that).

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
idYes
feedbackYesWhat needs to change — posted to the task's message thread.
expected_versionNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden of behavioral disclosure. It does disclose that feedback is posted as a message and that the return value lacks history. However, it does not explicitly state whether the task status changes, permissions required, or other side effects, leaving noticeable gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and contains no redundant phrasing. Every clause adds value (action, side effect, return value limitation).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose, side effect, and return value, and points to get_task for history. However, it omits explanations for key parameters (id, by, expected_version) and does not state the resulting task status or prerequisites beyond 'completed task'. Given no output schema and sparse annotations, this is adequate but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only feedback has a description). The description adds some meaning for feedback (posted to thread) but does not explain id, by, or expected_version. With such low coverage, the description should compensate more but does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: send a completed task back for changes and post feedback to the task's thread. It distinguishes from sibling tools like complete_task or approve_task by focusing on revision, and explicitly contrasts with get_task by noting the return value lacks history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: when a completed task needs changes. It also provides a routing hint to use get_task for history, which helps the agent choose between tools. However, it does not explicitly mention when not to use it or list alternatives, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_tasksA

Full-text search over task titles, descriptions, and tags (case-insensitive substring match). Returns the same lightweight summary shape as list_tasks (no history[]) — call get_task for the full record.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description takes on full responsibility. It discloses key behavioral traits: case-insensitive substring match across specific fields, the lightweight summary return shape, and the absence of history[]. It also indicates a read-only operation implicitly. This is helpful but does not cover potential pagination or ordering behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences, front-loaded with the core function, and adds crucial details about the return shape and follow-up tool. Every word earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description adequately explains what it does and what it returns. It references list_tasks for the summary shape and get_task for full data. It could mention result limits or ordering, but these are not critical for a basic search. Overall, it is a complete and useful description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines 'query' as a string with a minimum length, providing no description. The description fully compensates by explaining that the query is matched against task titles, descriptions, and tags, and that matching is case-insensitive substring-based. This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it performs full-text search over task titles, descriptions, and tags with a case-insensitive substring match. It also distinguishes itself from list_tasks by clarifying the return shape (same lightweight summary, no history[]) and directly points to get_task for full records.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this for searching by text, and call get_task for full detailed records. It implicitly differentiates from list_tasks by focusing on search over listing. However, it does not explicitly state when NOT to use it or name alternatives beyond get_task.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_progressA

Report progress (0-100, whole numbers) on a claimed/in-progress/revision-requested task. The first call in a claim or revision cycle automatically advances the task's status to 'in_progress'. Rejects tasks not currently open for work (pending, completed, approved, cancelled). Returns the current snapshot (no history[] — call get_progress for that).

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
notesNo
taskIdYes
percentYes
current_stepNo
expected_versionNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the automatic status advancement to in_progress, rejection of invalid task states, and the return value lacking history. This gives the agent insight into side effects and boundaries beyond basic read/write hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences pack purpose, constraints, side effects, and redirects. No fluff, front-loaded with the primary action, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the core behavior is well covered, the absence of parameter explanations and any output structure means the description is incomplete for a 6-parameter tool. It covers 'what' and 'when' but not the full 'how', leaving significant gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains percent's range and type (0-100 whole numbers), but taskId, by, notes, current_step, and expected_version are unexplained. This leaves the agent guessing about required identifiers and optional context fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Report progress') and resource (task), with scoping constraints (0-100, whole numbers). It also distinguishes from siblings by noting the returned snapshot lacks history (call get_progress for that), clearly separating it from tools like complete_task and claim_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states acceptable task statuses ('claimed/in-progress/revision-requested') and that other states (pending, completed, approved, cancelled) are rejected. It also directs users to get_progress for history, providing an explicit alternative for a related need.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_taskA

Block (polling, lock-free) until a task's status changes, or until timeout_seconds elapses — use instead of repeatedly calling get_task in a loop. Without until_status, returns as soon as status differs from its value at call time; with until_status, waits specifically for that status. Timing out is a normal result (timed_out: true), not an error — re-call to keep waiting.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
until_statusNoWait for this specific status. Omit to wait for any change.
timeout_secondsNoDefault 30, max 55.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses key behaviors: lock-free polling, the change-detection semantics, and that timing out is normal. However, it doesn't specify what happens for an invalid/nonexistent task id or whether any state is modified, leaving a small transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, each earning its place: main action, behavioral modes, and timeout handling. Front-loaded with the key purpose, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the main behavior, the absence of an output schema means the return structure remains vague—only 'timed_out: true' is mentioned, not what is returned on a status change. Error handling for non-existent tasks is also unaddressed. Overall good but not fully complete for a tool with no schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description adds important semantics beyond the schema: the meaning of omitting versus providing until_status, and the timeout behavior ('timed_out: true' is normal). The id parameter has only a pattern, and the description doesn't elaborate on it, but the schema's enum and description for until_status are reinforced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: 'Block (polling, lock-free) until a task's status changes, or until timeout_seconds elapses' and explicitly distinguishes from sibling get_task by saying 'use instead of repeatedly calling get_task in a loop.' This clearly identifies the tool's unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit direction on when to use: 'use instead of repeatedly calling get_task in a loop.' Also explains the two modes (with/without until_status) and the expected behavior on timeout ('re-call to keep waiting'), providing clear operational guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation5/5

Each tool targets a distinct resource/action: task CRUD, claiming, lifecycle transitions (complete/cancel/reopen/approve/revision), messaging, progress, and waiting. Even similar tools like list_tasks/search_tasks and claim_task/claim_next_task are clearly differentiated by purpose and described behavior.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (create_task, get_task, claim_task, update_progress, wait_for_task). Verb choices are semantically aligned with actions (list/get/search for reads; claim/complete/cancel for state changes), making the set predictable and easy to navigate.

Tool Count4/5

At 16 tools, the set sits at the upper boundary of typical scope, but every tool serves a distinct purpose in the coordination workflow. The slightly elevated count is justified by the inclusion of specialized tools like claim_next_task and wait_for_task that optimize common operations.

Completeness4/5

The surface covers the full task lifecycle (create, read, claim, complete, cancel, reopen, approve, revision) plus messaging and progress tracking. Minor gaps exist: there's no tool to edit task metadata (e.g., title, description, assignee) after creation, but this can be worked around via cancel/recreate.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    A coordination layer for coding agents that provides memorable identities, inbox/outbox messaging, searchable message history, and file lease management to prevent conflicts. Uses Git for human-auditable artifacts and SQLite for fast queries, enabling multiple agents to collaborate across projects without stepping on each other.
    2,115
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A coordination layer for coding agents that provides identities, message threading, and searchable history. It features file reservation leases to prevent agents from overwriting each other's work in multi-agent environments.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A lightweight coordination layer for multiple AI agents working on the same codebase, providing check-in and check-out tools via STDIO or Streamable HTTP.
    58
    1
    Apache 2.0

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/quochuy/ai-coord-mcp'

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