Skip to main content
Glama

πŸ“‹ Kanboard MCP

Kanboard, plug-and-play in any AI editor.

A Model Context Protocol server that brings your Kanboard board into Claude Code, Claude Desktop, Cursor, Cline, Zed, and beyond β€” so your agent can read, plan, and update tasks the same way you would.

39 typed tools Β· JSON-RPC batching Β· Dual authentication Β· TypeScript strict Β· 1016 tests

npm version License: MIT Node.js >=22 Tests TypeScript Strict MCP Compatible

Originally developed at aisys-media GmbH


What it looks like

Kanboard MCP in action β€” an agent turning a customer email into a Mobile sprint backlog via JSON-RPC batching

You:    Take this customer email and turn it into a Mobile sprint backlog.

Claude (via kanboard-mcp):
  β†’ list_projects()                    βœ“ resolved "Mobile" = #42
  β†’ list_columns(42)                   βœ“ Backlog = #588
  β†’ create_tasks_batch(42, [...])      βœ“ 8 tasks created in #42/Backlog
  β†’ list_my_tasks()                    βœ“ priorities re-sorted

Done β€” 8 tasks in Mobile/Backlog, sorted by priority.
Top 3:  "Fix login error on iOS 18.2"  (P1)
        "Flaky CI on PR #1247"          (P1)
        "Onboarding redesign review"    (P2)

The same flow works for every kind of board work β€” pulling overdue tasks, opening a daily standup summary, breaking a doc into subtasks, or updating a comment on someone's PR. The agent picks the tools, you stay in the loop.


Related MCP server: Kanban MCP Server

Why Kanboard MCP

  • 39 typed tools across 9 groups β€” full CRUD on projects, columns, swimlanes, tasks, subtasks, comments, attachments, and members. No half-supported entities, no read-only stubs.

  • JSON-RPC 2.0 batching β€” create up to 100 tasks in one HTTP round-trip. Turn an email, a meeting transcript, or a doc into a sprint backlog in seconds.

  • Dual authentication β€” personal token (acts as you, with your Kanboard identity) or application token (service identity for CI, bots, and shared agents).

  • Walk-up project resolver β€” drop one .kanboard.yaml at your repo root, every tool auto-resolves the project context. Switch repos, your agent switches boards.

  • Zero runtime HTTP dependencies β€” native Node 22 fetch, 4 production deps total. Audit surface is intentionally tiny.

  • Pino structured logging with automatic secret redaction β€” token values never reach stdout, stderr, or any log line, at any log level.

  • TypeScript strict mode + 1016 unit tests across 65 test files. Integration suite gated against accidental writes to non-sandbox projects.

  • Smart retries for reads only β€” idempotent calls retry transparently on transient HTTP failures (429 / 502 / 503 / 504); mutations never retry.

  • Hard per-request timeouts β€” every JSON-RPC call runs under AbortSignal.timeout() (default 15 s, configurable via KANBOARD_TIMEOUT_MS). Requests cannot hang the agent indefinitely β€” slow or unresponsive backends surface as a clean TimeoutError your agent can recover from.

  • Debuggable from day one β€” speaks plain MCP over stdio, so the official MCP Inspector works out of the box. Inspect schemas, fire individual tool calls, watch JSON-RPC traffic in a browser UI. See Debugging with MCP Inspector.

60-second quick start

Kanboard MCP setup β€” drop a JSON config block, run the selftest, see four green checks, you're done

1. Get a Kanboard API token

In Kanboard: Profile β†’ API β†’ Generate token (personal mode), or Settings β†’ API β†’ Application token (app mode for service accounts).

2. Add Kanboard MCP to your client

Recommended path: npx β€” zero install, always latest. Drop this block into your MCP client config:

{
  "mcpServers": {
    "kanboard": {
      "command": "npx",
      "args": ["-y", "@ernestocorona/kanboard-mcp"],
      "env": {
        "KANBOARD_URL": "https://your-kanboard.example.com",
        "KANBOARD_USERNAME": "your-kanboard-login",
        "KANBOARD_API_TOKEN": "your-personal-token"
      }
    }
  }
}

Restart your MCP client. Done β€” the 39 tools are now available to your agent.

Why npx? It fetches @ernestocorona/kanboard-mcp from npm on demand, caches it locally, and runs it as the MCP server. You never run a separate install command, and you always get the latest published version β€” no upgrade chore, no $PATH to manage. This is also why step 3's selftest works without any prior install: npx handles the fetch transparently.

3. Verify

KANBOARD_URL=https://your-kanboard.example.com \
KANBOARD_USERNAME=your-login \
KANBOARD_API_TOKEN=your-token \
npx @ernestocorona/kanboard-mcp selftest

Expected output (exit 0 = ready):

[ok] kanboard server version: 1.x.x
[ok] authenticated as: your-login (id=3)
[ok] visible projects: 7
[ok] selftest passed (3 checks)

Documentation

Full docs live in ./docs/ and follow the DiΓ‘taxis framework:

  • Tutorials β€” hand-held walkthroughs to learn by doing.

  • How-to guides β€” recipes for batching, multi-project setups, integration tests, and CI.

  • Reference β€” exact contracts for every tool, every config knob, and every error.

  • Explanation β€” the why behind authentication modes, the retry policy, and the batch architecture.

Start at the docs index to pick the right entry point.

Installation methods

Just want it working? Use the npx row (first entry below) β€” it's the recommended path for the vast majority of users. The other methods exist for specific use cases (frequent local runs, Bun/pnpm runtimes, production deployments, or hacking on the source).

Method

When to use

Command

npx (recommended)

Most users. Zero install, always uses the latest published version.

npx -y @ernestocorona/kanboard-mcp

Global install

You run the server frequently and want a stable binary on $PATH.

npm i -g @ernestocorona/kanboard-mcp then kanboard-mcp

bunx / pnpm dlx

You use Bun or pnpm as your runner. Same package, same behavior.

bunx @ernestocorona/kanboard-mcp

Docker (GHCR)

Production-style deployment, CI agents, isolated environments. Multi-arch image (linux/amd64, linux/arm64), runs as non-root.

docker run -i --rm -e KANBOARD_URL -e KANBOARD_USERNAME -e KANBOARD_API_TOKEN ghcr.io/ernestocorona/kanboard-mcp:latest

Clone + node

You want to fork, hack, or run from source.

git clone … β†’ npm i β†’ npm run build β†’ node dist/index.js

Heads up: the package is ESM-only and requires Node β‰₯ 22. Older Node versions will fail at startup.

Run with Docker

The published image (ghcr.io/ernestocorona/kanboard-mcp) is built for linux/amd64 and linux/arm64, runs as the non-root node user, and speaks MCP over stdio β€” exactly like the npm version. Point your client at docker instead of npx:

{
  "mcpServers": {
    "kanboard": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "KANBOARD_URL",
        "-e", "KANBOARD_USERNAME",
        "-e", "KANBOARD_API_TOKEN",
        "ghcr.io/ernestocorona/kanboard-mcp:latest"
      ],
      "env": {
        "KANBOARD_URL": "https://your-kanboard.example.com",
        "KANBOARD_USERNAME": "your-kanboard-login",
        "KANBOARD_API_TOKEN": "your-personal-token"
      }
    }
  }
}

The -i flag is mandatory β€” MCP needs stdin attached to pipe JSON-RPC frames. --rm keeps the container ephemeral. Pin to a specific tag (:0.3, :0.3.2) in production instead of :latest.

Compatible MCP clients

MCP is a transport-level standard. The same JSON snippet from the quick start works in every client below β€” only the file path differs.

Client

Config file

Claude Code

.mcp.json (per-project) or ~/.claude.json (global)

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) Β· %APPDATA%\Claude\claude_desktop_config.json (Windows)

Cursor

.cursor/mcp.json (per-project) or ~/.cursor/mcp.json (global)

Cline (VS Code extension)

VS Code β†’ Cline panel β†’ MCP Servers β†’ Add

Zed

~/.config/zed/settings.json β†’ context_servers block

Continue (VS Code / JetBrains)

~/.continue/config.json

Goose (Block)

~/.config/goose/profiles.yaml

Windsurf (Codeium)

~/.codeium/windsurf/mcp_config.json

If your editor speaks MCP stdio, this server works in it. If it doesn't speak MCP at all yet (some chat tools still don't), it can't be plugged in until support lands upstream.

Application mode (service identity)

For CI pipelines, bots, and shared agents β€” use Kanboard's protocol-level jsonrpc user instead of a human account:

{
  "mcpServers": {
    "kanboard": {
      "command": "npx",
      "args": ["-y", "@ernestocorona/kanboard-mcp"],
      "env": {
        "KANBOARD_URL": "https://your-kanboard.example.com",
        "KANBOARD_AUTH_MODE": "app",
        "KANBOARD_API_TOKEN": "your-application-token"
      }
    }
  }
}

In app mode, KANBOARD_USERNAME is not required and is ignored. Comments and tasks created via app mode are authored by the jsonrpc system user.

Project context with .kanboard.yaml

Drop a .kanboard.yaml at your repo root and every tool that needs a project auto-resolves it. The server walks up from cwd (stops at $HOME or git root):

# Use exactly one β€” they are mutually exclusive
project_id: 12
# project_identifier: "MYPROJ"

# Optional defaults, override per call if needed
default_column_id: 2
default_swimlane_id: 1
default_owner_id: 5
default_category_id: 3

You can still override per call by passing project_id explicitly. The file is cached for the process lifetime β€” restart the server to pick up changes.

Tool catalog

39 tools across 9 groups. Each one ships with a strict Zod schema for inputs and outputs β€” inputs are validated before any HTTP request; outputs are parsed into a stable, type-safe contract regardless of Kanboard's per-version response shape.

Project Management (8 tools)

Tool

Description

Example Usage

list_projects

List projects you can access

"Show me all my projects"

get_project

Fetch project details by id or identifier

"Show me the Backend project"

create_project

Create a new project

"Create a project called Mobile App"

update_project

Rename or update project metadata

"Rename the V1 project to V2"

delete_project

Permanently delete a project (requires confirmation)

"Delete the archived Sprint 1 project"

add_project_user

Grant a user access with a role

"Add Maria as manager to Mobile"

remove_project_user

Revoke a user's access (requires confirmation)

"Remove John from the Backend project"

list_project_users

List members and their roles

"Who has access to the Backend project?"

Column Management (5 tools)

Tool

Description

Example Usage

list_columns

List board columns in order

