Skip to main content
Glama

workstream-mcp

ci License: MIT .NET 10 MCP

An MCP server that keeps the state of record for work done by AI agents and humans together: plans, tasks, claims, findings, fix attempts and verdicts, stored in Postgres, mirrored to GitHub Projects and Slack.

Workstream dashboard: two agents holding claims, one task in review

Try it in 30 seconds

One container with Postgres and the server in demo mode, seeded with a project, an active plan and three tasks:

docker run --rm -p 127.0.0.1:8080:8080 ghcr.io/ahmad-codex/workstream-mcp:demo
claude mcp add --transport http workstream-demo http://localhost:8080/demo-insecure-token/mcp

Then ask Claude to "list the workstream projects and claim the next task on the demo plan". The demo token is public and gives admin rights, so keep the port on 127.0.0.1; the server refuses that token whenever demo mode is off. Data is gone when the container stops.

Open http://localhost:8080/demo-insecure-token/ui/ to watch the plan on the dashboard. To see agents race for tasks, start the container with -e WORKSTREAM_ADMIN_TOKEN=local-admin and run WORKSTREAM_ADMIN_TOKEN=local-admin node scripts/simulate-agents.mjs.

Related MCP server: slack-mcp

Set it up with Claude Code

Clone the repo, open Claude Code in it, and paste:

Set up workstream-mcp for me on this machine. Follow the README quick start using the
published Docker image, create an admin user for me, and connect this Claude Code session
to it. Then create a project and a development plan with three sample tasks, activate it,
and claim one task to show it works. When that is done, ask me whether I want GitHub
Projects or Slack sync, and walk me through docs/github-setup.md or docs/slack-setup.md
step by step, telling me exactly what to click and which values to paste back.

Prefer to do it by hand? See the quick start.

Why

A common way to coordinate agent work is a markdown plan in the repo: a checklist the agent reads, edits and commits. That works for one agent in one session. It breaks down when several agents and people work the same plan at once:

  • Two agents pick the same item, because nothing stops them.

  • An agent dies mid-task and the item stays "in progress" forever.

  • Edits to the file race each other, and the history of who did what lives in git diffs.

  • The plan does not show up where the team already looks: the project board and Slack.

workstream-mcp replaces the file with a small service. Agents call MCP tools to claim work, submit results and record verdicts. Claims are atomic and expire, transitions are checked against a state graph, every change is written to an append-only event log, and GitHub and Slack are updated from an outbox so an outage on their side never blocks the agents.

Features

