A morning board digest
Every weekday at 8:00, look at my Trello board, find the cards due today or already overdue, and write a short list to trello-today.md with each card name, the list it sits in, and its due date.
Verified MCP server: Trello
The tool list below is a live capture from the running server; an authenticated tool call is still pending credentials.
The short answer
Last verified 2026-08-03
The Trello MCP server connects an AI assistant to your Trello boards, so it can read cards, lists, checklists, comments and labels, and create, move, copy and archive them. It is a community project, published to npm as @delorenj/mcp-server-trello and developed in the open by a single maintainer, not an official Trello or Atlassian release. Its credential is a pair of strings you generate yourself, a Trello API key and a token, which go into two environment variables. Every claim below comes from one live run, not from the README. We ran it on a Mac with placeholder values in those two variables: the server started, completed the MCP handshake, and answered tools/list with all 57 tools, which is the table below, word for word. The one real tool call we made, list_boards, reached Trello and came back with a live 401, printed further down, because a placeholder is not a token, so a successful authenticated call still waits for a key and token of your own. [1][4][5]
Verification
Method
We spawned the server with npx over stdio with TRELLO_API_KEY and TRELLO_TOKEN set to obvious placeholder strings, never real credentials, completed the MCP initialize handshake, and called tools/list: it answered with all 57 tools, and the table below is that answer, word for word. It agreed to the protocol version we asked for, 2025-06-18, with no downgrade. We then made one real tool call, list_boards with no arguments, which went out to api.trello.com over HTTPS and came back with the live 401 printed below, because a placeholder is not a token. This server writes nothing to standard error at startup, so the banner below is the initialize response it sent on the wire instead. Four more runs of the same package version on the same Mac gave us the other errors quoted on this page: one started with neither variable set and crashed before the handshake, one sent get_cards_by_list_id a listId of the wrong type, one asked for two tool names the server does not publish, get_board_info and list_boardz, and one called a real tool with a board id we invented. So the tools are enumerated live and every error here is real output, while a successful authenticated call still waits for a Trello API key and token of your own.
Startup banner
{"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{"listChanged":true}},"serverInfo":{"name":"trello-server","version":"1.8.1"}},"jsonrpc":"2.0","id":1}One real tool call
tools/call list_boards {}Error: MCP error -32603: Trello API Error: 401 Request failed with status code 401
Real lines from the captured result: enough to prove the call answered.
Tools
The server answered tools/list with 57 tools on 2026-08-03. The names, descriptions and parameters below are its own words, copied from that response and never edited.
| Tool | What it does |
|---|---|
| get_cards_by_list_idboardIdlistId*fieldsnameFilterdescMaxLengthomitDescThresholdBytes | Fetch cards from a specific Trello list on a specific board. Descriptions are previewed by default to keep responses compact; set fields without "desc" to omit descriptions, or increase descMaxLength/omitDescThresholdBytes and use get_card for full details. |
| get_listsboardId | Retrieve all lists from the specified board |
| get_recent_activityboardIdlimitsincebefore | Fetch recent activity on the Trello board |
| add_card_to_listboardIdlistId*name*descriptiondueDatedueReminderstartlabels | Add a new card to a specified list on a specific board |
| update_card_detailsboardIdcardId*namedescriptiondueDatedueReminderstartdueCompletelabelspos | Update an existing card's details on a specific board |
| archive_cardboardIdcardId* | Send a card to the archive on a specific board |
| watch_cardcardId*subscribed* | Subscribe or unsubscribe from watching a card for activity notifications |
| watch_listlistId*subscribed* | Subscribe or unsubscribe from watching a list for activity notifications |
| move_cardboardIdcardId*listId*pos | Move a card to a different list, potentially on a different board |
| add_list_to_boardboardIdname* | Add a new list to the specified board |
| archive_listboardIdlistId* | Send a list to the archive on a specific board |
| update_listlistId*nameclosedsubscribedidBoard | Update a list name, archive state, subscription state, or board. Use update_list_position for moving a list within a board. |
| update_list_positionlistId*position* | Update the position of a list on the board. Trello uses fractional indexing: each list has a float position, and to place a list between two others, use the average of their positions (e.g., between pos 1024 and 2048, use 1536). Use "top"/"bottom" shortcuts to move to the edges. |
| get_my_cards | Fetch all cards assigned to the current user |
| attach_image_to_cardboardIdcardId*imageUrl*name | Attach an image to a card from a URL on a specific board |
| attach_file_to_cardboardIdcardId*fileUrl*namemimeType | Attach any file to a card from a URL on a specific board |
| attach_data_to_cardboardIdcardId*data*namemimeType | Attach binary data (image, markdown, PDF, text, etc.) to a card from base64-encoded data or a data URL. Use this for any non-image content. For image/screenshot uploads with PNG defaults, see attach_image_data_to_card. |
| attach_image_data_to_cardboardIdcardId*imageData*namemimeType | Attach an image to a card from base64 data or a data URL. Image-flavored convenience over attach_data_to_card: defaults assume PNG when mimeType/name are omitted, suitable for screenshot pasting. For non-image content, use attach_data_to_card. |
| list_boards | List all boards the user has access to |
| set_active_boardboardId* | Set the active board for future operations |
| list_workspaces | List workspaces the user has access to. If TRELLO_ALLOWED_WORKSPACES is configured, only allowed workspaces are returned. |
| create_boardname*descidOrganizationdefaultLabelsdefaultLists | Create a new Trello board optionally within a workspace |
| set_active_workspaceworkspaceId* | Set the active workspace for future operations |
| list_boards_in_workspaceworkspaceId* | List all boards in a specific workspace |
| get_active_board_info | Get information about the currently active board |
| get_cardcardId*includeMarkdown | Get detailed information about a specific Trello card |
| add_commentcardId*text* | Add the given text as a new comment to the given card |
| update_commentcommentId*text* | Update the given comment with the new text |
| delete_commentcommentId* | Delete a comment from a Trello card |
| get_card_commentscardId*limit | Retrieve all comments from a specific Trello card |
| create_checklistname*cardId* | Create a new checklist |
| get_checklist_itemsname*cardIdboardId | Get all items from a checklist by name |
| add_checklist_itemtext*checkListName*cardIdboardId | Add a new item to a checklist |
| find_checklist_items_by_descriptiondescription*cardIdboardId | Search for checklist items containing specific text in their description |
| get_acceptance_criteriacardIdboardId | Get all items from the "Acceptance Criteria" checklist |
| get_checklist_by_namename*cardIdboardId | Get a complete checklist with all its items and completion percentage |
| update_checklist_itemcardId*checkItemId*statenameposduedueReminderidMember | Update a checklist item name, state, position, due date, reminder, or assigned member |
| delete_checklist_itemcardId*checkItemId* | Delete a checklist item from a card |
| get_board_membersboardId | Get all members of a specific board |
| assign_member_to_cardcardId*memberId* | Assign a member to a specific card |
| remove_member_from_cardcardId*memberId* | Remove a member from a specific card |
| get_board_labelsboardId | Get all labels of a specific board |
| create_labelboardIdname*color | Create a new label on a board |
| update_labellabelId*namecolor | Update an existing label |
| delete_labellabelId* | Delete a label from a board |
| copy_cardsourceCardId*listId*namedescriptionkeepFromSourcepos | Copy/duplicate a Trello card to any list (even on a different board). Copies all properties by default including checklists, attachments, comments, labels, etc. |
| copy_checklistsourceChecklistId*cardId*namepos | Copy a checklist (with all its items) from one card to another. Works across different boards. |
| add_cards_to_listlistId*cards* | Add multiple cards to a list in one operation. Cards are created sequentially (Trello API does not support batch writes). Rate limiting is handled automatically. |
| get_board_custom_fieldsboardId | Get all custom field definitions on a board. Returns field IDs, names, and types. For dropdown/list fields, also returns available options with their IDs. Requires Trello Standard plan or higher. |
| update_card_custom_fieldcardId*customFieldId*type*value | Set or clear a custom field value on a card. Requires Trello Standard plan or higher. Use get_board_custom_fields first to find field IDs and types. Value format depends on type: text=any string, number=numeric string, checkbox="true"/"false", date=ISO 8601 string, list=option ID from get_board_custom_fields. To clear a field, set type to "clear" and omit value. |
| get_card_historycardId*filterlimit | Get the history/actions of a specific card |
| download_attachmentcardId*attachmentId* | Download an attachment from a card. Returns base64-encoded data that can be saved or viewed. |
| get_health | Get quick system health status for monitoring and load balancing |
| get_health_detailed | Get comprehensive system health diagnostic with all subsystem checks |
| get_health_metadata | Verify metadata consistency between boards, lists, cards, and checklists |
| get_health_performance | Get detailed performance metrics and analysis |
| perform_system_repair | Attempt to automatically repair common system issues |
Parameters marked with * are required.
Setup
Copy the block for the app you use. Each one is the configuration this server was verified with.
Open the file ~/Library/Application Support/Claude/claude_desktop_config.json (in Claude Desktop: Settings, then Developer, then Edit Config) and add:
{
"mcpServers": {
"trello": {
"command": "npx",
"args": [
"-y",
"@delorenj/mcp-server-trello"
],
"env": {
"TRELLO_API_KEY": "your-trello-api-key",
"TRELLO_TOKEN": "your-trello-token"
}
}
}
}Replace both placeholder values with the key and token you generate at trello.com/app-key, then quit and reopen Claude Desktop. The project's own example uses bunx in place of npx, and its README says bunx starts fastest but npx works identically; npx is the one we ran, and it needs the -y above so it installs without asking. [6][5]
One command in your terminal:
claude mcp add trello -e TRELLO_API_KEY=your-trello-api-key -e TRELLO_TOKEN=your-trello-token -- npx -y @delorenj/mcp-server-trello
Everything after the double dash is the exact command Claude Code will run, and each -e sets one environment variable it runs with. The README recommends the same command with bunx in place of npx; the line above is the one we verified on this Mac. [7][5]
Add to ~/.cursor/mcp.json for every project, or to .cursor/mcp.json inside one project:
{
"mcpServers": {
"trello": {
"command": "npx",
"args": [
"-y",
"@delorenj/mcp-server-trello"
],
"env": {
"TRELLO_API_KEY": "your-trello-api-key",
"TRELLO_TOKEN": "your-trello-token"
}
}
}
}Cursor picks the file up on restart. It is the same mcpServers block Claude Desktop takes, in the file shape and the two locations Cursor documents itself, and it carries the same two variables every other client needs. [8][5]
No JSON file and no terminal. In Routines: Settings, then Assistant, then Connections, then Add MCP Server. Switch the form to Command (stdio) and enter:
Name Trello Command npx Arguments -y @delorenj/mcp-server-trello Environment Variables TRELLO_API_KEY your-trello-api-key TRELLO_TOKEN your-trello-token
The Arguments field splits on spaces, so keep it to exactly those three words. Both secrets go in Environment Variables, one row each, never in Arguments. Click Test Connection first: a working server answers with its tool count, fifty-seven for this one. A green test means the server started, not that Trello accepted your token, so ask the assistant a small read-only question next, such as listing your boards. [9][5]
No terminal needed
If you have never opened Terminal and never want to, this is your path. Routines is a Mac app that runs MCP servers for you: fill in four fields once, and this server's tools are available to your AI in chat and in scheduled routines.
01
Download the app from getroutines.ai/download, drag it to Applications, and sign in.
02
The project points you at trello.com/app-key. Signed in to Trello, that page shows your API key, and a link on it generates a token for that key once you approve the access Trello asks about. Copy both strings. Together they act as your Trello account, so treat them like a password.
03
Click your account at the bottom of the sidebar and choose Settings. Open the Assistant section, then the Connections tab, scroll to MCP Servers, and click Add MCP Server.
04
Switch the form to Command (stdio): this server is a command your Mac runs, not a web address. Name it Trello. Command: npx. Arguments: -y @delorenj/mcp-server-trello, exactly as written, with one space between each part.
05
In the Environment Variables field add two rows: TRELLO_API_KEY with your key, and TRELLO_TOKEN with your token, each value copied in full with no spaces around it. Click Test Connection: Routines starts the server and reports how many tools it found, fifty-seven for this one. Then click Add Server.
06
The tools work in chat right away, and asking for your board list is the quickest way to confirm Trello accepted the token. To let a scheduled routine use them, open the routine, find the Tools & connections card, and tick the server under Apps.
Routine ideas
Once the server is connected, a scheduled routine can use its tools while you are away. Copy a prompt, paste it into Routines, and pick a time.
Every weekday at 8:00, look at my Trello board, find the cards due today or already overdue, and write a short list to trello-today.md with each card name, the list it sits in, and its due date.
Every Friday at 16:00, read the cards in my In Progress list on Trello, check when each one last changed, and write the ones that have not moved in over a week to stuck-cards.md with a note on what they are waiting for.
Every Monday at 9:00, read every card in my Inbox list on Trello and write me one line per card: what it is, and what it is missing, such as a due date, a checklist or an assigned member.
Troubleshooting
Real errors captured during the verification run, printed exactly as the server returned them.
What you see
Error: MCP error -32603: Trello API Error: 401 Request failed with status code 401
The fix
Trello rejected the key and token. This is the exact reply our own sample call received, because we started the server with placeholder values on purpose. Check that TRELLO_API_KEY holds the key from trello.com/app-key and TRELLO_TOKEN the token generated from it, that you copied both in full with no trailing space, and that you restarted the client after changing them: the values are read when the server starts, not when the tool runs. A token you revoked in Trello returns the same 401. Worth knowing: a separate run that asked get_lists for the lists of a board id we invented came back with this same 401 rather than a not-found error, so while the credential is being rejected you never find out whether what you asked for exists.
What you see
Error: TRELLO_API_KEY and TRELLO_TOKEN environment variables are required
The fix
Both variables are mandatory, and with either one missing the server throws before it can answer anything: Node prints this line inside a short stack trace, the process exits having written nothing to stdout, and your client reports the connection as failed rather than a tool that would not run. Add both in the env block of your JSON config, after -e on the Claude Code command, or as two rows in the Environment Variables field in Routines, then start the client again.
What you see
MCP error -32602: Input validation error: Invalid arguments for tool get_cards_by_list_id: [
{
"expected": "string",
"code": "invalid_type",
"path": [
"listId"
],
"message": "Invalid input: expected string, received number"
}
]The fix
Good news dressed as bad news. This server checks every argument against its own schema before it calls Trello, and names the field and the type it wanted, so a malformed request costs you a fast local error instead of a confusing reply from the API. We triggered this on purpose by sending listId as a number when the tool wants the id as a string. Trello ids are strings of letters and digits, so in a real client just name the list you mean and let the assistant fill the id in. Most tools also take an optional boardId, which falls back to the board you picked with set_active_board.
What you see
MCP error -32602: Tool get_board_info not found
The fix
The name in the request is not one of the 57 the server publishes, so nothing runs. We asked for two missing names on purpose in the same run: a plausible-looking guess, get_board_info, where the real tool is called get_active_board_info, and a plain typo, list_boardz, which came back with the same line carrying that name instead. Assistants occasionally guess a tool name from memory instead of the list they were given. Point at the table above, name the real tool, and the call goes through; if it keeps happening, restart the client so it re-reads the tool list.
FAQ
It is a community-built Model Context Protocol server for Trello, published to npm as @delorenj/mcp-server-trello and developed in the open on GitHub by the maintainer delorenj. Once connected, an assistant such as Claude can work inside your Trello account: reading boards, lists and cards, creating and moving cards, ticking off checklist items, leaving comments and attaching files. It runs as a local process on your Mac, started by npx, and talks to your AI app over stdio. It is not published by Trello or Atlassian. [1][4][5]
The running server exposes 57 tools, and the table above is that live tools/list output, word for word. They fall into groups: eleven for cards (get_card, get_cards_by_list_id, get_my_cards, add_card_to_list, add_cards_to_list, update_card_details, move_card, copy_card, archive_card, watch_card, get_card_history), nine for checklists, seven for boards and workspaces, six for lists, five for attachments, four for comments, four for labels, three for members, two for custom fields, one for board activity, and five health and repair tools the server uses to report on itself.
Be clear-eyed about scope. A Trello token is account-wide: it covers every board you can see, not the one you had in mind, and the tool list includes archive_card, archive_list, delete_comment, delete_label and delete_checklist_item. The one narrowing the server offers is TRELLO_ALLOWED_WORKSPACES, an optional variable holding a comma-separated list of workspace ids the tools are allowed to touch, which is worth setting if your account spans work and personal boards. Beyond that, the sensible habits are the usual ones: keep the key and token where your client stores them privately, ask the assistant to tell you what it plans to change before it changes it, and revoke the token in Trello when you stop using the connection. [5]
No. In Routines you fill four fields in Settings and click Test Connection; the walkthrough above shows every click, including where the key and token go. Claude Desktop and Cursor need a small JSON file edited once. Only Claude Code is terminal-first by nature. [9][6]
It needs two values, both free to generate: an API key from trello.com/app-key and a token created from that same page, which you paste into TRELLO_API_KEY and TRELLO_TOKEN. Nothing is installed inside Trello itself; this is a plain API client, not a Power-Up. A free Trello account is enough for the bulk of the tools, with one exception the server states in its own tool descriptions: get_board_custom_fields and update_card_custom_field require a Trello Standard plan or higher. [5]
Searching npm for Trello MCP servers turns up dozens of them, and the downloads make the choice for you: @delorenj/mcp-server-trello was pulled 5,763 times in the week ending 2026-08-02, while the next-closest package we checked, atlassian-trello-mcp, managed 85 in the same window. Its repository is active rather than parked, with 427 stars and a push dated the day the version we ran was published. That is the one this page verified, and the configs above name it in full, scope included, because a name typed without the @delorenj/ prefix installs something else entirely. [2][3][4][1]
Any MCP client that can launch a local stdio server: Claude Desktop, Claude Code, Cursor and Routines all can, and the exact config for each is above. The server itself is identical in every client; only the place you paste the config differs. It is a command your Mac runs rather than a web address, which is how we ran it, so a client that only accepts a hosted URL cannot use it. [6][7][8][9]
Sources
Anything on this page we did not observe in the run is linked here, with the date we read it. The run itself is the receipt for the rest.
[1]
Latest version 1.8.1, published 2026-07-25; license MIT; repository git+https://github.com/delorenj/mcp-server-trello.git; the published bin entry points at the compiled build/index.js.
[2]
5,763 downloads for the week 2026-07-27 to 2026-08-02.
[3]
85 downloads for the same week, the closest rival we measured among the other Trello MCP packages on npm.
[4]
427 stars, 21 open issues, MIT licensed, not archived, created 2025-01-03 and pushed 2026-07-25 at access time, per the GitHub API. It is owned by the individual account delorenj, not by an organisation.
[5]
Source for the client config JSON, the note that bunx starts fastest but npx works identically, the required TRELLO_API_KEY and TRELLO_TOKEN variables, the optional TRELLO_BOARD_ID, TRELLO_WORKSPACE_ID and TRELLO_ALLOWED_WORKSPACES ones, the claim of 57 tools that our run matched exactly, and the trello.com/app-key credential step.
[6]
The claude_desktop_config.json shape and where the file lives.
[7]
The claude mcp add syntax for local stdio servers, including environment variables.
[8]
[9]
How Routines runs one-click OAuth connectors and any MCP server.
This page describes Trello as it behaved in one dated run on one Mac. Versions move: if something here no longer matches what you see, the capture date at the top says how old the reading is.
Behind this directory
Routines, the app behind this directory, runs MCP servers like this one without a terminal: see how connectors work. Your notes stay markdown files on your Mac, there is no cloud bill, and it works offline. Download Routines