Skip to main content
Glama

Vibeflow

Task management for AI coding agents — with annotation and verification built in.

Vibeflow gives your coding agent sequenced, claimable work: tasks with hierarchy, an atomic --next claim, and a review gate with verification verdicts — on a local-first kanban board that stays in your repo. Clicking a UI element to file a ticket with its exact selector, URL, and source location is built in, so visual feedback arrives as structured tasks instead of prose.

npm install -g @vibeflow-tools/cli
vibeflow kanban

Why It Matters

AI agents write code fast, but understanding what to change is slow. Describing a UI issue in prose wastes tokens and produces wrong fixes.

Vibeflow turns visual feedback into structured tasks:

  • Click any element → instant task with CSS selector, URL, and source file location

  • Track on a Kanban board → see everything at a glance, drag between columns

  • Agents implement with context → no guessing, no wrong elements, no wasted iterations

Perfect for small UI fixes, broken layouts, spacing issues, and anything where pointing is faster than explaining.


Related MCP server: kanban-pro

Quick Start

# 1. Embed the overlay into your app (bookmarklet, script tag, or devtools)
#    Visit /inject on your running server for ready-to-use snippets

# 2. Open the Kanban board
vibeflow kanban

# 3. Click elements in your app to annotate, or create tasks on the board

# 4. Your agent picks the next task with full context executing following command
vibeflow tasks --next

Commands

Command

Description

vibeflow kanban [dir]

Start the server and open the live Kanban board in your browser

vibeflow serve [target]

Serve HTML files with live annotation overlay, or run API-only task server for existing apps

vibeflow tasks

List, filter, create, edit, and comment on tasks

vibeflow watch [dir]

Watch the task store and print ticket details for important updates

vibeflow telemetry

Manage CLI usage telemetry (opt-out at any time)

vibeflow kanban [dir]

vibeflow kanban                   # open Kanban board for current directory
vibeflow kanban ./my-project      # open Kanban for a specific project

The Kanban board provides a visual task tracker with drag-and-drop columns, agent status display, and file attachments. Create tasks directly on the board or import them from annotated prototypes.

vibeflow serve [target]

vibeflow serve .                  # serve all HTML files in current directory
vibeflow serve dashboard.html     # serve a single file
vibeflow serve -p 4000 .          # custom port
vibeflow serve --no-open .        # don't open browser automatically
vibeflow serve                    # API-only mode — connects to an existing hosted app

Serve HTML prototypes with the annotation overlay — click any element to create a task with its CSS selector, URL, and source location.

vibeflow tasks

Full task management from the command line — designed to be agent-friendly.

# Pick the next task (auto-claims a ROOT task in todo)
vibeflow tasks --next                             # highest-priority ROOT task in todo
vibeflow tasks --next --type Bug                  # next bug ROOT task only

# List tasks
vibeflow tasks                                    # ROOT tasks only (default: 20 most recent)
vibeflow tasks --children                         # include child tasks
vibeflow tasks --limit 0                          # show all tasks (no limit)
vibeflow tasks --json                             # machine-readable JSON output

# Filter
vibeflow tasks --status todo                      # by status
vibeflow tasks --type Bug                         # by type (Task, Bug, Feature, Enhancement, Research)
vibeflow tasks --user dev@example.com             # by author email
vibeflow tasks --tag frontend --tag urgent        # by tags (AND matching)

# Get full details of a single task
vibeflow tasks --get <id>                         # supports partial ID prefix

# Create a task
vibeflow tasks --add --title "Fix header" --description "Button overflows on mobile"

# Edit a task
vibeflow tasks --edit <id> --set-status in-progress
vibeflow tasks --edit <id> --title "Updated title" --description "More detail"

# Mark as review (requires implementation report)
vibeflow tasks --edit <id> --set-status review \
  --commit-message "fix: header layout" \
  --comment "Fixed the alignment issue by adjusting flex-wrap"

Task types: Task · Bug · Feature · Enhancement · Research
Task statuses: backlog → todo → in-progress → review → done
Priorities: Critical · High · Medium · Low

Root and child tasks

A task with a parent link is a child; a task without one is a root. The CLI hands an agent whole units of work, so both listing and claiming operate on roots:

  • vibeflow tasks lists root tasks only. A child belongs to its parent and is rendered inside that parent's card on the board, so listing it as a peer would contradict the board. The footer reports how many children the query matched — · 3 child tasks hidden (use --children) — so they are never hidden silently. Pass --children to include them.

  • vibeflow tasks --next claims only a root whose own status is todo, and never a child. The result carries that root's children with their ids, titles and statuses, so the agent sees what remains without a second call. Claiming a root does not cascade to its children — the agent walks them.

  • vibeflow tasks --get <id> is deliberately unfiltered: it resolves any task, child or root, so a child is always reachable by id.

