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.2.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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose real side effects: board-sync items are enqueued for every task and a Slack notification is posted. It still omits permission requirements, idempotency/reversibility, and failure behavior for a state-mutating admin tool.

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

Conciseness5/5

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

Two sentences, zero padding, and the state transition is front-loaded ahead of the side effects. Every clause carries 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?

The side-effect disclosure is strong for a mutation tool lacking annotations and an output schema, but the 0% parameter coverage and absence of any auth, error, or idempotency notes leave gaps an agent would want before invoking an admin action.

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 compensate for both parameters and does not. PlanId is self-evident from its name, but as_agent is never explained and no format, validity, or default guidance is added 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 plus the exact state transition ('move a plan from draft to active'), which is more precise than a bare 'activate'. It does not differentiate itself from lifecycle siblings like create_plan or archive_plan, but the action 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 Guidelines3/5

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

The 'Admin:' prefix implies a privileged context and the draft-to-active framing implies when it applies, but there is no explicit when-not-to-use or pointer to alternatives such as create_plan or archive_plan. Usage is inferable 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_phaseB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
NameNo
PlanIdYes
as_agentNo
OrderIndexYes

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose one meaningful trait — that this is an admin-scoped operation (privilege requirement) and that phases are optional — but says nothing about mutation semantics, ordering conflicts, duplicate handling, or reversibility.

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 short, front-loaded sentences with no filler. The second sentence is not padding — it clarifies the optional role of phases, which matters for deciding to call this at all.

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 4-parameter mutation tool with zero schema descriptions, no annotations, and no output schema, the definition is far too thin. An agent gets no guidance on OrderIndex, as_agent, or the success/failure outcome of the call.

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 4 parameters, so the description must compensate and does not. It only loosely implies PlanId; OrderIndex (ordering semantics, collision behavior) and as_agent (impersonation?) are entirely 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+resource ('add a phase to a plan'), which is clearly distinct from the task-centric siblings like create_task and claim_next_task. It does not name a sibling alternative, but the operation 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 Guidelines3/5

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

The 'Admin:' prefix signals privileged/contextual usage, and 'Phases are an optional structural layer; tasks may be unphased' hints that this step is not always needed. However, it never states when to use this versus create_task/create_plan, and gives no prerequisites or exclusions.

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).

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

TDQS

B3.1/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It usefully discloses the admin-only nature and a real operational precondition (Status option ids must already be discovered via GraphQL), but says nothing about idempotency, what happens if the board is already registered, auth requirements, or the effect of the optional status mappings.

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 efficiently written sentences, front-loaded with the 'Admin:' qualifier and the prerequisite. Every clause carries information; there is 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 12-parameter mutation with no annotations, no output schema, and zero schema descriptions, the definition does far too little. An agent still lacks the meaning of most parameters, the registration semantics, and the return behavior.

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. The description hints that the StatusOption*/StatusFieldNodeId values come from GraphQL discovery, which partially explains roughly half the parameters, but ProjectId, GithubProjectNumber, GithubOwner, DisplayName, and as_agent are entirely undocumented in both places.

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.' That resource is distinct enough from siblings like add_project_repo and set_project_slack that an agent can tell what is being attached, though it never explicitly contrasts itself with those 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:' prefix and the note that the caller must have already discovered Status field option ids imply a prior setup step in a flow, but there is no explicit when-to-use versus when-not-to-use guidance and no named alternative among the sibling tools.

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

add_project_repoC

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
as_agentNo
ProjectIdYes
GithubRepoNo
GithubOwnerNo
IsReferenceOnlyNo

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does add two real behavioral facts: this is an admin-only operation, and reference-only repos are not modified by the system. It omits idempotency, what happens on duplicate attachment, and whether the repo must pre-exist, so coverage is partial rather than complete.

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

Conciseness4/5

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

Two tight sentences, front-loaded with the core action and followed by the one non-obvious semantic detail. No filler, though it is brief enough that the brevity borders on under-specification.

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?

A mutation tool with no annotations, no output schema, and 5 undocumented parameters needs substantially more: permission details beyond the 'Admin' label, effect on the project, and return/confirmation behavior. The reference-only note is the only substantive addition.

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 5 parameters. The description only indirectly explains IsReferenceOnly (reference-only repos are not modified) and implies GithubRepo/GithubOwner via 'GitHub repo'; ProjectId and as_agent are left entirely undocumented, so the description does not compensate for the coverage gap.

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

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', plus an 'Admin:' scope qualifier that frames the privilege level. It is distinguishable from siblings like create_project or add_project_board, though it never names an alternative explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use / when-not-to-use guidance and no alternatives named. The reference-only clause hints at a scenario (upstream project used as a design reference) but frames it as a behavioral note rather than a selection rule, so an agent gets no routing help among the many project-related siblings.

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

archive_planA

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
PlanIdYes
ReasonNo
OutcomeNo
as_agentNo

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly: it names the required permission (can_archive_plan), lists the exact tools that will reject the plan with the structured plan_archived error, discloses idempotency and irreversibility, confirms data retention (tasks, events, board cards intact), and notes the Slack side effect.

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 dense but front-loaded, leading with purpose and permission before enumerating rejected tools, lifecycle behavior, and the Slack/return details. Almost every sentence adds distinct value, though the volume could be trimmed slightly without losing substance.

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

Completeness5/5

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

For a mutation tool with no annotations and no output schema, the description fully covers prerequisites, side effects, error behavior, and even return values (plan id, new status, resolved outcome, already_archived). Nothing an agent needs to invoke it correctly 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 coverage is 0%, so the description must compensate. It explains Outcome ('Completed' default or 'Canceled', suffixing the audit milestone title and appearing on Slack), Reason (shown on the Slack notice), and PlanId implicitly as the target plan. Only as_agent is left undocumented, so it substantially covers 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?

