Focalboard MCP Server
The Focalboard MCP Server enables task and board management through Claude and other MCP-compatible clients, providing comprehensive Focalboard integration.
Board Management: List all boards for a team, search boards by name or keyword, and retrieve detailed board definitions including columns and property configurations.
Card/Task Operations: Create, read, update, and delete cards with full property support. Set titles, properties, and descriptions with markdown formatting. List cards with pagination support and retrieve detailed card information including all properties and content blocks.
Column Movement: Move cards between columns by updating status properties using human-readable names (e.g., "Status", "To Do") instead of cryptic IDs.
Key Features: Automatic authentication and session management, human-friendly property and column names, full markdown support in descriptions, content block management, and team-based organization across different teams.
Provides tools for managing Focalboard boards, cards, and tasks, including board search, card creation and updates, property management, and column movement through the Focalboard API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Focalboard MCP ServerCreate a card titled 'Fix login bug' in board project-board with Status 'In Progress' and Priority 'High'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Focalboard MCP Server
A Model Context Protocol (MCP) server for Focalboard, enabling task and board management through Claude and other MCP-compatible clients.
Features
Board Management: List, search, and view board details
Card Operations: Create, read, update, and delete cards/tasks
Description Support: Add and update card descriptions with full markdown support
Content Management: View and manage card content blocks (descriptions, text, etc.)
User-Friendly: Use human-readable column and property names (no need for IDs)
Auto-Authentication: Automatically handles login and session management
Column Movement: Easily move cards between columns with simple property updates
Related MCP server: trello-mcp-server
Installation
Option 1: Using Claude CLI (Recommended)
The easiest way to install is using the Claude CLI with npx:
claude mcp add --transport stdio focalboard \
--env FOCALBOARD_HOST=https://your-focalboard-instance.com \
--env FOCALBOARD_USERNAME=your-username \
--env FOCALBOARD_PASSWORD=your-password \
-- npx -y github:gmjuhasz/focalboard-mcp-serverReplace the environment variable values with your actual Focalboard credentials:
FOCALBOARD_HOST: Your Focalboard instance URL (e.g.,https://focalboard.example.com)FOCALBOARD_USERNAME: Your Focalboard username or emailFOCALBOARD_PASSWORD: Your Focalboard password
Alternatively, if you've cloned the repository locally:
cd /path/to/focalboard-mcp-server
npm install
npm run build
claude mcp add --transport stdio focalboard \
--env FOCALBOARD_HOST=https://your-focalboard-instance.com \
--env FOCALBOARD_USERNAME=your-username \
--env FOCALBOARD_PASSWORD=your-password \
-- node /absolute/path/to/focalboard-mcp-server/build/index.jsOption 2: Manual Installation
Clone or download this repository
Install dependencies:
npm installBuild the project:
npm run buildAdd to your Claude Desktop configuration file:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"focalboard": {
"command": "node",
"args": ["/absolute/path/to/focalboard-mcp-server/build/index.js"],
"env": {
"FOCALBOARD_HOST": "https://your-focalboard-instance.com",
"FOCALBOARD_USERNAME": "your-username",
"FOCALBOARD_PASSWORD": "your-password"
}
}
}
}Replace /absolute/path/to/focalboard-mcp-server with the actual path to this project.
Restart Claude Desktop
Configuration
Required Environment Variables
FOCALBOARD_HOST: The URL of your Focalboard instance (e.g.,https://focalboard.example.com)FOCALBOARD_USERNAME: Your Focalboard username or emailFOCALBOARD_PASSWORD: Your Focalboard password
Available Tools
Board Management
list_boards
List all boards for a team.
Parameters:
teamId(optional): The team ID (default: "0")
Example:
List all my boardsget_board
Get detailed information about a specific board, including columns and properties.
Parameters:
boardId(required): The board ID
Example:
Get details for board abc123search_boards
Search for boards by name or keyword.
Parameters:
teamId(optional): The team ID (default: "0")searchTerm(required): Search term
Example:
Search for boards with "project" in the nameCard/Task Operations
create_card
Create a new card (task) in a board with optional description.
Parameters:
boardId(required): The board IDtitle(required): Card titleproperties(optional): Property values as key-value pairs using property namesdescription(optional): Card description in markdown format
Example:
Create a card titled "Implement login feature" in board abc123 with Status "To Do" and Priority "High" and description "Add OAuth2 authentication with Google and GitHub providers"get_cards
List all cards in a board.
Parameters:
boardId(required): The board IDpage(optional): Page number (default: 0)perPage(optional): Results per page (default: 100)
Example:
Get all cards from board abc123get_card
Get detailed information about a specific card.
Parameters:
cardId(required): The card ID
Example:
Get details for card xyz789update_card
Update a card's properties, title, and/or description.
Parameters:
cardId(required): The card IDboardId(required): The board IDtitle(optional): New titleproperties(optional): Property values to update using property namesdescription(optional): Update or set the card description in markdown format
Example:
Update card xyz789 in board abc123, move it to "In Progress" status and add description "Currently implementing the authentication flow"Moving Cards Between Columns: To move a card to a different column, update the property that defines the columns. For example, if your board has a "Status" property with columns "To Do", "In Progress", and "Done":
Update card xyz789, set Status to "In Progress"delete_card
Delete a card permanently.
Parameters:
cardId(required): The card IDboardId(required): The board ID
Example:
Delete card xyz789 from board abc123add_card_description
Add or update the description of an existing card.
Parameters:
cardId(required): The card IDboardId(required): The board IDdescription(required): The description content in markdown format
Example:
Add description to card xyz789: "This task involves implementing user authentication with JWT tokens"get_card_content
Get all content blocks (descriptions, text blocks, etc.) for a card.
Parameters:
cardId(required): The card ID
Example:
Get the description and content of card xyz789Usage Examples
Getting Started
List your boards:
List all my Focalboard boardsGet board details to see columns:
Show me the details of board [board-id], including all columnsCreate a new task:
Create a task in board [board-id] titled "Review pull request" with Status "To Do"Move a task to another column:
Update card [card-id] in board [board-id], change Status to "Done"
Workflow Example
User: "List all my boards"
Claude: [Shows list of boards with IDs]
User: "Get details for board abc123"
Claude: [Shows board with property definitions, including Status column options]
User: "Create a card in board abc123 titled 'Fix bug in authentication' with Status 'To Do' and Priority 'High'"
Claude: [Creates card and returns the new card ID]
User: "Get all cards from board abc123"
Claude: [Shows all cards in the board]
User: "Update card xyz789, move it to 'In Progress'"
Claude: [Updates the card's Status property]Working with Descriptions
User: "Create a task in board abc123 titled 'Implement OAuth' with description 'Add Google and GitHub OAuth providers'"
Claude: [Creates card with description]
User: "Show me the description of card xyz789"
Claude: [Retrieves and displays the card's content blocks including the description]
User: "Update card xyz789 description to include implementation details"
Claude: [Updates the card's description]
User: "Add a description to card abc456 explaining the requirements"
Claude: [Adds a new description to an existing card]Markdown Support: Descriptions support full markdown formatting:
Bold and italic text
Lists (ordered and unordered)
Code blocks: `inline code` or ``` code block ```
Headers (# H1, ## H2, etc.)
Links: text
And more!
How It Works
Authentication
The server automatically handles authentication:
When first called, it logs in with your username/password
Receives a session token from Focalboard
Uses the token for all subsequent API requests
Automatically re-authenticates if the token expires
Column Name Resolution
When you update a card with property names (e.g., "Status": "In Progress"):
The server fetches the board details
Finds the property by name (case-insensitive)
Resolves the column/option name to its internal ID
Updates the card with the correct ID
This means you can use friendly names like "To Do" instead of remembering cryptic IDs like "option-abc123".
API Reference
This server uses the Focalboard API v2. For more details, see:
Troubleshooting
Authentication Errors
If you see authentication errors:
Verify your
FOCALBOARD_HOSTis correct (should includehttps://)Check your username and password are correct
Ensure your Focalboard instance is accessible
Board or Card Not Found
Use
list_boardsto get the correct board IDsUse
get_cardsto get valid card IDsBoard and card IDs are case-sensitive
Property Not Found
Use
get_boardto see all available properties and their namesProperty names are case-insensitive but must match exactly
For select/multiSelect properties, option values must match available options
Development
Project Structure
focalboard-mcp-server/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── focalboard-client.ts # Focalboard API client
│ └── types.ts # TypeScript type definitions
├── package.json
├── tsconfig.json
└── README.mdBuilding
npm run buildWatch Mode
For development with auto-rebuild:
npm run watchLicense
MIT
Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
Related Projects
Focalboard - Open source project management tool
Model Context Protocol - Protocol for AI-application integration
Available Tools
10 toolsadd_card_descriptionB
Add or set description/content to a card. Creates a new text block with markdown content.
| Name | Required | Description | Default |
|---|---|---|---|
| cardId | Yes | The ID of the card to add description to | |
| boardId | Yes | The ID of the board the card belongs to | |
| description | Yes | The description content in markdown format |
TDQS
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 mentions that the tool 'creates a new text block with markdown content,' which implies a write operation but does not specify permissions needed, whether it overwrites existing content, error handling, or other behavioral traits like rate limits or side effects. This leaves significant gaps 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Add or set description/content to a card') and adds necessary detail ('Creates a new text block with markdown content') without redundancy. It is appropriately sized with zero waste, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity as a mutation operation with no annotations and no output schema, the description is minimally adequate. It covers the basic purpose and parameter hints but lacks details on behavioral aspects, error cases, or return values. For a tool that modifies data, more context would be beneficial to ensure safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting all three required parameters (cardId, boardId, description). The description adds minimal value beyond the schema by implying the 'description' parameter uses markdown format, but this is already stated in the schema. With high schema coverage, the baseline score of 3 is appropriate as the description does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add or set description/content') and the target resource ('to a card'), specifying it creates a new text block with markdown content. However, it does not explicitly differentiate from sibling tools like 'update_card' or 'get_card_content', which might handle similar card modifications or retrievals, leaving some ambiguity in sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'update_card' (which might also modify card properties) or 'get_card_content' (which retrieves content). It lacks explicit context, prerequisites, or exclusions, offering only a basic functional statement without usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cardC
Create a new card (task) in a board. You can set the title, properties, description, and column placement.
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | The ID of the board to create the card in | |
| title | Yes | The title/name of the card | |
| properties | No | Property values for the card (e.g., {"Status": "To Do", "Priority": "High"}). Use property names, not IDs. | |
| description | No | Optional description/content for the card in markdown format |
TDQS
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 mentions the action ('Create') but doesn't disclose behavioral traits like required permissions, whether the operation is idempotent, error handling, or what happens on success (e.g., returns a card ID). This leaves significant gaps 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the main purpose and lists key settable attributes. It avoids redundancy and wastes no words, though it could be slightly more structured for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (mutation tool with 4 parameters, no annotations, no output schema), the description is incomplete. It lacks details on behavioral aspects like permissions, return values, or error conditions, which are crucial for proper tool invocation by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds minimal value by listing what can be set (title, properties, description, column placement), but doesn't provide additional semantics beyond the schema, such as format details for 'column placement' not covered in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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') and resource ('in a board'), with additional details about what can be set (title, properties, description, column placement). It distinguishes from siblings like 'add_card_description' or 'update_card' by focusing on creation, though it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'update_card' or 'add_card_description' is provided. The description implies usage for creating new cards but lacks context about prerequisites, such as needing a valid boardId, or exclusions, such as not using it for modifying existing cards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_cardB
Delete a card (task) from a board permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| cardId | Yes | The ID of the card to delete | |
| boardId | Yes | The ID of the board the card belongs to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions 'permanently' to indicate irreversibility, which is useful. However, it omits critical behavioral details like required permissions, error conditions (e.g., if the card doesn't exist), or whether deletion affects related data (e.g., attachments). This leaves significant gaps for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the key information ('Delete a card...permanently'). There is no wasted text, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description is incomplete. It lacks details on permissions, error handling, or what happens upon success (e.g., confirmation message). Given the complexity of deletion and the absence of structured data, more context is needed to ensure safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear parameter descriptions in the schema. The description adds no additional meaning beyond implying that 'cardId' and 'boardId' are needed for deletion, which is already covered. Baseline 3 is appropriate as the schema handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete'), the resource ('a card (task) from a board'), and the consequence ('permanently'). It distinguishes from siblings like 'update_card' or 'get_card' by specifying deletion rather than modification or retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'update_card' for modifications or 'get_card' for viewing. It lacks context about prerequisites, such as needing to identify the card and board first, or warnings about irreversible deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_boardC
Get detailed information about a specific board, including all its columns and property definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | The ID of the board to retrieve |
TDQS
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 states the tool retrieves detailed information, implying a read-only operation, but doesn't cover critical aspects like authentication requirements, error handling (e.g., invalid board IDs), rate limits, or response format. For a tool with no annotations, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that efficiently conveys the core functionality without redundancy. It front-loads the key action ('Get detailed information') and specifies inclusions ('columns and property definitions'), making every word count. There is no wasted text or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (retrieving detailed board data), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what 'detailed information' entails beyond columns and properties, how errors are handled, or the response structure. For a read operation with no structured output documentation, more context is needed to guide the agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'boardId' parameter clearly documented. The description adds no additional parameter semantics beyond what the schema provides (e.g., no examples of board ID formats or constraints). According to the rules, with high schema coverage (>80%), the baseline is 3 even without extra param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('board'), specifying what information is retrieved ('detailed information about a specific board, including all its columns and property definitions'). It distinguishes from siblings like 'list_boards' (which lists boards) and 'get_card' (which retrieves cards), though it doesn't explicitly mention these distinctions. The purpose is unambiguous but lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a board ID), contrast with 'list_boards' for browsing boards or 'get_cards' for board contents, or specify use cases. The agent must infer usage from context alone, which is insufficient for clear decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cardC
Get detailed information about a specific card by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| cardId | Yes | The ID of the card to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but offers minimal information. It mentions retrieving 'detailed information' but doesn't specify what that includes, whether authentication is required, potential rate limits, error conditions, or if the operation is idempotent. For a read operation with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple retrieval tool and front-loads the essential information, 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for effective tool use. It doesn't explain what 'detailed information' includes, how results are structured, or any behavioral constraints. For a tool with no structured metadata, the description should provide more context about the operation's scope and limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'cardId' clearly documented in the schema. The description adds no additional parameter semantics beyond what's already in the schema, so it meets the baseline score of 3 where the schema does the heavy lifting for parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get detailed information') and resource ('about a specific card by its ID'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'get_card_content' or 'get_cards', which also retrieve card-related information, so it doesn't achieve the highest level of sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_card_content' or 'get_cards'. It simply states what the tool does without indicating appropriate contexts, prerequisites, or exclusions, leaving the agent to infer usage patterns from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_card_contentC
Get all content blocks (descriptions) for a card.
| Name | Required | Description | Default |
|---|---|---|---|
| cardId | Yes | The ID of the card to get content for |
TDQS
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 states the tool retrieves content blocks but does not mention whether this is a read-only operation, potential rate limits, authentication needs, or what the output format might be (e.g., list of descriptions). This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is incomplete. It does not explain what 'content blocks' entail, the return format, or any behavioral traits like safety or performance. This lack of context makes it inadequate for an agent to fully understand how to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with 'cardId' clearly documented. The description does not add any additional meaning beyond the schema, such as format examples or constraints. Given the high schema coverage, a baseline score of 3 is appropriate as the schema handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('all content blocks (descriptions) for a card'), making the purpose understandable. However, it does not explicitly differentiate from sibling tools like 'get_card' or 'get_cards', which might also retrieve card-related information, so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'get_card' or 'add_card_description'. It lacks context about prerequisites, exclusions, or specific use cases, leaving the agent without clear direction on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cardsA
List all cards (tasks) in a board with pagination support.
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | The ID of the board to list cards from | |
| page | No | Page number for pagination (default: 0) | |
| perPage | No | Number of cards per page (default: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'pagination support', which is a useful behavioral trait beyond basic listing. However, it does not cover other aspects like rate limits, authentication needs, error handling, or whether it's read-only (implied but not stated), leaving gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('List all cards') and includes key context ('in a board with pagination support'). There is no wasted text, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and pagination behavior but lacks details on output format, error cases, or integration with sibling tools, which could help an agent use it more effectively in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all parameters ('boardId', 'page', 'perPage') with descriptions and defaults. The description adds no additional parameter semantics beyond what the schema provides, such as format details or constraints, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('cards (tasks) in a board'), making the purpose specific and understandable. However, it does not explicitly differentiate from sibling tools like 'get_card' (singular) or 'search_boards', leaving room for ambiguity in tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning 'board' context and pagination, suggesting it's for retrieving multiple cards from a specific board. However, it lacks explicit guidance on when to use this versus alternatives like 'get_card' (for a single card) or 'search_boards' (for board-level queries), leaving usage somewhat inferred rather than clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_boardsB
List all boards for a team. Returns an array of boards with their IDs, titles, and properties.
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | No | The team ID to list boards for (default: "0" for default team) | 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the return format ('array of boards with their IDs, titles, and properties') which is helpful, but lacks critical details: no mention of pagination, rate limits, authentication requirements, error conditions, or whether this is a read-only operation. For a list operation with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and includes output details. Every word contributes value, with no redundancy or fluff. It could potentially be more structured with separate usage guidance, but for its length, it's highly concise and well-formed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no nested objects) and 100% schema coverage, the description is minimally adequate. However, with no annotations and no output schema, it should ideally provide more behavioral context (e.g., read-only nature, pagination). The description covers purpose and output format but leaves operational details unspecified, making it incomplete for fully informed use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'teamId' fully documented in the schema (including default value). The description adds no parameter-specific information beyond what the schema provides. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't enhance parameter understanding but doesn't need to compensate for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 resource ('for a team'), with specific output details ('array of boards with their IDs, titles, and properties'). It distinguishes from siblings like 'get_board' (singular) and 'search_boards' (filtered search), but doesn't explicitly contrast them. Purpose is unambiguous but sibling differentiation is implicit 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('for a team') and suggests this is for retrieving all boards, but provides no explicit guidance on when to use this versus alternatives like 'search_boards' or 'get_board'. No prerequisites, exclusions, or comparative advice are mentioned. Usage is contextually implied but not clearly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_boardsC
Search for boards by name or keyword within a team.
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | No | The team ID to search within (default: "0" for default team) | 0 |
| searchTerm | Yes | The search term to find boards |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the search functionality but doesn't cover aspects like pagination, rate limits, authentication needs, or what happens if no boards match. This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and appropriately sized for a simple search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain return values, error conditions, or behavioral traits like search constraints. For a search tool with no structured context, more detail is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting both parameters. The description adds no additional parameter semantics beyond what the schema provides, such as search syntax or examples. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Search for boards by name or keyword within a team', specifying the verb (search), resource (boards), and scope (within a team). However, it doesn't explicitly differentiate from sibling tools like 'list_boards', which might serve a similar purpose without search functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'list_boards' or specify scenarios where searching is preferred over listing, leaving the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_cardC
Update a card's properties, including moving it to different columns. Accepts human-readable property and column names.
| Name | Required | Description | Default |
|---|---|---|---|
| cardId | Yes | The ID of the card to update | |
| boardId | Yes | The ID of the board the card belongs to | |
| title | No | New title for the card (optional) | |
| properties | No | Property values to update (e.g., {"Status": "In Progress", "Priority": "High"}). Use property names, not IDs. | |
| description | No | Update or set the description/content for the card in markdown format (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it mentions updating properties and moving columns, it doesn't address important behavioral aspects like whether this requires specific permissions, if changes are reversible, what happens to unspecified properties, or potential rate limits. The description is insufficient for a mutation tool 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with just two sentences. The first sentence states the core functionality, and the second adds important implementation detail about human-readable names. No wasted words, though it could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 5 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens on success/failure, what values are returned, error conditions, or behavioral constraints. The agent lacks crucial information to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all 5 parameters thoroughly. The description adds minimal value beyond the schema by mentioning 'human-readable property and column names' and 'including moving it to different columns', but doesn't provide additional syntax, format details, or constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Update') and resource ('a card's properties'), and specifies that it includes moving cards between columns. However, it doesn't explicitly differentiate from sibling tools like 'create_card' or 'delete_card' beyond the update action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'create_card' or 'delete_card'. It mentions human-readable property and column names but doesn't explain when this tool is appropriate versus other card-related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool has a clearly distinct purpose with no ambiguity. For example, 'get_card' retrieves card metadata, while 'get_card_content' fetches its content blocks, and 'add_card_description' specifically modifies descriptions. The tools cover different resources (boards vs. cards) and actions (create, get, update, delete, list, search) without overlap.
All tool names follow a consistent verb_noun pattern using snake_case, such as 'create_card', 'get_board', and 'update_card'. This predictability makes it easy for agents to understand and select the right tool based on the intended action and resource.
With 10 tools, this server is well-scoped for managing boards and cards in a project management context. Each tool earns its place by covering essential operations like CRUD for cards, board listing and searching, and content management, without being overly sparse or bloated.
The tool surface provides complete CRUD and lifecycle coverage for the domain of board and card management. It includes creation, retrieval, updating, and deletion of cards, along with board listing, searching, and detailed access. No obvious gaps exist, ensuring agents can handle full workflows without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage projects, tasks, time tracking, and team collaboration through natural language.
Task & board management for AI agents + humans. Kanban, comments, digests via MCP.
Task manager your agent can fully operate: boards, tasks, sprints, roles, worklogs, day planner.
Remote MCP for Kanban AI boards—manage projects, tasks, and comments from AI tools.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables AI assistants to manage Trello boards, lists, cards, comments, checklists, labels, and members through natural language.16
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Trello boards, lists, cards, labels, checklists, members, comments, and attachments through natural language.247ISC
- AlicenseAqualityBmaintenanceMCP server for Mattermost Boards (Focalboard) that enables natural language management of teams, boards, and cards, including CRUD operations.1115MIT
- AlicenseBqualityBmaintenanceEnables MCP clients to read and manage boards, cards, comments, checklists, and image attachments on a self-hosted Focalboard instance using human-readable property names.1315MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gmjuhasz/focalboard-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server