# A root with children, claimed as one unit of work
vibeflow tasks --next
#   ▶ NEXT TASK — Status moved to in-progress. Implement this now:
#   [in-progress] Rebuild the settings page
#     ↓ 2 child tasks (1 done)
#       [done]        a1b2c3d4  Remove the legacy toggle
#       [todo]        e5f6a7b8  Add the keyboard shortcut

Because --next only considers roots whose own status is todo, a child in todo whose parent is in backlog, in-progress or done is not returned by --next. Move the root to todo to make the whole unit claimable.

vibeflow watch [dir]

vibeflow watch                    # watch the current directory's task store
vibeflow watch ./my-project       # watch a specific project

Runs until interrupted (Ctrl+C) and prints full ticket details whenever a task is newly created or moved back to todo — handy as a driver for AI-agent loops that react to new work.

vibeflow telemetry

vibeflow telemetry              # show current status
vibeflow telemetry --disable    # opt out of usage tracking
vibeflow telemetry --enable     # opt back in

No PII is ever collected. User identity is hashed.

What is collected. One command_run event per invocation with a small, coarse property set:

  • command — the top-level command (tasks, serve, kanban, …)

  • subcommand — the mode within a command that has one: tasks emits list / get / add / edit / next / reindex, serve emits api (API-only task server) or prototype (an HTML target was given)

  • from_status / to_status — on tasks --edit only: the task's status before and after the edit, drawn from backlog | todo | in-progress | review | done, so status transitions are queryable as a funnel

Never collected: task ids, titles, descriptions, file paths, selectors, URLs, or any other task content.


Browser Overlay

The overlay is a Shadow DOM panel injected into any page — HTML prototypes or live apps:

  • Click-to-annotate — click any element to open a task form, pre-filled with CSS selector, URL, and source location

  • Task sidebar — lists open tasks with status badges; click to jump to the annotated element

  • Task indicators — numbered markers on annotated elements

  • Real-time sync — over WebSocket with live file watching

  • Screenshot capture — attach screenshots to tasks via the overlay

  • Dark theme — polished dark UI, no configuration needed

  • Keyboard shortcut — Alt+A to toggle annotation mode

  • CSP-safe injection — bookmarklet bypasses script-src restrictions

Injection Methods

The overlay can be injected into any page three ways:

Method

Best for

CSP-safe

Bookmarklet (recommended)

Any page, including production apps

Yes

Script tag

Pages you control the HTML of

No

DevTools console

Quick one-off sessions

Yes

Visit /inject on your running server for ready-to-use bookmarklets and snippets.


How It Works

You browse your app  →  click to annotate  →  task created with context
         ↑                                         ↓
   browser reloads  ←  agent implements  ←  vibeflow tasks --next
  1. Overlay — embed the bookmarklet or script into your app, click any element to annotate

  2. Kanban — open the board to see all tasks at a glance, create new ones directly

  3. Tasks — vibeflow tasks --next claims the highest-priority root task in todo, and returns it with its children — the whole unit of work, with full context for your agent

  4. Iterate — agent implements, browser reloads, annotate again


Writing Prototypes

Each HTML file is one screen. Use Tailwind CSS, Lucide icons, and Google Fonts via CDN — the annotation contract tells your LLM to use exactly these libraries.

Rules:

  • One file per screen — name after the route (login.html, dashboard.html)

  • Every meaningful element gets a data-vibeflow-id — kebab-case, globally unique

  • Navigate between pages with relative links: <a href="./page.html">

  • Repeat navigation on every page (no shared includes)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>App — Dashboard</title>
  <script src="https://cdn.tailwindcss.com"></script>
  <script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js"></script>
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
  <style>body { font-family: 'Inter', sans-serif; }</style>
</head>
<body class="bg-gray-50 text-gray-900 min-h-screen">
  <main data-vibeflow-id="main-content" class="max-w-4xl mx-auto px-6 py-8">
    <h1 data-vibeflow-id="page-title" class="text-2xl font-semibold">Dashboard</h1>
  </main>
  <script>lucide.createIcons();</script>
</body>
</html>

Agent Integration

Vibeflow tasks are formatted for AI agents with full context:

  • CSS selectors — exact element targeting, no guesswork

  • Source locations — file, line, and column where the element is defined

  • Screenshots — visual context attached to tasks

  • Comments — threaded discussions on each task

  • File attachments — research reports, specs, and reference materials

  • Git commits — changes linked back to tasks via [proto:task-id] in commit messages

Agents can also run directly from the Kanban board via POST /api/agent/run, which spawns opencode with full task context.


MCP Server

Vibeflow gives an AI coding agent a Kanban board over your own repository: click any element in your app and it becomes a ticket carrying that element's CSS selector, URL, source file and line. Tasks, progress and verification then live in one place instead of being scattered across a chat transcript.

The server runs locally over stdio, one process per project — there is no hosted Vibeflow service to sign up for. It is published as an MCP server in the official MCP Registry (server.json in this repo).

Install and run

npm install -g @vibeflow-tools/cli
vibeflow mcp --project /path/to/project

--project is required. The project root is resolved once at startup and every tool call uses that root, so a server can never write into the wrong project. Point it at your own repository.

Client configuration

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "vibeflow": {
      "command": "npx",
      "args": ["-y", "@vibeflow-tools/cli", "mcp", "--project", "/path/to/project"]
    }
  }
}

Cursor — the same block goes in .cursor/mcp.json in your project:

{
  "mcpServers": {
    "vibeflow": {
      "command": "npx",
      "args": ["-y", "@vibeflow-tools/cli", "mcp", "--project", "/path/to/project"]
    }
  }
}

Tools

Tool

What it does

list_tasks

List tasks with optional filters (root tasks only unless children)

get_task

One task by ID, with comments and files

get_project

The resolved project this server is attached to — root, branch, mode

create_task

Create a task, optionally annotated with a URL and selector

update_task

Edit a task: status, title, links, and the verification verdict

claim_next_task

Claim the highest-priority root task in todo as in-progress

add_comment

Comment on a task

attach_file

Attach a file (base64); a .md satisfies the research-report gate

export_prompt

Export one or more tasks as a formatted LLM prompt

verify_task

Run visual verification for an annotated task

start_kanban

Start the local Kanban board server and return its URLs

get_integration_guide

The overlay/bookmarklet integration instructions

The published package exposes every tool listed above. server.json records that count as toolsAtPinnedVersion, and sync-server-manifest.mjs checks it against packages/cli/src/mcp/manifest.ts on every release — a mismatch warns loudly rather than shipping a number nobody verified.

Authentication

None required. Vibeflow is local-first: no login, no account, no API key. Every task is a file in your repo.

An HTTP transport also exists (vibeflow serve, MCP endpoint at /api/mcp), but it is a local loopback server rather than a public one.

For the full protocol reference — result envelope shape, refusal codes, notices, and the dryRun preview — see the CLI package README.


API

A REST API and tRPC router are available at http://localhost:3700 for integrations and the browser overlay. Key endpoints:

  • /kanban — live Kanban board

  • GET/POST /api/tasks — list and create tasks

  • GET/PATCH/DELETE /api/tasks/:id — manage individual tasks

  • GET/POST /api/tasks/:id/comments — task comments

  • GET/POST/DELETE /api/tasks/:id/files — file attachments

  • POST /api/agent/run — spawn an AI agent for a task

  • /inject — overlay injection helper page

See src/server/server.ts for the full API.


Installation

npm install -g @vibeflow-tools/cli

Or run without installing:

npx @vibeflow-tools/cli kanban

Requirements: Node.js >= 22


Contributing

pnpm install       # install dependencies
pnpm build:cli     # build CLI
pnpm test          # unit tests
pnpm test:e2e      # end-to-end tests

License

Apache-2.0 — see NOTICE for third-party attributions.

Available Tools

12 tools
add_commentB

Add a comment to a task. The body is comment — the same name as the CLI's --comment flag and update_task's field.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTask id — a full id, or any unique prefix of one, of the task to comment on. An id that matches nothing is refused with TASK_NOT_FOUND; no task is created.
authorNoagent
dryRunNo
commentYesThe comment body — what changed, what you verified, what a reviewer should know. Required and non-empty: an empty body is refused by input validation before the tool runs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly=false, idempotent=false, destructive=false, so the mutation/safety profile is covered structurally. The description adds only the CLI flag/field-name correspondence, not duplicate handling, auth needs, or the dryRun behavior, so it is modest added value rather than rich 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?

Two short sentences with the core action front-loaded and no filler. The CLI-flag aside is marginally useful for naming consistency but is the weakest sentence in an otherwise tight description.

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 output schema, the description covers the required payload but leaves dryRun (a behavior-changing flag) and author (an enum with a default) unexplained anywhere. Annotations cover safety, but an agent still cannot tell what dryRun does without guessing.

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 50%: id and comment are documented in the schema, while author and dryRun are not. The description reinforces that comment carries the body and must be supplied, but adds nothing on author or dryRun, so the undocumented half is not compensated.

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 ('Add a comment to a task'), which is unambiguous and clearly distinct from siblings like create_task or update_task by its narrow action. It does not explicitly contrast with a sibling to say why you'd comment rather than edit, so it falls short of the 5 tier.

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, when-not-to-use, or alternative guidance is given. The mention of update_task is only about field-name consistency, not about choosing between the two tools. An agent gets no routing context beyond the literal action.

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

attach_fileA

Attach a file to a task (content as base64). A filename ending in .md is what satisfies the research-report gate: a type:"Research" task is refused review with RESEARCH_REPORT_REQUIRED until a .md is attached, so attaching the report is how to recover from that refusal.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTask id — a full id, or any unique prefix of one, of the task to attach to. An id that matches nothing is refused with TASK_NOT_FOUND; no file is written.
dryRunNo
filenameYesBare filename, no directory part. The EXTENSION decides acceptance: a .md is what satisfies the research-report gate, and an unsupported extension is refused with UNSUPPORTED_FILE_TYPE.
contentB64YesThe file content, base64-encoded (not raw bytes, and not a path to read). Required: omitting it is refused by input validation before the tool runs.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare a non-read-only, non-idempotent, non-destructive write, and the description adds useful state-behavior context about the research gate refusal. However it says nothing about whether re-attaching the same filename overwrites, duplicates, or is refused — a real gap given idempotentHint=false and destructiveHint=false are the only signals on that front.

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 with the core action front-loaded and the gate mechanics second; nothing is padded. The second sentence is dense and clause-heavy, but each clause carries actionable information about the failure/recovery loop.

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

Completeness3/5

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

The description covers the primary workflow and the research-gate recovery well, and there is no output schema to explain. But `dryRun` — a fourth parameter documented nowhere in the schema either — is never mentioned, so an agent cannot learn from the definition that a preview mode exists. That leaves a meaningful hole for a mutation tool.

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

Parameters3/5

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

Schema coverage is 75% and the three documented parameters already carry rich descriptions with their refusal codes (TASK_NOT_FOUND, UNSUPPORTED_FILE_TYPE, input validation). The description merely restates the base64 and `.md` facts already in the schema and adds no new parameter meaning, so the baseline 3 applies.

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 file to a task') plus the key encoding contract (base64), which is exactly what an agent needs to know before calling. No sibling tool attaches files, so there is no ambiguity to resolve; the definition is self-distinguishing.

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 when-to-use scenario: attaching a `.md` is the recovery path for a `type:"Research"` task blocked with RESEARCH_REPORT_REQUIRED. That is clear triggering context. It stops short of explicit when-not guidance (e.g. whether non-.md attachments are ever useful), so it lands at 4.

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

claim_next_taskA

Claim the highest-priority ROOT task in todo and set it to in-progress. Never claims a child: a root is the unit of work, so work through its children after claiming it. Mirrors 'vibeflow tasks --next'. An empty board is a SUCCESS, not a failure: the result is then null (an object means a task was claimed, null means there was nothing to claim), the same as 'vibeflow tasks --next --json' reporting task:null with exit 0. A valid filter that matches no task is the same situation and gives the same null.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
typeNo
userNo
dryRunNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare a non-read-only, non-idempotent, non-destructive mutation; the description adds genuinely new behavior by specifying the return contract (object = claimed, null = nothing to claim) and that an empty board is success, not an error. It does not address claim atomicity/concurrency, permissions, or why it is non-idempotent, leaving some mutation behavior unstated.

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

Conciseness3/5

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

The core claim rule is front-loaded and efficient, but the null/empty-board case is restated three times (null result, the CLI `task:null` exit-0 comparison, and the filter case), which is redundant padding for a single concept.

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

Completeness4/5

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

With no output schema, the description correctly fills the gap by explaining the return value shape and the empty-result case, which is the most failure-prone aspect of this tool. It remains incomplete on filter parameter behavior and dryRun, but the critical call contract is covered.

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 four parameters (tag, type, user, dryRun), so the description carries the full burden. It only obliquely references filtering ('A valid filter that matches no task'), giving no meaning for tag/type/user semantics or for what dryRun actually 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 and resource with scope: 'Claim the highest-priority ROOT task in todo and set it to in-progress.' It also distinguishes itself from the sibling set (create_task/update_task/list_tasks) by defining the root-vs-child rule, so an agent can tell it apart without opening a schema.

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

Usage Guidelines4/5

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

Gives clear usage context: use it to pull the next unit of work, then work through the claimed task's children rather than claiming children directly. It does not explicitly name alternative tools or state when-not-to-use (e.g., vs. list_tasks/get_task), so it stops short of full routing guidance.

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

create_taskB

