Skip to main content
Glama

planka-mcp

Control a Planka 2.x board from Claude Code through 41 MCP tools. Writes are re-read and verified, so a reported success matches the board. An optional workflow turns that board into durable memory for agent work.

Leer en español

You talk to Claude Code
          │
          ▼
  planka-mcp (stdio) ─── HTTPS + JSON ───▶ Planka 2.x
          │                                  │
          └──── reads the result back ◀──────┘
WARNING

The old@gogogadgetbytes/planka-mcp package can report success while doing nothing on Planka 2.x. Read the five silent-failure gotchas before replacing an existing installation.

New to MCP? Read this first

MCP is a standard that lets Claude Code call tools provided by another program. This repository runs a small local program that translates those tool calls into Planka API requests. It needs Planka credentials because it acts as a dedicated Planka user, not as Claude itself. The credentials stay on your machine and are never written into the project-level .mcp.json file. Claude Code loads MCP servers when a session starts, so restart it after setup or configuration changes.

Related MCP server: Planka MCP Server for Claude

Requirements

  • Node.js 18 or newer and npx

  • A reachable Planka 2.x instance

  • A dedicated Planka user that can see the target project and board

  • One MCP client: Claude Code, Codex CLI, Cursor or VS Code

  • A project-manager role only if setup must create a board

Linux and macOS are supported. No Bun runtime is required.

Install

One command per client. All of them run the published package with npx, so there is nothing to clone and nothing to build.

Client

One-liner

Claude Code (plugin: MCP + skills + preflight)

/plugin marketplace add omnicoreos/planka-mcp then /plugin install planka@planka-mcp

Claude Code (server only)

claude mcp add --scope user --transport stdio planka --env PLANKA_BASE_URL=https://planka.example.com --env PLANKA_API_KEY=<key> -- npx -y @omnicoreos/planka-mcp

Codex CLI

codex mcp add planka -- npx -y @omnicoreos/planka-mcp (then add the env block, below)

Cursor

Add to Cursor

VS Code

Add to VS Code

Any of them, guided

npx @omnicoreos/planka-mcp init --client claude|codex|cursor|vscode|print

The Cursor and VS Code links carry a placeholder key, never a real one: a deeplink ends up in browser history. Both clients ask for the credential themselves — VS Code through a promptString input, so the committed .vscode/mcp.json holds no secret.

planka-mcp init

npx @omnicoreos/planka-mcp init --client claude     # claude mcp add, user scope
npx @omnicoreos/planka-mcp init --client codex      # appends to ~/.codex/config.toml
npx @omnicoreos/planka-mcp init --client cursor     # merges ~/.cursor/mcp.json (0600) + prints the deeplink
npx @omnicoreos/planka-mcp init --client vscode     # writes .vscode/mcp.json with a secret prompt
npx @omnicoreos/planka-mcp init --client print      # prints every snippet, writes nothing

With a terminal attached it asks for what it needs; --base-url, --api-key, --board, --email and --password make it non-interactive. Before writing anything it runs one authenticated GET /api/users/me, which is what catches a base URL pointing at the SPA instead of the API, or a credential that never worked. --dry-run prints the exact change and touches nothing.

Every emitter merges: an existing planka entry is reported and left alone, and the other servers in the same file are preserved. Files written into your home directory get mode 0600.

./scripts/setup.sh is an alias for init --client claude. The older guided installer — the one that also picks or creates a board and runs the full create/label/comment/delete smoke test — is still node scripts/setup.mjs.

The Claude Code plugin

The plugin installs the MCP server, the two workflow skills, and a SessionStart preflight that catches a missing credential or an http:// base URL before the first tool call:

/plugin marketplace add omnicoreos/planka-mcp
/plugin install planka@planka-mcp

Claude Code asks for the base URL and the API key when the plugin is enabled and stores the key in the OS keychain, not in settings.json. Codex reads the same repository through .codex-plugin/plugin.json and .agents/plugins/marketplace.json.

Plugins cannot ship permission rules, which is the one thing that does not travel: use PLANKA_READ_ONLY and PLANKA_DISABLED_TOOLS (below) instead of a client-side deny list — they work in every runtime and cost no context.

Codex env block

codex mcp add does not take credentials, so add them to ~/.codex/config.toml (or let init --client codex do it):

[mcp_servers.planka]
command = "npx"
args = ["-y", "@omnicoreos/planka-mcp"]
env = { PLANKA_BASE_URL = "https://planka.example.com", PLANKA_API_KEY = "<key>" }

Verify it works

First, inspect Claude Code's configuration:

claude mcp list
claude mcp get planka

Then fully restart Claude Code — MCP servers are loaded when a session starts. If you configured the server in a project's .mcp.json, open Claude Code in that project and approve the project-scoped server when prompted. If you installed the plugin, /plugin shows it, and its Errors tab shows a server that failed to start.

Ask Claude Code:

Show me my Planka projects and boards. In the Pending list, create a card named
"MCP is working" with the description "Created from Claude Code", then read it back.

If Claude cannot see the tools, restart first and then follow Troubleshooting.

Authentication

Two ways to authenticate, and they are mutually exclusive: setting both is a configuration error, because Planka reads Authorization first and silently ignores x-api-key when both arrive.

PLANKA_API_KEY (recommended)