"Show me the columns of the Mobile board"

create_column

Add a new column

"Add a 'QA Review' column to Mobile"

update_column

Rename or modify a column

"Rename 'WIP' to 'In Progress'"

move_column

Reorder columns

"Move 'QA Review' before 'Done'"

delete_column

Remove a column (requires confirmation)

"Delete the empty 'On Hold' column"

Swimlane Management (5 tools)

Tool

Description

Example Usage

list_swimlanes

List project swimlanes

"Show me all team swimlanes"

create_swimlane

Add a team or workstream swimlane

"Create a 'Frontend Team' swimlane"

update_swimlane

Rename or modify a swimlane

"Rename Mobile Team to Cross-Platform Team"

move_swimlane

Reorder swimlanes

"Move Backend Team above Frontend"

delete_swimlane

Remove a swimlane (requires confirmation)

"Delete the inactive team swimlane"

Task Management (10 tools)

Tool

Description

Example Usage

list_tasks

List active or closed tasks in a project

"Show me all open tasks in Mobile"

get_task

Fetch full task details with metadata

"Show me task #1234"

create_task

Create a single task

"Create 'Fix login bug' in Backlog"

update_task

Edit any task field, move column, assign owner

"Move task #1234 to In Progress and assign it to me"

delete_task

Permanently delete a task (requires confirmation)

"Delete task #1234"

close_task

Archive a task off the active board β€” reversible, not a delete

"Close task #1234"

reopen_task

Restore a closed task to the active board

"Reopen task #1234"

move_task_position

Reposition a task within or across columns

"Move task #1234 to the top of Done"

list_my_tasks

List tasks assigned to the authenticated user

"What's on my plate?"

list_overdue_tasks

List all tasks past their due date

"Show me what's overdue"

Batch Operations (1 tool)

Tool

Description

Example Usage

create_tasks_batch

Create up to 100 tasks in a single JSON-RPC round-trip

"Turn this email thread into a sprint backlog"

Subtask Management (4 tools)

Tool

Description

Example Usage

list_subtasks

List subtasks of a task

"Show me the subtasks of #1234"

create_subtask

Add a subtask

"Add 'Write tests' as a subtask of #1234"

update_subtask

Edit a subtask or change its status

"Mark subtask #56 as done"

delete_subtask

Remove a subtask (requires confirmation)

"Delete subtask #56"

Comment Management (3 tools)

Tool

Description

Example Usage

create_comment

Add a comment to a task

"Comment 'Blocked on design review' on #1234"

update_comment

Edit one of your comments

"Update my last comment on #1234"

delete_comment

Remove your comment (requires confirmation)

"Delete my last comment on #1234"

Attachment Management (2 tools)

Tool

Description

Example Usage

attach_file_to_task

Attach a file by path or base64, 5 MB cap

"Attach this design.png to #1234"

delete_task_file

Remove an attachment (requires confirmation)

"Delete the old spec.pdf from #1234"

Lookups (1 tool)

Tool

Description

Example Usage

list_categories

List task categories defined in a project

"Show me all task categories"

Destructive tools (delete_*, remove_*) require an explicit confirmation: true flag in the input. Without it, the tool refuses and returns a structured error β€” your agent can't accidentally wipe a project on a typo.

Configuration

Environment variables

Variable

Required

Default

Description

KANBOARD_URL

Yes

β€”

Base URL of your Kanboard instance, e.g. https://kanboard.example.com

KANBOARD_API_TOKEN

Yes

β€”

API token (personal or application, depending on auth mode)

KANBOARD_AUTH_MODE

No

personal

personal (acts as a Kanboard user) or app (service identity)

KANBOARD_USERNAME

personal mode only

β€”

Your Kanboard login username

KANBOARD_TIMEOUT_MS

No

15000

Per-request HTTP timeout in milliseconds

LOG_LEVEL

No

info

Pino log level: trace, debug, info, warn, error, fatal

Required variables are validated at startup. Missing or invalid values cause an immediate non-zero exit before any tool is registered or any network call is made.

.kanboard.yaml schema

project_id: 12                    # numeric project ID
# OR
project_identifier: "MYPROJ"      # string identifier (alphanumeric, dash, underscore)

# Optional defaults
default_column_id: 2
default_swimlane_id: 1
default_owner_id: 5
default_category_id: 3

project_id and project_identifier are mutually exclusive β€” exactly one must be set.

Security

Defaults are designed to fail safe:

  • Access control is Kanboard's job β€” each user runs the server with their own personal token; every tool call is authorized against Kanboard's existing project ACL. There is no parallel permission system to maintain or drift out of sync β€” if a user cannot see a project in Kanboard's UI, the MCP cannot see it either. Application mode is reserved for service identities (CI pipelines, bots, shared agents). See The access-control model.

  • Token storage β€” keep KANBOARD_API_TOKEN in .env (gitignored) or in your MCP client's env block. Never paste a token into chat or commit one to a repository.

  • Automatic redaction β€” the Pino logger redacts apiToken, req.headers.authorization, *.token, *.secret, and credentials.apiToken from every log line at every log level. Token values never appear verbatim in any output.

  • Stdout reserved for MCP β€” all logging goes to stderr exclusively. Stdout is the MCP protocol channel β€” no leaks possible there.

  • Destructive tools require confirmation β€” every delete_* and remove_* tool refuses to run unless the caller passes confirmation: true. This is enforced at the schema layer, not at runtime.

  • Integration test gating β€” integration tests refuse to run unless RUN_INTEGRATION=1 and KANBOARD_TEST_PROJECT_ID are set, AND the target project name contains "sandbox" or "test". The suite aborts before any write request if these conditions aren't met.

  • Auth errors fail loud β€” if getMe() fails at startup (wrong personal token), the server exits β€” it never falls back silently to a default identity.

  • Token rotation β€” rotate your Kanboard API token regularly. The server picks up the new token on next start; no in-memory cache to invalidate.

For vulnerability disclosure, see SECURITY.md.

Roadmap

  • v0.3.x (current) β€” full CRUD across all entities; destructive tools behind confirmation flag; 1016 tests; production-ready stdio transport; official multi-arch Docker image on GHCR.

  • v0.4 β€” HTTP/SSE transport for team deployments; multi-tenant per-user authentication via headers.

  • v0.5 β€” webhooks support; IMAP inbox watcher (email-to-task ingestion); webhook-driven notifications back to Kanboard.

Development

git clone https://github.com/ErnestoCorona/kanboard-mcp.git
cd kanboard-mcp
npm install

npm run typecheck       # tsc --noEmit (TypeScript strict mode)
npm run lint            # ESLint flat config
npm run lint:fix        # ESLint with auto-fix
npm run test            # 1016 unit tests, no network (default for `npm test`)
npm run test:int        # integration tests (requires .env + RUN_INTEGRATION=1)
npm run build           # tsup ESM bundle β†’ dist/
npm run dev             # tsup watch mode
npm run selftest        # smoke test against live Kanboard

Integration tests

Set up a .env (copy from .env.example) pointing to a Kanboard project whose name contains sandbox or test:

RUN_INTEGRATION=1
KANBOARD_URL=https://your-kanboard.example.com
KANBOARD_USERNAME=your-login
KANBOARD_API_TOKEN=your-token
KANBOARD_TEST_PROJECT_ID=42

All test entities are prefixed [TEST-{ISO-timestamp}] and cleaned up by the suite's afterAll hook using the v0.3 destructive tools.

Debugging with MCP Inspector

The fastest way to poke at the server by hand β€” list tool schemas, fire individual calls, and watch the JSON-RPC envelopes β€” is the official MCP Inspector:

KANBOARD_URL=https://your-kanboard.example.com \
KANBOARD_USERNAME=your-login \
KANBOARD_API_TOKEN=your-token \
npx @modelcontextprotocol/inspector -- npx -y @ernestocorona/kanboard-mcp

The -- is required β€” the Inspector CLI consumes flags like -e and -y for its own use, so we tell it explicitly that everything after -- belongs to the spawned MCP server command.

The Inspector opens a local UI (default http://127.0.0.1:6274) with all 39 tools under the Tools tab, each one carrying its full Zod-derived schema. See the full how-to for environment passthrough, app-mode setup, and common gotchas.

Pre-commit

The repo uses husky + gitleaks to block commits containing secrets, plus commitlint on the commit-msg hook to enforce Conventional Commits. Run npm install once after cloning to install hooks.

Troubleshooting

npm run selftest exit-code propagation under tsx

scripts/preflight.sh runs npm run selftest, which delegates to tsx src/cli/selftest.ts. On some host setups, tsx (invoked through the npm wrapper) does not always propagate a non-zero process.exit(N) from the script back to the parent shell β€” so preflight.sh may report exit 0 even when the selftest actually failed internally.

This is a pre-existing tsx / npm behaviour, not specific to kanboard-mcp. Workarounds:

  • Re-run scripts/preflight.sh two or three times before npm publish and confirm a clean run each time.

  • Or check the selftest output explicitly for the selftest pass line on stderr before trusting the exit code.

If you need a hard guarantee, run npx tsx src/cli/selftest.ts directly (without the npm wrapper) β€” that path tends to propagate exit codes more reliably.

Contributing

Issues and pull requests are welcome. Please read CONTRIBUTING.md before opening a PR. All contributors are expected to follow the Code of Conduct.

License

MIT Β© Ernesto Corona

Acknowledgments

This project was originally developed at aisys-media GmbH (WΓΌrzburg, Germany) and is released as open source with their permission. Thanks to the team for the green light to share this work with the wider community.

Author

Ernesto Corona β€” senior architect, TypeScript / Node / MCP servers. GitHub Β· npm

Available Tools

39 tools
add_project_userA

Add a user to a Kanboard project with the given role. Role defaults to 'project-member' if not specified. Use list_project_users to find user ids and list_projects to find project ids; to unlink a member use remove_project_user. Returns { user_id, project_id, role } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesNumeric project id.
user_idYesNumeric user id to add to the project.
roleNoRole to assign: 'project-manager', 'project-member' (default), or 'project-viewer'.project-member

TDQS

A4.6/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. It discloses the default role and the return value structure. However, it does not cover idempotency, error cases (e.g., user already in project), or permission requirements. Still, it adds value beyond the schema.

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

Conciseness5/5

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

The description is two sentences, tightly packed with no redundancy. Front-loaded with the action, followed by defaults, usage hints, and return value. Every sentence earns its place.

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

Completeness4/5

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

For a simple tool with 3 parameters and no output schema, the description covers the main points: action, defaults, related tools, and return value. Minor omissions (error handling, idempotency) prevent a perfect score, but it's largely complete.

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 100% with descriptions for all parameters. The description adds context by noting the default role explicitly and advising to use other tools for IDs. This enhances understanding beyond the schema's bare definitions.

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

Purpose5/5

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

The description clearly states the tool's function: adding a user to a project with a specified role. It mentions the default role, which distinguishes it from siblings like remove_project_user. The verb 'add' and resource 'user to project' are specific.

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?

The description explicitly tells the agent to use list_project_users and list_projects to find IDs, and that remove_project_user is for unlinking. This provides clear when-to-use and when-not-to-use guidance, distinguishing from siblings.

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

attach_file_to_taskA

Upload a file to a Kanboard task as an attachment. Provide either file_path (local file) or content_base64 (inline base64 content) β€” not both. project_id is resolved automatically from the task (no need to provide it). Maximum file size: 5 MB (5,242,880 bytes) β€” larger files return VALIDATION_ERROR before any HTTP request is made. Returns { file_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesID of the task to attach the file to (required).
filenameYesFilename to store in Kanboard (required).
file_pathNoAbsolute or relative path to the file to upload. Relative paths are resolved against process.cwd(). Maximum decoded size: 5 MB (5,242,880 bytes). Exactly one of file_path or content_base64 must be provided (not both, not neither).
content_base64NoBase64-encoded file content to upload directly (no local file needed). Decoded size must be ≀ 5 MB (5,242,880 bytes). Exactly one of file_path or content_base64 must be provided (not both, not neither).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, description discloses file size limit, pre-validation error, and return format { file_id }. Missing side effects like overwriting behavior, but overall transparent.

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 sentences, front-loaded with purpose, followed by constraints and return value. No fluff, though could be slightly more structured.

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

Completeness4/5

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

Given no output schema or annotations, description covers purpose, usage, constraints, and return. Only minor missing context about storage or retrieval, but sufficient for invocation.

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

Parameters4/5

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

Schema covers all parameters (100%), but description adds crucial mutual exclusivity and relative path resolution details, which enriches semantics beyond schema.

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

Purpose5/5

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

Description clearly states 'Upload a file to a Kanboard task as an attachment', specifying the verb and resource. It distinguishes from sibling tools like delete_task_file by focusing on upload behavior.

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?

Explains when to use (attach a file), details mutually exclusive parameters (file_path vs content_base64), and notes automatic project_id resolution. No explicit when-not, but context is clear.

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

close_taskA

Close (archive) an active Kanboard task. The task is set inactive and leaves the active board but is preserved β€” this is NOT a delete. Reversible: restore it with reopen_task. To permanently remove a task instead, use delete_task. Returns { ok: true, task_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesId of the task to close (required).

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses the behavioral impact: sets task inactive, leaves the board, is reversible, and returns a specific response. It clarifies that this is NOT a delete, which is critical for an agent to understand the side effects.

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

Conciseness5/5

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

The description is concise at three sentences with no extraneous words. It front-loads the primary action and immediately adds key differentiators and return info, making it efficient and well-structured.

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?

Despite having no output schema and no annotations, the description covers all necessary aspects: what the tool does, its reversible nature, alternatives, and the success response format. For a simple one-parameter tool, this is complete.

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

Parameters3/5

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

The input schema already provides a clear description for the single parameter 'task_id' ('Id of the task to close (required).') with 100% coverage. The description adds no additional semantic information about the parameter beyond what the schema offers, so it meets the baseline but does not exceed it.

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

Purpose5/5

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

The description clearly states the action 'Close (archive) an active Kanboard task.' It specifies the verb ('Close') and the resource ('active Kanboard task'), and distinguishes from the sibling tools reopen_task and delete_task, making its purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this tool (to archive a task) and when not to (for permanent deletion, use delete_task). It also mentions that reopening is possible via reopen_task, providing clear guidance on alternatives.

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

create_columnA

Add a column to a Kanboard project board. Project resolved from explicit project_id/project_identifier or .kanboard.yaml. To reorder it use move_column, to rename or change its WIP limit use update_column, to remove it use delete_column. Returns { column_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoKanboard project id (overrides .kanboard.yaml).
project_identifierNoKanboard project identifier string (overrides .kanboard.yaml).
titleYesColumn title (1–255 chars, required).
task_limitNoWIP limit for the column (0 = unlimited).
descriptionNoOptional column description.

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries the burden. It mentions the return value { column_id } on success but does not disclose behavioral traits like idempotency or duplicate handling. Adequate but lacking depth.

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, front-loaded with purpose, then resolution, then related tools and return value. No wasted words, efficient and clear.

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 purpose, project resolution, return value, and sibling differentiation. Lacks details on error behavior or validation, but sufficient for a creation tool with good schema coverage.

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 100%, so baseline 3. Description adds minimal value beyond schema, only clarifying project resolution. No enrichment for other 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?

Description clearly states 'Add a column to a Kanboard project board' with a specific verb and resource. It also mentions related tools (move_column, update_column, delete_column) to distinguish from 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?

Explains project resolution from explicit IDs or config file, and lists alternative tools for reordering, renaming, and deleting. Could be improved by explicitly stating when not to use this tool.

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

create_commentA

Create a comment on a Kanboard task. The comment author is automatically set to the authenticated user (via getMe() cache); do NOT pass user_id β€” it is injected server-side. To edit a comment's body use update_comment; to remove one use delete_comment. Returns { comment_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesID of the task to comment on.
contentYesComment body text (required, non-empty).
referenceNoOptional external reference (e.g. issue URL).
visibilityNoComment visibility level. Default: 'app-user'.app-user

TDQS

A4.9/5.0
Behavior5/5

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

Discloses that the comment author is automatically set to the authenticated user, the server-side injection of user_id, and the return value. Since no annotations are provided, the description fully covers behavioral traits.

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, no redundancy, front-loaded with the core action and resource. Every sentence adds essential information.

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

Completeness5/5

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

Given 4 parameters, no output schema, and no annotations, the description is complete: it explains behavior, return, and usage context, leaving no obvious gaps.

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 describes all 4 parameters with descriptions (100% coverage). The description adds value by clarifying that user_id is not a parameter and explaining the return value, going beyond the schema.

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

Purpose5/5

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

The description clearly identifies the action (create), resource (comment on a Kanboard task), and distinguishes from siblings by referencing update_comment and delete_comment.

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 instructs not to pass user_id (it is injected) and directs to alternatives for editing or removing comments, providing clear when-to-use and when-not-to-use guidance.

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

create_projectA

Create a new Kanboard project. Requires a name (1–255 chars). Optionally provide a description, short identifier, owner user id, start_date / end_date (ISO 8601 string or epoch seconds), and email. After creating, adjust the board with create_column / create_swimlane, add members with add_project_user, and edit attributes with update_project. Returns { project_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name (1–255 characters, required).
descriptionNoOptional project description.
identifierNoOptional short identifier (e.g. 'PRJ'). Must be unique across projects.
owner_idNoOptional numeric user id of the project owner.
start_dateNoOptional start date as ISO 8601 string or Unix epoch seconds (integer).
end_dateNoOptional end date as ISO 8601 string or Unix epoch seconds (integer).
emailNoOptional project notification email address.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries the burden. Discloses return value shape and re-iterates required constraints. Lacks side effects or permission details, but sufficient for a creation tool.

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

Conciseness5/5

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

Three sentences, no fluff. Purpose, optional params, post-creation actions, and return value each get a sentence. Highly efficient.

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 creation and subsequent steps. Return value is specified. No output schema, but shape is simple. Adequate for 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 description coverage is 100%, so baseline 3. Description adds grouping of optional params and mentions the name length constraint already in schema. Marginal added value.

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

Purpose5/5

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

Clearly states 'Create a new Kanboard project.' with specific verb and resource. Distinct from sibling tools that create other entities.

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 post-creation steps (use create_column, etc.), guiding the agent on workflow. Does not explicitly state when not to use, but context is adequate.

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

create_subtaskA

Create a subtask under an existing Kanboard task. Status: 0 = todo (default), 1 = in progress, 2 = done. To list a task's subtasks use list_subtasks; to edit one use update_subtask. Returns { subtask_id, task_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesID of the parent task.
titleYesSubtask title (1–255 characters, required).
user_idNoUser id to assign the subtask to (optional).
time_estimatedNoEstimated time in hours (optional).
time_spentNoTime already spent in hours (optional).
statusNoSubtask status: 0 = todo (default), 1 = in progress, 2 = done.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description shoulders the transparency burden. It states the basic behavior (create) and return type, but omits details like error states (e.g., missing parent task), side effects, or authentication 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?

The description is three sentences, each serving a clear purpose: introduce the action, define status values, reference sibling tools, and state the return type. No unnecessary words.

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 creation tool with 6 parameters (2 required) and no output schema, the description covers the core behavior, status meanings, related tools, and return format. Missing error handling details but still adequate.

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

Parameters3/5

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

The schema has 100% parameter descriptions, so the baseline is 3. The description reiterates status values (0=todo, etc.) already present in the schema, adding minimal extra value beyond consolidating information.

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 explicitly states 'Create a subtask under an existing Kanboard task,' specifying the resource and action. It contrasts with sibling tools list_subtasks and update_subtask, ensuring clear differentiation.

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

Usage Guidelines4/5

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

The description provides guidance on when to use alternatives (list_subtasks, update_subtask), but does not mention prerequisites like the existence of the parent task, which would enhance usability.

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

create_swimlaneA

Add a swimlane to a Kanboard project. Project resolved from explicit project_id/project_identifier or .kanboard.yaml. To reorder it use move_swimlane, to rename it use update_swimlane, to remove it use delete_swimlane. Returns { swimlane_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoKanboard project id (overrides .kanboard.yaml).
project_identifierNoKanboard project identifier string (overrides .kanboard.yaml).
nameYesSwimlane name (1–255 chars, required).
descriptionNoOptional swimlane description.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It covers project resolution from explicit IDs or .kanboard.yaml, and states the return value. However, it does not disclose potential side effects (e.g., duplicate name handling), authorization requirements, or failure modes. This is adequate but not comprehensive.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, then provides sibling guidance and return value. Every word serves a purpose with no redundancy.

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

Completeness3/5

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

Given the 4 parameters and no output schema, the description covers project resolution and return value. However, it lacks information on error handling, idempotency, or ordering constraints. The absence of annotations increases the need for such context, so completeness is adequate but not thorough.

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 100%, so the schema already documents all parameters with descriptions. The tool description adds no significant extra meaning beyond what the schema provides (e.g., project resolution is already in schema as 'overrides .kanboard.yaml'). Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Add a swimlane') and the resource ('to a Kanboard project'). It specifies project resolution from explicit IDs or config file, and distinguishes from sibling tools by naming related operations (move_swimlane, update_swimlane, delete_swimlane).

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (adding a swimlane) and explicitly names sibling tools for reordering, renaming, and removing, guiding the agent to appropriate alternatives. It does not list explicit exclusion criteria but the context is sufficient.

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 in a Kanboard project. Project is resolved from explicit project_id or project_identifier, or from .kanboard.yaml. Optional fields (column_id, owner_id, category_id, swimlane_id) fall back to .kanboard.yaml defaults when not provided. To create many tasks at once use create_tasks_batch; to move the task afterward use move_task_position. Returns { task_id, project_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoKanboard project id (overrides .kanboard.yaml).
project_identifierNoKanboard project identifier string (overrides .kanboard.yaml).
titleYesTask title (1–255 characters, required).
descriptionNoTask description (optional).
column_idNoColumn id. Falls back to .kanboard.yaml default_column_id.
owner_idNoOwner user id. Falls back to .kanboard.yaml default_owner_id.
color_idNoColor identifier (e.g. 'blue', 'red').
date_dueNoDue date as ISO 8601 string, Unix epoch seconds (integer), or null to clear.
category_idNoCategory id. Falls back to .kanboard.yaml default_category_id.
swimlane_idNoSwimlane id. Falls back to .kanboard.yaml default_swimlane_id.
scoreNoTask complexity score.
priorityNoTask priority.
referenceNoExternal reference (e.g. issue URL).
tagsNoArray of tag strings.
date_startedNoStart date as ISO 8601 string, Unix epoch seconds (integer), or null to clear.
creator_idNoCreator user id.

TDQS

A4.2/5.0
Behavior3/5

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

Without annotations, the description carries full burden. It discloses project resolution order, default fallbacks, and return format. However, it lacks information on authentication requirements, rate limits, error handling, or side effects.

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

Conciseness5/5

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

Three sentences, front-loaded with core purpose, followed by resolution logic and sibling pointers. No wasted words or redundant information.

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

Completeness4/5

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

For a tool with 16 parameters and no output schema, the description covers critical aspects: project resolution, fallback defaults, and return value. It could be more complete by explaining conflict resolution (e.g., if both project_id and project_identifier provided) or error cases.

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 100% (baseline 3). The description adds value by explaining project resolution from explicit IDs or config file and noting fallback defaults for column_id, owner_id, category_id, swimlane_id, which goes beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states 'Create a new task in a Kanboard project' and explicitly distinguishes from sibling tools like create_tasks_batch and move_task_position, providing specific verb and resource.

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

Usage Guidelines4/5

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

The description gives clear context for when to use alternatives (batch creation, moving tasks) and explains fallback behavior for optional fields. It does not explicitly state when not to use the tool, but the guidance is sufficient.

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

create_tasks_batchA

Bulk-create tasks in a Kanboard project using a single JSON-RPC batch request. Accepts 1–100 tasks per call. Non-atomic: partial failure is possible β€” check failed[] for per-task errors. Optional fields (column_id, owner_id, category_id, swimlane_id) fall back to .kanboard.yaml defaults when not provided. Returns { created: [...], failed: [...] } β€” never throws on partial failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoKanboard project id (overrides .kanboard.yaml).
project_identifierNoKanboard project identifier string (overrides .kanboard.yaml).
tasksYesArray of task creation inputs. 1..100 items. Non-atomic: partial failure possible. Inspect failed[] for per-task errors.

TDQS

A4.7/5.0
Behavior5/5

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

No annotations provided; description fully covers non-atomic behavior, partial failure, fallback defaults, and return structure, leaving no hidden behaviors.

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 concise sentences with front-loaded purpose. No redundancy; every sentence provides unique information.

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

Completeness5/5

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

Given no output schema, description compensates by detailing return format {created, failed} and error handling. Covers batch size, atomicity, and fallbacks completely.

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 covers all 3 parameters with 100% description coverage. Description adds value by noting fallback defaults for specific fields and batch size limits, exceeding baseline.

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?

Clearly states bulk-creation of tasks in Kanboard via batch request, distinguishing from single-task 'create_task' sibling. Verb 'Bulk-create' and resource 'tasks' are specific.

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?

Implies use for multiple tasks (1-100 per call), notes partial failure and fallback defaults. Lacks explicit 'when not to use' but sibling create_task provides clear alternative.

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

delete_columnA

Permanently delete a Kanboard column from a project board. DESTRUCTIVE and irreversible β€” requires explicit confirm: true. To rename a column or change its WIP limit use update_column; to reorder it use move_column. Returns { ok: true, column_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
column_idYesColumn id to permanently delete (required).
confirmYesMust be exactly `true` to confirm permanent deletion.

TDQS

A4.9/5.0
Behavior5/5

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

Discloses destructive and irreversible nature, confirm requirement, and return format. No annotations provided, so description carries full burden and does it well.

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

Conciseness5/5

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

Two concise sentences, front-loaded with warning and alternatives. Every sentence adds critical information.

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?

Comprehensive: covers purpose, danger, required confirmation, return value, and sibling differentiation. No gaps given lack of output schema.

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

Parameters4/5

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

Schema coverage 100% (baseline 3). Description adds clarification: confirm must be exactly `true` for permanent deletion, adding value beyond schema requirement.

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?

Clear verb+resource: 'Permanently delete a Kanboard column'. Distinguishes from siblings (update_column, move_column) and specifies scope (project board).

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?

Explicit when-to-use: destructive irreversible operation requiring confirm: true. Alternatives provided for rename (update_column) and reorder (move_column).

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

delete_commentA

Permanently delete a Kanboard comment. DESTRUCTIVE and irreversible β€” requires explicit confirm: true. To edit a comment's text instead of deleting it use update_comment. Returns { ok: true, comment_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
comment_idYesComment id to permanently delete (required).
confirmYesMust be exactly `true` to confirm permanent deletion.

TDQS

A4.9/5.0
Behavior5/5

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

No annotations present, but description fully covers behavioral traits: destructiveness, irreversibility, required confirmation, and return format. No contradictions.

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, no wasted words, front-loaded with purpose. Highly efficient.

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?

Complete for a simple deletion tool: covers purpose, parameters, usage constraints, alternative, and return value. No output schema needed.

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 100%, so baseline 3. Description reinforces the critical confirm parameter by calling out its necessity for destructive action, adding value beyond schema.

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

Purpose5/5

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

Clearly states the action (permanently delete a Kanboard comment), highlights destructiveness and irreversibility, and distinguishes from sibling tools like update_comment.

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 (when you want to permanently delete) and provides alternative (use update_comment to edit instead). Also notes the required confirm: true.

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

delete_projectA

Permanently delete a Kanboard project and all its tasks, columns, and swimlanes. DESTRUCTIVE and irreversible β€” requires explicit confirm: true. To remove only a member use remove_project_user; to edit project attributes use update_project. Returns { ok: true, project_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject id to permanently delete (required).
confirmYesMust be exactly `true` to confirm permanent deletion.

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 burden and does well by labeling the action as 'DESTRUCTIVE and irreversible,' requiring explicit confirm: true. It also specifies the return value. Missing details on auth requirements or rate limits, but these are not critical for a deletion tool.

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

Conciseness5/5

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

The description is extremely concise: two sentences covering action, scope, alternatives, and return value. No wasted words; front-loaded with the core purpose.

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

Completeness5/5

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

Given the simplicity of the tool (2 simple params, no output schema, no annotations), the description covers all necessary aspects: purpose, scope, destructive nature, required confirmation, alternatives, and return format. It is fully complete for an agent to select and invoke the tool 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?

The schema already describes both parameters (project_id and confirm) with clear meanings. The description reinforces the need for confirm: true but does not add new semantics beyond what the schema provides. Baseline 3 is appropriate due to 100% schema coverage.

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

Purpose5/5

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

The description clearly states the tool deletes a Kanboard project and all its associated items (tasks, columns, swimlanes). It distinguishes from siblings like remove_project_user and update_project, which handle partial removals or edits.

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

Usage Guidelines4/5

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

The description explicitly mentions when to use alternatives (remove_project_user for member removal, update_project for edits), providing clear usage context. However, it does not explicitly state when not to use this tool beyond the alternatives.

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

delete_subtaskA

Permanently delete a Kanboard subtask. DESTRUCTIVE and irreversible β€” requires explicit confirm: true. To mark a subtask done instead of deleting it, set status=2 via update_subtask. Returns { ok: true, subtask_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
subtask_idYesSubtask id to permanently delete (required).
confirmYesMust be exactly `true` to confirm permanent deletion.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description fully carries the burden. It discloses destructive and irreversible nature, explicit confirm requirement, and return format. Could mention potential errors or permissions, but sufficient for a simple delete.

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 action and destructiveness, followed by alternative and return value. No unnecessary words.

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

Completeness4/5

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

For a two-parameter tool with no output schema, description covers purpose, usage, and return. Lacks error cases (e.g., subtask not found) but overall complete for agent to use confidently.

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 100%, so baseline is 3. Description adds minimal new info beyond schema, reiterating that confirm must be exactly true and subtask_id is required. No additional constraints or explanations.

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

Purpose5/5

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

The description uses specific verb 'delete' and resource 'subtask', clearly stating the action. It also distinguishes from sibling tool 'update_subtask' by mentioning an alternative for marking done.

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 (permanently delete) and when not to (mark done via update_subtask with status=2). Highlights requirement for confirm=true and irreversible nature.

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

delete_swimlaneA

Permanently delete a Kanboard swimlane from a project. DESTRUCTIVE and irreversible β€” requires explicit confirm: true. To rename a swimlane use update_swimlane; to reorder it use move_swimlane. Returns { ok: true, swimlane_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
swimlane_idYesSwimlane id to permanently delete (required).
confirmYesMust be exactly `true` to confirm permanent deletion.

TDQS

A4.5/5.0
Behavior4/5

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

Labels the operation as destructive and irreversible, and requires explicit confirm. Lacks details on cascading effects (e.g., tasks in the swimlane) but is adequate given no annotations.

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

Conciseness5/5

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

Two sentences with no wasted words; front-loaded with purpose and key warnings.

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?

Provides purpose, usage guidance, behavioral warnings, and return format (ok and swimlane_id) for a simple 2-param delete tool with no output schema.

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

Parameters3/5

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

Schema covers both parameters with full descriptions; the description reiterates the confirm requirement and permanence, adding minimal new value beyond the schema.

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

Purpose5/5

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

Explicitly states it deletes a swimlane permanently, and distinguishes from sibling tools for renaming and reordering.

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?

Clearly describes when to use this tool versus update_swimlane (rename) and move_swimlane (reorder), and notes the confirm requirement.

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

delete_taskA

Permanently delete a Kanboard task. DESTRUCTIVE and irreversible β€” requires explicit confirm: true. Returns { ok: true, task_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask id to permanently delete (required).
confirmYesMust be exactly `true` to confirm permanent deletion.

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 discloses that the operation is destructive and irreversible, and specifies the return format. This is sufficient for a simple deletion action, though additional details (e.g., authorization needs) could enhance transparency.

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 extremely concise: a single sentence that conveys purpose, behavioral traits, and return format without any unnecessary words.

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 delete tool with no output schema, the description covers the action, destructive nature, confirm requirement, and return structure. It lacks mention of prerequisites like task existence, but this is implicitly understood.

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 100% and both parameters are well-described in the schema. The description reinforces the 'confirm' requirement but adds no new semantic information beyond the schema.

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

Purpose5/5

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

The description clearly states 'Permanently delete a Kanboard task', specifying a specific verb and resource. It distinguishes itself from sibling tools like delete_comment or delete_subtask by focusing on tasks.

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

Usage Guidelines4/5

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

The description explicitly notes that the action is destructive and requires 'confirm: true', providing clear usage context. However, it does not mention alternative non-destructive actions like close_task for reversible closure.

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

delete_task_fileA

Permanently delete a file attachment from a Kanboard task. DESTRUCTIVE and irreversible β€” requires explicit confirm: true. To add an attachment use attach_file_to_task. Returns { ok: true, file_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesFile id to permanently delete (required).
confirmYesMust be exactly `true` to confirm permanent deletion.

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 fully discloses the destructive, irreversible nature and the need for confirmation. It also states the return value. This is sufficient for a delete tool, though it does not mention error conditions or permissions.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the purpose, and contains no extraneous information. Every sentence adds value.

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

Completeness4/5

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

Given no annotations and no output schema, the description covers purpose, usage, alternative, and return format. It is complete enough for a simple deletion tool, though it could mention error handling.

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 100%, so the description adds little beyond the schema. It reinforces the need for 'confirm: true' but does not provide new meaning for the parameters.

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

Purpose5/5

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

The description clearly states the action: 'Permanently delete a file attachment from a Kanboard task.' It uses specific verb+resource and distinguishes itself from the sibling tool 'attach_file_to_task' by mentioning the alternative.

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

Usage Guidelines4/5

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

The description mentions the required confirmation parameter and provides an alternative for adding attachments. However, it lacks explicit guidance on when not to use this tool or prerequisites beyond the confirmation.

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

get_projectA

Retrieve a single Kanboard project. Provide exactly one of: project_id (number), project_identifier (short string like 'PRJ'), or project_name (full name). Returns the full project object. Returns NOT_FOUND when no match exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoNumeric project id.
project_identifierNoShort project identifier string (e.g. 'PRJ').
project_nameNoExact project name.

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, but the description discloses that this is a read-only retrieval operation and that it returns the full project object or NOT_FOUND. Could be more explicit about idempotency and lack of side effects, but sufficient for a simple get.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, followed by parameter usage and error behavior. No unnecessary words or repetition.

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

Completeness5/5

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

Given the simple nature of the tool, the description covers the action, parameter constraints, return value (full project object), and error case. No output schema exists, but the description adequately describes the return.

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

Parameters5/5

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

Schema coverage is 100%, and the description adds the crucial semantic constraint that exactly one parameter must be provided, with examples for project_identifier. This clarifies mutual exclusivity beyond the schema definitions.

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

Purpose5/5

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

The description clearly states 'Retrieve a single Kanboard project', providing a specific verb and resource. It distinguishes from siblings like list_projects, create_project, and get_task.

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

Usage Guidelines4/5

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

Explicitly states that exactly one of project_id, project_identifier, or project_name must be provided. It also notes the NOT_FOUND return behavior. Lacks explicit mention of when not to use this tool versus alternatives like list_projects.

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

get_taskA

Retrieve a single Kanboard task by its numeric id. Returns the full task entity including status, dates, column, swimlane, and metadata. Returns NOT_FOUND when the task does not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task id to retrieve (must be a positive integer).

TDQS

A4.3/5.0
Behavior4/5

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

Discloses return value (full task entity with fields) and error case (NOT_FOUND). Without annotations, this adds essential behavioral info. Could mention idempotency, but not required.

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

Conciseness5/5

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

Two concise sentences, front-loaded with verb and resource. No unnecessary words. Every sentence adds value.

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 simple retrieval tool with one parameter and no output schema, the description covers purpose, return value, and error case. No critical gaps given the tool's simplicity.

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

Parameters3/5

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

Schema coverage is 100% with parameter description. Description adds context about the task entity but does not expand on the parameter itself beyond the schema. Baseline score is appropriate.

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

Purpose5/5

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

Clearly states the action ('Retrieve'), the resource ('single Kanboard task'), and distinguishes from siblings (by numeric id, returns full entity). The mention of NOT_FOUND further clarifies behavior.

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?

Describes the use case for retrieving a single task by ID. While it does not explicitly exclude siblings like list_tasks, the context is clear. Could be improved by noting when not to use it (e.g., for bulk retrieval).

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

list_categoriesA

List all categories for a Kanboard project. Provide project_id or project_identifier, or configure .kanboard.yaml in your project root. Returns an array of category objects with id, name, and color_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoNumeric project id. Falls back to .kanboard.yaml when omitted.
project_identifierNoShort project identifier. Falls back to .kanboard.yaml when omitted.

TDQS

A4.5/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. It discloses the return format (array with id, name, color_id). Additional transparency about prerequisites or side effects could improve, but the core behavior is clear.

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

Conciseness5/5

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

The description is two sentences long with no fluff. The main action is front-loaded, and every word contributes meaning.

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

Completeness5/5

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

Given the tool's simplicity, no output schema, and clear sibling context, the description sufficiently covers the tool's purpose, inputs, and return value. No additional context seems necessary.

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 100% with descriptions. The description adds value by explaining the fallback behavior to .kanboard.yaml when a parameter is omitted, which goes beyond the schema.

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

Purpose5/5

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

The description clearly states 'List all categories for a Kanboard project', specifying verb, resource, and scope. It distinguishes from sibling list tools like list_columns or list_swimlanes by naming the specific resource.

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

Usage Guidelines4/5

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

The description tells the agent how to provide the project identifier (project_id, project_identifier, or .kanboard.yaml). However, it does not explicitly state when to use this tool versus alternatives or provide exclusions.

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

list_columnsA

List all columns (board stages) for a Kanboard project. Provide project_id or project_identifier, or configure .kanboard.yaml in your project root. Returns an array of column objects with id, title, position, and task_limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoNumeric project id. Falls back to .kanboard.yaml when omitted.
project_identifierNoShort project identifier. Falls back to .kanboard.yaml when omitted.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, and the description only states the basic operation and return format. It does not disclose behavioral traits such as read-only nature, authorization needs, rate limits, or error handling, leaving the agent underinformed.

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

Conciseness5/5

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

The description is two sentences that front-load the core purpose and efficiently cover parameters and return format, with no redundant or extraneous information.

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

Completeness4/5

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

For a simple list operation with optional parameters, the description covers the key points: what it does, how to specify the project, and what the return structure is. It lacks detailed error handling or behavior when no project is found, but is largely sufficient.

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

Parameters3/5

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

The input schema already covers both parameters with descriptions. The description adds the note about configuring .kanboard.yaml but largely reinforces what the schema states, providing minimal additional meaning beyond the baseline.

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

Purpose5/5

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

The description clearly states 'List all columns (board stages) for a Kanboard project,' using a specific verb and resource, and it distinguishes this from sibling tools like create_column, delete_column, and update_column.

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 provides clear context on how to specify the project (via project_id, project_identifier, or config file) but does not explicitly guide when to use this tool versus other column-related siblings, nor does it mention when not to use it.

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

list_my_tasksA

List open tasks assigned to the currently authenticated user in the resolved project. Requires a project_id (explicit or from .kanboard.yaml). Uses Kanboard search query: assignee:me status:open. In app mode (jsonrpc user) returns tasks assigned to the jsonrpc system user. Returns { tasks } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoKanboard project id (overrides .kanboard.yaml).
project_identifierNoKanboard project identifier string (overrides .kanboard.yaml).

TDQS

A4.5/5.0
Behavior5/5

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

No annotations provided, so description fully covers behavior: uses query assignee:me status:open, explains app mode implications, and states return format { tasks }.

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

Conciseness5/5

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

Three concise sentences, each adding value: purpose, query details, and return format. No redundant or missing information.

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?

Complete for a filtered listing tool: covers authentication, project requirement, query, and return format despite no output schema.

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

Parameters3/5

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

Schema covers 100% of parameters with descriptions. Description adds context about requiring project_id but does not significantly extend schema info.

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?

Clearly states the tool lists open tasks for the authenticated user in a project. Distinguishes from sibling tools like list_tasks and list_overdue_tasks.

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

Usage Guidelines4/5

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

Specifies requirement for project_id (explicit or from config) and explains behavior in app mode. Lacks explicit when-not-to-use or alternatives, but context is clear.

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

list_overdue_tasksA

List overdue tasks with configurable scope. scope="mine" (default): overdue tasks for the authenticated user. scope="all": all overdue tasks across all projects (admin token required). scope="project": overdue tasks for a specific project (pass project_id or use .kanboard.yaml). Note: getOverdueTasksByUser is not supported by the Kanboard JSON-RPC API. Returns an empty array when nothing is overdue.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoScope of overdue tasks to return: "mine" (default) = tasks overdue for the current user via getMyOverdueTasks; "all" = all overdue tasks across all projects (admin-level) via getOverdueTasks; "project" = overdue tasks for a specific project (requires project_id or .kanboard.yaml) via getOverdueTasksByProject.mine
project_idNoRequired when scope="project": Kanboard project id (overrides .kanboard.yaml).
project_identifierNoRequired when scope="project": Kanboard project identifier string (overrides .kanboard.yaml).

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, so description carries full disclosure. It mentions return behavior (empty array) and underlying API methods. However, it does not explicitly state the tool is read-only, leaving slight ambiguity.

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?

Description is one paragraph but efficiently conveys all key information. Could benefit from slight restructuring (e.g., bullet points for scopes), but no fluff and content is well-organized.

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?

Covers all essential aspects: purpose, scopes, parameter conditions, API limitations, and return type. Without output schema, it appropriately describes return value. Thorough enough for an agent to use correctly.

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 100%, and description adds value by explaining when each parameter is required (e.g., project_id for 'project' scope) and linking to API methods. Minor redundancy with schema, but overall adds useful context.

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

Purpose5/5

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

The description clearly states the tool lists overdue tasks with configurable scope, including specific scopes ('mine', 'all', 'project') and differentiates from sibling tools by focusing on overdue 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?

Provides explicit when-to-use for each scope, notes admin token requirement for 'all', and documents required parameters for 'project' scope. Also mentions unsupported API method to guide users away from invalid requests.

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

list_projectsA

Returns the projects where the authenticated user is a member. Does not list projects in the Kanboard instance that the user has no access to. Returns an array of project objects with id, name, identifier, and status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It mentions authentication and scope (only user's memberships) but doesn't touch on rate limits, error conditions, or pagination. It's adequate but could be more explicit about prerequisites or response quirks.

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, each adding value: first states purpose and scope, second details return format. No wasted words; front-loaded with key information.

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

Completeness4/5

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

Given no parameters, no output schema, and no annotations, the description provides a complete picture of what the tool does and returns. It covers authentication and scope. Minor omission: no mention of potential empty results or errors, but not critical for a simple list.

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?

No parameters exist, so the baseline is 4. The description doesn't need to explain parameters, and it correctly implies there are no inputs.

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

Purpose5/5

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

The description clearly states it returns projects where the authenticated user is a member, specifies it does not list inaccessible ones, and details the return format (array with id, name, identifier, status). This distinguishes it from siblings like get_project (single project) or list_my_tasks.

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

Usage Guidelines4/5

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

The description clearly indicates when to use (to get user-accessible projects) and implies when not (for other project listings). It doesn't explicitly mention alternatives like get_project for a specific project, but the context is sufficient.

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

list_project_usersA

List the members of a Kanboard project (user_id + username pairs). Provide project_id or project_identifier, or configure .kanboard.yaml in your project root. Works for any user who can see the project β€” does not require admin permissions. Use the returned user_ids to assign tasks (create_task owner_id), add comments, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoNumeric project id. Falls back to .kanboard.yaml when omitted.
project_identifierNoShort project identifier. Falls back to .kanboard.yaml when omitted.

TDQS

A4.2/5.0
Behavior3/5

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

Discloses that no admin permissions are required and that it works for any project viewer. Lacks details on whether the list is complete or paginated, and does not explicitly state read-only behavior.

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

Conciseness5/5

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

Three clear sentences with no redundancy. Front-loaded with the main action and result, followed by project specification and use cases.

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?

Explains output format (user_id+username pairs) and how to use it. Lacks mention of any filtering or error cases, but adequate for a simple list tool with no output schema.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description adds value by explaining the fallback to .kanboard.yaml and that both parameters are optional, which is not in the schema descriptions.

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?

Clearly states it lists Kanboard project members as user_id+username pairs. Distinguishes from sibling tools like add_project_user and remove_project_user by focusing on listing. Also ties to use cases (assign tasks, comments).

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 on when to use (need user IDs for assignment/comments) and how to specify the project. Does not explicitly mention when not to use or alternatives, but the purpose is well-defined.

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

list_subtasksA

List all subtasks for a given Kanboard task. Returns an array of subtask objects including id, title, status, user_id, time_estimated, and time_spent fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesID of the task whose subtasks to list.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, but description covers the return fields (id, title, status, user_id, time_estimated, time_spent) and implies a read-only operation. No side effects are mentioned, but this is acceptable for a list tool.

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

Conciseness5/5

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

Two sentences with no extraneous information. The action is front-loaded and clearly stated.

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?

Despite no output schema, the description fully documents the return structure. For a simple list tool with one parameter, this is complete.

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 100% with a description for task_id. The description does not add extra semantics for the parameter beyond 'ID of the task whose subtasks to list.' Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('List all subtasks') and the resource ('for a given Kanboard task'), with specifics on returned fields. It distinguishes from sibling tools like 'create_subtask' and 'update_subtask'.

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

Usage Guidelines4/5

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

The description implies when to use the tool (to list subtasks for a task) and requires a task_id. It does not explicitly state when not to use or compare to alternatives, but given the sibling list, the purpose is clear.

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

list_swimlanesA

List active swimlanes for a Kanboard project. Provide project_id or project_identifier, or configure .kanboard.yaml in your project root. Returns an array of swimlane objects with id, name, description, position, and is_active.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoNumeric project id. Falls back to .kanboard.yaml when omitted.
project_identifierNoShort project identifier. Falls back to .kanboard.yaml when omitted.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, but description discloses output structure (array with fields) and implies read-only behavior. Mentions fallback to config file, adding 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 concise sentences: first states purpose, second covers parameters and output. No redundancy, every word earns its place.

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

Completeness4/5

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

For a simple list tool with no output schema, the description covers parameter selection and return structure. Lacks pagination or ordering details, but sufficient for typical use.

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 100%, and description adds value by consolidating the fallback logic and clarifying that parameters are alternatives, beyond what the schema says.

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?

Description clearly specifies action (list), resource (active swimlanes), and scope (for a Kanboard project). Distinguishes from sibling tools like create_swimlane or delete_swimlane.

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 explicit guidance on how to specify the project (by ID, identifier, or config file), which helps the agent decide input. No mention of when not to use, but the context is clear.

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

list_tasksA

List tasks in a Kanboard project. Returns active tasks by default (status_id=1). Pass status_id=0 to list closed/inactive tasks. Project is resolved from explicit project_id or project_identifier, or from .kanboard.yaml.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoKanboard project id (overrides .kanboard.yaml).
project_identifierNoKanboard project identifier string (overrides .kanboard.yaml).
status_idNoTask status: 1 = active (default), 0 = closed/inactive.

TDQS

A4.5/5.0
Behavior4/5

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

Discloses default status_id=1 and how to get closed tasks, plus project resolution. No annotations exist, so description carries the burden; it could mention non-destructive nature but it's implicit.

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 purpose, no redundancy, every sentence adds information.

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

Completeness4/5

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

Covers purpose, parameters, and behavior adequately. No output schema, but description doesn't need to cover returns; missing explicit mention of pagination or limits, but acceptable for a list tool.

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

Parameters5/5

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

Schema coverage is 100%, and description adds value beyond schema fields: explains default status_id and config-file fallback for project resolution, which schema descriptions lack.

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?

Clearly states 'List tasks in a Kanboard project' with specific verb-resource pair. Differentiates from siblings by mentioning default active tasks and how to list closed ones, and explains project resolution.

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 when-to-use: listing tasks, with default active and option for closed. Does not explicitly mention alternatives, but the default behavior is well-defined.

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

move_columnA

Reorder a column on the Kanboard project board. Provide column_id and the new 1-based position (required β€” no default). Only ordering changes β€” to rename a column or change its WIP limit use update_column. Returns { ok: true, column_id, position } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
column_idYesColumn id to move (required).
positionYesNew 1-based position within the project board (required).

TDQS

A4.4/5.0
Behavior4/5

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

While no annotations are provided, the description clarifies that only ordering changes are made and specifies the return object. It could mention potential side effects or permissions, but it's adequately transparent for a reordering operation.

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

Conciseness5/5

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

The description is concise with two sentences, front-loaded with the purpose. Every sentence adds value, and there is no filler.

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

Completeness4/5

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

Given the simple operation, schema coverage, and lack of output schema, the description is complete enough. It also differentiates from sibling tools and specifies the return value.

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 100% and both parameters are well-described in the schema. The description reaffirms that parameters are required and position is 1-based, adding minimal additional value beyond the schema.

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

Purpose5/5

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

The description clearly states 'Reorder a column on the Kanboard project board' with a specific verb and resource. It distinguishes from sibling tools like update_column and move_swimlane.

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 that both parameters are required and provides an alternative tool (update_column) for renaming or changing WIP limits. The description clearly defines when to use this tool and when not.

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

move_swimlaneA

Reorder a swimlane within a Kanboard project. Provide swimlane_id and the new 1-based position (required β€” no default). Only ordering changes β€” to rename a swimlane use update_swimlane. Returns { ok: true, swimlane_id, position } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
swimlane_idYesSwimlane id to move (required).
positionYesNew 1-based position within the project (required).

TDQS

A4.5/5.0
Behavior4/5

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

No annotations given, but description clarifies operation is only ordering changes, returns success object with ok: true, swimlane_id, position. Does not mention side effects on other swimlanes but sufficient for a simple move.

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: purpose, parameter requirements, scope and return. Front-loaded, no wasted words.

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

Completeness4/5

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

For a simple tool with two params and no output schema, description covers key aspects. Lacks mention of potential reindexing of other swimlanes, but overall complete enough.

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

Parameters5/5

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

Schema coverage is 100%, and description adds value by emphasizing position is 1-based and required with no default, which supplements schema.

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

Purpose5/5

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

Description states specific verb 'Reorder' and resource 'swimlane within a Kanboard project', clearly distinguishing from siblings by noting rename uses update_swimlane.

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 required parameters and that no default exists, and provides alternative for rename. Could further differentiate from move_column or move_task_position but is adequate.

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

move_task_positionA

Move a Kanboard task to a different column, position, or swimlane β€” this is the only way to change a task's board placement. Provide exactly one of column_id or column_name (column_name is resolved case-insensitively). If swimlane_id is omitted, it is resolved from .kanboard.yaml or the first active swimlane. Project is resolved from explicit project_id or project_identifier, or from .kanboard.yaml. To change other task attributes (title, dates, owner) use update_task instead. Returns { ok: true, task_id, column_id, swimlane_id, position } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoKanboard project id (overrides .kanboard.yaml).
project_identifierNoKanboard project identifier string (overrides .kanboard.yaml).
task_idYesThe task id to move.
column_idNoTarget column id. Mutually exclusive with column_name.
column_nameNoTarget column name (case-insensitive). Mutually exclusive with column_id.
swimlane_idNoTarget swimlane id. Falls back to .kanboard.yaml default or first active swimlane.
positionNoPosition within the column (1-based, defaults to 1 = top).

TDQS

A4.6/5.0
Behavior4/5

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

Description explains resolution logic for omitted parameters (swimlane_id, project) and states return value on success. Lacks error handling details but covers main behavioral traits.

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 efficient sentences covering purpose, parameter constraints, alternative tool, and return value. No redundant information.

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

Completeness4/5

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

The description adequately covers usage, parameter constraints, and return format. While it doesn't mention all sibling tools, the key distinction from update_task is made, and resolution logic is explained.

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 100%, but description adds valuable context: case-insensitive column_name resolution, fallback behavior for swimlane and project, and mutual exclusivity of column_id/column_name.

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?

Description clearly states 'Move a Kanboard task to a different column, position, or swimlane' with specific verb and resource, and distinguishes from sibling 'update_task' by noting it only changes board placement, not other attributes.

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 'this is the only way to change a task's board placement', provides guidance on parameter mutual exclusivity ('Provide exactly one of column_id or column_name'), and advises using 'update_task' for other attribute changes.

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

remove_project_userA

Unlink a user from a Kanboard project (does not delete the user). DESTRUCTIVE on the project-user relationship β€” requires explicit confirm: true. Returns { ok: true, project_id, user_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesNumeric project id.
user_idYesNumeric user id to unlink from the project.
confirmYesMust be exactly `true` to confirm unlinking the user.

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 fully discloses the destructive behavior on the project-user relationship, the confirm requirement, and the return format. It does not cover permissions or side effects, but the main behavioral traits are clear.

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

Conciseness5/5

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

The description is two sentences long, concise, and front-loaded with the core action. No extraneous information.

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

Completeness4/5

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

For a tool with no output schema, the return value is described. Parameters are fully covered by the schema. The description is complete enough for correct invocation, though some edge cases (e.g., user not linked) are not 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 100%, so the baseline is 3. The description adds the 'confirm' requirement and the destructive context but does not elaborate on parameter format beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the action ('Unlink a user from a Kanboard project') and distinguishes it from similar operations like adding a user or deleting the project. It is specific and unambiguous.

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

Usage Guidelines4/5

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

The description explains when to use this tool (to remove a user from a project) and emphasizes the destructive nature with the need for explicit confirmation. It does not explicitly name alternatives but implies distinction from other tools.

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

reopen_taskA

Reopen a closed (inactive) Kanboard task, restoring it to the active board. The inverse of close_task. Returns { ok: true, task_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesId of the task to reopen (required).

TDQS

A4/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 full behavioral transparency burden. It discloses the state-changing action (reopening) and the return format on success, but does not mention potential failure modes, authorization requirements, or constraints like whether the task must exist.

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

Conciseness5/5

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

The description is two sentences with no wasted words. It front-loads the action and effect in the first sentence and adds inverse relation and return format in the second.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description covers the core action, inverse, and return format. It is largely complete, though it omits error conditions or edge cases.

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

Parameters3/5

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

The schema already provides 100% coverage with a clear description for the task_id parameter. The tool description does not add substantive meaning beyond what the schema provides, so 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?

The description clearly states the tool reopens a closed Kanboard task and restores it to the active board. It explicitly identifies itself as the inverse of close_task, distinguishing it from sibling tools like delete_task.

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

Usage Guidelines4/5

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

The description implicitly indicates the tool is for closed tasks by stating 'Reopen a closed (inactive) Kanboard task' and notes it is the inverse of close_task, providing context. However, it lacks explicit when-not-to-use guidance or alternatives beyond close_task.

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

update_columnA

Update an existing Kanboard column (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. At least one field besides 'column_id' must be provided β€” otherwise VALIDATION_ERROR. NOT for reordering β€” use move_column instead; to delete a column use delete_column. Returns { ok: true, column_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
column_idYesColumn id to update (required).
titleNoNew column title (1–255 chars).
task_limitNoNew WIP limit (0 = unlimited). Omit to leave unchanged.
descriptionNoNew column description.

TDQS

A4.8/5.0
Behavior4/5

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

No annotations, so description carries full burden. Discloses partial update, validation before write, and success return. Does not mention permissions or rate limits, but these are typical and not critical for a partial update. Good but not exhaustive.

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?

Single paragraph, front-loaded with key purpose, then behavioral details, then exclusions, then return format. Every sentence adds value; no fluff.

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

Completeness5/5

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

Given no output schema, description provides return shape. Covers partial update semantics, validation failure, and necessary usage constraints. Complete for a mutation tool.

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

Parameters5/5

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

Schema coverage is 100% already, but description adds value by noting that omitted fields keep values, task_limit 0=unlimited, and that at least one optional field must be provided.

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?

Clearly states 'Update an existing Kanboard column (partial update)', with specific verb and resource. Distinguishes from siblings move_column and delete_column by explicitly naming them.

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 says when to use ('update column fields'), when not to (reordering, deletion), and provides condition for VALIDATION_ERROR if no field besides column_id is provided.

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

update_commentA

Update the body of an existing Kanboard comment. To remove a comment use delete_comment instead. Returns { ok: true, comment_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
comment_idYesComment id to update (required).
contentYesNew comment body text (required, non-empty).

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description must carry behavioral burden. It discloses the return value but does not mention permissions, error handling, or idempotency. Adequate but not thorough.

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

Conciseness5/5

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

Two sentences: purpose first, then alternative, then return value. No wasted words, information is front-loaded.

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

Completeness4/5

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

For a simple tool with 2 required params and no output schema, the description covers purpose, alternative, and return. Missing error details, but still fairly complete.

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?

Input schema has 100% coverage, so description adds little beyond restating 'New comment body text'. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Update the body of an existing Kanboard comment', specifying the action (update) and resource (comment). It also distinguishes from the delete_comment sibling tool.

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

Usage Guidelines5/5

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

Includes explicit guidance: 'To remove a comment use delete_comment instead', telling the agent when not to use this tool and directing to an alternative.

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

update_projectA

Update the attributes of an existing Kanboard project (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. At least one field besides 'project_id' must be provided β€” otherwise VALIDATION_ERROR. This tool updates project attributes only: to manage members use add_project_user / remove_project_user, to manage columns use create_column / move_column, and to delete a project use delete_project. Returns { ok: true, project_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject id to update (required).
nameNoNew project name (1–255 chars).
descriptionNoNew project description.
identifierNoNew short identifier (e.g. 'PRJ'). Must be unique.
owner_idNoNew owner user id.
start_dateNoNew start date as ISO 8601 string, Unix epoch seconds (integer), or null to clear.
end_dateNoNew end date as ISO 8601 string, Unix epoch seconds (integer), or null to clear.
emailNoNew project notification email address.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses partial update behavior, pre-write validation, error condition, and return format. Lacks details on auth or rate limits but sufficient for a simple mutation.

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

Conciseness5/5

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

The description is concise (few sentences), front-loaded with verb and resource, and every sentence adds essential information without redundancy.

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

Completeness5/5

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

Given 8 parameters and no output schema, the description explains behavior, validation, error condition, and return format. It also provides context for related tools, making it complete for the 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 coverage is 100% so baseline 3. The description adds value by explaining the partial update semantic (only passed fields change) and the requirement for at least one extra field, which is not explicit in schema.

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

Purpose5/5

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

The description clearly states it updates an existing Kanboard project (partial update). It distinguishes from sibling tools by explicitly mentioning that members, columns, and deletion are managed by other tools.

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 provides explicit when-to-use (update project attributes) and when-not-to-use (members, columns, delete) with named alternatives (add_project_user, create_column, delete_project). Also specifies the requirement of at least one field beyond project_id.

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

update_subtaskA

Update an existing Kanboard subtask (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. Both 'subtask_id' and 'task_id' are required as identity fields. At least one of title, status, user_id, time_estimated, or time_spent must also be provided. Status: 0 = todo, 1 = in progress, 2 = done. Returns { subtask_id, task_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
subtask_idYesID of the subtask to update (required).
task_idYesID of the parent task (required).
titleNoNew subtask title (optional).
statusNoNew status: 0 = todo, 1 = in progress, 2 = done (optional).
user_idNoNew assigned user id (optional).
time_estimatedNoNew estimated time in hours (optional).
time_spentNoNew time spent in hours (optional).

TDQS

A4.9/5.0
Behavior5/5

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

No annotations provided; description fully covers behavioral traits: partial update (only passed fields change), validation before write (invalid call modifies nothing), required fields, status values, and return type. Comprehensive.

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?

Relatively concise for the information provided. Front-loads purpose and key behavior. Could be slightly more structured but still efficient.

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

Completeness5/5

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

Given 7 parameters, partial update logic, and no output schema, the description is complete. Explains validation, partial update, requirements, and success return. No gaps.

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

Parameters5/5

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

Schema coverage is 100%, but description adds significant value: clarifies that both identity fields are required, at least one optional must be provided, status enum meanings, and partial update semantics. Exceeds baseline.

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?

Clearly states it updates an existing Kanboard subtask (partial update). Distinguishes from siblings like create_subtask, delete_subtask, and other update tools.

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?

Specifies when to use (update a subtask), clarifies partial update behavior, required identity fields, and that at least one optional field must be provided. Status enumeration is explained. Implicitly excludes creation or deletion.

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

update_swimlaneA

Update an existing Kanboard swimlane (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. At least one field besides 'swimlane_id' must be provided β€” otherwise VALIDATION_ERROR. NOT for reordering β€” use move_swimlane instead; to delete a swimlane use delete_swimlane. Returns { ok: true, swimlane_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
swimlane_idYesSwimlane id to update (required).
nameNoNew swimlane name (1–255 chars).
descriptionNoNew swimlane description.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description must disclose behavior. It explains partial update ('only fields you pass are changed'), validation before write (invalid call modifies nothing), and the return format on success. It doesn't detail error responses for non-existent swimlanes or other failures, but is otherwise transparent.

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

Conciseness5/5

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

The description is concise and well-structured: first sentence states purpose, second covers behavior, third provides validation rule, fourth gives alternatives and return format. Every sentence serves a clear function with no redundancy.

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

Completeness4/5

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

Given the tool's complexity (3 parameters, update operation, no output schema), the description covers most needed aspects: purpose, usage guidance, behavior, param semantics, and alternatives. It lacks explicit mention of error responses for non-validation errors (e.g., when swimlane doesn't exist), leaving a minor gap.

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 100%, so base is 3. The description adds value by explaining the partial update behavior and the validation rule requiring at least one additional field, which goes beyond the schema's field descriptions. This helps the agent understand parameter interplay.

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

Purpose5/5

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

The description clearly states the action ('Update an existing Kanboard swimlane'), the resource ('swimlane'), and specifies that it is a partial update. It also distinguishes from sibling tools like move_swimlane and delete_swimlane, leaving no ambiguity about its purpose.

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?

The description explicitly tells when not to use this tool (not for reordering, use move_swimlane; otherwise use delete_swimlane) and provides a critical condition: at least one field besides swimlane_id must be provided, else VALIDATION_ERROR. This guidance helps the agent decide correctly.

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

update_taskA

Update the attributes of an existing Kanboard task (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. At least one field besides 'task_id' must be provided β€” otherwise VALIDATION_ERROR. Column and swimlane changes must use move_task_position instead. Returns { ok: true, task_id } on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask id to update (required).
titleNoNew task title.
descriptionNoNew task description.
color_idNoNew color identifier (e.g. 'blue', 'red').
owner_idNoNew owner user id.
creator_idNoNew creator user id.
date_dueNoNew due date as ISO 8601 string, Unix epoch seconds (integer), or null to clear.
category_idNoNew category id.
scoreNoNew complexity score.
priorityNoNew priority.
referenceNoNew external reference (e.g. issue URL).
tagsNoNew array of tag strings (replaces existing).
date_startedNoNew start date as ISO 8601 string, Unix epoch seconds (integer), or null to clear.

TDQS

A4.6/5.0
Behavior5/5

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

Discloses partial update behavior, validation before write, requirement for at least one field besides task_id, and return format. No annotations present, so description carries full burden and does it well.

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 focused sentences with front-loaded key information; no redundancy or wasted words.

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 partial update, validation, required condition, error case, and return format. Lacks mention of other potential errors (e.g., not found), but still comprehensive for a complex tool.

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 100%, so baseline is 3. Description adds context about partial update and validation rules beyond schema, compensating well.

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

Purpose5/5

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

Clearly states it updates task attributes (partial update) and distinguishes from move_task_position which handles column/swimlane changes.

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 when to use (updating attributes) and when not to (column/swimlane changes), but does not list all alternative tools.

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. 10 tool updatesv0.1.2
    • Changedattach_file_to_task7 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / content_base64
        Added value: +{
        +  "description": "Base64-encoded file content to upload directly (no local file needed). Decoded size must be ≀ 5 MB (5,242,880 bytes). Exactly one of file_path or content_base64 must be provided (not both, not neither).",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / file_path
        Added value: +{
        +  "description": "Absolute or relative path to the file to upload. Relative paths are resolved against process.cwd(). Maximum decoded size: 5 MB (5,242,880 bytes). Exactly one of file_path or content_base64 must be provided (not both, not neither).",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / filename
        Added value: +{
        +  "description": "Filename to store in Kanboard (required).",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / task_id
        Added value: +{
        +  "description": "ID of the task to attach the file to (required).",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / required
        Added value: +[
        +  "task_id",
        +  "filename"
        +]
    • Addedclose_task
    • Changedget_project5 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / project_id
        Added value: +{
        +  "description": "Numeric project id.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_identifier
        Added value: +{
        +  "description": "Short project identifier string (e.g. 'PRJ').",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / project_name
        Added value: +{
        +  "description": "Exact project name.",
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedmove_task_position10 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / column_id
        Added value: +{
        +  "description": "Target column id. Mutually exclusive with column_name.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / column_name
        Added value: +{
        +  "description": "Target column name (case-insensitive). Mutually exclusive with column_id.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / position
        Added value: +{
        +  "default": 1,
        +  "description": "Position within the column (1-based, defaults to 1 = top).",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_id
        Added value: +{
        +  "description": "Kanboard project id (overrides .kanboard.yaml).",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_identifier
        Added value: +{
        +  "description": "Kanboard project identifier string (overrides .kanboard.yaml).",
        +  "type": "string"
        +}
      • addedInput schema / properties / swimlane_id
        Added value: +{
        +  "description": "Target swimlane id. Falls back to .kanboard.yaml default or first active swimlane.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / task_id
        Added value: +{
        +  "description": "The task id to move.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / required
        Added value: +[
        +  "task_id"
        +]
    • Addedreopen_task
    • Changedupdate_column7 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / column_id
        Added value: +{
        +  "description": "Column id to update (required).",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "New column description.",
        +  "type": "string"
        +}
      • addedInput schema / properties / task_limit
        Added value: +{
        +  "description": "New WIP limit (0 = unlimited). Omit to leave unchanged.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "New column title (1–255 chars).",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "column_id"
        +]
    • Changedupdate_project11 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "New project description.",
        +  "type": "string"
        +}
      • addedInput schema / properties / email
        Added value: +{
        +  "description": "New project notification email address.",
        +  "format": "email",
        +  "type": "string"
        +}
      • addedInput schema / properties / end_date
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "New end date as ISO 8601 string, Unix epoch seconds (integer), or null to clear."
        +}
      • addedInput schema / properties / identifier
        Added value: +{
        +  "description": "New short identifier (e.g. 'PRJ'). Must be unique.",
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "New project name (1–255 chars).",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / owner_id
        Added value: +{
        +  "description": "New owner user id.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_id
        Added value: +{
        +  "description": "Project id to update (required).",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / start_date
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "New start date as ISO 8601 string, Unix epoch seconds (integer), or null to clear."
        +}
      • addedInput schema / required
        Added value: +[
        +  "project_id"
        +]
    • Changedupdate_subtask10 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / status
        Added value: +{
        +  "description": "New status: 0 = todo, 1 = in progress, 2 = done (optional).",
        +  "enum": [
        +    0,
        +    1,
        +    2
        +  ],
        +  "type": "number"
        +}
      • addedInput schema / properties / subtask_id
        Added value: +{
        +  "description": "ID of the subtask to update (required).",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / task_id
        Added value: +{
        +  "description": "ID of the parent task (required).",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / time_estimated
        Added value: +{
        +  "description": "New estimated time in hours (optional).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / time_spent
        Added value: +{
        +  "description": "New time spent in hours (optional).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "New subtask title (optional).",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / user_id
        Added value: +{
        +  "description": "New assigned user id (optional).",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / required
        Added value: +[
        +  "subtask_id",
        +  "task_id"
        +]
    • Changedupdate_swimlane6 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "New swimlane description.",
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "New swimlane name (1–255 chars).",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / swimlane_id
        Added value: +{
        +  "description": "Swimlane id to update (required).",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / required
        Added value: +[
        +  "swimlane_id"
        +]
    • Changedupdate_task16 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / category_id
        Added value: +{
        +  "description": "New category id.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / color_id
        Added value: +{
        +  "description": "New color identifier (e.g. 'blue', 'red').",
        +  "type": "string"
        +}
      • addedInput schema / properties / creator_id
        Added value: +{
        +  "description": "New creator user id.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / date_due
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "New due date as ISO 8601 string, Unix epoch seconds (integer), or null to clear."
        +}
      • addedInput schema / properties / date_started
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "New start date as ISO 8601 string, Unix epoch seconds (integer), or null to clear."
        +}
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "New task description.",
        +  "type": "string"
        +}
      • addedInput schema / properties / owner_id
        Added value: +{
        +  "description": "New owner user id.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / priority
        Added value: +{
        +  "description": "New priority.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / reference
        Added value: +{
        +  "description": "New external reference (e.g. issue URL).",
        +  "type": "string"
        +}
      • addedInput schema / properties / score
        Added value: +{
        +  "description": "New complexity score.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / tags
        Added value: +{
        +  "description": "New array of tag strings (replaces existing).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / task_id
        Added value: +{
        +  "description": "Task id to update (required).",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "New task title.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "task_id"
        +]
  2. 37 tool updates
    • First observedadd_project_user
    • First observedattach_file_to_task
    • First observedcreate_column
    • First observedcreate_comment
    • First observedcreate_project
    • First observedcreate_subtask
    • First observedcreate_swimlane
    • First observedcreate_task
    • First observedcreate_tasks_batch
    • First observeddelete_column
    • First observeddelete_comment
    • First observeddelete_project
    • First observeddelete_subtask
    • First observeddelete_swimlane
    • First observeddelete_task
    • First observeddelete_task_file
    • First observedget_project
    • First observedget_task
    • First observedlist_categories
    • First observedlist_columns
    • First observedlist_my_tasks
    • First observedlist_overdue_tasks
    • First observedlist_project_users
    • First observedlist_projects
    • First observedlist_subtasks
    • First observedlist_swimlanes
    • First observedlist_tasks
    • First observedmove_column
    • First observedmove_swimlane
    • First observedmove_task_position
    • First observedremove_project_user
    • First observedupdate_column
    • First observedupdate_comment
    • First observedupdate_project
    • First observedupdate_subtask
    • First observedupdate_swimlane
    • First observedupdate_task

TDQS

A4.2/5.0

Scored across 39 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, with descriptions explicitly differentiating similar operations (e.g., close_task vs delete_task, create_task vs create_tasks_batch). Overlapping tools are well distinguished by documentation.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using lowercase snake_case (e.g., create_project, list_tasks, update_column). The naming is predictable and uniform across all entities.

Tool Count3/5

With 39 tools, the server covers a comprehensive Kanboard domain but feels heavy. While each tool is justified for full lifecycle management, the count exceeds typical MCP server scope (3-15 tools), making it borderline overwhelming.

Completeness4/5

The tool surface is very comprehensive, covering CRUD for projects, tasks, subtasks, comments, columns, swimlanes, users, and files, plus batch and movement operations. Minor gaps exist, such as missing list_comments or get_subtask by id, but the core workflows are well supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A remote Model Context Protocol server acting as middleware to the Sentry API, allowing AI assistants like Claude to access Sentry data and functionality through natural language interfaces.
    7
    22 npm
    847
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Enables users to manage Kanban-style tasks with priorities, tags, and statuses (todo, in progress, done) through natural language. Provides task analytics including lead time, cycle time, and status distribution with MongoDB storage.
    4
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to manage Kanban tasks, boards, teams, and checklists via natural language, with full CRUD operations and live updates.
    163 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides MCP tools to manage a local-first Kanban board, including projects, issues, dependencies, and labels. Enables AI clients to interact with the board via a stdio MCP server connected to a NestJS API.
    7 npm
    MIT