Create a new task with title, description, and metadata. LINKS merge: links ADDS every listed taskId+type pair to the new task and parent (when given) is folded into the same union, so sending both merges once and a pair named twice is a no-op — the same MERGE semantic update_task has, where a link you do not name is simply absent (a new task has nothing to preserve). links: [] is REFUSED — omit the field for no links.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
tagsNo
typeNoTask
linksNoADD the listed links to the new task (merge, same as update_task's `links`). Combined with `parent` as a union; a pair named twice is a no-op. `links: []` is REFUSED — omit the field for no links.
titleYes
dryRunNo
parentNo
statusNotodo
sortKeyNo
priorityNoMedium
selectorNo/
cssSelectorNo
descriptionNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare the safety profile (not read-only, not idempotent, not destructive), so the bar is low. The description still adds substantial non-obvious behavior: links are merged as a union with parent, duplicate pairs are no-ops, and `links: []` is refused rather than treated as 'no links'. It omits dryRun semantics, which is a notable behavioral gap for a mutation tool.

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

Conciseness4/5

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

The purpose is front-loaded in one short sentence, followed by a dense but purposeful paragraph on link semantics. It is appropriately sized for the subtlety it explains, with no filler, though the link paragraph is packed tightly enough to require careful reading.

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 13-parameter creation tool with no output schema and almost no schema descriptions, the definition covers only the creation act and the links nuance. Nothing tells the agent what dryRun does, what the tool returns, or what a successful call looks like, leaving clear gaps given the schema's richness.

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

Parameters2/5

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

Schema description coverage is only 8% across 13 parameters, so the description must carry the load. It thoroughly explains the `links`/`parent` union and the empty-array refusal, but leaves the majority of parameters (dryRun, url, tags, sortKey, selector, cssSelector, status, priority) undocumented, and much of the link text echoes the existing schema property 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?

The opening sentence gives a specific verb and resource ('Create a new task') plus the primary fields it accepts, so an agent immediately knows what the tool does. It also implicitly differentiates itself from update_task by referencing that tool's merge semantics, though it never explicitly states the create-vs-update boundary.

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

Usage Guidelines3/5

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

Usage is implied by the verb 'create' and the note that a new task has nothing to preserve, which gently explains why links behave as a pure union. However, there is no explicit 'use this when you need a new task, not update_task/get_task' routing guidance despite eleven sibling tools.

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

export_promptC
Read-onlyIdempotent

Export task(s) as formatted prompt for LLM consumption.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoA FULL task id to export — this tool matches ids EXACTLY, so a prefix is NOT resolved and is refused with TASK_NOT_FOUND. Omit it (or pass `ids`) to export the whole board.
idsNoFULL task ids to export, matched exactly. An id that matches no task is skipped rather than refused, so check that the rendered output names every id you asked for.
formatNomarkdown

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds only 'for LLM consumption' and says nothing about the board-wide default scope, the exact-match refusal/skip behavior, or output differences between formats — context that would be genuinely additive here.

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

Conciseness3/5

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

A single front-loaded sentence with zero filler, which is structurally clean. But the brevity reads as under-specification rather than disciplined conciseness for a tool with this many behavioral nuances.

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?

With three parameters, no output schema, and a scope that can silently expand to the whole board when ids are omitted, the description omits information an agent needs to call this safely and predictably. The schema carries most of the load, but the description does not close the remaining gaps.

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

Parameters2/5

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

Schema coverage is 67%, with the `id` and `ids` parameters already documenting exact-match semantics and the whole-board default. The description contributes no parameter meaning at all, and `format` has no description in either place, 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.

Purpose4/5

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

Names a specific verb (export) and resource (task(s)) plus the output artifact (a formatted prompt for LLM consumption), which is concrete enough to distinguish it from list_tasks/get_task. However, it never contrasts itself against those siblings, so the agent must infer the boundary on its own.

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 guidance and no named alternative. Nothing tells the agent when to prefer export_prompt over get_task or list_tasks, or that omitting ids exports the entire board.

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

get_integration_guideA
Read-onlyIdempotent

Get the overlay/bookmarklet integration instructions — the text of the /inject page: the script tag to paste, the browser-console snippet, the bookmarklet, and the /inject URL. Works whether or not the server is running; when it is not, the guide is built against the default port and the result says serverRunning:false, so call start_kanban first for real URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, not destructive, closed-world), and the description adds real behavioral context beyond them: the tool functions with or without a running server, and in the stopped case the guide falls back to the default port and the result reports serverRunning:false.

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

Conciseness4/5

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

A single dense sentence, but it is front-loaded with the core purpose and then layers the output contents and the server-state caveat in a logical order. Every clause carries information; minor tightening is possible but nothing is wasted.

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?

There is no output schema, and the description compensates by naming the returned artifacts (script tag, snippet, bookmarklet, URL) plus the serverRunning flag field. For a zero-parameter read tool, an agent has everything needed to call and interpret it.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing to disambiguate; the baseline for a no-param tool is 4. No parameter semantics are needed or missing.

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 ('Get the overlay/bookmarklet integration instructions') and enumerates exactly what the payload contains: script tag, console snippet, bookmarklet, and /inject URL. This is unmistakably distinct from sibling tools like list_tasks or start_kanban.

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 sequencing rule: call start_kanban first when you need real URLs, and explains the tool still works otherwise. It doesn't describe any other alternatives, but the prerequisite and fallback behavior are clearly spelled out.

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

get_projectA
Read-onlyIdempotent

Return the resolved project this server is attached to: name, absolute root, git branch and mode. Read-only; takes no input.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description's 'Read-only; takes no input' largely restates those structured fields; the one bit of added value is the 'resolved' framing, hinting the server computes/derives the project rather than reading it verbatim.

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

Conciseness5/5

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

Two short sentences, zero waste, with the resource and its returned fields front-loaded before the read-only affirmation.

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?

With no output schema, the description carries the burden of describing the return value and does so completely: name, absolute root, git branch and mode. Nothing an agent needs to invoke or interpret this tool 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?

There are zero parameters, which sets the baseline at 4. The description's 'takes no input' reinforces the empty schema, and no additional parameter meaning is needed.

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 (Return) and resource (the resolved project this server is attached to), and enumerates the returned fields (name, root, git branch, mode). No sibling tool (all task/comment/kanban operations) overlaps with project resolution, so the agent can distinguish it immediately.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: 'Return the resolved project this server is attached to' makes clear this is the project-context lookup, and 'takes no input' confirms it is a simple retrieval. However, there is no explicit when-to-use framing or named alternative, so an agent is left to infer the call condition.

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

get_taskB
Read-onlyIdempotent

Get a single task by ID with full details including comments and files.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTask id — a full id, or any unique prefix of one. Get a real id from list_tasks; an id that matches nothing is refused with TASK_NOT_FOUND.
fieldsNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds that the response expands to include comments and files, which is genuine behavioral context, but says nothing about pagination, size limits, or failure modes.

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

Conciseness5/5

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

One front-loaded sentence with the core action first and the payload detail second. No filler, no redundancy.

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

Completeness3/5

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

For a 2-param read tool with no output schema (so return values need not be described), the description is adequate on scope but leaves the 'fields' parameter unexplained and gives no guidance on when this beats the sibling readers. Functional but with visible 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 50%: the required 'id' param is richly documented (prefix matching, TASK_NOT_FOUND), but 'fields' has no schema description and the tool description never explains it. At this coverage level the description only marginally compensates, so baseline 3 applies.

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 ('Get a single task by ID') and scopes it as single-record retrieval with 'full details including comments and files'. The word 'single' implicitly separates it from list_tasks, but no sibling is named 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?

The description gives no when-to-use guidance, no prerequisites, and names no alternative. The only routing hint (get an id from list_tasks) lives in the schema's id description, not in the tool description, so the description itself leaves usage to inference.

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

list_tasksA
Read-onlyIdempotent

List tasks with optional filters. Returns task list with configurable fields. ROOT tasks only by default — a task with a parent belongs to that parent, so set children:true to include them. The response's hiddenChildren reports how many matched but were omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
typeNo
userNo
limitNoHow many tasks to return. 0 (or less) means no limit. A negative value is refused by input validation before the tool runs.
fieldsNo
statusNo
childrenNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely non-obvious behavior: default filtering to root tasks and the hiddenChildren field that reports omitted matches — context an agent could not derive from annotations or schema.

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?

Four short sentences, front-loaded with purpose, then defaults, then response behavior. 'Returns task list with configurable fields' is mildly redundant with the schema's fields parameter, but nothing else is wasted.

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

Completeness4/5

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

For a 7-param listing tool with no output schema, the description covers the critical default (root-only) and a returned field (hiddenChildren), which are the main non-obvious behaviors. Gaps remain around valid values for the fields array and ordering, but the essential calling context is present.

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 only 14%, so the description must carry weight. It explains children's default and effect and references configurable fields, and limit is documented in the schema, but tag, user, status, and especially the fields array (which fields are valid) get no elaboration — 'optional filters' is a blanket phrase rather than per-parameter meaning.

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 (List) and resource (tasks) and immediately identifies the tool's distinctive scope: ROOT tasks only by default. It does not name a sibling such as get_task or claim_next_task to differentiate, but the read/list semantics are 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?

It gives a concrete condition for one parameter ('children:true to include' non-root tasks), which is useful usage guidance. However, it never says when to use list_tasks versus get_task or claim_next_task, nor any prerequisites, so tool-level selection guidance is only implied.

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

start_kanbanA
Idempotent

Start the local kanban board server and return the instruction block the CLI prints: the kanban URL, the localhost URL when bound to 0.0.0.0, the agent prompt, and the overlay integration guide. IDEMPOTENT — one server per process; a second call returns the running instance (alreadyRunning:true) instead of fighting for the port. Call it once before get_integration_guide so the guide carries real URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoBind hostname. Defaults to localhost; use 0.0.0.0 to expose the board on the LAN (the tool then also returns a localhost URL). Ignored when the server is already running.
portNoPort to bind. Defaults to 3700, the same default as the `vibeflow serve` / `vibeflow kanban` commands. Ignored when the server is already running.
dryRunNoPreview only: report the URLs and guide the server WOULD serve, and bind nothing. Never starts a process.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, readOnlyHint=false, openWorldHint=true, so the safety profile is covered. The description goes beyond them by explaining what idempotency actually looks like in practice (second call returns the running instance with alreadyRunning:true instead of contending for the port) and enumerating the returned payload. It does not mention how the server is stopped or any auth/CORS implications.

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

Conciseness5/5

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

Three tightly packed sentences, front-loaded with the core action and return value, then idempotency, then the ordering constraint. No filler or repetition.

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

Completeness4/5

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

With no output schema, the description carries the burden of return-value disclosure and does so (URL, localhost URL, agent prompt, integration guide). Annotations cover the mutation/safety angle. Minor gap: lifecycle concerns such as stopping the server or port-conflict behavior on the first call are unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so host, port and dryRun semantics (defaults, 0.0.0.0 LAN behavior, ignore-when-running) are already documented in the schema. The description adds no parameter-level detail beyond what the schema provides; baseline 3 applies.

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 + resource ('Start the local kanban board server') plus an explicit statement of what it returns (URLs, agent prompt, overlay guide). It is clearly distinguishable from the neighboring get_integration_guide, which it names, and from task CRUD 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?

Gives explicit sequencing: 'Call it once before get_integration_guide so the guide carries real URLs,' and reassures that a second call returns the running instance rather than failing. No explicit when-not-to-use case (e.g. in remote/Docker setups), but the ordering guidance is well covered.

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

update_taskA

Update an existing task. Supports status changes, title/description updates, adding comments, and changing the task's links (parent/relates/blocks). Pass setVerify to record your verification verdict: "pass" attests the task IS implemented correctly (verified=true, green badge — required for annotated tasks at the review transition, which vibeflow verify never sets itself), "fail" records that it is NOT implemented correctly (verified=false, amber badge, the review gate rejects it), and "cannot" clears the verdict back to absent (no badge) for a task that cannot be assessed here — "cannot" REQUIRES verifyReason, which is recorded in the task's activity.