What the code does today:

  • Atomic claims with TTLs. SELECT ... FOR UPDATE SKIP LOCKED in one transaction, so concurrent claimers never get the same task and never block each other. A claim that is not refreshed expires and the work returns to the pool. Covered by a 32-claimer concurrency test suite.

  • Data-driven state machine. Statuses, legal transitions, allowed roles, role TTLs, retry caps and board column mappings live in plan_types.state_graph (JSONB). Two plan types ship: audit (find, verify, fix, re-verify) and development (implement, review). An illegal transition returns illegal_transition with allowed_next, so the calling model can correct itself.

  • Append-only event log. Every state change writes an events row. Triggers block UPDATE and DELETE on events and verdicts.

  • GitHub Projects V2 sync. Tasks become issues (or draft items for repo-less projects) on a Projects V2 board, columns follow task status, and audit plans get a milestone. A signed webhook endpoint verifies inbound board events, but does not apply them yet (see the roadmap). Uses a GitHub App.

  • Slack notifications. Block Kit messages per project channel, threaded per task, with role personas for agent posts, and interactive buttons verified with the Slack signing secret.

  • Outboxes. GitHub and Slack calls are queued in board_sync_log and slack_notify_log inside the request transaction and drained by background workers with retries.

  • Web dashboard. A read-only board per plan at /<token>/ui/: tasks by status, claim holders with a TTL countdown, dependencies, stuck work and the event timeline of every task. See docs/dashboard.md.

  • URL-as-credential auth. Each user gets a URL like https://host/<token>/mcp. Pasting it into an MCP client is the whole setup. Tokens can be rotated; the token is stripped from the path and from logs.

  • Audit dispatcher (optional). request_audit queues an audit run; a sidecar container clones the repo and starts the project's audit orchestrator in a tmux session with Claude Code.

  • Admin API and CLI. /admin/* endpoints behind a static bearer token for users and boards, plus a workstream-admin CLI for user management. Projects and plans are set up through the admin-gated MCP tools.

  • Stuck-work report. An hourly job writes counts of expired claims, stale findings and idle plans to stuck_work_reports.

Architecture

flowchart LR
    subgraph Clients
        CC[Claude Code / Desktop / Cursor]
        ORCH[Orchestrator agents]
    end

    CC -- "POST /&lt;token&gt;/mcp<br/>JSON-RPC 2.0" --> API
    ORCH -- "POST /&lt;token&gt;/mcp" --> API

    subgraph Server
        API[Workstream.Api<br/>token middleware, MCP tools,<br/>state machine, claims]
        BSW[BoardSyncWorker]
        SNW[SlackNotifyWorker]
        DISP[AuditDispatchWorker<br/>dispatcher role]
    end

    API -- "one transaction:<br/>state + events + outbox rows" --> PGB[(PgBouncer)]
    PGB --> PG[(Postgres 16)]
    BSW -- drain board_sync_log --> PG
    SNW -- drain slack_notify_log --> PG
    DISP -- drain audit_dispatch_log --> PG

    BSW -- GraphQL / REST --> GH[GitHub Projects V2,<br/>issues, milestones]
    SNW -- chat.postMessage --> SL[Slack]
    GH -- signed webhook --> API
    SL -- signed interactivity --> API
    DISP -- tmux + claude --> REPO[checked-out repos]

Project

Responsibility

src/Workstream.Api

ASP.NET Core host, token middleware, JSON-RPC endpoint, admin API, webhooks, dispatcher

src/Workstream.Core

Domain model, state graph parser, StateMachineService, claim rules

src/Workstream.Data

Npgsql + Dapper repositories, outbox, SQL migration runner

src/Workstream.Mcp

The MCP tool classes and their registration

src/Workstream.GitHub

GitHub App auth, Projects V2 client, board sync worker

src/Workstream.Slack

Slack client, Block Kit builders, notify worker, signature check

src/Workstream.Telemetry

OpenTelemetry setup and metric definitions

tools/workstream-admin

Operator CLI

deploy/

Dockerfiles, compose files, migrations, plan-type profiles, Caddy, PgBouncer, Grafana and Prometheus config

More in docs/architecture.md and docs/state-machine.md.

Quick start (about 5 minutes)

Needs Docker. This starts Postgres and the API only; GitHub, Slack and the dispatcher stay off.

git clone https://github.com/ahmad-codex/workstream-mcp.git
cd workstream-mcp
docker compose -f deploy/docker-compose.quickstart.yml up -d --build
curl http://localhost:8080/healthz
# {"ok":true}

To skip the local build, run the published image instead:

WORKSTREAM_IMAGE=ghcr.io/ahmad-codex/workstream-mcp:latest \
  docker compose -f deploy/docker-compose.quickstart.yml up -d --no-build

The API applies the SQL migrations on startup, including the audit and development plan types.

Create a user. The response contains the user's MCP URL once; copy it.

curl -s -X POST http://localhost:8080/admin/users \
  -H "Authorization: Bearer local-admin-token" \
  -H "Content-Type: application/json" \
  -d '{"githubUsername":"alice","displayName":"Alice","actorType":"human","isAdmin":true}'
# { "user": {...}, "url": "http://localhost:8080/<token>",
#   "mcp_endpoint": "http://localhost:8080/<token>/mcp", "warning": "..." }

isAdmin lets this user call the setup tools (create_project, create_plan, ...). Check the URL:

curl http://localhost:8080/<token>
# {"ok":true,"actor":{"id":"...","github_username":"alice","is_admin":true},...}

Then connect an MCP client (next section) and ask it to create a project, a development plan and a few tasks, activate the plan, and claim one.

Stop with docker compose -f deploy/docker-compose.quickstart.yml down (add -v to drop the data).

Connecting an MCP client

The server speaks MCP over HTTP (JSON-RPC 2.0 POSTs) at <base>/<token>/mcp. There are no extra headers; the token in the path identifies the user.

Claude Code

claude mcp add --transport http workstream http://localhost:8080/<token>/mcp

Claude Desktop (claude_desktop_config.json). Claude Desktop launches stdio servers from this file, so use the mcp-remote bridge (needs Node.js):

{
  "mcpServers": {
    "workstream": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:8080/<token>/mcp"]
    }
  }
}

If the server is reachable from the internet over HTTPS, you can instead add the URL as a custom connector in Claude Desktop's settings.

stdio (any client). The same binary speaks MCP over stdin/stdout with --stdio, acting as the user whose token is in WORKSTREAM_USER_TOKEN against the database in WORKSTREAM_DB_CONNECTION (an HTTP server must still be running somewhere to drain the GitHub and Slack outboxes):

{
  "mcpServers": {
    "workstream": {
      "command": "dotnet",
      "args": ["/path/to/Workstream.Api.dll", "--stdio"],
      "env": {
        "WORKSTREAM_DB_CONNECTION": "Host=localhost;Database=workstream;Username=workstream;Password=...",
        "WORKSTREAM_USER_TOKEN": "<token>"
      }
    }
  }
}

Without WORKSTREAM_DB_CONNECTION, --stdio starts in discovery mode: initialize and tools/list work and every tool call returns a not_configured error. Directory scanners such as Glama use this mode.

Cursor (~/.cursor/mcp.json, or .cursor/mcp.json in a project):

{
  "mcpServers": {
    "workstream": {
      "url": "http://localhost:8080/<token>/mcp"
    }
  }
}

The URL is a credential. Do not commit it; keep it in user-level config. See docs/onboarding.md for the full onboarding flow.

MCP tools

36 tools. Every response is { ok, data, error }; errors carry a stable code (stale_claim, illegal_transition, retry_cap_exceeded, ...). Full details in docs/mcp-tools.md. Any call may pass as_agent to set the role persona used for Slack posts.

Group

Tool

What it does

Discovery

list_projects

Projects with active plan counts and the caller's open claims

list_plans

Plans of a project, filterable by status, with task counts per status

get_plan_dashboard

Status counts, next claimable work, my claims, stuck work, recent events

get_my_active_work

Every claim the caller holds

Claims

claim_next_task

Claim the highest-priority pending task for a role

claim_specific_task

Claim one task by id

claim_next_finding_for_verification

Audit: claim a finding to verify

claim_next_finding_for_fix

Audit: claim a confirmed finding to fix

claim_next_attempt_for_review

Reserved; v1 stub

refresh_claim

Extend a claim's TTL during long work

release_claim

Give work back without submitting

Submission

start_work

claimed to in_progress

submit_findings

Audit: submit findings for a task

submit_verification_verdict

Audit: confirmed, rejected or ambiguous

submit_attempt

Submit a code change; enforces the retry cap

submit_attempt_verdict

Audit: fix_confirmed, fix_failed or partial

submit_review_decision

Development: approved or changes_requested

Lifecycle

mark_task_status

deferred, blocked, skipped, out_of_scope, needs_human_review

record_commit

Attach a commit hash

create_task / create_tasks

Add tasks to a plan, one or in bulk

override_verdict

Force a state change; needs can_override_verdict

Forensic

get_event_log

Event timeline for one entity

get_stuck_work

Tasks and attempts past TTL, findings waiting over 24h, idle plans

export_plan

Plan snapshot as markdown or JSON

get_finding

Full body of one finding: severity, root cause, reproduction, status, claim holder

Setup (admin)

create_project

New project

add_project_repo

Attach a GitHub repo

add_project_board

Register a Projects V2 board

set_project_slack

Set the Slack channel and bot token reference

create_plan

New plan in draft

add_phase

Add a phase to a plan

activate_plan

Draft to active; enqueues board items

archive_plan

Close a plan as Completed or Canceled

Audit dispatch (admin)

request_audit

Queue audit runs for one or more projects

cancel_audit

Ask running audits to stop and clean up

Configuration

Environment variables read by the API. Each _FILE variant reads the value from a file (Docker secrets).

Variable

Required

Purpose

WORKSTREAM_DB_CONNECTION

yes

Npgsql connection string. Password=__from_secret__ is replaced with the contents of WORKSTREAM_DB_PASSWORD_FILE

WORKSTREAM_DB_PASSWORD_FILE

no

File holding the database password

WORKSTREAM_ADMIN_TOKEN / _FILE

for admin API

Bearer token for /admin/*. If unset, admin requests are rejected

WORKSTREAM_PUBLIC_BASE_URL

no

Base used when returning user URLs. Defaults to the request host

WORKSTREAM_GH_APP_ID

for GitHub

GitHub App id

WORKSTREAM_GH_INSTALLATION_ID

for GitHub

App installation id

WORKSTREAM_GH_APP_KEY_PATH

for GitHub

Path to the App private key (PEM)

WORKSTREAM_GH_WEBHOOK_SECRET / _FILE

for GitHub

Webhook HMAC secret

WORKSTREAM_SLACK_SIGNING_SECRET / _FILE

for Slack buttons

Slack signing secret

WORKSTREAM_ROLE

no

api (default) or dispatcher

WORKSTREAM_TRANSPORT

no

stdio to serve MCP over stdin/stdout (same as --stdio)

WORKSTREAM_USER_TOKEN

stdio

The user the stdio server acts as

WORKSTREAM_DEMO

no

true seeds demo data and accepts the public demo token. Local trials only

WORKSTREAM_AUDIT_DISPATCH_ENABLED

dispatcher

true to run the audit dispatcher

WORKSTREAM_AUDIT_DISPATCH_SCRIPT

dispatcher

Path to audit-dispatch.sh

WORKSTREAM_AUDIT_DISPATCH_TIMEOUT

no

Dispatch script timeout in seconds

WORKSTREAM_OTEL_ENDPOINT

no

OTLP endpoint for traces and metrics. Unset means telemetry is off. The URL token is redacted from spans

WS_SSH_MCP_HOST / WS_SSH_MCP_USER

dispatcher

Optional test host given to audit runs as an ssh-host MCP

Per-project Slack bot tokens are files under the secrets directory, referenced by set_project_slack. See docs/slack-setup.md and docs/github-setup.md.

Building from source

dotnet build
dotnet test tests/Workstream.UnitTests           # no Docker
dotnet test tests/Workstream.IntegrationTests    # Docker (Testcontainers, Postgres 16)
dotnet test tests/Workstream.ConcurrencyTests    # Docker

Run the API against your own Postgres:

export WORKSTREAM_DB_CONNECTION="Host=localhost;Database=workstream;Username=workstream;Password=devpass"
export WORKSTREAM_ADMIN_TOKEN="dev-admin-token"
dotnet run --project src/Workstream.Api

Documentation

Status

Early, version 0.3.1. Known gaps:

  • claim_next_attempt_for_review is a stub.

  • workstream-admin apply (declarative bootstrap) only prints the file.

  • The stuck-work report is stored but not yet posted to Slack.

  • Only the latest master is supported; there are no release branches.

See CHANGELOG.md and the roadmap.

Community

Contributing

Start with CONTRIBUTING.md and the good first issues. Planned work is in ROADMAP.md. The repository opens in a dev container or GitHub Codespaces with the .NET 10 SDK and Postgres ready.

Open in GitHub Codespaces

Contributors

Contributors

License

MIT. Copyright 2026 Ahmad Shawar.

Available Tools

36 tools
activate_planA
Idempotent

Admin: move a plan from draft to active. Enqueues board-sync items for every task currently in the plan and posts a plan.activated Slack notification.

NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=true, openWorld=false, so the safety profile is known; the description usefully adds the hidden side effects (board-sync items enqueued per task, a plan.activated Slack post). It leaves one real gap: with idempotentHint=true, it does not say whether those side effects fire again on a repeated call.

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 tight sentences with zero filler; the admin/permission signal and the state transition are front-loaded, and the side-effect sentence follows in priority order.

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 two-parameter mutation with no output schema, the description covers what it does and its externally visible effects well. The omissions are the undisclosed 'as_agent' parameter and any indication of what a successful activation returns.

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 clarifies neither parameter. PlanId format/constraints are unstated, and 'as_agent' — a governance-relevant impersonation field on an admin mutation — is not mentioned at all, so the description fails to compensate for the empty 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?

States a specific verb and resource plus the exact state transition ('move a plan from draft to active'), which no sibling tool performs. An agent can distinguish it from create_plan, archive_plan, and export_plan without opening any schema.

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 'Admin:' prefix signals a permission prerequisite and the draft→active transition implies the precondition, but the description never names an alternative (e.g., archive_plan for retirement) or says when not to use it. Usage is implied rather than stated.

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

add_phaseC

Admin: add a phase to a plan. Phases are an optional structural layer; tasks may be unphased.

NameRequiredDescriptionDefault
NameNo
PlanIdYes
as_agentNo
OrderIndexYes

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the description's contribution should be the extra context: what a second identical call does, how OrderIndex collisions are resolved, and whether rename/duplicate Name values are rejected. It provides only the 'Admin:' permission hint and says nothing about these ordering/idempotency behaviors, which matter most for a non-idempotent mutation.

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

Conciseness4/5

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

Two tight sentences, front-loaded with the admin action, and the second sentence adds genuine domain context rather than padding. Nothing is wasted, though the space saved could have been spent on parameter semantics.

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

Completeness2/5

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

For a non-idempotent mutation with no output schema and zero documented parameters, an agent cannot determine valid OrderIndex values, Name constraints, failure modes, or what is returned. The description covers the concept of a phase but not enough to invoke the tool correctly without guessing at the required fields.

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% for all four parameters, so the description carries the full burden — yet it names none of them. Crucially, the required 'OrderIndex' is left completely unexplained (its range, whether gaps are permitted, how it interacts with sibling phases), and 'as_agent' and 'Name' get no mention at all.

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

Purpose4/5

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

States a specific verb+resource ('add a phase to a plan') so the operation is unambiguous. It also clarifies the domain concept ('phases are an optional structural layer; tasks may be unphased'), which separates it from task-creation siblings like create_task, though it never names an alternative tool.

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 'Admin:' prefix signals a privileged operation, and the note that phases are optional implies this is not always required. But there is no explicit when-to-use/when-not guidance, no prerequisites (does the plan need to be in a particular state?), and no named alternative for restructuring an existing plan.

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

add_project_boardB

Admin: register a GitHub Projects V2 board for a project. Caller must have already discovered the Status field option ids via the GraphQL API (the discover endpoint helps).

NameRequiredDescriptionDefault
as_agentNo
ProjectIdYes
DisplayNameNo
GithubOwnerNo
StatusOptionDoneNo
StatusFieldNodeIdNo
StatusOptionReviewNo
GithubProjectNumberYes
StatusOptionBacklogNo
StatusOptionBlockedNo
GithubProjectV2NodeIdNo
StatusOptionInProgressNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare that this mutates state, is non-idempotent, and is not open-world, so safety is covered. The description adds useful sequencing context (the Status option ids must pre-exist), but says nothing about duplicate-registration behavior, permission requirements, or what a failure looks like — relevant given idempotentHint=false.

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

Conciseness4/5

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

Two compact sentences, with the core action front-loaded after the 'Admin:' prefix. The parenthetical about the discover endpoint is slightly vague but not wasteful.

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

Completeness2/5

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

For a 12-parameter write tool with no output schema and no parameter descriptions, the description is thin. An agent still cannot tell which optional fields are needed for a minimally valid call or how the various node-id fields relate to one another.

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% across 12 parameters, so the description carries the full documentation burden and mostly does not meet it. It only indirectly explains the five StatusOption*/StatusFieldNodeId fields as GraphQL-discovered ids; ProjectId, GithubOwner, DisplayName, GithubProjectNumber, GithubProjectV2NodeId, and as_agent are undocumented anywhere.

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

Purpose4/5

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

States a specific verb and resource ('register a GitHub Projects V2 board for a project') and flags the admin scope, which separates it from sibling helpers like add_project_repo or create_project. It doesn't compare itself to those siblings explicitly, but the resource is unambiguous.

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?

Gives a clear precondition for use: the caller must have already discovered Status field option ids via the GraphQL API, and it points at a discover endpoint as the way to do that. It stops short of saying what to do if the board is already registered or when not to call it.

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

add_project_repoB

Admin: attach a GitHub repo to a project. Reference-only repos are not modified by the system (e.g. an upstream project used as a design reference).