PLANKA_AGENT_EMAIL + PLANKA_AGENT_PASSWORD

Sent as

X-Api-Key: <prefix>_<secret> on every request

POST /api/access-tokens, then Authorization: Bearer

Login round-trip

none

one per session, refreshed every 25 minutes

Sign-in rate limit

not subject to it

10 logins per identity per 60 s — reached fast when several agents start at once

Password on disk

none

yes, in the client's configuration file

Attachment downloads

works

works

Recipe: a scoped agent user with an API key

Four steps, run by a Planka admin. The result is a user that can only ever see the boards you name — enforced by Planka itself, not by this server.

  1. Create the user with the lowest global role. In the Planka UI: Administration → Users → Add user, role boardUser. A boardUser cannot create projects and cannot grant itself memberships.

  2. Give it membership on the boards it should work on, and only those:

    curl -X POST "$PLANKA_URL/api/boards/<BOARD_ID>/board-memberships" \
      -H "Authorization: Bearer $ADMIN_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"userId":"<USER_ID>","role":"editor"}'

    Use "role":"viewer" for an agent that should read and comment but never create or move cards. GET /api/projects then returns only the projects derived from these memberships; every other board answers 404.

  3. Issue the API key (admin-only endpoint). The key is shown once, in included.apiKey; Planka stores only its hash and prefix:

    curl -X POST "$PLANKA_URL/api/users/<USER_ID>/api-key" \
      -H "Authorization: Bearer $ADMIN_TOKEN"
  4. Configure the server with the key and nothing else. Remove PLANKA_AGENT_EMAIL and PLANKA_AGENT_PASSWORD:

    {
      "mcpServers": {
        "planka": {
          "command": "npx",
          "args": ["-y", "@omnicoreos/planka-mcp"],
          "env": {
            "PLANKA_BASE_URL": "https://planka.example.com",
            "PLANKA_API_KEY": "abcd1234_0123456789abcdef0123456789abcdef"
          }
        }
      }
    }

Rotating a key is step 3 again: issuing a new one invalidates the old.

Scoping the server

An API key inherits its user's permissions — it carries no scopes of its own. Scoping therefore happens in three layers, and each covers something the others cannot.

Layer 1 · PLANKA          the only layer an agent cannot talk its way around
  boardUser + board memberships + the API key above
  ⇒ everything outside the allowed boards is 404/403 at the API

Layer 2 · THIS SERVER     ergonomics, and defence against the agent itself
  the environment variables below; they travel with the package,
  so Claude Code, Codex and Cursor all get the same rules

Layer 3 · THE CLIENT      survives a downgrade of this package
  .claude/settings.json deny/ask rules, Codex enabled_tools/disabled_tools

Layer 1 has real enforcement but cannot express "do not call planka_get_board, it costs forty times more context". Layer 2 can, and reaches every runtime. Layer 3 stays true even if this package is pinned back to an older version.

Layer 2: the environment variables

Variable

Value

What it does

PLANKA_DEFAULT_BOARD_ID

one board id

boardId becomes optional on every tool that takes one, and defaults to this board. Saves the planka_get_structure call an agent makes only to recover an id that never changes

PLANKA_ALLOWED_BOARD_IDS

comma-separated board ids

Boards outside the list are filtered out of planka_get_structure, and any call naming one is refused before the request leaves the process

PLANKA_ALLOWED_PROJECT_IDS

comma-separated project ids

Same, one level up

PLANKA_READ_ONLY

true or 1

The twenty-seven write tools disappear from tools/list and are refused if called anyway

PLANKA_HIDE_DEPRECATED

true or 1

Drops the seven deprecated tools (manage_labels, manage_lists, manage_comment, add_comment, get_board, list_cards, list_lists) from tools/list, saving ~6.8 kB of context. They stay callable, so a cached tool list still works

PLANKA_DISABLED_TOOLS

comma-separated tool names

Switches individual tools off. The planka_ prefix is optional: get_board and planka_get_board mean the same thing

PLANKA_PROTECTED_LIST_IDS

comma-separated list ids

Refuses creating or moving cards into those lists, editing or deleting the lists themselves, and moving, archiving or deleting the cards out of them

PLANKA_SUMMARY_DECISION_LISTS

comma-separated column names or ids

Which columns planka_board_summary returns cards from when the call does not say. Unset: it returns no cards, only the shape of the board

PLANKA_SUMMARY_HIGHLIGHT_LABEL

one label name

The label that marks a card as unblocked in planka_board_summary. Unset: nothing is highlighted

PLANKA_MCP_PREFLIGHT

full

Read by the plugin's SessionStart hook only: also spawn the server binary and wait for its stdio banner. Off by default, because on a cold cache it costs an npx download

PLANKA_MCP_COMMAND

a command

Read by the same hook: the command to spawn instead of npx -y @omnicoreos/planka-mcp (a local checkout, a pinned binary)

The server ships with no board vocabulary of its own. Column names and "ready" labels are yours, in your language: the last two variables are how a deployment tells the summary what its board looks like. A hint that matches nothing comes back in warnings, never as an empty answer.

"PLANKA_SUMMARY_DECISION_LISTS": "decision,probalo,miralo",
"PLANKA_SUMMARY_HIGHLIGHT_LABEL": "decidido"

Allowlists are by id, never by name. Any board editor can rename a board, so a name-based allowlist is bypassed with one edit. Planka ids are stable.

Two notes on what these are and are not:

  • PLANKA_READ_ONLY hides tools; it does not make the account read-only. Pair it with "role":"viewer" in step 2 above if that is what you actually need.

  • PLANKA_PROTECTED_LIST_IDS is a guard-rail, not a permission: Planka has no per-list rights. It is the right tool for "do not move cards to Merged on your own", and the wrong one for anything security-critical.

Example — an agent that reads one board and comments, and nothing else:

"env": {
  "PLANKA_BASE_URL": "https://planka.example.com",
  "PLANKA_API_KEY": "abcd1234_0123456789abcdef0123456789abcdef",
  "PLANKA_DEFAULT_BOARD_ID": "1234567890123456789",
  "PLANKA_ALLOWED_BOARD_IDS": "1234567890123456789",
  "PLANKA_DISABLED_TOOLS": "get_board",
  "PLANKA_PROTECTED_LIST_IDS": "9876543210987654321"
}

The 41 tools

IDs are strings. Start with planka_get_structure, then use IDs returned by Planka; do not guess them.

Tool

What it does

planka_get_structure

Lists visible projects, boards, and lists

planka_get_board

Deprecated. Reads one board whole, up to limit cards

planka_board_summary

One-call briefing: columns with counts, labels with ids, and optionally the cards of named columns

planka_find_cards

The one read over cards: one column (listId), or a board searched by text, label or member

planka_list_lists

Deprecated. Alias of planka_board_summary with cardsFrom: []

planka_list_cards

Deprecated. Alias of planka_find_cards with listId

planka_create_card

Creates a card and can attach tasks and labels

planka_get_card

Card digest; detail: "full" and withComments on demand

planka_update_card

Updates title, description, due date, or completion

planka_move_card

Moves a card to another list or position

planka_delete_card

Permanently deletes a card

planka_create_tasks

Adds checklist tasks to a card

planka_update_task

Renames or completes a task

planka_delete_task

Deletes a task

planka_create_label

Creates a board label

planka_update_label

Renames a label or changes its color

planka_delete_label

Deletes a label from the board and from every card

planka_manage_labels

Deprecated. Alias routing action to the three above

planka_set_card_labels

Adds or removes labels and verifies the final state

planka_create_comment

Adds a comment through Planka 2.x's dedicated endpoint

planka_get_comments

Paginated comments (limit, beforeId, all)

planka_update_comment

Rewrites an existing comment

planka_delete_comment

Deletes a comment

planka_add_comment

Deprecated. Alias of planka_create_comment

planka_manage_comment

Deprecated. Alias routing action to update/delete

planka_create_list

Creates a list (column) on a board

planka_update_list

Renames, repositions or reclassifies a column

planka_delete_list

Deletes a column and every card in it

planka_manage_lists

Deprecated. Alias routing action to the three above

planka_add_attachment

Uploads a local file to a card and verifies it landed

planka_get_attachments

Lists a card's attachments with type, size, and download URL

planka_view_attachment

Returns an attachment's content; images come back viewable

planka_delete_attachment

Deletes an attachment

planka_card_history

One card's activity log as human lines: created, moved, assigned, tasks completed

planka_board_activity

What moved on a board since a date, grouped by card

planka_set_card_members

Assigns or unassigns people and verifies the final membership

planka_list_users

The people who can be assigned, with a board-scoped fallback

planka_whoami

This server's account, board role, Planka version and access policy

planka_duplicate_card

Copies a card with its tasks, labels and members

planka_archive_card

Archives a card into the board's hidden archive, or restores it

planka_move_list_cards

Moves every card of one column into another, with counts

The reads follow one principle: a small digest by default, the detail through parameters. planka_board_summary opens a session in one call; planka_find_cards with a listId reads a whole column in ONE request through GET /api/lists/:id, so total is the real size of the column and the answer carries truncated: false; the same tool without a listId searches the board. Measured on the reference board of 185 cards, the deprecated planka_get_board went from 56,112 to 17,215 characters and planka_get_structure (withLists: false) from 696 to 203, while a 159-card column went from five requests to two. Every read reports total, returned and hasMore, so a clipped answer never looks complete, and every board-derived read carries excludesArchived: true because Planka keeps archive and trash out of the board read.

Every input field and a complete payload for every tool are in Tools reference.

What the client learns on connect

The initialize handshake returns a short set of server instructions — how to open a session, where IDs come from, why every comment on a card matters, and that Planka answers 404 where it means 403. Claude Code puts them in the session system prompt and Codex CLI reads them alongside the tool list, so the shared guidance is stated once instead of repeated in 41 tool descriptions. Every tool also publishes a display title and all four MCP behavioural hints explicitly, rather than inheriting the spec's pessimistic defaults, plus the two _meta keys Claude Code acts on: a forced confirmation prompt on the tools that delete data, and a raised output ceiling on planka_view_attachment. Details in Server instructions and annotations.

Resources and prompts

Two more surfaces, and both cost nothing until something asks for them, which is why the long-form guidance lives here instead of in the instructions everyone pays for on every session. Claude Code reads both; Cursor reads both; Codex supports neither, so nothing here is load-bearing.

Resources serve the guides that ship inside the package. In Claude Code they are @-mentioned, in Cursor they come from the resource picker:

URI

What it is

planka://workflow/readme

The optional board workflow: columns, labels, who moves what

planka://workflow/board-template

The columns and labels to create on a fresh board

planka://workflow/skills/orchestrator

The director skill, verbatim

planka://workflow/skills/close-card

The closing skill, verbatim

planka://gotchas/planka-2x

How Planka 2.x actually behaves when a call answers nonsense

planka://labels/colors

Every color planka_create_label and planka_update_label accept, generated from the schema

Prompts are three ways to start, surfaced by Claude Code as /mcp__planka__<name>:

Prompt

Arguments

What it does

planka-open-session

boardId?, since?

Summary, then recent movement, then the columns that matter — in that order

planka-close-card

cardId, listId?

Read the whole thread, write an honest closing comment, move it, check verified

planka-board-triage

boardId?, lists?

Walk the columns waiting on a person and turn each card into one question

Optional agent workflow

The MCP server works on its own. The optional method solves a different problem: preserving why work exists, what changed, and what remains true between agent sessions.

Adopt it in layers:

  1. Use only the MCP tools.

  2. Add the board states, card template, and human handshakes.

  3. Add one worktree per card with a director coordinating workers.

Start with A board that survives the session. The board template, copyable Claude Code skills, and optional worktree helper are independent pieces.

Troubleshooting

When reporting a bug, include the Planka version, Node version, the tool name, and the error text. Never paste credentials or access tokens.

Credits and license

This is an MIT-licensed fork of gogogadgetbytes/planka-mcp, not an original-from-scratch implementation. See CREDITS.md for the upstream attribution, maintained fixes, and unanswered pull requests.

See LICENSE for the original and current contributor notices.

Development

npm ci
npm run build
npm test

The real smoke test is opt-in because it mutates a writable board and then cleans up after itself. It drives all 41 tools over stdio and cross-checks every write against the raw Planka API — over 90 named checks:

export PLANKA_BASE_URL="https://planka.example.com"
export PLANKA_AGENT_EMAIL="agent@example.com"
export PLANKA_AGENT_PASSWORD="<YOUR_PASSWORD>"
export PLANKA_SMOKE_BOARD_ID="1234567890123456789"
npm run test:smoke

npm run test:smoke builds first, so it cannot test a stale dist/. Four optional variables tune it:

Variable

What it does

PLANKA_SMOKE_LIST_ID

Column where the scratch card is created. Without it, a scratch-looking column is picked, falling back to the first one

PLANKA_SMOKE_FAIL_AFTER

Injects a failure after check <n>, to prove that cleanup still runs

PLANKA_MCP_ENTRY

Server entry point. Defaults to dist/index.js

VERBOSE

Set to 1 to print each check's payload

See CONTRIBUTING.md before opening a change. Release identity is centralized in project.identity.json; update it and run npm run sync:identity before publishing under your own namespace.

Available Tools

15 tools
planka_add_commentA

Add a comment to a card. Use this for status updates, notes, or agent activity logs.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesComment text (markdown supported)
cardIdYesThe card ID

TDQS

A3.8/5.0
Behavior2/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 of behavioral disclosure. It indicates a mutation ('Add') but does not mention permissions, idempotency, side effects, or what the response contains. This is a significant gap for a write operation with zero annotation coverage.

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

Conciseness5/5

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

Two short sentences convey the action and use cases without any wasted words. The core purpose is front-loaded, making it easy for an agent to parse quickly.

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 two-parameter tool with no nested objects and no output schema, the definition gives enough context to invoke it correctly. It does not describe return values or side effects, but the use-case framing and schema coverage make the tool's operation reasonably 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 description coverage is 100%, so both parameters are already documented in the input schema. The description adds no extra parameter-level detail, but the baseline of 3 applies because the schema handles the parameter semantics sufficiently.

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

Purpose5/5

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

The description opens with a specific verb-resource pairing: 'Add a comment to a card.' This clearly identifies the action and target, and naturally distinguishes it from sibling tools like planka_get_comments and planka_set_card_labels.

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 phrase 'Use this for status updates, notes, or agent activity logs' gives practical context for when to invoke the tool. It does not explicitly name alternatives or exclusions, but the intended use cases are clear enough for an agent to select it appropriately.

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

planka_create_cardA

Create a new card on a board. Optionally add tasks (checklist items) at the same time.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCard title
tasksNoOptional: Task names to add as a checklist
listIdYesThe list to create the card in
dueDateNoDue date in ISO format
labelIdsNoOptional: Label IDs to attach
descriptionNoCard description (markdown supported)

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only states the action and optional task inclusion, without mentioning side effects, idempotency, permissions, or error handling. As a mutating operation, more transparency is expected to prevent misuse.

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

Conciseness5/5

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

The description is a single, efficient sentence with no fluff. The primary action is front-loaded, and the optional task feature is stated secondary. It is easily scannable and to the point.

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

Completeness3/5

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

For a create tool with full schema coverage, the description is minimal but sufficient for basic invocation. However, it does not reference the sibling tool planka_create_tasks, which could lead to misuse when adding tasks to an existing card. Additionally, no return value or post-creation behavior is mentioned, though no output schema exists to fill that gap.

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

Parameters3/5

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

The input schema already provides complete descriptions for all six parameters, so the baseline is 3. The description adds no extra parameter insight beyond restating that tasks are checklist items, which the schema already mentions. Therefore, it does not enhance parameter understanding.

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 'Create a new card on a board' with a specific verb and resource. It also mentions the optional task functionality, distinguishing it from tools like planka_create_tasks. This makes the purpose unambiguous and distinct from sibling operations.

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 usage context is implied: you use this tool to create a card. However, there is no explicit guidance on when to use alternatives like planka_create_tasks for adding tasks later, nor any exclusions or conditions. The phrase 'at the same time' hints at a timing option but does not clarify the separation of concerns.

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

planka_create_tasksA

Add one or more tasks (checklist items) to a card.

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYesTask names to create
cardIdYesThe card ID

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It states the mutation ('Add') but does not disclose what happens to existing tasks, whether the operation is idempotent, what response is returned, or any authorization requirements. This is a significant gap for a mutation tool.

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

Conciseness5/5

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

One sentence, no filler, with the action and target front-loaded. 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, two-parameter tool with a fully described schema, the description plus schema is largely sufficient for invocation. It does not cover behavioral edge cases like duplicate task names or whether an existing checklist is appended to, but the low complexity makes this minor.

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 the schema already documents cardId and tasks. The description only reinforces 'one or more' and 'to a card' without adding syntax, format, or relationship details, which matches the baseline 3.

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

Purpose5/5

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

States a specific verb ('Add'), resource ('tasks'), and clarifies they are checklist items attached to a card. This distinguishes it from sibling tools like create_card or update_task, so an agent can identify the operation immediately.

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

Usage Guidelines3/5

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

The description implies when to use the tool—when adding one or more checklist tasks to a card—but gives no explicit guidance about alternatives or exclusion criteria. It does not mention update_task/delete_task or clarify prerequisites such as card existence.

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

planka_delete_cardA

Permanently delete a card. This cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardIdYesThe card ID to delete

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and it does disclose the most critical trait: the delete is permanent and cannot be undone. This is exactly what an agent needs before invoking a destructive tool; it stops short of describing cascading effects or response shape.

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

Conciseness5/5

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

Two short sentences with zero filler. The core action is front-loaded ('Permanently delete a card') and the irreversibility warning earns its place.

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

Completeness3/5

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

For a one-parameter tool this is close to sufficient, but with no annotations and no output schema the description still leaves unspecified whether deleting a card also deletes its tasks/comments and what the caller can expect in the response. The irreversibility warning mitigates but does not fully close this gap.

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

Parameters3/5

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

There is only one parameter and schema description coverage is 100%, so the schema already defines cardId as 'the card ID to delete.' The description adds no extra semantic detail, but none is necessary at this complexity.

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

Purpose5/5

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

The description names a specific verb ('delete') and resource ('card') and adds the permanence qualifier, so an agent can distinguish it from get_card, update_card, move_card, and create_card. No tautology or ambiguity.

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 intended use is implied: choose this when a card should be permanently removed. However, it does not explicitly state when not to use it or compare it to alternatives, and it gives no preconditions beyond selecting a cardId.

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

planka_delete_taskA

Delete a task from a card.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe task ID to delete

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description must itself convey side effects. It only says 'delete', which implies removal but does not explicitly state irreversibility or any potential cascading effects. This is a minor gap for a destructive operation, so a score of 3 is appropriate.

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

Conciseness5/5

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

The description is a single, straightforward sentence without redundant information. It is concise and to the point.

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 delete operation with one parameter and no output schema, the description covers the essential context. It does not mention preconditions (e.g., task must exist) but that is generally implied and not critical for such a simple operation.

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

Parameters5/5

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

The only parameter 'taskId' is described as 'The task ID to delete', which fully explains its purpose and type. No further elaboration is needed.

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

Purpose5/5

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

The description clearly states the verb 'delete' and the resource 'task', making the purpose unambiguous. It distinguishes the tool from sibling tools like 'planka_delete_card' without needing further clarification.

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 specifies the action and resource, which is sufficient for a delete operation. It does not explicitly compare with alternatives, but given the tool name and sibling context, usage is clear. It could have added a note about when to use it versus other task-related tools, but that is not necessary.

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

planka_get_boardA

Get a board with all its lists, cards, and labels. Use this to see everything on a board.

ParametersJSON Schema
NameRequiredDescriptionDefault
boardIdYesThe board ID
includeTaskCountsNoInclude task completion counts for each card

TDQS

A4/5.0
Behavior3/5

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

There are no annotations, so the description must carry the behavioral burden. It indicates a read-only operation via 'Get' and states what is returned, but it does not disclose any further behavioral details such as response structure or how includeTaskCounts affects results.

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

Conciseness5/5

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

Two short sentences, front-loaded with the operation and scope. The second sentence adds a clear usage instruction without redundancy, so 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 board-fetching tool with one required parameter and one documented optional parameter, the description is sufficient. It states what is returned, and the schema covers parameter semantics. No output schema exists, but the description compensates by naming the returned content.

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 the parameter meanings are already documented. The description adds no extra meaning beyond the schema, meeting the baseline for a fully documented 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 states a specific verb ('Get') and a specific resource ('a board') with an explicit scope: all its lists, cards, and labels. This clearly distinguishes it from narrower siblings like get_card or get_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?

It gives clear usage context: use this when you want to see everything on a board. It does not explicitly list alternatives or exclusion cases, but the intended use is obvious and unambiguous.

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

planka_get_cardA

Get full details of a card including tasks, comments, labels, and attachments.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardIdYesThe card ID

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden. 'Get' clearly signals a read-only operation, and the description discloses what content is returned. It does not cover auth requirements, cost, or rate limits, but for a simple fetch tool this is a reasonable baseline.

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?

A single sentence that front-loads the verb and resource, then enumerates the included content without filler. 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 one-parameter read tool with full schema coverage and no output schema, the description is largely sufficient — an agent needs only cardId to invoke it correctly. It could name sibling tools for routing, but nothing essential is missing for a correct call.

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% — cardId is already described as 'The card ID'. The description adds no further meaning about parameter format, how to obtain the ID, or expected values, which matches the baseline for fully documented schemas.

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

Purpose4/5

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

States a specific verb (Get), resource (card), and the content scope (tasks, comments, labels, attachments). The listed contents implicitly distinguish it from planka_get_comments (scoped to comments only), though this differentiation is implied rather than explicit.

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

Usage Guidelines3/5

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

Usage context is implied through the listed content — an agent can infer that retrieves the full card payload versus sibling tools like planka_get_comments or planka_get_structure. However, there is no explicit when-to-use or when-not-to-use statement, nor mention of alternatives.

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

planka_get_commentsA

Get all comments on a card.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardIdYesThe card ID

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the scope ('all comments') and implies a read-only operation via 'Get', but it does not mention any behavioral traits such as ordering, limits, or the shape of returned data. This is adequate for a simple retrieval but adds minimal 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?

The description is a single, concise sentence with no unnecessary words. It is front-loaded with the core action and resource, making it immediately scannable.

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 get operation with one required parameter and no output schema, the description is complete. It states the resource ('comments on a card') and implies the need for a card ID. Nothing an agent needs to call this tool correctly is missing.

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 description coverage is 100% with a clear description for cardId. The tool description does not add any additional meaning beyond what the schema already provides, so the baseline 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 'Get all comments on a card' clearly states the specific action (get) and resource (comments on a card), making it distinct from sibling tools like planka_add_comment or planka_get_card. The scope is unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool over alternatives. It does not name any sibling tools or describe contexts where another tool might be more appropriate. Usage is only implied by the name and description.

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

planka_get_structureA

Get the full project/board/list structure. Use this to understand what projects and boards exist before working with cards.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoOptional: Get structure for a specific project only

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 the burden of behavioral disclosure. 'Get' clearly frames this as a read operation)Skip, which is adequate. However, it doesn't state anything explicit about side effects (there are none expected), data size, or whether the response nests cards. For a pure retrieval tool that is evidently read-only, this is acceptable but not exemplary.

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 primary purpose. Every sentence earns its place — the first states the action, the second gives usage intent. No filler or repetition.

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

Completeness4/5

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

For a simple tool (1 optional param, no output schema), the description covers what it returns (full project/board/list structure) and when to use it (before working with cards). It might briefly mention how this relates to planka_get_board, but for a discovery tool this 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?

Schema description coverage is 100% — the projectId parameter is fully described in the schema ('Optional: Get structure for a specific project only'). The description itself adds no parameter-level meaning beyond what the schema already provides, so the baseline 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?

States a specific verb ('Get') plus a concrete resource ('full project/board/list structure') and names the navigation intent. It is clearly distinct from siblings like planka_get_board or planka_get_card, which retrieve narrower targets.

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 instructs when to use it: 'before working with cards' to discover what projects/boards exist. It doesn't spell out when not to use it or how it compares to planka_get_board (which is a sibling), so it misses a small exclusion note, but the primary use case is clear.

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

planka_manage_labelsB

Create, update, or delete labels on a board.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoLabel name
colorNoLabel color. Valid colors: muddy-grey, autumn-leafs, fresh-salad, lilac-eyes, silver-glint, deep-ocean, summer-sky, grey-stone, sugar-plum, shady-rust, wet-rock, turquoise-sea, lavender-fields, french-coast, sweet-lilac, pirate-gold, berry-red, pumpkin-orange, lagoon-blue, pink-tulip, light-mud, orange-peel, bright-moss, antique-blue, dark-granite, lagune-blue, sunny-grass, morning-sky, light-orange, midnight-blue, tank-green, gun-metal, wet-moss, red-burgundy, light-concrete, apricot-red, desert-sand, navy-blue, egg-yellow, coral-green, light-cocoa, modern-green, piggy-red
actionYesAction to perform
boardIdNoBoard ID (required for create)
labelIdNoLabel ID (required for update/delete)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description bears the full burden of behavioral disclosure. It only states the action types without explaining that the action parameter determines which IDs are required (boardId for create, labelId for update/delete), that delete is permanent, or any side effects. The description adds no behavioral context beyond the literal action words.

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

Conciseness4/5

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

The description is a single, concise sentence with no verbose filler. It front-loads the core verb and resource. While some might argue it is too terse for full completeness, the conciseness itself is exemplary; no words are wasted.

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

Completeness2/5

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

Given the tool's complexity—five parameters, an enum action, and conditional required fields—the description is far from complete. It does not explain how the action parameter drives the input requirements, nor does it mention return values or any usage context. An agent would need to inspect the schema carefully to understand the conditional logic, which a well-formed description should preempt.

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 the baseline is 3. The description itself does not elaborate on any parameter semantics—it merely repeats the action types. The conditional requirements (e.g., boardId for create, labelId for update/delete) are already encoded in the schema's descriptions, so the description adds no 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 states a specific verb-resource combination: 'Create, update, or delete labels on a board.' It covers all three CRUD actions and clearly distinguishes from sibling tool planka_set_card_labels, which handles assigning labels to cards rather than managing label definitions. This is precise and immediately scopes the tool.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives is provided. It does not mention that this is for managing label metadata (e.g., names, colors) as opposed to assigning labels to cards, nor does it reference any sibling tool. The agent is left to infer context from the name alone, which is insufficient.

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

planka_manage_listsA

Create, update, or delete lists on a board.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoList name
typeNoList type. Defaults to active when creating.
actionYesAction to perform
listIdNoList ID (required for update/delete)
boardIdNoBoard ID (required for create)
positionNoList position

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. However, it only restates the action verbs already present in the schema enum and does not disclose side effects, irreversibility, permissions, or what happens to cards/tasks when a list is deleted.

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

Conciseness5/5

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

The description is a single, front-loaded sentence. Every word contributes: the verbs identify the operations and 'lists on a board' identifies the target resource.

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

Completeness3/5

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

The input schema is complete and the description is clear enough for basic use. However, there is no output schema, no annotations, and no mention of what the tool returns, how errors surface, or the consequences of each action, so the context is only minimally 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?

Schema description coverage is 100%, so all parameters are already documented in the schema. The description adds no parameter-level meaning, which matches the baseline for a schema that covers every parameter.

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

Purpose5/5

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

It names the primary operations (create, update, delete) and the specific resource (lists on a board). Among the siblings, only planka_manage_labels is similarly phrased but for a different resource, so this tool is clearly differentiated.

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 phrase 'lists on a board' makes it clear when this tool applies: for list lifecycle operations. It does not explicitly name an alternative or state exclusions, but there is no sibling dedicated to lists, so the usage context is unambiguous.

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

planka_move_cardA

Move a card to a different list or position. Use this for workflow transitions (e.g., 'To Do' -> 'In Progress').

ParametersJSON Schema
NameRequiredDescriptionDefault
cardIdYesThe card ID
listIdYesTarget list ID
positionNoPosition in the list (lower = higher). Default: end of list

TDQS

A4.4/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 clearly indicates a mutation action ('Move') and hints at the effect on card state (changing list/position). It doesn't disclose possible side effects like sorting behavior or potential errors, but the main behavioral trait (moving between lists) is transparent. The example also gives a practical cue.

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 waste. The core purpose is front-loaded, and the example is a single parenthetical. It's appropriately sized for a tool with three parameters.

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 params, no output schema, no annotations), the description covers the essential context: what it does, when to use it, and the position parameter semantics. It lacks explicit mention of return behavior (e.g., returns updated card or success message), but for a move action, that may not be critical. The sibling list provides navigation context.

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 the schema already describes all three parameters. The description adds the workflow context and clarifies that position is optional (default end). However, it doesn't add detail beyond the schema's own descriptions, but since the schema is complete, the baseline is 3, and the description's example slightly elevates 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 ('Move a card to a different list or position') with specific verbs and resources, and immediately distinguishes it from sibling tools like planka_update_card (which updates card fields) and planka_create_card. The example workflow ('To Do' -> 'In Progress') makes the purpose concrete.

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 states when to use this tool: for workflow transitions. It doesn't explicitly mention alternatives or exclusions, but the sibling list makes the context clear. Since it's a specific move action, the usage context is fairly self-evident, but it could have noted that this is distinct from updating card fields (planka_update_card).

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

planka_set_card_labelsA

Add or remove labels from a card. Pass label IDs from the board (planka_get_board lists them), not label names. Reports what actually landed on the card, verified by re-reading it.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardIdYesThe card ID
labelIdsNoAlias of addLabelIds. Label IDs to add.
addLabelIdsNoLabel IDs to add. Alias: `labelIds` (both are accepted and merged).
removeLabelIdsNoLabel IDs to remove

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full behavioral burden. It discloses a notable behavior: 'Reports what actually landed on the card, verified by re-reading it,' revealing a post-operation verification step. Yet it does not mention whether the change is idempotent, how errors on invalid label IDs are handled, or whether it merges or replaces the label set—though the schema's add/remove semantics imply merging. Thus it is partially transparent but incomplete.

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 and well-structured: two short sentences that front-load the core action, then provide a key input caveat, and finally disclose the verification behavior. Every sentence earns its place, with no filler or repetition of schema details.

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 4 parameters (one required), no output schema, and no annotations, the description covers the essential aspects: purpose, input source for IDs, and post-action verification. It omits edge cases like error handling or behavior when no labels are specified, and it does not explicitly state the return value, but the verification note implies a response. Given the tool's moderate complexity, this is reasonably 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%, so all parameters are documented. The description adds valuable semantic guidance beyond the schema by directing the agent to use label IDs from planka_get_board rather than names, and by implicitly clarifying the behavior of addLabelIds vs removeLabelIds through the description's 'add or remove' phrasing. This compensates for any potential ambiguity about the alias relationship, which is already in 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 opens with a clear verb and resource ('Add or remove labels from a card') and adds crucial specificity by instructing to pass label IDs from the board rather than names, referencing planka_get_board. This differentiates it from sibling tools like planka_manage_labels, which likely handles label definitions, by focusing on card-level assignment.

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 an explicit operational guideline: 'Pass label IDs from the board (planka_get_board lists them), not label names.' This tells the agent exactly what input to fetch and how to structure the call. However, it does not explicitly state when to prefer this tool over alternatives such as planka_manage_labels, leaving some comparison implied rather than stated.

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

planka_update_cardB

Update a card's properties (name, description, due date, completion status).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew card title
cardIdYesThe card ID
dueDateNoNew due date (null to clear)
descriptionNoNew description (null to clear)
isCompletedNoMark card as complete/incomplete

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It implies a mutation operation (update) but doesn't state whether it's destructive, if it requires specific permissions, or if it partially updates only provided fields. The description adds a hint of safety by implying it's a targeted update, but there's no explicit disclosure of 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.

Conciseness4/5

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

The description is a single, concise sentence that front-loads the primary purpose and lists the key fields. It's efficient and easy to parse, with no redundant information.

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

Completeness3/5

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

The tool has 5 parameters, a simple schema, and no output schema, which reduces complexity. The description covers the core action and fields but doesn't explain partial update behavior or return values, which could be useful. Given the simplicity, the description is mostly complete but could be slightly richer with usage context.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description re-lists some fields (name, description, due date) but doesn't add new meaning like behavior when parameters are omitted or how null values clear fields. The schema's descriptions already cover these semantics, so the description adds minimal value beyond the baseline.

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

Purpose4/5

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

The description clearly states the tool updates a card's properties and lists specific fields (name, description, due date, completion status), distinguishing it from sibling tools like create_card or move_card. It is specific enough for an agent to understand the resource and action, though it doesn't name a sibling to differentiate from.

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

Usage Guidelines3/5

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

The description implies this tool is for modifying existing cards, which is clear from the context. However, it doesn't provide explicit guidance on when to use this versus alternatives like planka_create_card or planka_move_card, nor does it mention any prerequisites (e.g., card must exist). This is adequate but not explicit.

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

planka_update_taskB

Update a task's name or completion status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew task name
taskIdYesThe task ID
isCompletedNoMark as complete/incomplete

TDQS

B3.3/5.0
Behavior2/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 of behavioral disclosure. It indicates a mutation but does not explain side effects, whether omitted fields are preserved, permission requirements, or what the response contains.

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

Conciseness5/5

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

The description is a single sentence with no filler, and the core action and affected fields are front-loaded. It is concise and easy to parse.

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

Completeness3/5

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

For a simple 3-parameter update tool, the description plus fully documented schema is minimally viable, but it lacks usage guidance and behavioral context such as partial update behavior or return value. No output schema or annotations exist to compensate.

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%, with each parameter already described ('New task name', 'The task ID', 'Mark as complete/incomplete'). The description adds little beyond mapping 'completion status' to isCompleted, so the baseline of 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 uses a specific verb ('Update') and resource ('a task'), and names the exact fields affected ('name or completion status'). This clearly distinguishes it from sibling tools like planka_create_tasks and planka_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 Guidelines2/5

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

The description gives no guidance on when to choose this tool over alternatives such as planka_create_tasks or planka_update_card, and no exclusions or prerequisites are stated. Usage is only implied by the word 'update'.

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. 15 tool updatesv0.1.0
    • First observedplanka_add_comment
    • First observedplanka_create_card
    • First observedplanka_create_tasks
    • First observedplanka_delete_card
    • First observedplanka_delete_task
    • First observedplanka_get_board
    • First observedplanka_get_card
    • First observedplanka_get_comments
    • First observedplanka_get_structure
    • First observedplanka_manage_labels
    • First observedplanka_manage_lists
    • First observedplanka_move_card
    • First observedplanka_set_card_labels
    • First observedplanka_update_card
    • First observedplanka_update_task

TDQS

A3.7/5.0

Scored across 15 tools

Disambiguation4/5

Most tools have clearly distinct resource-action pairs, but planka_get_structure and planka_get_board overlap in what they return, and manage_lists/manage_labels bundle multiple operations while set_card_labels is narrow. Overall, the descriptions resolve most ambiguity.

Naming Consistency4/5

The planka_ prefix and snake_case verb_noun pattern are consistent and readable. The use of 'manage' for lists and labels is a slight deviation from the more specific create/update/delete verbs, but not confusing.

Tool Count5/5

15 tools is at the upper edge of the ideal range but each tool represents a distinct operation needed for board, card, task, label, and comment management. No tool feels redundant.

Completeness4/5

The toolkit covers the core lifecycle for cards, tasks, labels, and lists, plus comments and board structure reading. Missing comment update/delete and board-level CRUD are minor gaps that agents can work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Persistent, cross-session task management for Claude Code. 24 MCP tools for tasks, projects, dependencies, and docs. 7 skills for planning, standups, and handoffs. Event-sourced storage with per-project isolation.
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Planka kanban boards, including creating, updating, and organizing tasks, lists, and cards via MCP.
    15 npm
    59
    MIT