LINKS — everything merges, and clearLinks is the only destructive path. links and addLinks both MERGE: a link you do not name is PRESERVED, and re-sending a link that is already there is a no-op, so neither of them can destroy a link by being incomplete. removeLinks removes exactly the taskId+type pairs you name and leaves every other link alone. clearLinks: true is the ONLY way to remove links wholesale — to drop a single link, name that taskId+type in removeLinks rather than editing links. Omitting all four fields leaves links untouched. The CLI's --set-parent/--relates/--blocks/--unrelates/--unblocks behave the same way (each is surgical and preserves every link it does not name), so the CLI and MCP surfaces now agree on link semantics.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTask id — a full id, or any unique prefix of one, of the task to update. An id that matches nothing is refused with TASK_NOT_FOUND and changes nothing.
linksNoADD the listed links without touching the rest (merge, same as the CLI's --relates/--blocks). A pair already present is a no-op. `links: []` is REFUSED — use clearLinks:true to clear. Combining `links` with `addLinks` merges their union once.
titleNo
branchNo
dryRunNo
statusNo
commentNo
addLinksNoADD links without touching the rest (merge). Same semantics as `links` — sending both merges their union once. Use clearLinks:true to drop the whole set.
setVerifyNoYour verification verdict: "pass" = the task IS implemented correctly (required for an annotated task at review), "fail" = it is NOT (the review gate blocks it), "cannot" = unverifiable here, which REQUIRES verifyReason. Omit to leave any stored verdict untouched.
clearLinksNoRemove EVERY link from the task. Applied BEFORE the merge: clearLinks -> (links + addLinks) -> removeLinks. `true` clears; `false` or absent is a no-op.
descriptionNo
removeLinksNoREMOVE the listed links without touching the rest. Applied after clearLinks and after the links/addLinks merge.
verifyReasonNoWhy the task cannot be verified. REQUIRED with setVerify:"cannot", and refused as E_USAGE on its own — a reason belongs to a "cannot" verdict.
commitMessageNo

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond the annotation hints: it discloses that links/addLinks both MERGE and cannot destroy by omission, that re-sending a pair is a no-op, the exact application order (clearLinks -> links+addLinks -> removeLinks), that clearLinks is the only wholesale-destructive path, and the refusal modes (links: [] refused, TASK_NOT_FOUND changes nothing, verifyReason alone refused as E_USAGE). None of that is derivable from readOnlyHint/destructiveHint/idempotentHint.

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, a dryRun-style LINKS block separates the dense link rules, and every sentence about merge/surgical/clear semantics earns its place. The final sentence describing CLI flag parity (--set-parent/--relates/etc.) is length the MCP caller cannot act on and is the one trimmable element.

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 14-param mutation with no output schema and only one required field, the risky link and verification paths are documented thoroughly enough to call correctly. The omissions are dryRun (does it validate or no-op?) and commitMessage, plus no statement of what the tool returns after a successful update.

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

Parameters4/5

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

With only 50% schema description coverage across 14 params, the description carries real weight: it fully explains links, addLinks, removeLinks, clearLinks, setVerify, and verifyReason, including the ordering contract and empty-array refusal. It leaves branch, dryRun, and commitMessage entirely undefined in both schema and description, which is the remaining 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?

"Update an existing task" states a specific verb and resource, and the follow-up enumerates the updatable surfaces (status, title/description, comments, links). It stops short of naming the siblings it overlaps with — add_comment and verify_task — so an agent must infer that the `comment` and `setVerify` params here are alternatives to those tools.

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?

Strong condition-based guidance for each mode: merge vs surgical remove vs wholesale clear, and the three setVerify verdicts with the requirement that "cannot" needs verifyReason and that "pass" is required for annotated tasks at the review transition. It does not route among sibling tools (e.g. when to call add_comment or verify_task instead), so it is clear context without explicit alternatives.

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

verify_taskC

Run visual verification on a task. Captures baseline and compares.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTask id — a full id, or any unique prefix of one, resolved by the same shared rule every other task tool uses. An id that matches nothing is refused with E_NOT_FOUND (this tool runs the CLI verify engine, which has its own code), and every refusal it returns carries a `suggestion`.
urlNo
dryRunNo
timeoutMsNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the agent knows this is a mutating, non-idempotent, non-destructive call. The description hints that it persists a baseline artifact, but omits what side effects occur, whether repeat runs re-capture the baseline, auth requirements, and timeout/timeoutMs impact.

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 sentences, purpose front-loaded, no filler or repetition. It is arguably under-specified rather than concise, but structurally it is tight.

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 four-parameter tool with no output schema and no annotations covering side effects or errors, yet the description says nothing about what the verification returns, how failure is surfaced, or how the three optional parameters change behavior. Too thin for the tool's complexity.

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

Parameters2/5

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

Schema description coverage is only 25%: `id` is richly documented, but `url`, `dryRun`, and `timeoutMs` have no descriptions. The description mentions none of these parameters, so it fails to compensate for the coverage gap and adds nothing beyond the schema.

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: 'Run visual verification on a task,' and adds the mechanism ('captures baseline and compares'). No sibling tool does verification, so it is distinguishable in practice, but it never explicitly differentiates itself from the surrounding task tools.

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 (e.g. does a baseline need to exist first?), and no mention of alternatives or when not to run it. The agent must infer all of this.

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. 12 tool updatesv0.20.0
    • First observedadd_comment
    • First observedattach_file
    • First observedclaim_next_task
    • First observedcreate_task
    • First observedexport_prompt
    • First observedget_integration_guide
    • First observedget_project
    • First observedget_task
    • First observedlist_tasks
    • First observedstart_kanban
    • First observedupdate_task
    • First observedverify_task

TDQS

A3.6/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target a distinct resource+action (task CRUD, comments, files, kanban server). However, add_comment duplicates update_task's documented comment-adding capability, and verify_task (visual verification) overlaps with update_task's setVerify verdict field, creating mild boundary confusion.

Naming Consistency5/5

All 12 tools follow a consistent snake_case verb_noun pattern (list_tasks, get_project, create_task, update_task, claim_next_task, get_task, add_comment, attach_file, export_prompt, verify_task, start_kanban, get_integration_guide). No mixing of conventions or vague verbs.

Tool Count5/5

12 tools is well within the healthy range and each earns its place: task lifecycle, comments/files, verification, and kanban/integration serving all map to distinct needs. No redundancy that bloats the surface.

Completeness4/5

Core lifecycle is covered (create, get, list, update, claim, plus comments/files/verification). The obvious gap is the absence of a delete_task tool, leaving no direct way to remove tasks, though status transitions can partially work around this.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers