Skip to main content
Glama

Favro MCP

MCP server for interacting with Favro project management.

Installation

pip install favro-mcp

Getting Your Favro API Token

  1. Log in to Favro

  2. Click your username (top-left corner)

  3. Select My Profile

  4. Go to API Tokens

  5. Click Create new token

  6. Give it a name (e.g., "Favro MCP") and click Create

  7. 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-mcp

See 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).Source

Then 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.json

  • Project-specific: .cursor/mcp.json in 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-mcp

See Codex MCP documentation for more details.


Related MCP server: fizzy-mcp

Tools

Organizations

Tool

Description

list_organizations

List all organizations

get_current_organization

Get current organization

set_organization

Set active organization

Users

Tool

Description

list_users

List users, filter by name or email

get_user

Get a user by ID, name, or email

Collections (Folders)

Tool

Description

list_collections

List all collections (folders)

Boards

Tool

Description

list_boards

List boards

get_board

Get board with columns

get_current_board

Get current board

set_board

Set active board

Cards

Tool

Description

list_cards

List cards on board

get_card_details

Get card details

add_comment

Add a comment to card

create_card

Create a card

update_card

Update a card

move_card

Move card to column or another board, or reorder it in a column

assign_card

Assign/unassign user

tag_card

Add/remove tag

delete_card

Delete a card

list_custom_fields

List custom fields

Tags

Tool

Description

list_tags

List tags, filter by name

Columns

Tool

Description

list_columns

List columns on board

create_column

Create a column

rename_column

Rename a column

move_column

Move column position

delete_column

Delete a column

Lanes (Swimlanes)

Tool

Description

list_lanes

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

  1. Install uv:

    macOS / Linux:

    curl -LsSf https://astral.sh/uv/install.sh | sh

    Windows (PowerShell):

    powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
  2. Clone the repository:

    git clone https://github.com/truls27a/favro-mcp.git
    cd favro-mcp
  3. Install 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"
      }
    }
  }
}
  • 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 tools
add_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:

  1. First call list_collections to see available collections

  2. 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

    B3.2/5.0

    Scored across 28 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count3/5

    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.

    Completeness4/5

    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

    ActivitySlowing
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers