Skip to main content
Glama

focalboard-mcp

CI License: MIT

An MCP server for Focalboard, the self-hosted Trello/Notion/Asana alternative. Lets an MCP client (Claude Code, Claude Desktop, etc.) read and manage boards and cards on a self-hosted Focalboard instance.

Property values are matched by human-readable name and label (e.g. "Status": "Done"), not by Focalboard's internal property/option ids, so the model doesn't need to know your board's schema up front. Unknown property/option names get a "did you mean" suggestion instead of a bare error.

Why another Focalboard MCP server?

A few already exist. This one is built directly against Focalboard's server source (server/api/*.go, server/model/*.go, and the webapp's block components) rather than reverse-engineered from another wrapper, and goes further on feature depth: comments, checklists (with the contentOrder bookkeeping Focalboard's UI needs to actually show them), image attachments returned as real MCP image content, an instance-wide search, and a fuzzy find_cards.

Focalboard quirks this handles (found by reading the source, not guessing)

  • Cards have a dedicated, flat-properties API (/boards/{id}/cards, PATCH /cards/{id}) distinct from the generic blocks API.

  • Creating a block via the generic blocks API requires client-supplied non-zero createAt/updateAt timestamps, or the server 400s.

  • Login itself needs the X-Requested-With CSRF header, not just authenticated requests.

  • Checklist items only render in Focalboard's UI if you also append them to the card's contentOrder.

  • A card's actual body text lives in separate text content blocks, not on the card itself.

  • Image attachments come back from Focalboard's file endpoint as application/octet-stream regardless of the real file type, so get_card derives the MIME type from the filename extension instead of trusting that header.

Related MCP server: Focalboard MCP Server

Scope

Covers boards, cards, comments, checklists, and image attachments — enough for day-to-day project planning. It does not cover board/template creation, member management, or sharing/permissions; PRs welcome if you need those.

Compatibility

Targets standalone Focalboard (Personal Server / Team Edition) using its normal /api/v2 username+password login. Two deployment modes reject that login entirely (confirmed in server/api/auth.go) and won't work with this server:

  • Mattermost plugin mode — Focalboard running as a Boards plugin inside Mattermost authenticates through Mattermost instead; the standalone login endpoint is disabled.

  • Single-user mode — instances configured with a fixed FOCALBOARD_SINGLE_USER_TOKEN also reject username/ password login.

If your instance runs one of those, pnpm smoke will fail fast with a clear error instead of doing anything destructive.

Tools

Tool

Description

list_teams

List teams visible to the authenticated user

list_boards

List boards for a team (teamId optional if the instance has only one team)

get_board

Get a board's properties (columns) and their options

search_boards

Search board titles across the whole instance

list_cards

List cards on a board, with properties resolved to names/labels

find_cards

Fuzzy-search card titles on a board

get_card

Get a card by id, including properties, body content, comments, checklist items, and any attached images

create_cards

Create one or more cards on a board

update_card

Update a card's title and/or properties

delete_card

Delete a card

add_comment

Add a comment to a card

add_checklist_item

Add a checklist item to a card

set_checklist_item

Check/uncheck a checklist item

Getting Started

This isn't published to npm (yet) — you clone and build it locally, point it at your Focalboard instance, and register it with your MCP client. Requires Node.js >= 20.

1. Clone and build

git clone https://github.com/giordano137/focalboard-mcp.git
cd focalboard-mcp
pnpm install
pnpm build

This produces dist/index.js, the actual server your MCP client will run.

2. Configure credentials

cp .env.example .env

Edit .env with your instance's details:

FOCALBOARD_HOST=https://your-focalboard-instance.example
FOCALBOARD_USERNAME=your-username
FOCALBOARD_PASSWORD=your-password

.env is gitignored — it never gets committed. The server authenticates via Focalboard's session login (POST /api/v2/login) and re-authenticates automatically if the session expires; see Security for why credentials belong in this file and not on the command line.

Sanity-check the connection before registering anything (read-only, touches nothing):

pnpm smoke

3. Register with your MCP client

Claude Code, registered once, available in every session (-s user) — not tied to this repo's directory:

claude mcp add focalboard -s user -- \
  node --env-file=/absolute/path/to/focalboard-mcp/.env /absolute/path/to/focalboard-mcp/dist/index.js

New registrations need a fresh Claude Code session to be picked up — an already-running session won't see it.

Claude Desktop (or any other MCP client that reads a mcpServers JSON config): add this to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "focalboard": {
      "command": "node",
      "args": [
        "--env-file=/absolute/path/to/focalboard-mcp/.env",
        "/absolute/path/to/focalboard-mcp/dist/index.js"
      ]
    }
  }
}

Then restart the client. Either way: use --env-file pointing at your .env, not -e/--env flags with the credentials inline — those end up in plaintext in the client's own config file and shell history.

4. Use it

Once registered, there's nothing to invoke manually — just talk to your MCP client and it picks the right tools. A few examples of what that looks like:

"What boards do I have on Focalboard?"

Calls list_teams (skipped automatically if you only have one team), then list_boards.

"Show me everything that isn't Done on the Kaizen board"

Calls get_board to see the Status property's valid options, then list_cards and filters by the resolved Status value — no need to know Focalboard's internal property/option ids.

"Create a card 'Fix login bug' with Status Todo and Priority High"

Calls create_cards with properties: {"Status": "Todo", "Priority": "High"} — plain names and labels, matched case-insensitively. A typo like "Statuss" or "Todoo" comes back with a "did you mean" suggestion instead of a bare error.

"What's in the 'Redesign' card, including any screenshots?"

Calls get_card, which returns properties, body text, comments, and checklist items as JSON, plus any attached images inline as actual image content the model can see — not just a filename.

"Mark 'write tests' as done on that card and add a comment that it's ready for review"

Calls set_checklist_item and add_comment.

Development

pnpm dev         # run from source with tsx
pnpm typecheck
pnpm lint
pnpm test        # watch mode
pnpm test:run    # single run
pnpm smoke       # read-only sanity check against your real instance
pnpm backup      # export all teams/boards/cards to backups/*.json (gitignored)
pnpm write-test  # create/update/comment/checklist/delete a throwaway card on a test board, end to end

CI runs typecheck/lint/test/build on Node 20 and 22 for every push and PR (.github/workflows/ci.yml).

Contributing

Issues and PRs welcome — see Scope for what's not covered yet. Keep changes covered by tests; pnpm smoke, pnpm write-test, and pnpm backup are also useful for verifying against a real instance before opening a PR.

Security

Credentials are only ever read from environment variables (see .env.example) — never pass them as CLI flags to an MCP client, since those tend to land in the client's own config file and shell history in plaintext. There's currently no supported way to use a scoped, long-lived personal access token instead of a full username/password session login. Please report security issues via GitHub's private vulnerability reporting rather than a public issue.

License

MIT

Available Tools

13 tools
add_checklist_itemAdd checklist itemC

Add a checklist item to a card's content.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
cardIdYes
boardIdYes
checkedNo

TDQS

C2.6/5.0
Behavior2/5

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

No annotations provided, so description bears full burden. Only states action without disclosing behavioral traits such as existence checks, duplicate handling, or permission requirements.

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

Conciseness3/5

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

Single sentence, no filler. However, it is under-specified for the tool's complexity.

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

Completeness1/5

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

Given 4 parameters, no annotations, no output schema, the description is critically incomplete. Lacks info on prerequisites, behavior, and result.

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

Parameters1/5

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

Schema coverage is 0%. Description does not explain any of the 4 parameters (text, cardId, boardId, checked). No added value beyond the schema's names.

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 the action 'Add a checklist item' and target 'to a card's content'. Distinguishes from siblings like set_checklist_item (update) and add_comment.

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 on when to use this tool vs alternatives like set_checklist_item. No prerequisites or context provided.

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

add_commentAdd commentC

Add a comment to a card.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
cardIdYes
boardIdYes

TDQS

C2.3/5.0
Behavior2/5

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

No annotations exist, so the description must disclose behavioral traits. It only says 'Add a comment' with no details on side effects, permissions, idempotency, or return behavior.

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

Conciseness2/5

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

Extremely concise but under-specified. A single sentence with 6 words omits essential details, crossing from conciseness into inadequacy.

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

Completeness1/5

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

With 3 required parameters and no output schema or annotations, the description is vastly incomplete. It fails to explain the return value, prerequisites, or any behavioral details.

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

Parameters1/5

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

The input schema has 0% description coverage and the tool description adds no information about parameters. The agent has no semantics for 'boardId', 'cardId', or 'text' beyond their names.

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 verb ('Add') and resource ('comment to a card'), making the core purpose obvious. However, it does not distinguish from sibling tools like 'add_checklist_item' which also add content to a card.

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 instead of alternatives such as 'add_checklist_item'. The description gives no context for appropriate usage.

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

create_cardsCreate cardsA

Create one or more cards on a board. Property keys/values are matched by name (case-insensitive), not by internal id.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardsYes
boardIdYes

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 for behavioral transparency. It discloses that properties are matched by name case-insensitively, a key behavioral trait. However, it does not cover other important aspects like idempotency, error handling, or input validation constraints beyond what the schema implies. Adequate 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?

Two sentences with no redundancy. The first sentence states the core action, and the second adds a key behavioral nuance. Every word contributes value, making it easy for an AI agent to parse quickly.

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 lack of an output schema and annotations, the description omits return value expectations (e.g., does it return created cards or a status?) and error conditions. The tool's complexity is low, but for a creation operation, knowing the response format would improve completeness. The description adequately covers the input semantics but leaves output behavior unspecified.

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

Parameters4/5

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

The input schema has 0% description coverage at the top level (boardId and cards lack descriptions), but the tool description explains the purpose of boardId and cards ('one or more cards on a board') and adds critical detail about property matching. This compensates for the schema gaps, providing meaning beyond the bare types.

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 creates cards on a board, using a specific verb ('Create') and resource ('cards on a board'). It also adds a distinguishing detail about property matching being case-insensitive, which differentiates it from sibling tools like update_card. The purpose is unambiguous.

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

Usage Guidelines3/5

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

No explicit when-to-use or alternatives are mentioned. However, the description provides implicit usage guidance by noting that property keys are matched by name (case-insensitive) as shown by get_board. This helps the agent understand how to correctly specify properties, but does not guide selection among siblings.

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

delete_cardDelete cardA

Permanently delete a card from a board.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardIdYes
boardIdYes

TDQS

A3.7/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 burden. It does disclose the permanent nature of the deletion, which is critical behavioral information. However, it omits other important traits such as side effects (e.g., deleting attachments), permission requirements, or rate limits, leaving gaps.

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 of 8 words, front-loading the essential action and consequence. Every word is necessary, with no filler or redundancy. Ideal conciseness for a simple tool.

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 simplicity (two required IDs, no output schema, no annotations), the description adequately conveys the core operation and its permanent nature. It could mention success/failure responses or error cases, but for a deletion tool, the completeness is adequate.

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

Parameters2/5

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

With 0% schema description coverage and no parameter descriptions in the schema, the description must compensate. The tool name and description ('delete a card from a board') hint at the purpose of 'cardId' and 'boardId', but provide no additional semantic details such as format, constraints, or relationships, which is insufficient for a 2-parameter tool.

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

Purpose5/5

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

The description clearly states the verb ('delete'), the resource ('card'), and the scope ('from a board'), with the additional qualifier 'Permanently'. It effectively distinguishes this tool from its siblings like 'create_cards' or 'update_card', as deletion is a distinct operation.

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?

While the tool name and description make it obvious that this is for deleting cards, there is no explicit guidance on when to use it versus alternatives such as archiving, or prerequisites like requiring the card to exist. The usage context is implied but not fully specified.

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

find_cardsFind cardsA

Fuzzy-search card titles on a board (handles typos/partial matches), ranked by relevance.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
boardIdYes

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 full burden. It discloses key behaviors: fuzzy search, typo handling, partial matches, and relevance ranking. However, it omits details like result limits or behavior with no matches.

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 clear sentence with no redundant information. Every word 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 search tool with two required parameters and no output schema, the description covers the core functionality, behavioral traits, and parameter semantics adequately.

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

Parameters4/5

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

Schema coverage is 0%, but the description effectively contextualizes both parameters: 'query' as the search term and 'boardId' as the board context. The parameter meanings are clear from the task description.

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

Purpose5/5

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

The description explicitly states it performs fuzzy-search on card titles with typo/partial match handling and relevance ranking, clearly distinguishing from sibling tools like list_cards or search_boards.

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 usage for searching card titles with fuzzy matching but does not explicitly state when to use this tool over alternatives (e.g., list_cards) or 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.

get_boardGet boardA

Get a single board, including its card properties (columns) and their options.

ParametersJSON Schema
NameRequiredDescriptionDefault
boardIdYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses that the tool returns board with card properties and options, but does not mention error behavior (e.g., if boardId doesn't exist or permissions are insufficient). For a read-only tool, this is adequate but lacks 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?

Single sentence, no redundancy, front-loaded with the main action and key details. Every word 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 the simple nature (one param, no output schema), the description is mostly complete. It covers what the tool returns. However, it could briefly mention that the response is a board object with all fields.

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

Parameters2/5

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

Schema has one parameter 'boardId' with no description. Schema coverage is 0%, so description must compensate. The description does not explain the meaning or format of boardId, leaving the agent to infer from context. Baseline is 2 for low coverage without compensation.

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 the verb 'get' and the resource 'single board', and adds detail about what is included (card properties/columns and options). It distinguishes well from siblings like 'list_boards' (multiple boards) and 'get_card' (single card).

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 on when to use this tool versus alternatives (e.g., 'list_boards' for multiple boards, 'search_boards' for search). No mention of prerequisites or 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.

get_cardGet cardB

Get a single card by id, including its properties (human-readable), body content (text/checklist blocks in display order, with images attached as image content), comments, and checklist items.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardIdYes

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 must fully convey behavioral traits. It mentions what the response includes but fails to disclose whether the operation is read-only, potential errors, performance implications, 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.

Conciseness4/5

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

The description is a single sentence that front-loads the purpose, but listing numerous components in parentheses makes it somewhat dense. It is efficient but could be broken into clearer parts.

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 tool has only one input parameter and no output schema, the description adequately lists response contents. However, it omits details like whether the operation is read-only, error conditions, or output structure.

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

Parameters2/5

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

Schema coverage is 0%, and the description only says 'by id' without adding meaning for the 'cardId' parameter (e.g., format, source, required length). The parameter's purpose is implied but not explicitly described.

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 'Get a single card by id', specifying the verb (get), resource (card), and method (by id). It also lists included content (properties, body, comments, checklist items), distinguishing it from sibling tools like list_cards or find_cards.

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 usage for retrieving a single card with full details, but does not explicitly state when to use this tool over alternatives like list_cards or find_cards, nor does it provide exclusions or conditions.

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

list_boardsList boardsA

List all boards for a team. teamId can be omitted if the instance has only one team (the common case for self-hosted setups).

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdNoTeam id, from list_teams. Optional if there is only one team.

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 must carry the full burden of behavioral disclosure. It does not mention return format, pagination, error handling, or permissions. For a list operation, it omits important behavioral traits that an agent needs to invoke correctly.

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 purpose, no redundant words. Efficiently communicates the essential 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?

Given low complexity (one optional param, no output schema), the description covers the parameter well but fails to describe the return value or list fields. It is minimally viable but lacks completeness expected for full agent understanding.

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 the sole parameter with 100% description coverage, including a hint from list_teams. The description adds contextual guidance about the common self-hosted case, providing extra value beyond the schema alone.

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 boards') and the resource ('for a team'). It distinguishes from sibling tools like 'get_board' (singular) and 'search_boards' (search/filter), 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 Guidelines3/5

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

The description provides some usage guidance by explaining when 'teamId' can be omitted (single team case). However, it lacks explicit comparison to sibling tools like 'search_boards' and does not specify when not to use this tool, limiting actionable guidance.

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

list_cardsList cardsB

List cards on a board, with property values resolved to human-readable names/labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
boardIdYes
perPageNo

TDQS

B3.1/5.0
Behavior3/5

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

Without annotations, the description partially discloses behavior by noting property values are resolved to human-readable names/labels, which is useful. However, it does not mention pagination, ordering, or other behavioral aspects.

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 is concise and directly conveys the core functionality without unnecessary words.

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 three parameters, no output schema, and no annotations, the description is too sparse. It lacks information on pagination, filtering, and expected output, leaving significant gaps for the agent.

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

Parameters1/5

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

The description does not add meaning to any of the three parameters (boardId, page, perPage). With 0% schema coverage, the agent receives no guidance on how to use these parameters beyond the schema definition.

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 cards on a board' which specifies the verb and resource, and adds the distinguishing feature of property value resolution. It differentiates from siblings like find_cards (search) and get_card (single card).

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 on when to use this tool versus alternatives such as find_cards or list_boards. No mention of prerequisites or context.

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

list_teamsList teamsA

List the teams (workspaces) visible to the authenticated Focalboard user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations provided, and the description only states the basic function. It lacks disclosure of behavioral traits such as pagination, sorting, 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?

Single sentence, 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.

Completeness5/5

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

For a simple parameterless list tool with no output schema, the description is complete: it specifies the resource and scope. No additional details are 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?

No parameters exist, so baseline is 4. Description adds meaning by clarifying that teams are also called workspaces and are filtered by visibility.

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 (list) and resource (teams/workspaces), and specifies scope (visible to authenticated user). It distinguishes from sibling tools like list_boards and list_cards.

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 on when to use this tool vs alternatives, no exclusions, and no mention of prerequisites or context.

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

search_boardsSearch boardsC

Search board titles across the whole Focalboard instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

C2.6/5.0
Behavior2/5

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

The description lacks behavioral details such as case sensitivity, partial matching, pagination, ordering, or result format. It only states it searches board titles, but does not disclose whether it returns full board objects or just titles, or any side effects. With no annotations, the burden is fully on the description, which is insufficient.

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

Conciseness3/5

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

The description is a single, front-loaded sentence with no extraneous words. However, it is too sparse for a search tool with siblings, missing important details. It is concise but at the expense of clarity.

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 complexity (a search tool with siblings like find_cards and list_boards), no output schema, and minimal annotations, the description is incomplete. It does not specify the return format, scope limitations, or behavior, leaving significant gaps for an agent to correctly select and invoke the tool.

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

Parameters2/5

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

The input schema has one required parameter 'query' with no description (0% coverage). The description mentions 'search board titles' but does not explain the query parameter's semantics, format, or constraints beyond the schema's minLength. This provides minimal added value over the raw schema.

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

Purpose4/5

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

The description clearly states the verb 'Search' and the resource 'board titles across the whole Focalboard instance'. It implies full-text search over titles, distinguishing it from listing all boards (list_boards) or getting a specific board (get_board). However, it does not explicitly differentiate from find_cards, which searches cards.

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 versus alternatives like list_boards or find_cards. There is no mention of prerequisites, context, or exclusions, leaving the agent to infer usage from the brief description.

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

set_checklist_itemSet checklist itemC

Check or uncheck an existing checklist item.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYes
boardIdYes
checkedYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so description must carry full burden. Only states it checks/unchecks, implying a state change, but no details on side effects, idempotency, permissions, or what happens if item does not exist.

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

Conciseness3/5

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

The description is a single short sentence, which is concise but omits critical details. It could be structured to include parameter explanations while remaining brief.

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 no output schema and three undocumented parameters, the description is insufficient. It does not explain prerequisites, return values, or behavior beyond the basic action.

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

Parameters1/5

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

Schema description coverage is 0% (no parameter descriptions in schema) and the tool description does not explain what boardId, itemId, or checked represent. No added meaning beyond the schema structure.

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?

Description clearly states it checks or unchecks an existing checklist item using 'Check or uncheck an existing checklist item.' It is a specific verb+resource but does not differentiate from add_checklist_item which adds a new item; the word 'existing' hints at distinction but not explicitly.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like add_checklist_item. No context provided about prerequisites (e.g., that the item must exist) or appropriate scenarios.

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

update_cardUpdate cardA

Update a card's title and/or property values. Only provided fields are changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
cardIdYes
boardIdYes
propertiesNoProperty values keyed by property name (e.g. "Status": "Done"), as shown by get_board.

TDQS

A3.5/5.0
Behavior3/5

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

Description discloses partial update behavior ('only provided fields are changed') but lacks details on side effects, return value, or error conditions. No annotations present.

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 sentence, front-loaded with verb 'Update', no unnecessary words. Efficient and clear.

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

Completeness3/5

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

For a 4-param tool with nested objects and no output schema, the description is minimal but provides essential behavior. Lacks details on return value, error handling, and prerequisites, making it adequate but not comprehensive.

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

Parameters3/5

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

Schema coverage is only 25% (properties has description). Description adds that title and properties are the updatable fields, and explicitly states 'only provided fields are changed,' providing partial update semantics. However, it doesn't explain cardId and boardId beyond their names.

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 it updates a card's title and/or property values, and only provided fields are changed. This distinguishes it from sibling tools like create_cards and delete_card.

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 on when to use this tool vs alternatives (e.g., use for updating existing cards, not for creating or deleting). No prerequisites or context provided.

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. 13 tool updatesv0.1.0
    • First observedadd_checklist_item
    • First observedadd_comment
    • First observedcreate_cards
    • First observeddelete_card
    • First observedfind_cards
    • First observedget_board
    • First observedget_card
    • First observedlist_boards
    • First observedlist_cards
    • First observedlist_teams
    • First observedsearch_boards
    • First observedset_checklist_item
    • First observedupdate_card

TDQS

B3.2/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have distinct purposes, but 'find_cards' and 'list_cards' both retrieve cards, and 'search_boards' overlaps with 'list_boards', potentially causing confusion for an agent if descriptions aren't carefully parsed.

Naming Consistency4/5

All tools use snake_case verb_noun naming, but pluralization is inconsistent (e.g., 'create_cards' vs 'delete_card') and some compound nouns (e.g., 'add_checklist_item') break the simple pattern.

Tool Count5/5

13 tools is well-scoped for a board/card management server, covering core operations without being overwhelming or too sparse.

Completeness3/5

Covers many operations on cards and boards, but lacks board creation, update, or deletion, and missing comment/checklist item deletion, creating notable gaps in the lifecycle.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers