A local stdio MCP server for Trello built with FastMCP and Python.
uv sync
cp .env.example .env
Fill .env with your Trello credentials.
uv run trello-mcpStart it from this project with:
npx @modelcontextprotocol/inspector uv --directory /absolute/path/to/trello-mcp run trello-mcpThe Inspector starts a local browser UI and prints a session token in the terminal, along with a URL that already includes the token. The easiest option is to copy and open the full URL printed by the Inspector. Or you can add the token manually if the Inspector UI is already open in Configuration > Proxy Session Token
Read-only Trello data is exposed as MCP resources. Resources are addressed by URI and can be read by MCP clients without treating the operation as a mutating action. Like a GET
trello://boards{?include_closed}trello://boards/{board_id}/lists{?include_closed}trello://lists/{list_id}/cards{?include_closed}trello://cards/{card}trello://cards/{card}/comments{?limit}
Mutating Trello operations are exposed as MCP tools. Like a POST
add_comment(card: str, text: str)create_card(list_id: str, name: str, description: str | None = None, due: str | None = None)add_member_to_card(card: str, member: str)move_card(card: str, list_id: str)update_card_description(card: str, description: str)attach_image_to_card(card: str, image_url: str, name: str | None = None)attach_local_image_to_card(card: str, file_path: str, name: str | None = None, mime_type: str | None = None)rename_list(list_id: str, new_name: str)
Add this server definition to .codex/config.toml or or ~/.claude.json:
[mcp_servers.trello]
transport = "stdio"
command = "uv"
args = ["run", "--directory", "/absolute/path/to/trello-mcp", "trello-mcp"]
[mcp_servers.trello.env]
TRELLO_API_KEY = "${TRELLO_API_KEY}"
TRELLO_API_TOKEN = "${TRELLO_API_TOKEN}"
TRELLO_UPLOAD_ROOTS = "${TRELLO_UPLOAD_ROOTS}"uv run --directory /absolute/path/to/trello-mcp trello-mcpThe tool attach_local_image_to_card can read local files from your machine and upload them to Trello.
To restrict where files can be read from, set TRELLO_UPLOAD_ROOTS:
TRELLO_UPLOAD_ROOTS=/Users/you/Pictures,/Users/you/Desktop/safe-uploadsThe current implementation uses Trello's existing API key token model. Waiting for Trello to ship the OAuth 2.0 support. See Atlassian's RFC-89: Introducing OAuth2 to Trello.