The description gives a precise verb+resource ('Archive (disable) a plan') plus the immediate effect ('so it stops accepting work'). It clearly distinguishes this from siblings like activate_plan, create_task, and cancel_audit by naming the exact tools and behaviors an archived plan blocks.

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 when to use it ('retire a finished or abandoned plan') and explains the downstream consequence (the next orchestrator bootstrap creates a fresh plan, enabling a new audit/development pass). It also clarifies it is one-way and idempotent, removing ambiguity about repeated invocation.

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

cancel_auditA

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
ProjectsNo
as_agentNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the async queue path (audit-dispatch outbox), the background worker signaling the session, that cancellation is cooperative rather than a hard kill, and the orchestrator's /audit-cancel cleanup. It stops short of stating auth/permission requirements precisely or idempotency/behavior for already-finished audits.

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 purpose, then parameter instruction, then behavior. Dense but each sentence carries information; the outbox/worker detail is slightly verbose but earns its place as behavioral disclosure.

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, so the description helpfully states the return shape (per-project status 'queued' or 'unknown_project'). For a two-param, no-annotation tool the picture is nearly complete; the gap is the unexplained `as_agent` parameter and the fact that `projects` is described as needed while required is empty.

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% and the schema only declares bare types, so the description must compensate. It explains that `projects` accepts a list of slugs or ids, but the casings differ (`projects` vs schema's `Projects`) and `as_agent` is never described, leaving one of two parameters undocumented.

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

Purpose5/5

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

States a specific verb and resource ('cancel a running audit') plus scope ('one or more projects') and a privilege qualifier ('Admin:'). It is trivially distinguishable from its inverse sibling request_audit 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 Guidelines3/5

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

The 'Admin:' prefix and 'running audit' phrasing imply the context for use (an in-progress audit needing cancellation by an operator), but no explicit when-to-use/when-not guidance or named alternative is given. 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_reviewB

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose that the surface is inert in v1. However, it never says what happens if an agent calls it anyway (error, empty result, no-op), and it does not reconcile that with the schema still requiring PlanId. The mutation/claim semantics of a real version are left unspecified.

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 with no filler; the reserved/future status is front-loaded, followed by the v1 routing rationale. Nothing is wasted, though it could have used its length to cover the required parameter instead.

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 an inert placeholder with no annotations and no output schema, the description conveys enough that an agent should not rely on it. But the required PlanId and as_agent parameters are unexplained, and there is no statement of call behavior, leaving a real gap for anyone who invokes it by name.

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

Parameters1/5

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

Schema description coverage is 0% and the description mentions neither PlanId (required) nor as_agent. It references 'the attempt id', which is not even a parameter of this tool, so it actively fails to explain the two parameters the agent must supply.

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 the resource (a reserved claim surface for the fix-verifier / dev-reviewer queue) and explicitly frames it as a future/placeholder tool. It also names the sibling tools (submit_attempt_verdict / submit_review_decision) that supersede it in v1, so an agent can distinguish it. It stops short of a 5 because it never states what the tool would actually return or do if invoked.

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 explicit when-not guidance: no separate claim is needed in v1 because the verdict tools accept the attempt id directly from orchestrator state. That is a clear routing instruction. It lacks an explicit 'use X instead' call-to-action and gives no condition under which this tool would ever be the right choice.

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_fixB

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the side effect ('sets the finding status to in_fix as part of the claim transaction') and the implicit role assignment ('Caller is implicitly the fixer'). It omits edge behavior such as what happens when no eligible finding exists, locking/exclusivity, and whether the claim must later be released.

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 waste, and the 'Audit-plan-only' scope constraint is front-loaded. Efficient and well-structured.

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?

No annotations or output schema exist, so the description must carry more. It adequately explains the claim semantics and the in_fix state transition, but leaves parameters undocumented and omits failure/empty-queue behavior, so it is not fully complete for a bare 2-param mutation tool.

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 neither of the two parameters is documented in the description. 'Audit-plan-only' loosely implies PlanId is an audit-plan identifier, but as_agent is entirely unexplained and the connection to the implicit 'fixer' role is not made explicit.

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 ('claim the highest-severity confirmed... finding to fix') and adds scope ('Audit-plan-only'). The 'to fix' framing implicitly separates it from claim_next_finding_for_verification, though it never names the sibling explicitly.

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

Usage Guidelines3/5

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

'Audit-plan-only' is a clear precondition, and the finding-selection criteria ('confirmed or below-cap fix_failed/partial, highest-severity') give context. However, it never states when to prefer this over claim_next_finding_for_verification or the release/refresh claim tools, leaving the alternative-selection decision to inference.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose real behavior: severity-ordered selection, implicit assignment of the 'verifier' role for the claim duration, and an explicit empty-result sentinel. It omits the claim lifecycle (lease/expiry, how the claim is released, whether refresh_claim applies) and any permission requirements.

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, all front-loaded: scope claim, actor-role behavior, and failure mode. No filler or restatement of the tool name.

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 selection policy, role assignment, and the empty case, which is a lot for a claim tool with no output schema. However, an agent still cannot determine the claim's duration, how to release or refresh it, or what as_agent does, which are material gaps for a state-mutating claim.

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 both parameters. The description implies PlanId via 'on the plan', but 'as_agent' is never explained, and it is unclear whether it overrides the implicit actor-role assignment described in the text. With zero schema-level documentation, the description should compensate and does not.

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

Purpose5/5

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

States a specific verb (claim), a precisely bounded resource (highest-severity pending-verification finding), and a scope qualifier (audit-plan-only). This cleanly separates it from the close siblings claim_next_finding_for_fix and claim_next_attempt_for_review without the agent needing to open 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 'Audit-plan-only' qualifier and 'pending-verification' condition tell the agent exactly which context this applies to, and the no_work_available outcome signals when there is nothing to claim. It stops short of naming an alternative tool to use when no verification work exists.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
RoleNo
PlanIdYes
as_agentNo
TtlOverrideNo

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and largely succeeds: it discloses the atomic/concurrent-safe claim behavior, the success return shape ({ task, claim_token }), the no_work_available failure mode, and a real side effect (assigning the bound Project V2 card to the calling actor's GitHub user). It omits claim expiry/TTL behavior and what the token must be used for afterward (release_claim, refresh_claim, start_work), which matters in a claiming system.

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 tight sentences, front-loaded with the core action, then the role constraint, then the return contract, then the usage cue and side effect. Every sentence adds information an agent needs to call this correctly; no padding or 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 and no annotations, and the description covers the return shape, the failure case, and the attribution side effect, which is what an agent needs to select and invoke it. Remaining gaps are the TTL/expiry semantics tied to TtlOverride and the lifecycle of the returned claim_token across the sibling release/refresh/start tools.

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 meaningfully explains Role (must be valid for the plan's plan_type, with examples) and PlanId implicitly, which is genuinely useful. However as_agent and TtlOverride are never mentioned, leaving half the parameters opaque 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 and resource with explicit selection semantics: "Atomically claim the highest-priority pending task on a plan for the given role." This distinguishes it from the sibling claim_specific_task, since it makes clear the system chooses the task rather than the caller naming one.

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 concrete triggering condition. It does not explicitly name claim_specific_task as the alternative for when the caller already knows which task to take, so the routing 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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
RoleNo
TaskIdYes
as_agentNo
TtlOverrideNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations present, the description carries the full burden and does well: it discloses the failure mode ('Fails with task_unavailable if another actor holds it with an unexpired claim') and a side effect ('Assigns the bound Project V2 card to the calling actor's GitHub user'). It omits claim TTL/expiry semantics and permission requirements, keeping it below 5.

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, each earning its place: purpose first, then failure condition, then usage context and side effect. Front-loaded and free of 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 4-parameter mutation tool with no annotations and no output schema, the description covers purpose, failure mode, and side effect but leaves three parameters undocumented. It is adequate at the workflow level but incomplete for correct invocation with the optional arguments.

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 four parameters, so the description must compensate — but it explains none of them. 'Claim by id' loosely maps to TaskId, while Role, as_agent, and TtlOverride are left entirely undefined in both schema and description (notably TtlOverride, which relates directly to the 'unexpired claim' behavior mentioned).

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 the modifier 'specific...by id' cleanly distinguishes it from the sibling claim_next_task, which claims whatever task comes next. An agent can pick between the two without opening either 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 an explicit when-to-use condition: 'Use when the orchestrator is directing work (e.g. dispatching a subagent to a particular task).' It implies the contrast with the next-task claimers but never states a when-not or names an alternative tool, so it falls short of a full 5.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
NameNo
PlanTypeNo
as_agentNo
ObjectiveNo
ProjectIdYes
PrimaryBoardIdNo
PrimarySlackChannelIdNo

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and usefully discloses draft status, the board-inheritance/sync behavior that fires for every task, the response echo semantics (null = not board-bound), and an admin-auth hint. It still omits what PlanType values are legal, whether creation is reversible, and any error/failure behavior.

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?

Board-inheritance guidance is front-loaded and every sentence carries operational meaning, but the second sentence is a long run-on bundling several distinct facts (inheritance, board sync, bulk inserts) that could be split for scanability.

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 creation tool with no annotations and no output schema, the description does cover the primary_board_id lifecycle and partial return semantics, but leaves most parameters, allowed PlanType values, and the non-board side effects of creation opaque to the caller.

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 7 parameters, yet the description explains only PrimaryBoardId. The required ProjectId, plus Name, PlanType, as_agent, Objective, and PrimarySlackChannelId, remain entirely undocumented, so the description fails to compensate for the coverage gap.

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

Purpose5/5

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

States a specific verb+resource+initial state: 'create a new plan (in draft status)', with the 'Admin:' qualifier signaling the privilege tier. An agent can distinguish it from activate_plan and archive_plan without opening schemas.

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 explicit when/when-not for primary_board_id ('omit when the project has exactly one board; pass explicitly only when more than one') and routes activation to activate_plan. It does not, however, cover the broader when-to-create-a-plan-vs-other-creators context.

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

create_projectC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
SlugNo
as_agentNo
DescriptionNo
DisplayNameNo

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the privilege requirement ('Admin') and the identifier semantics of Slug (stable across URLs/CLIs), but says nothing about required fields, uniqueness/idempotency behavior, or side effects on creation.

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 with the core action front-loaded and no filler. Efficient, though the brevity comes at the cost of the missing details noted elsewhere.

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?

A mutation tool with no annotations, no output schema, and 0% parameter coverage needs substantial description support. It covers permission level and Slug semantics but omits required-by-behavior fields, return behavior, and creation side effects.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It only explains Slug; as_agent, Description, and DisplayName are undocumented in both schema and description. Three of four parameters are left opaque.

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 (create) and resource (project), with an 'Admin:' prefix that signals the privilege context. It is clearly distinguishable from create_plan/create_task by resource, though it does not explicitly contrast with those siblings.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no named alternatives despite several related create_* and list/create-plan siblings. The 'Admin:' prefix only implies who may use it, not when the agent should choose this tool.

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.

ParametersJSON Schema
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?

With no annotations present, the description carries the full behavioral burden and does so unusually well: it states the created status (pending), that claim_next_task/claim_specific_task skip tasks with non-terminal predecessors (listing done/deferred/skipped/out_of_scope), that predecessors must share the plan, that cycles are rejected at insert, that the board sync always fires so a draft GitHub Projects V2 item lands in Backlog, and that Slack is opt-in with a stated default and rationale. This is more disclosure than most annotated tools provide.

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 most important fact (what is created, in what status) is front-loaded, and the dependency explanation is grouped coherently before the sync/Slack behavior. It runs long and packs several clauses per sentence, but virtually every sentence carries distinct operational information rather than 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 zero-annotation, no-output-schema mutation tool with 11 parameters, the description covers behavior richly but leaves the majority of the input surface undocumented — notably as_agent, ExternalKey, ReferencePointer, and Paths, which look like they have protocol significance. An agent can call this correctly only for the PlanId/DependsOn/NotifySlack path.

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% across 11 parameters, so the description must compensate, and it only does so for two: DependsOn (dependency/skip semantics, same-plan constraint, cycle rejection) and NotifySlack (default false and why). Paths, Title, PhaseId, Priority, as_agent, ExternalKey, ReferencePointer, Description, and PlanId are left entirely unexplained, so an agent must guess at their formats.

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 opens with a specific verb, resource, and initial state: 'Create a new task on a plan, in pending status.' That is enough to separate it from read/claim siblings like claim_next_task. It does not, however, distinguish itself from the sibling create_tasks (bulk variant), which an agent would plausibly confuse it with.

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?

It names the callers ('orchestrators that decompose larger work units', 'admin tools that import work from external sources'), which implies usage context, but gives no explicit when-to-use-vs-alternative instruction and never mentions create_tasks or set_project_slack as related tools. The rule 'pass true to post a task.created message' is the closest thing to actionable guidance.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
TasksYes
PlanIdYes
as_agentNo
NotifySlackNo

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the whole burden and does it well: two-pass insert-then-wire processing, cycle rejection semantics (returns the first cycle's task, no rollback, partial state persists, re-run via unique external_keys), unconditional board sync, and Slack defaulting to false to avoid channel flooding. Auth/permission constraints and rate limits are the only undisclosed behaviors.

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-loads purpose, then spends every remaining clause on behavior (dependency resolution, failure semantics, side effects). It is a long single paragraph where a bulleted breakdown of the two passes and side effects would scan better, but there is essentially 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?

Covers mutation semantics, partial-failure behavior, and side effects thoroughly despite having no annotations or output schema. The main gap is the success return shape (only the cycle-error return is described) and the unexplained as_agent parameter; return values needn't be spelled out only when an output schema exists, which it does not.

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

Parameters4/5

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

Schema coverage is 0% and the schema is bare ('Tasks' is just type array), so the description must compensate — and it does for the critical parts, documenting item-level 'depends_on_ids', 'depends_on_external_keys' and the NotifySlack default. However 'as_agent' is never explained and PlanId is only implied by 'a single plan', leaving two of four parameters undecoded.

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 ('Bulk task creation') plus the concrete context ('orchestrator bootstrap, e.g. Phase 0 of an audit') and scope ('a list of tasks on a single plan'). The 'bulk/on a single plan' framing cleanly separates it from the sibling create_task without needing a schema lookup.

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 when-to-use context (batch bootstrap) and notable usage guidance: idempotent re-runs after a cycle rejection, and opting into Slack only when every task should be announced. It does not explicitly name create_task as the alternative for single-task creation, so it stops just 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.

export_planA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
FormatNo
PlanIdYes
as_agentNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does meaningful work: it declares the output is deterministic, that export is one-way so the DB remains the source of truth (i.e. non-mutating), and what the JSON payload contains. It omits permission/auth requirements and any behavior tied to the undocumented as_agent parameter.

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 core action, then format options, then the one-way caveat. Every sentence earns its place with 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?

No output schema and no annotations means the description must do everything, and while the export semantics and return shapes are covered reasonably, the third parameter (as_agent) is entirely undocumented and permissions/identity behavior is unaddressed. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 0% and the Format property has no enum in the schema, so the description's format ∈ {markdown, json} plus the markdown-vs-JSON tradeoff adds genuine value. PlanId is only implied, and as_agent 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.

Purpose4/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") plus the output forms (markdown/json) and the snapshot's semantics. It is clearly distinguishable in spirit from read siblings like get_plan_dashboard, but it never names an alternative, so it lands just below the top band.

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 usage context ("suitable for committing to a repo or pasting into chat") and a directional constraint ("Export is one-way"). It does not, however, say when to prefer this over get_plan_dashboard/list_plans or exclude any scenario.

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

get_event_logA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
LimitNo
SinceNo
EntityIdYes
as_agentNo
EntityTypeNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It helpfully discloses that the log records every state change with actor and reason, and 'get' implies a read, but it says nothing about ordering, pagination behavior (Limit/Since), auth/impersonation (as_agent), or how large the log can get. Meaningful but incomplete behavioral context.

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: the resource definition is front-loaded, then the investigative purpose. No filler, no repetition of the tool name.

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?

No output schema and no annotations, so the description has to cover a lot. It conveys what the log contains (state changes with actor and reason), but for a 5-parameter read tool it under-specifies time filtering, pagination, and the as_agent parameter, leaving real gaps for an agent to resolve by trial.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate, and it only covers the entity dimension: the entity-kind enumeration directly clarifies EntityType and 'for a specific entity' implies EntityId. Limit, Since (a nested object), and as_agent are left entirely opaque, and the nested Since is especially risky to guess at.

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 (get) and resource (forensic event log) scoped to a specific entity, and enumerates the entity kinds (task / finding / attempt / plan / phase). This is clearly distinguishable from retrieval siblings like get_finding or get_plan_dashboard, which return entity state rather than the change history.

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

Usage Guidelines4/5

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

Gives a concrete investigative scenario ('why did this task end up in needs_human_review'), which tells the agent when this tool is the right one. It stops short of naming alternatives or an explicit when-not-to-use, 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.

get_findingA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_agentNo
FindingIdYes

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it declares this is a plain read, that no claim is needed, that it works even for orchestrators that didn't author the findings (or resumed after restart), that unknown ids yield a structured not_found error, and that the live claim token is deliberately withheld. This is unusually rich behavioral disclosure.

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 return payload and then routing rationale. Dense and largely waste-free, though slightly long for a single-parameter read tool.

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, so the description's enumeration of returned fields (severity, symptom, root cause, reproduction steps, status, claim holder, etc.) fully covers what an agent needs to know about the response. Call correctness and error behavior are both addressed.

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 for two parameters. It clarifies that the id identifies a finding and describes the not_found behavior for bad ids, but says nothing about as_agent. Partial compensation, adequate but incomplete.

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 returned fields. It also explicitly distinguishes itself from claim_next_finding_for_verification and claim_next_finding_for_fix, which return only id/task/status/severity.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance ('call get_finding to fetch the auditor-authored body a verifier or fixer subagent needs to reproduce the issue'), states the precondition is absent ('No claim is required'), and names the alternatives that return thinner payloads.

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_agentNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. 'Get' and 'active claims ... currently holds' imply a safe read scoped to the caller, which is meaningful context, but it discloses nothing about return shape, ordering, or how claims in different states are reported.

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, both earning their place, with the resource scope front-loaded before the usage cue. No filler or restatement of the tool name.

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 zero-required-param read tool with no output schema, purpose and trigger are adequately covered. However, the unexplained as_agent parameter — which the 'calling actor' phrasing muddles rather than clarifies — leaves an agent unsure whether this tool can be pointed at someone else's claims.

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 single parameter as_agent has 0% schema description coverage, so the description must compensate and does not — it never explains what as_agent does. Worse, saying it returns claims 'the calling actor currently holds' arguably conflicts with the existence of an as_agent parameter that would let the caller query another actor's claims.

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: it returns every active claim held by the calling actor, and it enumerates the exact claim types (tasks, findings, attempts in review) and scope (across every plan). That distinguishes it cleanly from siblings like get_stuck_work and get_plan_dashboard without needing either 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 an explicit when: 'Use this on session start to recover claims after a Claude restart.' It does not name a when-not condition or an alternative sibling, so it stops short of full routing guidance, but the trigger context is clear and actionable.

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

get_plan_dashboardA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
PlanIdYes
as_agentNo

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it defines stuck work as "claims older than 2× their TTL", caps returns (up to 5 tasks, 20 events), and discloses the 5-second in-process cache with LISTEN/NOTIFY invalidation. It doesn't state that the call is read-only or note any authorization requirements, which keeps it from a 5.

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 with zero filler, front-loading the payload contents before the usage and caching notes. Every clause carries 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?

With no output schema and no annotations, the description does the heavy lifting by enumerating the returned sections and cache behavior. The main remaining gap is the meaning of as_agent and whether the operation is a pure read, which would round out an otherwise complete definition.

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 two parameters exist, so the description must compensate. PlanId is self-evident, but as_agent is never explained; the phrase "the caller's currently-held claims" only weakly hints that it sets caller identity. The identity semantics of as_agent are left entirely to inference.

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 resource (one plan's dashboard) and enumerates exactly what the snapshot contains: per-status counts, per-phase counts, next-claimable tasks, caller's claims, stuck work, and recent events. This aggregation role distinguishes it from focused siblings like get_stuck_work, get_event_log, and get_my_active_work without the agent needing to open 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?

"This is the single call an orchestrator makes every iteration to decide what to do next" gives a clear, actionable when-to-use condition tied to a concrete workflow. It stops short of naming alternatives to avoid (e.g., use get_stuck_work for a narrower stuck-work view), so it is a strong 4 rather than a 5.

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

get_stuck_workA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
PlanIdNo
as_agentNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the exact data categories returned and the scoping options, but says nothing about read-only safety, authorization needs, or result size/volume, which the agent would want before invoking 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?

The purpose is front-loaded and the second sentence handles scoping; there is no filler. The first sentence is a dense colon-list run-on, but each enumerated item is load-bearing because it defines the tool's scope.

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, no annotations, and 0% schema description coverage, the description should ideally sketch the response shape and explain as_agent. It covers the content categories and plan scoping well but leaves those gaps for an agent trying to call it correctly.

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. 'Scoped to a single plan or global' effectively explains PlanId (omit to go global), but the as_agent parameter is never mentioned, leaving one of two parameters 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?

States a specific verb (view) and resource (stuck work) and then defines exactly what 'stuck' means: tasks past TTL, findings in pending_verification >24h, attempts past TTL, plans with no recent events. That enumeration cleanly separates it from siblings like get_my_active_work or 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?

'On-demand view of the same data the hourly stuck-work job computes' tells the agent this is the manual counterpart to an automatic job, which is clear usage context. It does not name an alternative tool or state when not to use it, so it falls short of explicit routing guidance.

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

list_plansB

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
StatusNo
as_agentNo
ProjectIdYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the return payload (per-status task counts) and an efficiency rationale (avoids N dashboard calls), but says nothing about read-only safety, pagination, ordering, or scope/permission limits.

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, zero filler, and the core scope statement is front-loaded before the rationale. The second sentence earns its length by explaining both the returned data and why it matters.

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, so the description correctly explains what each plan reports, which is the key missing piece. It falls short only on parameter coverage (notably as_agent) and on pagination/ordering behavior for a list operation.

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% and the description only adds meaning for one of three parameters ('optionally filtered by status'). ProjectId is inferable from the prose, but as_agent is entirely unexplained in both the schema and the description, leaving a genuinely opaque parameter undocumented.

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 ('List plans on a project') plus the optional filter, so the action is unambiguous. It gestures at the alternative use case ('N additional dashboard calls', implicitly get_plan_dashboard) but never names the sibling, so differentiation is suggestive rather than explicit.

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

Usage Guidelines3/5

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

The second sentence implies the intended use case — pick the next plan with workable work — but never states when NOT to use it or names a concrete alternative such as get_plan_dashboard. Usage is inferable, not spelled out.

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

list_projectsA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_agentNo

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose meaningful behavior beyond the schema — a visibility filter ('can see') and computed per-project aggregates — but is silent on pagination/result size and does not confirm read-only status except by implication of 'List'.

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, both earning their place: the first defines scope and payload, the second defines the usage trigger. Front-loaded and free of 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?

No output schema exists, and the description outlines the returned per-project fields, which is adequate for a read-only list call. The only real gap is unspecified pagination/size behavior and the undocumented 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?

Schema coverage is 0% and the single parameter 'as_agent' is never mentioned in the description. The phrase 'the calling actor' hints at actor scoping but does not explain what as_agent does or when to pass it, so the description fails to compensate for the coverage gap.

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

Purpose5/5

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

Specific verb ('List') + resource ('every project the calling actor can see'), with the payload enumerated (active plan count, claimed task/finding counts). This scopes it clearly apart from siblings like list_plans and get_my_active_work without needing to 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?

Gives an explicit entry-point condition: 'Use this as the first call when a developer or orchestrator wakes up and needs to decide what to work on.' It states when to use it but names no exclusion or alternative tool for the non-wake-up case.

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

mark_task_statusA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ReasonNo
StatusNo
TaskIdYes
as_agentNo

TDQS

A4.2/5.0
Behavior4/5

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

No annotations, so the description carries the full burden. It discloses the override path, required permission flags (mapping statuses to flags), and concrete side effects (board + Slack notifications). Missing only reversibility or error behavior, but this is a rich behavioral disclosure.

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

Conciseness5/5

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

Front-loaded with the core action and status values, then layers on override/permission/side-effect details. Every clause adds information; no filler. Dense but appropriate for the complexity.

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 mutation tool with no annotations or output schema, the description covers purpose, permissions, and side effects well. It falls short only on documenting the as_agent parameter and any return/error behavior, but an agent can call it correctly for typical use.

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. It adds valuable enum values for Status and implies Reason, but omits any explanation of TaskId or as_agent. This partially compensates for the coverage gap but leaves key parameters undocumented.

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

Purpose5/5

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

States a specific verb ('Set') and resource ('task') with an explicit scope: non-normal statuses. Enumerates the allowed status values, so an agent immediately knows what the tool does and can distinguish it from normal claim/work-flow siblings.

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?

Provides clear context: use for non-normal statuses, bypassing the claim mechanism (override path). Does not explicitly name alternative tools or say when NOT to use it, but the implied contrast with the normal claim flow is strong.

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

override_verdictA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ReasonNo
EntityIdYes
as_agentNo
NewStatusNo
EntityTypeNo

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the load well: it discloses the permission prerequisite, the audit side effect (writes an override event with the supplied reason), and downstream side effects (board + Slack fired for tasks, updating the Project V2 card and channel). It does not address reversibility or failure modes, which leaves one gap for a forced 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?

Front-loads the core action and permission requirement, then adds usage and the attempts exception. Four sentences all carry information, though the attempts sentence is long enough that it could be tightened.

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 5-parameter mutation with no annotations and no output schema, the description covers the important unknowns: auth, side effects, when to use, and the sibling to prefer for attempts. It stops short of documenting parameter-level details (as_agent, status vocabulary), which is the remaining gap.

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 conveys that a Reason is recorded and that a status transition occurs, and that the target is a task or finding, but it never explains as_agent, valid NewStatus values, or the EntityType format. Partial compensation only.

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 with scope: 'Force a state change on a task or finding without holding its claim.' It names the entities affected (task/finding), the distinguishing mechanism (no claim required), and the artifact written (an override event with a reason), letting an agent separate it from claim-based flows and from mark_task_status.

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 ('Use when a subagent's claim has gone stale but the work it produced needs to be recorded') with a concrete example, and explicit exclusions/routing for attempts ('use record_commit to attach commit metadata; ... override the finding instead'). It also states the precondition — can_override_verdict on the calling actor.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
RepoIdNo
EntityIdYes
as_agentNo
CommitHashNo
EntityTypeNo
TargetBranchNo

TDQS

A3.8/5.0
Behavior3/5

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

No annotations, so the description carries the burden. It usefully discloses the side effect ('writes a commit_recorded event') and the post-hoc nature of the operation, but says nothing about permissions, idempotency, or whether attaching a duplicate hash is rejected or overwritten.

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 action and scope, followed by the routing condition. No filler, and the most decision-relevant information (what it does, when to use it) comes first.

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 six-parameter mutation tool with no annotations and no output schema, the description covers the 'why' well but leaves most parameter semantics and the mutation's safeguards unstated. Adequate for routing, incomplete for correct invocation.

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 6 parameters, and the description only implicitly clarifies two of them: CommitHash and the EntityType values ('task, finding, or attempt'). RepoId, TargetBranch, and as_agent go entirely unexplained, leaving most of the payload undefined.

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') with a clear temporal qualifier ('after the fact'). It names the sibling flow it deviates from (submit_attempt), so an agent can distinguish it from the normal submit 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?

Explicitly states the triggering condition: use when the commit lands outside the normal submit_attempt flow, with a concrete example (hotfix via override). It names the alternative flow but gives no explicit 'do not use' case or prerequisites.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ExtendByNo
as_agentNo
ClaimTokenYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that the token must be live and held by the calling actor, that expired claims cannot be reanimated because the stuck-work sweeper may have reassigned the row, and that a claim_refreshed event is written for audit. It stops short of describing auth/permission requirements beyond caller ownership.

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-loads purpose, then usage, then failure-mode caveats and side effects. Dense but every sentence carries operational weight; 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 mutation tool with no annotations or output schema, the description covers triggering conditions, default behavior, failure modes, and the audit side effect, which is nearly everything an agent needs. The remaining gap is the unlabeled ClaimToken/as_agent parameters.

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 thoroughly explains ExtendBy (duration shorthand like '30m'/'2h', and the default of adding the role's configured TTL), but ClaimToken and as_agent are left largely implicit. Partial compensation for a 3-param tool.

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: extend an active claim's TTL without releasing it. This clearly distinguishes it from siblings like release_claim, claim_next_task, and start_work, which touch the claim lifecycle differently.

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 states when to use it ('when a subagent's reproduction is taking longer than the configured role TTL') with a concrete example, and states when it will not work (an expired claim must release and re-claim instead). Both the when and the when-not are covered.

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

release_claimA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ReasonNo
as_agentNo
ClaimTokenYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the status revert to pending, the board card moving to Backlog (with lazy-creation), assignee clearing, and that Slack is deliberately not posted. It omits permissions/auth requirements and error behavior, but the side-effect disclosure is unusually thorough.

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?

Front-loaded with the core action, then purpose, then consequences, then an intentional non-effect. Every sentence carries distinct information with 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?

Behavioral consequences are well covered, but with no output schema, no annotations, and 0% parameter coverage, the definition leaves an agent guessing about the inputs it must supply. Adequate for the mutation semantics, incomplete on the calling contract.

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 3 parameters, and the description says nothing about Reason, as_agent, or ClaimToken. Only ClaimToken's existence is implied by 'Release a claim'; the optional Reason and as_agent fields remain completely unexplained in both schema and prose.

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 ('Release a claim') with the crucial qualifier 'without submitting work,' which immediately contrasts it with the submit_* siblings. An agent can distinguish it from submit_findings or mark_task_status 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?

Gives a clear triggering condition: 'Used when an agent decides it cannot complete the work and wants to surface it back to the pool.' This is explicit usage context, though it never names an alternative tool or an explicit when-not-to-use case.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
ProjectsNo
as_agentNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the async dispatch via the audit-dispatch outbox, that a background worker launches the orchestrator, that no repo checkout happens for the caller, and the possible return statuses. It stops short of stating explicit permission/auth requirements beyond the 'Admin:' label.

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, then followed by the resolution/dispatch mechanics and result shape. It is fairly dense but each sentence adds operational value; nothing is pure 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 no-output-schema tool, the description usefully explains the return shape (per-project 'queued' with dispatch id and attach_command, or 'unknown_project'). The main 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.

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 explains `projects` well as a list of project slugs or ids, but never mentions the `as_agent` parameter, leaving one of two 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.

Purpose5/5

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

States a specific verb (request) and resource (a full audit run for one or more projects), and the 'Admin:' prefix flags the privileged scope. It is clearly distinguishable from the sibling cancel_audit, since this initiates rather than cancels.

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

Usage Guidelines3/5

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

The description implies an admin context and that the caller queues work asynchronously, but it never states when to choose this over alternatives or the conditions under which it should be invoked. Usage is inferred rather than stated.

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

set_project_slackB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
as_agentNo
ProjectIdYes
WorkspaceIdNo
DefaultChannelIdNo
BotTokenSecretRefNo

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It indicates an admin-only mutation and names the configurable aspects, but it does not disclose whether existing settings are replaced, how the secret reference is validated, or what permissions/side effects apply.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no wasted words. It puts the admin context and primary configuration targets first. Nothing needs to be trimmed.

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?

The tool has five parameters, no annotations, no output schema, and 0% schema description coverage. A single sentence naming the main configuration targets is not enough for a mutation tool that needs to convey admin requirements, side effects, and parameter roles such as 'as_agent'.

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 compensate. It adds semantic meaning for four of five parameters: project, Slack workspace, default channel, and bot-token secret reference. The 'as_agent' parameter remains completely undocumented, which is a meaningful 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?

The description states a specific verb ('configure') and resource ('Slack workspace, default channel, and bot-token secret reference for a project'). It clearly identifies what the tool will change. Sibling differentiation is not explicit, but no sibling tool appears to share this Slack-configuration purpose.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, alternatives, or exclusions. The 'Admin:' prefix implies an administrative context but does not say when this tool should be selected over other project-configuration tools.

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

start_workA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_agentNo
ClaimTokenYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavior: a side effect (board sync moves the card to In Progress) and an error outcome (stale token yields stale_claim). It omits permission requirements, idempotency, and what happens if the task is not in 'claimed' state.

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 sentences, each earning its place: the transition, the side effect, the failure mode. The core action is front-loaded with 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 tool with no annotations and no output schema, the description covers the transition, its board side effect, and one error. It leaves the as_agent parameter and any indication of what a successful call returns or how to detect success undocumented.

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 explains ClaimToken well (must be the original, stale tokens fail), but the 'as_agent' parameter is never mentioned and no value format for ClaimToken is given.

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 ('claimed' to 'in_progress'), which cleanly separates it from siblings like claim_next_task, mark_task_status and release_claim. An agent can identify the tool 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 Guidelines3/5

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

The precondition is implied by 'a claimed task' and 'requires the original claim token', which tells the agent it must have claimed work first. However, it never names the alternatives (mark_task_status, release_claim, refresh_claim) or states when NOT to use it, so routing is left partly to inference.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
AttemptNo
as_agentNo
ClaimTokenYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden well: it discloses the state transition (task to review), the attempt-chain side effect on findings, and the retry_cap_exceeded error condition tied to the plan's retry cap. It doesn't mention ClaimToken authorization requirements, but the mutation behavior is otherwise well communicated.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the core action and payload, followed by the branching behavior and error case. The field enumeration is slightly listy but every element earns its place.

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

Completeness3/5

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

For a mutation tool with a nested Attempt object, 0% schema coverage, and no output schema, the description covers payload contents and error behavior but omits the required ClaimToken role and the as_agent parameter, leaving meaningful gaps an agent would need to infer.

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% with three parameters. The description enumerates the fields expected inside the Attempt object, which compensates somewhat, but it leaves ClaimToken (the required param) and as_agent entirely unexplained, so the gap is only partially filled.

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 enumerates the payload (files changed, approach summary, side effects, build command, test scenario, diff reference). It differentiates from the family of related submit_* siblings by clarifying that this records the developer's work attempt rather than a verdict or findings.

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 context for when it applies: dev-plan tasks transition to review, while audit findings append to the findings attempt chain. It stops short of explicit exclusions or naming when to prefer submit_attempt_verdict or submit_findings instead.

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.

ParametersJSON Schema
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?

No annotations are provided, so the description carries the full burden, and it does a good job: it discloses the state transitions the call triggers, the conditional commit_hash requirement, the retry cap, and the auto-creation of a child finding. It omits authorization/role constraints and the meaning of as_agent, but the mutation side effects are unusually well documented.

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 tightly packed sentences, each earning its place: the first frames the tool, and the rest enumerate verdict-specific behavior. Front-loaded and free of 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 state-machine mutation with no output schema and no annotations, the description covers the outcome of each verdict and the conditional parameter requirement. The main gap is the unexplained Evidence object and as_agent parameter, which an agent would still need to infer.

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% with 5 params, so the description must compensate. It adds real meaning for Verdict (enumerates the three allowed values the schema does not) and CommitHash (required only on fix_confirmed), but Evidence (a nested object), as_agent, and AttemptId are left entirely 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+resource ('the fix-verifier's verdict on a fixer's attempt') and situates it in the audit plan workflow, so the agent knows this is submitting a verifier judgement, not a fix or a review decision. It does not explicitly name how it differs from siblings like submit_verification_verdict or submit_review_decision, but the role phrasing is specific enough to distinguish it.

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 conditional context: which verdict value yields which outcome (fix_confirmed→fixed, fix_failed below retry cap→still claimable, partial→child finding). This tells the agent when each verdict applies and what state results. It stops short of naming alternatives or prerequisites (e.g., who may call it, when it is invalid).

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
FindingsYes
as_agentNo
ClaimTokenYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the state-machine consequences of both branches (empty list → done, non-empty → review) and that findings are created in pending_verification. It omits whether the claim is consumed/released and any error behavior for an invalid ClaimToken.

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 scope restriction and then the two branch outcomes. No filler, each sentence adds a distinct behavioral 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 and no annotations, yet the description covers the important outcome of both branches, which is what an agent needs to invoke this correctly. It leaves a gap on finding payload structure and ClaimToken handling, so not fully complete for a 3-param mutation.

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 compensate. It alludes to one parameter (the findings list, and implicitly the claimed task for ClaimToken) but never explains the shape of a finding, the format or role of ClaimToken, or what as_agent does.

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 ('submit findings') scoped explicitly to 'the currently-claimed task' and to 'Audit-plan only', which separates it from sibling submit_* tools like submit_verification_verdict and submit_attempt_verdict. An agent can identify what it does and when it applies 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 Guidelines4/5

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

The 'Audit-plan only' scope and 'currently-claimed task' precondition give clear context for when this applies versus other lifecycle submits. It does not name an alternative tool or state when-not to use it, so it falls short of a 5.

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
TaskIdYes
CommentsNo
DecisionNo
as_agentNo
CommitHashNo

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden and does well: it discloses the state machine (approved → done, changes_requested → pending or needs_human_review at retry cap) and the side effect that commit_hash is recorded on the latest attempt. It does not cover permissions, the actual retry-cap value, or return behavior.

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?

It is compact and front-loaded, stating the purpose first then the branch consequences in a single dense passage with no wasted sentences. Density is high but every clause conveys actionable state-transition 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 mutation tool with no annotations and no output schema, the state-transition coverage is solid, but gaps remain: the retry cap value is unspecified, as_agent semantics are unaddressed, and there is no indication of the response. Adequate but not fully complete given the tool's complexity.

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 partially does: it documents the Decision enum values and explains CommitHash's conditional effect. However TaskId, Comments, and notably as_agent (which likely controls identity/auth context) are left entirely 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?

The description opens with a specific verb+resource ('a reviewer's verdict on a task in review'), which cleanly separates it from sibling verdict tools like submit_verification_verdict and submit_attempt_verdict that operate on findings/attempts rather than tasks. It never explicitly names those siblings, so differentiation is by inference rather than direct routing guidance.

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 states the conditions and consequences for each decision branch (approved moves to done; changes_requested returns to pending or escalates at cap), which tells an agent when each value is appropriate. It stops short of naming alternative tools or stating prerequisites, so it is clear context without explicit exclusions.

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

submit_verification_verdictB

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
VerdictNo
EvidenceNo
as_agentNo
ClaimTokenYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the side effects — evidence is written to the verdicts table and the finding status transitions — but is silent on permissions, whether a verdict can be resubmitted or overridden, and what happens if the finding is not in a pending-verification state.

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 audit-plan scope front-loaded and no filler. It could be marginally tightened, but every clause carries 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 mutation tool with no annotations and no output schema, the description covers the outcome side reasonably but omits the claim prerequisite, the meaning of ClaimToken, as_agent semantics, and error/retry behavior. An agent could invoke it but would likely guess at how to obtain a valid ClaimToken.

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 compensate. It supplies the allowed verdict values (confirmed, rejected, ambiguous) — which the schema itself lacks — and example Evidence keys, but leaves the required ClaimToken completely unexplained and adds nothing about as_agent. Half the parameters, including the only required one, remain 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?

Specific verb (submit) plus resource (the verifier's verdict on a pending-verification finding), and the 'Audit-plan only' prefix scopes it well. It does not explicitly distinguish itself from close siblings like submit_attempt_verdict, submit_review_decision, or override_verdict, so an agent must infer the difference from the finding-state wording.

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 'Audit-plan only' constraint and 'pending-verification finding' precondition imply when the tool applies, but no alternatives are named and no explicit when-not guidance is given. Critically, it never says the finding must first be claimed via claim_next_finding_for_verification, which the sibling list suggests is a prerequisite.

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

Most tools have clearly distinct purposes tied to specific resources and lifecycle stages (claim vs. release vs. refresh, verification vs. fix vs. review verdicts). A few boundaries are subtle — the three submit_*_verdict/submit_review_decision tools and mark_task_status vs. override_verdict require careful reading — and claim_next_attempt_for_review is a documented no-op placeholder whose presence adds confusion.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun pattern (list_projects, claim_next_task, submit_review_decision, archive_plan, create_task). Longer names like claim_next_finding_for_verification still conform to the same convention, and there is no mixing of camelCase or conflicting verb styles.

Tool Count3/5

36 tools is heavy for any server, and while the surface spans several real sub-domains (projects, plans, phases, tasks, findings, claims, boards, Slack, audits), the count is driven partly by duplicate claim variants and a dead placeholder tool. It is defensible given the orchestration scope but sits above a comfortable ceiling.

Completeness4/5

Coverage is strong across the full lifecycle: project/plan/phase setup, task and finding creation, claim/refresh/release, submission and verdict flows, audit dispatch, stuck-work inspection, event forensics, and export. Minor gaps remain (no direct list_tasks or list_findings, no project update, and plan archiving is intentionally one-way), but core workflows are workable.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

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.
    62 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    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.
    10
    30
    6
    MIT