Favro MCP
Favro MCP is an MCP server that lets you interact with Favro project management data and workflows through tools for boards, cards, columns, users, tags, comments, collections, and organizations.
List, inspect, and select boards, including finding boards inside collections and viewing/selecting the current board.
List cards on a board and get detailed card information.
Create, update, move, and delete cards, including across boards/columns/lanes.
Add comments to cards.
Assign or remove users on cards, and look up users by ID, name, or email.
Add or remove tags on cards, and list available tags with names/colors.
Create, rename/update, move, and delete columns on boards.
List lanes (swimlanes) on a board; lanes are read-only and cannot be created, renamed, or deleted.
Upload files/attachments to cards, subject to size limits.
List collections and use them to find boards inside folders.
List custom fields in the organization, with optional name filtering.
List organizations, get/select the active organization, and list roles.
List users, filter users by name/email, and get user details.
Provides tools for interacting with Favro's project management platform, enabling management of organizations, boards, columns, and cards, including creating, updating, moving, and assigning tasks.
Click on "Deploy 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., "@Favro MCP Create a new card 'Update API docs' in the Backlog column"
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.
Favro MCP
MCP server for interacting with Favro project management.
Installation
pip install favro-mcpGetting Your Favro API Token
Log in to Favro
Click your username (top-left corner)
Select My Profile
Go to API Tokens
Click Create new token
Give it a name (e.g., "Favro MCP") and click Create
Copy the token — you won't be able to see it again!
claude mcp add --transport stdio favro \
-e FAVRO_EMAIL=your-email@example.com \
-e FAVRO_API_TOKEN=your-token \
-- favro-mcpSee Claude Code MCP documentation for more details.
Add the following to your claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude on Windows):
{
"mcpServers": {
"favro": {
"command": "/full/path/to/favro-mcp",
"env": {
"FAVRO_EMAIL": "your-email@example.com",
"FAVRO_API_TOKEN": "your-token-here"
}
}
}
}Finding the full path: Claude Desktop doesn't inherit your shell's PATH, so you need the absolute path to favro-mcp:
# macOS/Linux (with pip)
which favro-mcp
# Windows (PowerShell)
(Get-Command favro-mcp).SourceThen restart Claude Desktop.
See Claude Desktop MCP documentation for more details.
Add the following to your Cursor MCP configuration file:
Global (all projects):
~/.cursor/mcp.jsonProject-specific:
.cursor/mcp.jsonin your project root
{
"mcpServers": {
"favro": {
"command": "favro-mcp",
"env": {
"FAVRO_EMAIL": "your-email@example.com",
"FAVRO_API_TOKEN": "your-token-here"
}
}
}
}You can also open the MCP settings via Command Palette: Cmd+Shift+P (Mac) or Ctrl+Shift+P (Windows) → search "MCP" → select "View: Open MCP Settings".
After configuration, use Agent mode in Cursor's AI chat to access Favro tools.
See Cursor MCP documentation for more details.
Add the following to .vscode/mcp.json in your workspace:
{
"servers": {
"favro": {
"type": "stdio",
"command": "favro-mcp",
"env": {
"FAVRO_EMAIL": "your-email@example.com",
"FAVRO_API_TOKEN": "your-token-here"
}
}
}
}Use Agent mode in GitHub Copilot Chat to access Favro tools.
See VS Code MCP documentation for more details.
Add the following to ~/.codex/config.toml:
[mcp_servers.favro]
command = "favro-mcp"
[mcp_servers.favro.env]
FAVRO_EMAIL = "your-email@example.com"
FAVRO_API_TOKEN = "your-token-here"Or add via CLI:
codex mcp add favro \
--env FAVRO_EMAIL=your-email@example.com \
--env FAVRO_API_TOKEN=your-token \
-- favro-mcpSee Codex MCP documentation for more details.
Related MCP server: fizzy-mcp
Tools
Organizations
Tool | Description |
| List all organizations |
| Get current organization |
| Set active organization |
Users
Tool | Description |
| List users, filter by name or email |
| Get a user by ID, name, or email |
Collections (Folders)
Tool | Description |
| List all collections (folders) |
Boards
Tool | Description |
| List boards |
| Get board with columns |
| Get current board |
| Set active board |
Cards
Tool | Description |
| List cards on board |
| Get card details |
| Add a comment to card |
| Create a card |
| Update a card |
| Move card to column or another board, or reorder it in a column |
| Assign/unassign user |
| Add/remove tag |
| Delete a card |
| List custom fields |
Tags
Tool | Description |
| List tags, filter by name |
Columns
Tool | Description |
| List columns on board |
| Create a column |
| Rename a column |
| Move column position |
| Delete a column |
Lanes (Swimlanes)
Tool | Description |
| List lanes (swimlanes) on board |
Lanes themselves are read-only in the Favro API (no create/rename/delete). To
place a card in a lane, pass its ID or name as the lane argument to
create_card, update_card, or move_card (use list_lanes to discover them).
Development
This project uses uv for development.
Setup
Install uv:
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell):
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"Clone the repository:
git clone https://github.com/truls27a/favro-mcp.git cd favro-mcpInstall dependencies:
uv sync --dev
Running from Source
To run a local/modified version instead of the published package:
{
"mcpServers": {
"favro": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/favro-mcp",
"python",
"-m",
"favro_mcp"
],
"env": {
"FAVRO_EMAIL": "your-email@example.com",
"FAVRO_API_TOKEN": "your-token-here"
}
}
}
}Related
lh-etals/favro-mcp — a Go rewrite of this project with a single-binary installer, wider tool coverage, and multi-client auto-configuration.
Available Tools
28 toolsadd_commentAdd CommentC
Add a comment to a card.
Inputs: card (required), comment (required), board. Returns: object
assign_cardAssign CardC
Assign or unassign a user from a card.
Inputs: card (required), user (required), board, remove. Returns: object
create_cardCreate CardC
Create a new card.
Inputs: name (required), lane, tags, board, +3 more. Returns: object
create_columnCreate ColumnC
Create a new column on a board.
Inputs: name (required), board, position. Returns: object
delete_cardDelete CardC
Delete a card.
Inputs: card (required), board, everywhere. Returns: object
delete_columnDelete ColumnA
Delete a column from a board.
Warning: This will also delete all cards in the column!
Inputs: column (required), board. Returns: object
get_boardGet BoardB
Get details of a specific board including its columns.
Inputs: board_id (required). Returns: object
get_card_detailsGet Card DetailsC
Get detailed information about a specific card.
Inputs: card (required), board. Returns: object
get_current_boardGet Current BoardA
Get details of the currently selected board.
Returns: The board details or a message if none is selected.
Inputs: no named parameters. Returns: object
get_current_organizationGet Current OrganizationA
Get details of the currently selected organization.
Returns: The organization details or a message if none is selected.
Inputs: no named parameters. Returns: object
get_userGet UserA
Look up a user by ID, name, or email address.
Useful for resolving user IDs returned in card details (e.g. assignments, comments) to human-readable user information.
Inputs: user (required). Returns: object
list_boardsList BoardsA
List boards in the organization.
By default, lists boards at the TOP LEVEL only (not inside collections/folders).
To find boards inside a collection:
First call list_collections to see available collections
Then call list_boards with the collection name or ID
Inputs: collection. Returns: object
list_cardsList CardsC
List cards on a specific board with pagination.
Inputs: board (required), page, column, archived. Returns: object
list_collectionsList CollectionsA
List all collections (folders) in the organization.
Collections are folders that contain boards. If you're looking for a board but can't find it with list_boards, it may be inside a collection.
Use the collection name with list_boards(collection="name") to see boards inside that collection.
Returns: A list of collections with their IDs and names.
Inputs: no named parameters. Returns: object
list_columnsList ColumnsB
List all columns on a specific board.
Inputs: board (required). Returns: object
list_custom_fieldsList Custom FieldsB
List custom fields in the organization.
Inputs: name, field_type. Returns: object
list_lanesList LanesA
List the lanes (swimlanes) on a board.
Lanes are read-only in the Favro API and cannot be created, renamed, or
deleted. Use a returned lane_id as the lane_id argument to create_card or
update_card to place a card in a specific lane. A board without lanes
enabled returns an empty list.
Inputs: board. Returns: object
list_organizationsList OrganizationsA
List all organizations accessible to the authenticated user.
Returns: A list of organizations with their IDs, names, and member counts. Use set_organization tool to select one as the active organization.
Inputs: no named parameters. Returns: object
list_tagsList TagsC
List tags in the organization.
Inputs: name. Returns: object
list_usersList UsersC
List users in the current organization.
Inputs: name, email. Returns: object
move_cardMove CardA
Move a card to a different column and/or lane, optionally on another board.
Specify a column, a lane, a place in the column, or a combination. Lanes only apply to boards with lanes enabled; use list_lanes to see available lanes.
To place the card in the column's order, give at most one of position, before, or after. Without column and lane, the card is reordered within its current column. The order is shared by the whole column, across lanes.
A card can be committed to several boards at once. Favro's API treats a board change as "commit" (add to the target board, keep the original) by default, which looks like a copy; this tool uses "move" so a cross-board move actually relocates the card.
Inputs: card (required), lane, after, board, +4 more. Returns: object
move_columnMove ColumnC
Move a column to a new position.
Inputs: column (required), position (required), board. Returns: object
rename_columnRename ColumnC
Rename a column.
Inputs: name (required), column (required), board. Returns: object
set_boardSet BoardA
Select a board as the active board.
This sets the default board for card operations. The board can be specified by ID or name.
Inputs: board (required). Returns: object
set_organizationSet OrganizationB
Select an organization as the active organization.
The organization can be specified by ID or name.
Inputs: org (required). Returns: object
tag_cardTag CardC
Add or remove a tag from a card.
Inputs: tag (required), card (required), board, remove. Returns: object
update_cardUpdate CardC
Update a card's properties.
Inputs: card (required), lane, name, board, +6 more. Returns: object
upload_attachmentUpload AttachmentB
Upload a file attachment to a card.
Inputs: card (required), file_path (required), board. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Most tools target a distinct resource+action (card CRUD, column CRUD, board lookup, org selection), and paired tools like set_board/get_current_board are clearly differentiated. Minor overlap exists where update_card's broad 'update a card's properties' could blur with the more specific move_card/assign_card/tag_card, but the descriptions disambiguate well.
Every tool follows a clean snake_case verb_noun pattern (list_boards, create_card, move_column, delete_card, set_organization). The naming is highly predictable with only trivial variations like get_card_details vs. get_board.
At 28 tools this is on the heavy side, though the breadth of the Favro domain (orgs, collections, boards, columns, lanes, cards, users, tags) justifies many of them. It sits at the borderline where the surface feels large and could likely be consolidated.
Card operations (create/get/update/move/assign/tag/delete/comment/attachment) and column operations (full CRUD) are comprehensive, covering the primary workflows. However board creation/update/deletion and tag/collection management are absent, leaving some lifecycle gaps the agent must work around.
Maintenance
Related MCP Connectors
Official Todoist MCP server. Manage tasks and projects. Hosted, no API key needed.
MCP server for Product Management
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceThis is an MCP Server for Trello that enables interaction with Trello's API through natural language, allowing management of boards, cards, lists, and other Trello resources.-
- AlicenseAqualityDmaintenanceMCP server for Fizzy kanban task management with tools for boards, cards, comments, and checklists.763 npm3AGPL 3.0
- AlicenseAqualityDmaintenanceMCP server enabling AI agents to manage PLANKA kanban boards with full CRUD support for cards, tasks, labels, comments, and lists.15136 npm12MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that enables AI agents to manage tasks, boards, lists, and comments on a Kanban-style project management system through JSON-RPC methods.14 npm2AGPL 3.0