NameRequiredDescriptionDefault
as_agentNo
ProjectIdYes
GithubRepoNo
GithubOwnerNo
IsReferenceOnlyNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare a non-read-only, non-destructive, non-idempotent mutation, so the safety profile is covered. The description adds real value by disclosing the admin requirement and the important consequence that reference-only repos are left untouched, but it is silent on duplicate-attach behavior (relevant given idempotentHint=false) and on what a successful call returns.

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 short sentences, zero waste, with the privileged nature and the core action front-loaded before the reference-only nuance. Nothing is repeated or padded.

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

Completeness2/5

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

For a five-parameter mutation tool with no output schema and no parameter documentation, the description does far too little: it omits the required ProjectId, the repo identifier format, the role of as_agent, and failure modes. An agent could not confidently construct a call from this text alone.

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% across five parameters, and the description only illuminates one of them indirectly (IsReferenceOnly, via the "not modified by the system" sentence). It never clarifies whether GithubRepo is a bare name or owner/name path, why GithubOwner is separate, or what as_agent does, leaving genuinely ambiguous inputs.

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

Purpose4/5

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

States a specific verb and resource ("attach a GitHub repo to a project") and the "Admin:" prefix signals the privileged nature of the operation. It is clearly distinguishable from siblings like add_project_board or set_project_slack, though it never names those alternatives explicitly.

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 "Admin:" label implies when the tool is applicable (administrative setup of a project) and the reference-only sentence hints at the design-time vs delivery-time distinction. But there is no explicit when-to-use/when-not guidance or comparison with the other project-configuration siblings.

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

archive_planA
DestructiveIdempotent

Archive (disable) a plan so it stops accepting work. Requires can_archive_plan on the calling actor. An archived plan is frozen: claim_next_task, claim_specific_task, the finding-claim tools, create_task / create_tasks, and activate_plan all reject it with the structured plan_archived error. Use this to retire a finished or abandoned plan — the next time an orchestrator bootstraps it will find no active plan of that type and create a fresh one, which is how you start a new audit/development pass on demand. Archiving is one-way (there is no un-archive) and idempotent; the plan's tasks, events, and board cards are left intact for forensics. The outcome is 'Completed' (default) or 'Canceled' — it suffixes the audit milestone's title when it is closed and shows on the Slack notice, alongside the reason. Posts a plan.archived Slack notice. Returns the plan id, its new status, the resolved outcome, and already_archived (true when the plan was already archived).

NameRequiredDescriptionDefault
PlanIdYes
ReasonNo
OutcomeNo
as_agentNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only flag destructive/idempotent; the description goes far beyond by naming the required permission (can_archive_plan), enumerating exactly which tools reject an archived plan and with which structured error (plan_archived), stating irreversibility, and confirming tasks/events/board cards survive for forensics. It also discloses the side effect of posting a plan.archived Slack notice and the returned fields, none of which is in the annotations.

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

Conciseness4/5

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

The core action and permission requirement are front-loaded, and nearly every sentence adds operational value (blocked tools, error code, idempotency, side effects). It is a dense single block though; the return-value and outcome detail could be split or trimmed without loss.

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 destructive, permission-gated mutation the description covers effects, reversibility, idempotency, side effects, and return values (no output schema exists, so this matters). The only real gap is the undocumented `as_agent` parameter, which an agent may need for correct invocation.

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?

With 0% schema coverage the description must carry parameter meaning, and it does for Outcome ('Completed' default or 'Canceled', suffixing the audit milestone title and appearing on Slack) and Reason (shown on the Slack notice); PlanId is self-evident. However, the fourth parameter `as_agent` is never explained, leaving one of four parameters undocumented anywhere.

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 and resource — 'Archive (disable) a plan so it stops accepting work' — and immediately clarifies the semantic effect (disable, not delete). It is clearly distinguishable from siblings like activate_plan and create_plan, which it mentions by name in the effect list.

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 states exactly when to reach for this tool ('retire a finished or abandoned plan') and explains the downstream lifecycle consequence: the next orchestrator bootstrap finds no active plan and creates a fresh one, which is how a new pass is started on demand. It also gives the key when-not signal implicitly and explicitly via the one-way, no-un-archive constraint, so an agent knows there is no undo path.

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

cancel_auditA
DestructiveIdempotent

Admin: cancel a running audit for one or more projects. Pass projects as a list of project slugs or ids. Each is resolved and a cancel request is queued on the audit-dispatch outbox; a background worker signals that project's audit session, which triggers the orchestrator's own /audit-cancel cleanup (no hard kill). The result lists each project with status 'queued' or 'unknown_project'.

NameRequiredDescriptionDefault
ProjectsNo
as_agentNo

TDQS

A4.1/5.0
Behavior5/5

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

Goes well past annotations by explaining the actual mechanism: a cancel request is queued on the audit-dispatch outbox, a background worker signals the session, and the orchestrator's own /audit-cancel cleanup runs ('no hard kill'). It also discloses the response shape (per-project status of 'queued' or 'unknown_project'), which is exactly the kind of context annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with the action and scope, then the mechanism, then the result format. Four sentences all carrying information; the outbox/worker sentence is dense but earns its length by explaining the non-destructive semantics.

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?

With no output schema, the description usefully explains the returned per-project statuses, and the async cancel mechanism is fully described. The only real gap is the undocumented `as_agent` parameter and the ambiguity around whether `projects` is mandatory.

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 0%, so the description must compensate, and it does well for `projects` — accepting a list of slugs or ids and noting each is resolved. However, `as_agent` is never mentioned, and the schema marks no parameters required while the description implies `projects` must be passed.

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?

States a specific verb and resource ('cancel a running audit') plus scope ('one or more projects'), and the 'Admin:' prefix signals the privilege class. It is trivially distinguishable from request_audit and the other lifecycle siblings.

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 admin framing and 'cancel a running audit' imply the situation, but there is no explicit when-to-use/when-not, no mention of what happens if the audit is not running, and no named alternative. Usage must be inferred.

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

claim_next_attempt_for_reviewA

Reserved tool surface for the future fix-verifier / dev-reviewer queue. In v1 the verdict tools (submit_attempt_verdict / submit_review_decision) accept the attempt id directly from the orchestrator's working state, so no separate claim is needed.

NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare the safety profile (not read-only, not idempotent, not destructive), and the description adds that the tool is reserved and unnecessary in v1. However, it does not state what happens if the tool is called now (no-op, error, or future behavior), leaving a behavioral 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?

Two concise sentences with the key constraint stated first. There is no wasted text.

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 reserved tool with no output schema, the description sufficiently explains why it should not be used in v1. However, it omits parameter meaning and what calling the tool would actually do, which are relevant gaps even for a placeholder.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain PlanId or as_agent at all. Parameter names offer minimal meaning, but the description fails to compensate for the missing schema documentation.

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

Purpose4/5

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

The description clearly states that this is a reserved tool surface for a future queue and that it is not needed in v1. It distinguishes itself from the verdict siblings by explaining that they accept the attempt id directly, though it does not describe an actionable purpose because none currently exists.

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 says no separate claim is needed in v1 and names the alternatives (submit_attempt_verdict and submit_review_decision) that use the attempt id from orchestrator working state. This gives the agent a clear condition for avoiding this tool.

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

claim_next_finding_for_fixA

Audit-plan-only: claim the highest-severity confirmed (or below-cap fix_failed/partial) finding to fix. Caller is implicitly the 'fixer' for the claim. Sets the finding status to in_fix as part of the claim transaction.

NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only cover the safety triad; the description adds two things they don't: the claim mutates state by setting the finding to in_fix, and the caller implicitly becomes the fixer. It omits what happens when no eligible finding exists and whether the claim has a lease/expiry (refresh_claim and release_claim in the sibling list suggest one exists).

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

Conciseness4/5

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

Three tight sentences, with the plan-scope constraint and the selection rule front-loaded before the side-effect disclosure. No filler, though 'below-cap fix_failed/partial' is compressed to the point of ambiguity.

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 no output schema and a mutation tool with two undocumented parameters, key facts are missing: the return payload (does it return the finding or just a confirmation?), behavior when no claimable finding exists, the meaning of 'below-cap', and any claim lease/TTL. A claim tool that silently changes status needs at least the failure mode documented.

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 carry the parameter burden and does not. PlanId is only obliquely implied by 'Audit-plan-only', and as_agent is never mentioned at all — notably it appears to conflict with 'Caller is implicitly the fixer', leaving the agent unsure how to attribute the claim.

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?

States a specific verb (claim), the exact resource (a finding), and the selection rule (highest-severity confirmed, or below-cap fix_failed/partial). The 'for_fix' scope plus the selection predicate clearly separates it from claim_next_finding_for_verification.

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?

'Audit-plan-only' sets the applicability constraint up front and 'to fix' implies the alternative (verification) is a different tool. It never explicitly names claim_specific_task or claim_next_finding_for_verification as the alternatives, so routing is inferred from names rather than stated.

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

claim_next_finding_for_verificationA

Audit-plan-only: claim the highest-severity pending-verification finding on the plan. The calling actor is implicitly assigned the 'verifier' role for the claim duration. Returns no_work_available if no findings are waiting.

NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

A3.7/5.0
Behavior4/5

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

The description discloses behavior the annotations don't cover: the calling actor is implicitly assigned the 'verifier' role for the claim duration, and the empty-queue return is named. Annotations only give the mutation safety profile, so this added context is valuable. It stops short of explaining claim release/expiry.

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 tight sentences, scope front-loaded, no filler. Every clause conveys distinct, useful information.

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 non-readonly claim mutation with no output schema, the description covers role assignment and the empty-queue case, but leaves the as_agent parameter and the claim lifecycle (expiry, release) unexplained, which an agent needs to call it correctly.

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

Parameters2/5

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

Schema coverage is 0%, so the description must document both parameters. It implies PlanId via 'on the plan' but says nothing about 'as_agent', leaving half the parameters undocumented in both schema and description.

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

Purpose4/5

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

States a specific verb (claim) and resource (highest-severity pending-verification finding) scoped to the audit plan. The 'verification' qualifier distinguishes it from siblings like claim_next_finding_for_fix and claim_next_attempt_for_review, though it doesn't explicitly name them.

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?

'Audit-plan-only' sets a clear precondition, and 'Returns no_work_available if no findings are waiting' tells the agent what to expect when the queue is empty. It lacks an explicit pointer to the alternative claim tools, keeping it 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.

claim_next_taskA

Atomically claim the highest-priority pending task on a plan for the given role. The role must be valid for the plan's plan_type (e.g. 'developer' for dev plans, 'auditor' for audit). Returns { task, claim_token } on success or no_work_available if nothing is claimable. Use this when the orchestrator or developer is ready to start something new and the system should pick. Assigns the bound Project V2 card to the calling actor's GitHub user.

NameRequiredDescriptionDefault
RoleNo
PlanIdYes
as_agentNo
TtlOverrideNo

TDQS

A4/5.0
Behavior4/5

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

Annotations declare non-read-only, non-idempotent, non-destructive, but the description adds genuinely new behavior: the operation is atomic, it returns { task, claim_token } or no_work_available, and it has the side effect of assigning the bound Project V2 card to the calling actor's GitHub user. The claim TTL/expiry behavior implied by TtlOverride is left unexplained.

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?

Four sentences, front-loaded with the action and selection rule, followed by validity constraint, return contract, usage trigger, and side effect. No filler and each sentence adds information an agent needs.

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 mutating claim tool with no output schema, the description supplies the return contract, atomicity, and the GitHub card side effect — more than most. Gaps remain around claim lifetime/TTL semantics and the enumerated valid roles per plan_type, which matter for correct invocation.

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 0%, so the description must carry parameter meaning. It does well for Role ('must be valid for the plan's plan_type', with examples) and implies PlanId's role, but as_agent and TtlOverride — two of four parameters — are never explained, leaving their semantics undocumented anywhere.

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

Purpose4/5

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

States a specific verb and resource ('claim the highest-priority pending task on a plan') plus the selection rule, which separates it from claim_specific_task without naming that sibling. The role/plan_type coupling is also concrete. It stops short of explicitly naming the neighboring claim tools, so an agent must infer the boundary.

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?

'Use this when the orchestrator or developer is ready to start something new and the system should pick' gives a clear positive trigger, implicitly contrasting with picking a specific task. No explicit when-not-to-use or pointer to claim_specific_task, so it is clear context without exclusions.

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

claim_specific_taskA

Claim a specific task by id. Fails with task_unavailable if another actor holds it with an unexpired claim. Use when the orchestrator is directing work (e.g. dispatching a subagent to a particular task). Assigns the bound Project V2 card to the calling actor's GitHub user.

NameRequiredDescriptionDefault
RoleNo
TaskIdYes
as_agentNo
TtlOverrideNo

TDQS

A3.9/5.0
Behavior4/5

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

Adds real context beyond the annotations: the failure mode 'task_unavailable' when another actor holds an unexpired claim, and the side effect of assigning the Project V2 card to the caller's GitHub user. It does not explain TTL expiry semantics or what Role/as_agent change behaviorally, leaving some gaps for a non-idempotent mutation.

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

Conciseness4/5

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

Three compact sentences with the action front-loaded, followed by failure mode and side effect. No filler, though the side-effect sentence could be tightened.

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

Completeness3/5

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

Covers the error condition and mutation side effect for a non-idempotent write with no output schema, which is the minimum an agent needs. However, with three of four parameters undocumented, an agent lacks enough to invoke meaningfully in non-default cases.

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 carry parameter meaning, but it only clarifies TaskId ('by id'). Role, as_agent, and TtlOverride are completely undocumented in both schema and description, leaving an agent guessing at three of 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?

States a specific verb and resource ('Claim a specific task by id') and implicitly distinguishes itself from the sibling claim_next_task by being targeted at a caller-chosen id. Also names the side effect of assigning the bound Project V2 card.

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

Usage Guidelines4/5

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

Explicitly says 'Use when the orchestrator is directing work (e.g. dispatching a subagent to a particular task)', giving a concrete selection condition. It stops short of naming claim_next_task as the alternative for the pull-based case, but the context makes the split inferable.

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

create_planA

Admin: create a new plan (in draft status). When primary_board_id is omitted the plan inherits the project's board automatically if the project has exactly one registered board — this is what makes board sync fire for every task on the plan, including create_tasks bulk inserts. Pass primary_board_id explicitly only when the project has more than one board. The response echoes the resolved primary_board_id; a null value means the plan is NOT board-bound and no cards will appear. Use activate_plan to move the plan to active and enqueue the board items for existing tasks.

NameRequiredDescriptionDefault
NameNo
PlanTypeNo
as_agentNo
ObjectiveNo
ProjectIdYes
PrimaryBoardIdNo
PrimarySlackChannelIdNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already establish that this is a non-read-only, non-destructive creation operation. The description adds important context beyond annotations: admin scope, draft status, automatic board inheritance, board-sync side effects, the null PrimaryBoardId meaning, and the activate_plan follow-up.

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 front-loaded with the core action and status, then proceeds directly into the critical board-binding behavior and the activation follow-up. Every sentence adds meaningful invocation or follow-up context, with no redundant restatement of the tool name.

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?

There is no output schema, but the description compensates by explaining the echoed resolved PrimaryBoardId and what null means. It also covers the key board-sync behavior and next step; the remaining gap is the unexplained optional parameters.

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 explains PrimaryBoardId in depth, including inheritance rules and response semantics. However, schema description coverage is 0% and six of seven parameters are not explained, including non-obvious fields such as PlanType, as_agent, and PrimarySlackChannelId.

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 and resource ('create a new plan') plus initial status ('in draft status'). It also differentiates the follow-up path by naming 'activate_plan', so an agent can distinguish creation from activation without opening other schemas.

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 gives explicit conditional guidance for PrimaryBoardId: omit it when the project has exactly one registered board, pass it explicitly only when the project has more than one board. It also routes the agent to activate_plan for moving the plan to active and enqueueing board items.

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

create_projectB

Admin: create a new project. Slug is the stable identifier used in URLs and CLIs.

NameRequiredDescriptionDefault
SlugNo
as_agentNo
DescriptionNo
DisplayNameNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this a non-read-only, non-destructive, non-idempotent write, so the description's job is lighter. The 'Admin:' prefix adds an auth requirement not covered by annotations, and the slug note hints at the identifier's downstream role, but it says nothing about duplicate-slug handling, side effects, or what is returned.

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 short sentences, front-loaded with the action and the most consequential parameter semantics. No filler.

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

Completeness2/5

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

For a mutating admin tool with four optional parameters, no output schema, and no annotation coverage of auth, the description leaves too much open: the 'as_agent' parameter, slug derivation, duplicate behavior, and what the call returns are all unstated.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, yet it only explains Slug ('stable identifier used in URLs and CLIs'). DisplayName and Description are self-evident, but 'as_agent' is completely opaque, and nothing says whether slug is generated or required despite zero required params.

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

Purpose4/5

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

The description states a specific verb and resource ('create a new project') and adds the 'Admin' scope marker. It is clear on its own, but it does not differentiate itself from siblings such as create_task or create_plan beyond the resource name.

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 'Admin:' prefix implies a permission/role prerequisite, which is the only usage signal given. There is no statement of when to use this versus alternatives, no prerequisites for slug availability, and no note about what to do if the project already exists.

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 task on a plan, in pending status. Optional 'depends_on' is a list of task ids this new task depends on — claim_next_task and claim_specific_task both skip tasks whose predecessors are not in a terminal state (done / deferred / skipped / out_of_scope), so the orchestrator can parallelize unblocked work and sequence blocked work. All predecessors must live on the same plan; cycles are rejected at insert. The board sync always fires so the BoardSyncWorker creates a draft item on the bound GitHub Projects V2 board (Backlog column) on first drain. Slack is opt-in: 'notify_slack' defaults to false to keep the channel quiet during plan setup and admin imports; pass true to post a task.created message if the project has Slack configured. Used by orchestrators that decompose larger work units into tasks at runtime, and by admin tools that import work from external sources.

NameRequiredDescriptionDefault
PathsNo
TitleNo
PlanIdYes
PhaseIdNo
PriorityNo
as_agentNo
DependsOnNo
DescriptionNo
ExternalKeyNo
NotifySlackNo
ReferencePointerNo

TDQS

A3.8/5.0
Behavior5/5

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

Goes well beyond the annotations: states the created status (pending), dependency semantics including cycle rejection at insert and the same-plan constraint, and the always-on board sync that makes BoardSyncWorker create a draft GitHub Projects V2 item in Backlog on first drain. It also discloses that Slack is opt-in with notify_slack defaulting to false, which is exactly the kind of side-effect detail an agent cannot infer from readOnlyHint/destructiveHint.

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

Conciseness4/5

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

Front-loaded with the core action and initial state, and each sentence contributes new information (dependencies, board sync, Slack). It is dense and slightly run-on in places, but nothing is 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?

Strong on dependencies and side effects for a mutation tool with no output schema, but an agent still cannot tell what most of the 11 inputs mean or what the call returns (the created task id, presumably, but unstated). With 0% schema coverage the description should have closed more of that gap.

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% across 11 parameters, so the description carries the full burden — yet it explains only DependsOn and NotifySlack. Title, PlanId, PhaseId, Priority, Paths, as_agent, Description, ExternalKey and ReferencePointer get no semantics at all, and the casing mismatch ('depends_on' / 'notify_slack' vs DependsOn / NotifySlack) is unaddressed.

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

Purpose4/5

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

Opens with a specific verb, resource and initial state: 'Create a new task on a plan, in pending status.' That is far more precise than the name alone. It never distinguishes itself from the sibling 'create_tasks' (bulk variant), which is the one confusion an agent is likely to have.

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?

Gives clear caller context: 'Used by orchestrators that decompose larger work units into tasks at runtime, and by admin tools that import work from external sources.' It also explains downstream consumption via claim_next_task / claim_specific_task, which helps an agent reason about sequencing. It stops short of explicit exclusions or pointing at 'create_tasks' for bulk creation.

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

create_tasksA

Bulk task creation for orchestrator bootstrap (e.g. Phase 0 of an audit). Accepts a list of tasks on a single plan. Each item may carry 'depends_on_ids' (uuid list referencing tasks already in the database) AND/OR 'depends_on_external_keys' (string list referencing other items in this same batch by their external_key — resolved to ids after the first pass). The batch is processed in two passes: first every task is inserted with no dependencies, then edges are wired up using the resolved id map. Cycles are rejected — the call returns the first cycle's task and rolls back nothing (already-inserted tasks remain, so the caller can fix the bad edge and re-run idempotently using unique external_keys). Board sync always fires for every inserted task so the Project V2 board reflects the batch. Slack is opt-in: 'notify_slack' defaults to false to avoid flooding the channel with a task.created burst — pass true if you want every task announced.

NameRequiredDescriptionDefault
TasksYes
PlanIdYes
as_agentNo
NotifySlackNo

TDQS

A4.3/5.0
Behavior5/5

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

Goes far beyond the annotations: discloses the two-pass insert-then-wire algorithm, cycle rejection behaviour, and the crucial non-atomic detail that 'rolls back nothing (already-inserted tasks remain)', plus the board-sync side effect and Slack opt-in default. For a mutation tool with only generic hints, this is exactly the operational context an agent needs before committing a batch.

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

Conciseness4/5

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

Dense and front-loaded — the batch scope comes first, then mechanics, then side effects, then the Slack toggle. Some sentences pack multiple claims (the cycle sentence chains rejection, non-rollback, and retry strategy), which rewards careful reading but costs little.

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?

Covers failure modes, persistence semantics, side effects and the Slack default, which is strong for a non-atomic mutation with no output schema. The remaining gaps are the undocumented as_agent parameter and no statement of what the successful response contains (counts, ids, cycle payload).

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?

With 0% schema coverage the description carries the full burden and does most of it: it defines the item-level fields external_key, depends_on_ids and depends_on_external_keys and explains NotifySlack's default and effect. It leaves 'as_agent' entirely unexplained and the Tasks array's own element shape is never spelled out beyond the dependency keys, so it stops short of complete.

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?

States a specific verb and resource — 'Bulk task creation' — plus the scope 'a list of tasks on a single plan', which cleanly separates it from the singular create_task sibling. An agent knows immediately this is the batch path rather than the one-at-a-time path.

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?

Usage context is present but incidental: 'for orchestrator bootstrap (e.g. Phase 0 of an audit)' and the conditional 'pass true if you want every task announced'. It never explicitly compares against create_task or says when a single-task call is preferable, so the selection decision is implied rather than guided.

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

export_planA
Read-onlyIdempotent

Export a deterministic snapshot of a plan, suitable for committing to a repo or pasting into chat. format ∈ {markdown, json}. Markdown is human-readable and stable; JSON is the full structured tree (tasks, findings, attempts, verdicts). Export is one-way — the database is the source of truth, not the markdown.

NameRequiredDescriptionDefault
FormatNo
PlanIdYes
as_agentNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false; the description adds value beyond them by disclosing determinism, one-way semantics, and that the markdown copy is not authoritative. It doesn't cover auth requirements or whether as_agent changes permissions/visibility.

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 tight sentences, front-loaded with the purpose, then format options, then the one-way caveat. Nothing is padding; each sentence adds a distinct fact.

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?

No output schema, but the description characterizes the JSON return ('full structured tree of tasks, findings, attempts, verdicts') and markdown's human-readable stability. Only the as_agent parameter remains unexplained, which is a modest gap for a low-complexity read tool.

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 0%, so the description must compensate. It does explain Format's allowed values (markdown, json) - information notably absent from the schema - but PlanId is unstated and as_agent is completely undocumented in both places.

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?

States a specific verb and resource: export a deterministic snapshot of a plan. It adds scope ('deterministic snapshot') and intended destinations (repo, chat) so the agent can distinguish it from read tools like get_plan_dashboard or list_plans without opening a schema.

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?

Gives concrete use contexts (committing to a repo, pasting into chat) and clarifies the direction of the operation ('export is one-way - the database is the source of truth'). No sibling is named as an alternative, but no sibling performs export, so the routing gap is minor.

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

get_event_logB
Read-onlyIdempotent

Forensic event log for a specific entity (task / finding / attempt / plan / phase). Used to investigate 'why did this task end up in needs_human_review' — the events table records every state change with the actor and reason.

NameRequiredDescriptionDefault
LimitNo
SinceNo
EntityIdYes
as_agentNo
EntityTypeNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that the events table records every state change with actor and reason, which is useful context, but says nothing about result volume, ordering, or pagination despite a Limit parameter existing.

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

Conciseness4/5

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

Two sentences, no filler, with the primary purpose front-loaded and the investigative use case as supporting detail. Slightly compact relative to the tool's complexity, but nothing is wasted.

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

Completeness3/5

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

With five parameters, a nested object, and no output schema, the description should clarify what a caller gets back and how Since/Limit shape the result. It partially gestures at the return content (events with actor and reason) but leaves the parameter mechanics unexplained.

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% across five parameters, one of which (Since) is a nested object. The description only hints at EntityType via the entity-kind list; it says nothing about EntityId, Limit, Since, or as_agent, so it fails to compensate for the documentation gap.

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

Purpose4/5

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

States a specific verb+resource (forensic event log for a specific entity) and enumerates the entity kinds it covers (task / finding / attempt / plan / phase). The purpose is unambiguous, though it does not name any sibling tool to distinguish itself from.

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?

Gives a concrete triggering scenario: investigating 'why did this task end up in needs_human_review'. That is a clear usage context, but there is no guidance on when not to use it and no reference to adjacent tools such as get_stuck_work.

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

get_findingA
Read-onlyIdempotent

Retrieve the full body of a single finding by id: severity, invariant impact, symptom, root cause, reproduction steps, adversarial input, expected vs actual, reference comparison, status, and claim holder. claim_next_finding_for_verification and claim_next_finding_for_fix return only the finding id, task id, status, and severity — call get_finding to fetch the auditor-authored body a verifier or fixer subagent needs to reproduce the issue. No claim is required: this is a plain read, so an orchestrator that did not author the findings in the current session (or resumed after a restart) can still recover them. Returns the structured not_found error if the id is unknown. The live claim token is deliberately not returned — use a claim tool to take the finding.

NameRequiredDescriptionDefault
as_agentNo
FindingIdYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds material context beyond them: no claim or ownership is required, recovery works after a restart or for an orchestrator that did not author the findings, unknown ids produce a structured not_found error, and the live claim token is deliberately withheld. These are exactly the behavioral facts an agent needs before deciding to call it.

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

Conciseness4/5

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

Front-loaded with what is returned, then routing guidance, then caveats; every sentence carries information. The field enumeration is long but serves to tell the agent whether the payload is sufficient, though the sentence could be tightened slightly.

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?

With no output schema, the description compensates by enumerating the returned body fields and the error case. It omits any explanation of the as_agent parameter, which is the only notable completeness gap for a simple two-parameter read tool.

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 0%, so the description must carry the burden. It clarifies FindingId semantics implicitly ('by id') and that unknown ids trigger not_found, but the second parameter as_agent is never mentioned or explained in either the schema or the description, leaving a real 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?

States a specific verb and resource ('Retrieve the full body of a single finding by id') and enumerates the fields returned, so the agent knows exactly what it gets. It explicitly contrasts with claim_next_finding_for_verification and claim_next_finding_for_fix, which return only a stub, making selection unambiguous.

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 an explicit trigger: after a claim tool returns only id/task/status/severity, call this to fetch the auditor-authored body needed to reproduce the issue. It also states a when-not/alternative condition indirectly ('No claim is required: this is a plain read') and directs the agent to a claim tool when a live claim token is needed.

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

get_my_active_workA
Read-onlyIdempotent

Every active claim the calling actor currently holds across every plan: tasks, findings, and attempts in review. Use this on session start to recover claims after a Claude restart.

NameRequiredDescriptionDefault
as_agentNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuine context beyond them: that the scope spans every plan and covers three claim categories, and that the intended behavior is state recovery after a restart. It does not say what the claims look like on return or whether the caller must re-acquire/refresh them afterward.

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: the first defines the returned content, the second defines the use case. Front-loaded with the payload scope and no filler.

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 zero-required-parameter read tool with no output schema, the description covers what is returned and why. The remaining gap is the undocumented as_agent override, plus no hint about whether returned claims include the IDs needed to release or refresh them.

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 carries the full burden for as_agent, yet the parameter is never mentioned. The phrase 'the calling actor' implies an implicit identity, but an agent cannot tell whether as_agent overrides that identity, what format it expects, or why it would be set.

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?

States a specific retrieval: 'Every active claim the calling actor currently holds across every plan,' and enumerates exactly which claim types are returned (tasks, findings, attempts in review). This cleanly distinguishes it from the sibling claim_next_* and get_stuck_work tools, which acquire or diagnose rather than enumerate the caller's own holdings.

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?

Gives an explicit trigger: 'Use this on session start to recover claims after a Claude restart.' That is a clear when-to-use signal an agent can act on. It stops short of naming alternatives (e.g., get_stuck_work or refresh_claim) or stating when this tool is not the right choice.

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

get_plan_dashboardA
Read-onlyIdempotent

Comprehensive snapshot for one plan: per-status counts, per-phase counts, up to 5 next-claimable tasks, the caller's currently-held claims, stuck work (claims older than 2× their TTL), and the 20 most recent events. This is the single call an orchestrator makes every iteration to decide what to do next; cached in-process for 5 seconds and invalidated on LISTEN/NOTIFY.

NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description correctly spends its words elsewhere: it discloses in-process caching for 5 seconds and invalidation via LISTEN/NOTIFY, which is real staleness information an agent cannot get from annotations. It does not mention the caller-identity behavior of `as_agent`, which is the one behavioral 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?

Two dense sentences, front-loaded with the payload inventory, then the orchestration use case, then caching semantics. No filler and nothing repeated from annotations or schema.

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?

With no output schema, the description correctly enumerates return contents and their bounds (up to 5 tasks, 20 events), which is exactly what an agent needs to plan around. The remaining hole is `as_agent` semantics and what the stuck-work threshold means operationally for any non-default caller identity.

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% for two parameters, so the description must compensate — and it does not. `PlanId` is inferable from context, but `as_agent` is a semantically loaded parameter (whose claims are reported as 'the caller's'?) that is completely unexplained in both schema and description.

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

Purpose5/5

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

States a specific verb+resource ('Comprehensive snapshot for one plan') and enumerates exactly what the snapshot contains (per-status counts, per-phase counts, next-claimable tasks, held claims, stuck work, recent events). This sharply distinguishes it from siblings like get_stuck_work, get_event_log, and get_my_active_work, which each return a subset.

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?

'This is the single call an orchestrator makes every iteration to decide what to do next' gives clear usage context and implicitly tells the agent to prefer this over assembling the picture from the narrower sibling tools. It stops short of explicitly naming those alternatives or stating when NOT to use it (e.g., when only recent events are needed, use get_event_log).

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

get_stuck_workA
Read-onlyIdempotent

On-demand view of the same data the hourly stuck-work job computes: tasks past their TTL, claims held past their role's max_lifetime, findings in pending_verification > 24h, attempts past TTL, plans with no events in the last 24h. Scoped to a single plan or global.

NameRequiredDescriptionDefault
PlanIdNo
as_agentNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so safety is covered. The description adds real value beyond that by defining the exact semantics of 'stuck' (five concrete detection rules) and noting the data mirrors an hourly batch job, so an agent knows it is a read-only reconstruction rather than fresh state mutation. It does not mention cost or result size for a global scan.

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?

One front-loaded sentence that names the mechanism, then a compact enumeration of the detection categories, then the scoping clause. No filler and no repetition of the tool name or annotations.

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

Completeness3/5

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

With no output schema and 0% parameter coverage, the description does its job of explaining what kinds of records come back, but an agent still cannot tell what 'as_agent' does or whether the response is grouped per category. Adequate for the return-content question, incomplete for invocation details.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry all parameter meaning. 'Scoped to a single plan or global' implicitly explains PlanId (omit it for global), but 'as_agent' is never mentioned at all, leaving a likely impersonation/identity parameter completely undefined in both schema and description.

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

Purpose4/5

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

States a specific verb+resource ('on-demand view of ... stuck-work') and enumerates the five detection categories (TTL-expired tasks, over-long claims, stale pending_verification findings, expired attempts, silent plans), which tells an agent exactly what data it returns. It does not, however, distinguish itself from near-neighbors like get_plan_dashboard or get_my_active_work, which also surface work state.

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?

'Scoped to a single plan or global' implies the two usage modes, and 'on-demand view of the same data the hourly job computes' implies it is for checking current state without waiting for the hourly job. But there is no explicit guidance on when to prefer this over get_plan_dashboard / get_my_active_work, and no prerequisites or exclusions are given.

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

list_plansA
Read-onlyIdempotent

List plans on a project, optionally filtered by status. Each plan reports per-status task counts so the caller can pick the next plan with workable work without making N additional dashboard calls.

NameRequiredDescriptionDefault
StatusNo
as_agentNo
ProjectIdYes

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already establish that this is a safe, idempotent read. The description adds useful behavioral context about the return payload: each plan includes per-status task counts, which reduces extra dashboard calls. It omits ordering, pagination, or auth details, but adds real value beyond the annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action and followed by the practical benefit. There is no filler.

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 read-only list tool with no output schema, the description adequately explains the key returned data and why it matters. The main gap is the undocumented 'as_agent' parameter, though the core behavior is otherwise clear.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain all three parameters. It covers ProjectId and Status at a high level, but 'as_agent' is never mentioned, and there is no detail about valid status values or how filtering works.

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 and resource ('List plans on a project') plus optional filtering by status. It also distinguishes the tool's value from dashboard calls, so an agent can identify its role among siblings such as get_plan_dashboard and list_projects.

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 gives a clear use case: pick the next plan with workable work by using embedded per-status task counts instead of making N additional dashboard calls. It lacks explicit when-not-to-use guidance, but the alternative behavior is strongly implied.

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

list_projectsA
Read-onlyIdempotent

List every project the calling actor can see, with per-project active plan count and the number of tasks/findings the actor currently has claimed across the project. Use this as the first call when a developer or orchestrator wakes up and needs to decide what to work on.

NameRequiredDescriptionDefault
as_agentNo

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description adds useful behavioral context by explaining visibility scoping ('calling actor can see') and the returned aggregates, though it omits any mention of permissions, rate limits, or pagination.

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 core action and scope, followed by a clear usage cue. No sentence is wasted.

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 read-only list tool with no required parameters and no output schema, the description does well by describing the returned per-project data and the wake-up use case. The only notable gap is the unexplained 'as_agent' parameter.

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?

There is one optional parameter, 'as_agent', with 0% schema description coverage, and the description does not explain it at all. The phrase 'calling actor' hints at actor selection but does not clarify what 'as_agent' does or when to supply 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 states a specific verb and resource ('List every project') and clarifies the scope ('the calling actor can see') plus the aggregate data returned. This clearly distinguishes it from sibling tools like list_plans and get_plan_dashboard.

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 gives a clear usage context: 'Use this as the first call when a developer or orchestrator wakes up and needs to decide what to work on.' It does not explicitly state when not to use it or name alternatives, but the intended situation is unambiguous.

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

mark_task_statusA
DestructiveIdempotent

Set a task to a non-normal status: deferred, blocked, skipped, out_of_scope, or needs_human_review. Bypasses the claim mechanism (override path) and requires the relevant permission flag on the calling actor (can_mark_needs_human_review for blocked/needs_human_review, can_override_verdict for deferred/skipped/out_of_scope). Fires board + Slack so the bound Project V2 card moves to the matching column and the channel sees a task.blocked-style post with the supplied reason.

NameRequiredDescriptionDefault
ReasonNo
StatusNo
TaskIdYes
as_agentNo

TDQS

A4.4/5.0
Behavior5/5

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

Although annotations already declare non-readonly, destructive, idempotent, and closed-world behavior, the description adds important operational context: it bypasses the claim mechanism, specifies exact permission flags for status groups, and discloses board and Slack side effects with reason propagation.

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 front-loaded with purpose and valid statuses, then adds permission and side-effect details. Despite being dense, every clause contributes operational information and there is no filler.

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 destructive, permission-gated mutation with side effects, the description covers statuses, override behavior, permission requirements, and board/Slack effects. The main gap is that as_agent is not explained, and there is no mention of return or error behavior beyond the side effects.

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 0%, so the description carries the burden. It compensates by listing allowed Status values and implying Reason is the supplied reason, but it omits any explanation of as_agent and gives no format or semantics beyond the status enumeration.

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 and resource: setting a task to a non-normal status. It enumerates the exact statuses and distinguishes this from normal task flow by noting it bypasses the claim mechanism via the override path.

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 gives clear usage context: non-normal statuses, an override path, and permission requirements per status group. However, it does not explicitly name alternatives such as override_verdict or release_claim, nor does it state when not to use this tool.

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

override_verdictA
DestructiveIdempotent

Force a state change on a task or finding without holding its claim. Requires can_override_verdict on the calling actor. Writes an override event with the supplied reason, and (for tasks) fires board + Slack so the bound Project V2 card and the channel reflect the new status. Use when a subagent's claim has gone stale but the work it produced needs to be recorded (e.g. a verifier that finished after its TTL expired). For attempts, use record_commit to attach commit metadata; an attempt has no status of its own — the parent finding carries the verdict, so override the finding instead.

NameRequiredDescriptionDefault
ReasonNo
EntityIdYes
as_agentNo
NewStatusNo
EntityTypeNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already flag destructive=true and idempotent=true, but the description adds information they cannot carry: the required can_override_verdict permission, that an override event is written with the supplied reason, and that tasks trigger board plus Slack side effects on the bound Project V2 card and channel. Those side effects are the most important thing an agent needs to know before calling a destructive tool, and they are stated plainly.

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

Conciseness4/5

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

Front-loaded with the action and the hard constraint, then permissions, then side effects, then routing. Every sentence carries content, though the attempts/record_commit clause is dense enough to require a second read.

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 destructive, side-effecting mutation with an undocumented schema and no output schema, the description covers permissions and side effects well but leaves critical gaps: what status values NewStatus accepts, what happens to a live claim if one exists, and what the caller gets back after the override event is written.

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% across 5 parameters with no enums, so the description bears the full burden — yet it only glosses Reason ("the supplied reason") and hints that EntityType distinguishes task/finding/attempt. NewStatus gets no valid-value guidance despite driving the whole operation, as_agent is never mentioned, and EntityId's required-ness and expected ID format are unaddressed.

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?

States a specific verb and resource — force a state change on a task or finding — plus the defining constraint (without holding its claim), which is exactly what separates it from mark_task_status and the submit_* siblings. An agent can tell what this does and where it sits in the workflow without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger case (a subagent's claim went stale but the work produced still needs recording, e.g. a verifier that finished after TTL), and routes two related cases away: attempts go to record_commit, and verdicts must be overridden on the parent finding. That is when-to-use, when-not, and named alternatives in one paragraph.

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

record_commitA

Attach a commit hash to a task, finding, or attempt after the fact. Writes a commit_recorded event. Use when the commit happens outside the normal submit_attempt flow (e.g. a hotfix going in via override).

NameRequiredDescriptionDefault
RepoIdNo
EntityIdYes
as_agentNo
CommitHashNo
EntityTypeNo
TargetBranchNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the bar is lower. The description usefully discloses the emitted event, but does not warn what happens on repeat calls despite idempotentHint=false, nor whether any claim/workflow state changes.

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 short sentences, front-loaded with the action, then the effect, then the routing condition. No 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 mutation with no output schema and 0% parameter coverage, the description covers the what/why but omits the remaining field semantics and duplicate-record behavior an agent would need to call it reliably.

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 0%, so the description must carry weight: it conveys EntityId/EntityType semantics (task, finding, or attempt) and the meaning of CommitHash. It says nothing about RepoId, TargetBranch, or as_agent, leaving half the parameters undocumented anywhere.

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?

States a specific verb and resource — attach a commit hash to a task, finding, or attempt — and immediately follows with the side effect ('Writes a commit_recorded event'). This clearly separates it from submit_attempt, which is the normal path for commit association.

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

Usage Guidelines5/5

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

Explicitly scopes usage: 'Use when the commit happens outside the normal submit_attempt flow (e.g. a hotfix going in via override).' It names the alternative sibling and the condition that selects this tool over it, leaving nothing to inference.

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

refresh_claimA

Extend an active claim's TTL without releasing it. Use when a subagent's reproduction is taking longer than the configured role TTL (e.g. a verifier mid-deploy on a remote test host). extend_by accepts the same duration shorthand as the role_ttls config ('30m', '2h'); if omitted, the role's configured TTL is added on top of the current claimed_until. The token must still be live AND held by the calling actor — an already-expired claim cannot be reanimated here (it must release and re-claim), because the stuck-work sweeper may have already handed the row to someone else. Writes a claim_refreshed event so the audit trail shows every extension. A plan type can limit refreshes per role (claim_limits in its config): a max lifetime from claimed_at, and requiring progress (an attempt, findings, a commit or a status change) since the last refresh. A refused refresh returns claim_limit_reached with details.reason (max_lifetime or no_progress) and claimed_until, when the claim runs out.

NameRequiredDescriptionDefault
ExtendByNo
as_agentNo
ClaimTokenYes

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the authorization precondition (token must be live AND held by the calling actor), the sweeper race that makes expired refreshes unsafe, the side effect of writing a claim_refreshed event, and the plan-level refresh limits with the exact refusal shape (claim_limit_reached, details.reason of max_lifetime or no_progress, claimed_until). That is exactly the behavioral context annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with purpose and trigger, then escalates to preconditions, side effects, and error contract. Dense but almost every sentence adds new information; the parenthetical about the verifier mid-deploy is illustrative rather than essential, keeping it just short of a 5.

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?

No output schema exists, and the description compensates by describing both the success side effect (claim_refreshed event) and the failure contract (error code, details.reason values, claimed_until). Nothing an agent needs to call this correctly or handle refusal is missing.

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 description coverage is 0%, so the description must carry the load; it does for ExtendBy (duration shorthand like '30m'/'2h', default = role's configured TTL added to claimed_until) and for ClaimToken (must be live and actor-held). The 'as_agent' parameter is never explained, which leaves one of three parameters undocumented — the only real 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?

States a specific verb and resource plus the key differentiator: 'Extend an active claim's TTL without releasing it.' That phrase alone separates it from release_claim and the claim_* siblings, so an agent can select it without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('when a subagent's reproduction is taking longer than the configured role TTL') with a concrete example, and an explicit exclusion ('an already-expired claim cannot be reanimated here — it must release and re-claim'). Both when-to-use and when-not-to-use are stated, plus the alternative path.

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

release_claimA
Idempotent

Release a claim without submitting work. Used when an agent decides it cannot complete the work and wants to surface it back to the pool. The task status reverts to pending, the bound board's card moves back to the Backlog column (lazy-created on the project if it wasn't there yet), and its assignees are cleared so the next claimer takes ownership cleanly. Slack is intentionally not posted because routine claim cycles are noise.

NameRequiredDescriptionDefault
ReasonNo
as_agentNo
ClaimTokenYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, yet the description adds real context beyond them: status reverts to pending, the card moves to Backlog and is lazily created if absent, assignees are cleared for the next claimer, and Slack is deliberately skipped. That last point preempts a natural agent question about notifications.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, side effects follow, and the Slack note closes as a plausible agent question. No obvious filler, though the parenthetical about lazy card creation is dense and slightly interrupts the flow.

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 mutation with no output schema, the description covers what changes in the system, which is the main thing an agent needs. The gaps are the undocumented parameters and no statement of what a successful call returns or what happens if the token is stale.

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 says nothing about the three parameters – not ClaimToken's role, not the optional Reason, not as_agent. With low structured coverage the description was expected to compensate, and it does not, leaving an agent to infer how Reason is surfaced.

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?

"Release a claim without submitting work" names a specific verb and resource and immediately draws the line against the submit_* siblings. The follow-on sentence spells out the resulting state transitions, so an agent knows exactly what this operation does to the task, board card and assignees.

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 gives a clear triggering condition: the agent has decided it cannot complete the work and wants to return it to the pool. The contrast with submitting is stated explicitly. However, no sibling is named by name (e.g. submit_findings, submit_attempt) and no exclusion such as "if you can partially complete, submit instead" is given, so it stops short of full routing guidance.

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

request_auditA

Admin: request a full audit run for one or more projects. Pass projects as a list of project slugs or ids. Each is resolved and queued on the audit-dispatch outbox; a background worker then launches that project's audit orchestrator (no repo checkout by the caller). The result lists each project with status 'queued' (with a dispatch id and an attach_command — the command to watch the live audit session once SSH'd into the server) or 'unknown_project' (the name did not resolve).

NameRequiredDescriptionDefault
ProjectsNo
as_agentNo

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations (which only say non-read-only, non-idempotent, open-world), it discloses the asynchronous dispatch mechanism, that a background worker launches the orchestrator, that the caller performs no repo checkout, and the exact per-project outcome statuses including 'unknown_project'. This is materially useful behavioral context for a fire-and-forget dispatch tool.

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

Conciseness4/5

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

Front-loaded with the action, then parameter semantics, then mechanism, then return shape — a logical order with no filler sentences. It runs a bit long in one block and the parenthetical about SSH/watch commands could be trimmed, but every sentence carries information.

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?

With no output schema, the description does the right thing by spelling out the per-project result shape ('queued' with dispatch id and attach_command, or 'unknown_project'). Gaps remain: `as_agent` is undocumented and the text says 'one or more projects' while the schema marks no parameters as required, leaving an ambiguity an agent must guess at.

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 0%, and the description compensates for only one of two parameters, clarifying that `projects` is a list of project slugs or ids (the bare schema gives an untyped array). The `as_agent` parameter is never mentioned anywhere, leaving its meaning and permission implications entirely opaque.

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 names a specific verb and resource ('request a full audit run'), scopes it ('for one or more projects'), and describes the resulting side effect (queued on an audit-dispatch outbox). It is clearly distinguishable from siblings like cancel_audit or list_projects without opening any schema.

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 'Admin:' prefix sets the privilege context and the phrasing 'full audit run' implies the trigger scenario, but the description never states when this should not be used or points to cancel_audit as the inverse operation. Usage is clear, exclusions are absent.

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

set_project_slackB
DestructiveIdempotent

Admin: configure the Slack workspace, default channel, and bot-token secret reference for a project.

NameRequiredDescriptionDefault
as_agentNo
ProjectIdYes
WorkspaceIdNo
DefaultChannelIdNo
BotTokenSecretRefNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known. The description adds that this is an admin action and that it involves a bot-token secret reference, but it does not disclose that existing Slack settings may be overwritten, how the secret reference is handled, or what confirmation is returned.

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

Conciseness4/5

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

The description is a single front-loaded sentence with no wasted words, and the administrative framing is placed first. It is efficient, though its brevity contributes to the missing usage and parameter details.

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

Completeness2/5

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

This is a destructive, idempotent mutation involving sensitive bot-token references, with five parameters at 0% schema coverage and no output schema. A single sentence cannot adequately cover the undocumented 'as_agent' parameter, overwrite behavior, secret handling, or expected outcome, leaving significant gaps for an agent to call it correctly and safely.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the burden. It indirectly names the workspace, default channel, and bot-token secret fields, but it never mentions the 'as_agent' parameter or clarifies which fields are required versus optional, nor does it explain formats for IDs or secret references.

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

Purpose4/5

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

The description uses a specific verb ('configure') and resource ('Slack workspace, default channel, and bot-token secret reference for a project'), and names the exact settings it modifies. It is clearly distinguishable from all sibling tools, none of which touch Slack configuration, though it does not explicitly state what it is not.

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 'Admin:' prefix implies this is an administrative operation, giving some usage context, but there is no explicit guidance on when to use this versus any alternative, no stated prerequisites, and no exclusions. Usage is implied rather than explained.

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

start_workA
Idempotent

Transition a claimed task from 'claimed' to 'in_progress'. Triggers the board sync to move the card to In Progress. Requires the original claim token; a stale token yields stale_claim.

NameRequiredDescriptionDefault
as_agentNo
ClaimTokenYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare a non-destructive, idempotent, closed-world write. Beyond that, the description discloses the side effect of triggering a board sync that moves the card and the failure mode 'stale_claim' for an invalidated token, which are meaningful additions. It stops short of saying what the tool returns or what happens if the board sync itself fails.

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 short sentences with no filler: the action first, then the side effect, then the precondition and error. Every sentence carries distinct information an agent needs before calling.

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 two-parameter idempotent mutation with no output schema, the description covers the transition, the sync side effect, and the token failure mode. The remaining gap is the undocumented as_agent parameter and the absence of any statement about the response shape.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden of two parameters. It adds real meaning for ClaimToken (original claim token, stale token returns stale_claim) but says nothing at all about as_agent, leaving half the signature undocumented anywhere.

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

Purpose4/5

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

The description names a specific state transition ('claimed' to 'in_progress') on a specific resource (a claimed task), which is far more precise than the sibling mark_task_status. It never names an alternative tool or explicitly contrasts itself with mark_task_status, so it falls short of full sibling differentiation.

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 states the precondition clearly (the task must already be claimed and you must hold the original claim token), which tells the agent when this tool is applicable. It gives no explicit exclusion or pointer to alternatives such as mark_task_status or release_claim when the precondition is not met.

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

submit_attemptA

Submit a developer's (or fixer's) attempt at the work: list of files changed, approach summary, side effects, build command, test scenario, diff reference. For dev-plan tasks this transitions the task to review. For audit findings this records an attempt in the findings's attempt chain. Returns retry_cap_exceeded if attempt count is at the plan's retry cap.

NameRequiredDescriptionDefault
AttemptNo
as_agentNo
ClaimTokenYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish that this is a non-read-only, non-idempotent, closed-world mutation, so the description correctly focuses on consequences: it names the exact state transition (task moves to review), the audit-finding append behavior, and a specific failure mode (retry_cap_exceeded at the plan's retry cap). That retry-cap disclosure is real value beyond the annotations. Minor gap: it does not say what happens to an existing claim or whether the submission itself can be retried after a cap error.

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

Conciseness4/5

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

Three sentences, front-loaded with the verb and payload, then branching behavior, then the failure condition — a sensible order with no filler. The payload enumeration is long but each item is distinct information rather than padding.

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 write tool with no output schema, the description covers the important things an agent needs: what to send, what state change results, and one named error condition. The remaining gap is the claim lifecycle relationship (how ClaimToken is acquired and whether it is consumed), which matters given the retry-cap semantics but is absent.

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 0%, so the description must carry parameter meaning, and it partially does by enumerating the logical contents of the nested Attempt object (files changed, approach, side effects, build command, test scenario, diff reference). However, it never names the actual keys or the structure of that nested object, and it says nothing about ClaimToken (the sole required parameter) or as_agent, leaving the agent to guess how the claim token is obtained and what as_agent changes about identity.

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?

States a specific verb ('Submit') and resource ('attempt at the work') and immediately enumerates the payload it carries (files changed, approach summary, side effects, build command, test scenario, diff reference). It also distinguishes the two distinct effects by task type: dev-plan tasks transition to review, audit findings record into the finding's attempt chain, so an agent can tell it apart from submit_findings or submit_attempt_verdict.

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

Usage Guidelines4/5

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

The description gives clear triggering context: you call it when handing off completed work on a dev-plan task or when recording a fix attempt against an audit finding, and it names the resulting state transition. It does not, however, contrast with the adjacent siblings submit_attempt_verdict or submit_review_decision, so the agent must infer that this is the pre-review submission rather than the verdict step.

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

submit_attempt_verdictA

Audit-plan: the fix-verifier's verdict on a fixer's attempt. verdict ∈ {fix_confirmed, fix_failed, partial}. On fix_confirmed, commit_hash is required and the finding moves to fixed. On fix_failed below retry cap, the finding moves to fix_failed (still claimable). On partial, the server auto-creates a child finding for the remaining work.

NameRequiredDescriptionDefault
VerdictNo
EvidenceNo
as_agentNo
AttemptIdYes
CommitHashNo

TDQS

A4/5.0
Behavior4/5

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

Discloses real side effects the annotations cannot: state transitions, that fix_failed is gated by a retry cap, and that partial auto-creates a child finding. Consistent with readOnlyHint=false and destructiveHint=false. Missing only whether the transition is reversible or what happens when the retry cap is exceeded.

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

Conciseness4/5

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

Dense, telegram-style sentences, but each one carries a distinct rule and the verdict set is stated up front. No 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?

There is no output schema, and the description never says what the tool returns after a verdict is submitted. Combined with the undocumented Evidence and as_agent parameters, an agent has to guess at part of the call contract.

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 0%, so the description carries the burden. It documents the Verdict values and the conditional CommitHash requirement, but leaves Evidence and as_agent entirely unexplained, which matters for a nested-object parameter.

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?

Names a specific verb (submit) and resource (a fix-verifier's verdict on a fixer's attempt), and the 'Audit-plan:' prefix scopes it to the audit workflow. An agent can distinguish it from submit_verification_verdict and submit_review_decision because it clearly sits at the attempt-verification stage.

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

Usage Guidelines4/5

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

Explicitly states the outcome each verdict produces (fix_confirmed → fixed, fix_failed → still claimable, partial → child finding), which tells the agent which verdict to pick for a given situation. It does not, however, contrast itself with the sibling override_verdict or state 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.

submit_findingsA

Audit-plan only: submit zero or more findings for the currently-claimed task. If the findings list is empty, the task transitions directly to done (a clean audit). If non-empty, the task transitions to review and each finding is created in pending_verification.

NameRequiredDescriptionDefault
FindingsYes
as_agentNo
ClaimTokenYes

TDQS

A4.2/5.0
Behavior4/5

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

The description provides critical behavioral logic not in the schema or annotations: the conditional state machine. It specifies that an empty list results in a direct 'done' transition, while a non-empty list forces a transition to 'review' and auto-creation of findings.

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 tool uses exactly two sentences to convey highly complex workflow logic and branching outcomes, demonstrating perfect conciseness.

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?

Since there is no output schema, the focus is on input functionality. The description covers all necessary operational contexts, including the conditional outcomes based on the input data.

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%, requiring the description to carry the burden. However, the description only mentions 'findings' generally and adds no context or semantics to the required 'ClaimToken' or 'as_agent' parameters, leaving them undocumented functionally.

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 exactly what the tool submits (findings) and explicitly limits its operational context to 'Audit-plan only.' It distinguishes the result based on the content of the Findings array.

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 clearly defines its scope by stating 'Audit-plan only,' effectively narrowing its place in the workflow. While it doesn't name alternatives, the context is sufficient to prevent misuse.

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

submit_review_decisionA

Dev-plan: a reviewer's verdict on a task in review. decision ∈ {approved, changes_requested}. On approved, the task moves to done and commit_hash (if provided) is recorded on the latest attempt. On changes_requested below retry cap, the task returns to pending so any developer can claim it for another pass; at cap, it moves to needs_human_review.

NameRequiredDescriptionDefault
TaskIdYes
CommentsNo
DecisionNo
as_agentNo
CommitHashNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare the generic profile (not read-only, not destructive, not idempotent); the description goes well beyond that by spelling out the state machine: approved moves the task to done and records commit_hash on the latest attempt, changes_requested below the retry cap returns it to pending for anyone to claim, and at cap it goes to needs_human_review. What is missing is reviewer authorization requirements and whether a submitted decision can be revised afterwards.

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

Conciseness4/5

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

Front-loaded with the core purpose, then the two branch outcomes in a compact enum-style summary; every sentence carries real state-transition information. The 'decision ∈ {approved, changes_requested}' notation is terse but appropriate, and there is no filler.

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 non-idempotent mutation with no output schema, the description covers the essential consequences of each call, which is what an agent most needs before invoking it. It falls short only on the undocumented Comments/as_agent parameters and the absence of any note on permissions or result reporting.

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 0% and none of the five fields carry enums, so the description must compensate: it supplies the Decision enum (approved, changes_requested) and explains that CommitHash is optional and gets recorded on the latest attempt. TaskId is self-evident, but Comments and as_agent are never explained, leaving two of five parameters undocumented in both schema and description.

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

Purpose4/5

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

States a specific verb and resource: a reviewer's verdict on a task that is in review, with the two allowed decision values. An agent can tell this is a review-submission action, though the description never names the closely related siblings (submit_verification_verdict, submit_attempt_verdict, override_verdict) to disambiguate which verdict tool applies where.

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?

Usage is implied by 'a reviewer's verdict on a task in review' plus the decision enum, so the context of use is inferable. But there is no explicit when-not-to-use guidance and no routing to alternatives such as override_verdict or the other submit_*_verdict tools, leaving the agent to guess which submission tool fits a given review situation.

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

submit_verification_verdictA

Audit-plan only: submit the verifier's verdict on a pending-verification finding. verdict ∈ {confirmed, rejected, ambiguous}. Evidence (pre_output, post_output, etc.) is recorded into the verdicts table and the finding status transitions accordingly.

NameRequiredDescriptionDefault
VerdictNo
EvidenceNo
as_agentNo
ClaimTokenYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare a non-read-only, non-destructive, non-idempotent mutation. The description adds real value by disclosing the write target (verdicts table) and the side effect (finding status transitions), but it never says whether resubmitting revises an earlier verdict, which matters given idempotentHint=false.

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

Conciseness4/5

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

Three short sentences with the scope constraint front-loaded and no filler. The 'etc.' in the evidence sentence and the fragment style make it slightly terse for a mutation tool, but nothing is wasteful.

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 a 4-param mutation with no output schema and zero schema coverage, the description covers purpose, allowed verdict values, evidence capture, and the resulting state transition. The required ClaimToken and the non-idempotent re-submission semantics remain unaddressed.

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 0%, so the description must carry the parameter load. It does supply the Verdict enum values (confirmed, rejected, ambiguous) and identifies Evidence as pre_output/post_output-style data, but leaves the required ClaimToken and as_agent completely unexplained.

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

Purpose4/5

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

States a specific verb (submit) and resource (verifier's verdict on a pending-verification finding), and the 'audit-plan only' qualifier scopes it. It implicitly separates itself from submit_attempt_verdict and submit_review_decision by naming the verifier role and the verification stage, though it does not name those siblings explicitly.

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?

'Audit-plan only' plus 'pending-verification finding' implies the workflow position (after claim_next_finding_for_verification), but no explicit when-not or alternative is given. An agent must infer that this is not the tool for attempt verdicts or review decisions.

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.

  1. 36 tool updatesv0.1.0
    • First observedactivate_plan
    • First observedadd_phase
    • First observedadd_project_board
    • First observedadd_project_repo
    • First observedarchive_plan
    • First observedcancel_audit
    • First observedclaim_next_attempt_for_review
    • First observedclaim_next_finding_for_fix
    • First observedclaim_next_finding_for_verification
    • First observedclaim_next_task
    • First observedclaim_specific_task
    • First observedcreate_plan
    • First observedcreate_project
    • First observedcreate_task
    • First observedcreate_tasks
    • First observedexport_plan
    • First observedget_event_log
    • First observedget_finding
    • First observedget_my_active_work
    • First observedget_plan_dashboard
    • First observedget_stuck_work
    • First observedlist_plans
    • First observedlist_projects
    • First observedmark_task_status
    • First observedoverride_verdict
    • First observedrecord_commit
    • First observedrefresh_claim
    • First observedrelease_claim
    • First observedrequest_audit
    • First observedset_project_slack
    • First observedstart_work
    • First observedsubmit_attempt
    • First observedsubmit_attempt_verdict
    • First observedsubmit_findings
    • First observedsubmit_review_decision
    • First observedsubmit_verification_verdict

TDQS

A3.6/5.0

Scored across 36 tools

Disambiguation4/5

The tools mostly map to distinct entities and lifecycle actions, with clear separation between claim, submit, verdict, admin, and audit operations. A few boundaries are softer, especially get_stuck_work vs get_plan_dashboard, get_my_active_work vs dashboard claims, and mark_task_status vs override_verdict, and the reserved claim_next_attempt_for_review adds some surface noise.

Naming Consistency5/5

Names consistently use snake_case with a predictable verb_noun or verb_object_for_purpose pattern. Even where singular/plural differs, such as create_task vs create_tasks, the naming remains readable and systematic.

Tool Count2/5

With 36 tools, the surface is heavy for an agent to navigate reliably, and the set includes at least one reserved/currently unnecessary tool. While the domain is complex, the count exceeds the typical well-scoped range and increases selection cost.

Completeness4/5

Core workflow coverage is strong: project/plan setup, task creation and claiming, attempts, findings, verdicts, review decisions, overrides, stuck-work inspection, event logs, and audit dispatch are all represented. Some admin lifecycle gaps remain, such as update/remove operations for projects, repos, boards, plans, and phases.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    GitHub MCP server for Claude Code, Cursor, Cline, Windsurf, and any MCP-compatible client. Exposes GitHub tools (issues, pull requests, code search, file content) to your LLM via the Model Context Protocol.
    7
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that exposes Slack Web API operations as tools, enabling users to list conversations, read history, post messages, and call any Slack Web API method.
    63 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Local-first task governance board for AI agents, enabling session registration, task creation, progress updates, and evidence reporting via MCP, with separation of agent claims and human acceptance.
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Self-hosted task tracker and MCP server for AI coding agents. Append-only case files preserve decisions, failed attempts, questions, and check results across sessions. A live web board lets people track progress and answer agents. Runs locally in Docker and connects to Claude Code, Codex, Cursor, and other Streamable HTTP MCP clients. MIT licensed.
    30
    6
    MIT