Workflows
Use these patterns to turn a broad request into a small, reviewable sequence of Trello tool calls. They deliberately separate discovery from mutation so the MCP client can show what it found, propose the exact change, and verify Trello’s result afterward.
The examples assume that trello-mcp is already connected. Follow
Set up your MCP client first if the tools are not visible, or
Trello API key if the credentials are not configured.
The five-stage pattern
Section titled “The five-stage pattern”Apply the same sequence to every workflow:
- Discover. Resolve board, list, card, member, label, custom-field, and attachment identifiers with a narrow discovery call. If the prompt includes a Trello URL, use it only where the selected tool documents URL support; otherwise extract the supported ID or short link and verify the resource. Never guess an identifier from a display name.
- Inspect. Read the current Trello state needed to make the decision. Keep large board, card, and action responses bounded with fields, filters, dates, and limits.
- Propose. State the exact tool, target, inputs, and expected effect. Call out whether the change is reversible.
- Approve. Obtain explicit user agreement before a write, especially when
a prompt is ambiguous or the operation deletes data. An MCP client may show
its own tool-approval dialog, but that behavior belongs to the client and is
not enforced by
trello-mcp. - Verify. Read the affected resource from Trello again. Treat the mutation response as useful evidence, not as a substitute for checking the resulting board state.
Summarize a board without changing it
Section titled “Summarize a board without changing it”Example prompt:
Summarize what is active on my Product Roadmap board, grouped by list. Include due dates and assigned members, but do not change anything.
- Discover: use
list_boardswhen the prompt does not identify one board. If it includes a board URL, extract the board short link before calling a board tool; board tools do not accept a literal full URL. Present duplicate or similar board names instead of selecting one silently. - Inspect: call
board_getandboard_lists, then useboard_cardsfor a bounded board-wide view orlist_cardsfor selected lists. Addboard_actionsonly when recent activity is part of the question. Request only the fields and time range needed for the summary. - Propose: state the selected board, whether archived cards are excluded, the lists and date window covered, and any response limit that could make the summary incomplete.
- Approve: no mutation approval is required for these read-only tools, but resolve an ambiguous board or unexpectedly broad scope with the user before continuing.
- Verify: base totals and conclusions on the returned collections. Report filters, pagination, or inaccessible resources rather than presenting a partial response as a complete board inventory.
A safe minimal sequence is:
list_boards -> board_get -> board_lists -> board_cards -> summaryCreate and organize a card
Section titled “Create and organize a card”Example prompt:
Create a card called “Prepare launch notes” in the To do list, assign Maya, add the Launch label, and create a three-item review checklist.
- Discover: resolve the board with
list_boards, its destination list withboard_lists, the assignee withboard_members, and the existing label withboard_labels. If the prompt provides a board or list ID, still resolve its current name before proposing the write. - Inspect: use
list_getfor the destination and inspect member and label IDs. Search or list nearby cards if duplicate creation would be harmful. - Propose: show the exact
card_createinputs: destination list, title, description, due date, position, member IDs, and label IDs. Separately list the checklist and checklist-item calls that will follow. Creating a new board label withcard_label_create_and_addis an additional persistent change and should be proposed explicitly rather than substituted for a missing label. - Approve: ask the user to approve the destination and complete change set.
Then call
card_create, followed bycard_checklist_createand the requiredcard_checklist_item_createcalls. - Verify: read the returned card with
card_get, then usecard_list,card_members,card_labels,card_checklists, andcard_checklist_itemsas needed to confirm its placement and organization.
The core sequence is:
list_boards -> board_lists -> board_members + board_labels -> propose card_create -> card_create -> checklist calls -> card_get + relationship readsPrefer passing known member and label IDs to card_create; this creates the
card and its initial assignments in one Trello request. Use the focused member,
label, due-date, position, and checklist tools for later changes.
Move or archive completed work
Section titled “Move or archive completed work”Example prompt:
Move this card to Done and archive it after you confirm the target.
- Discover: accept a card ID, short link, or Trello card URL. Use
card_boardandboard_liststo resolve the destination list rather than assuming that every board has a unique list named Done. - Inspect: call
card_getandcard_listto capture the current title, archive state, and list. For a cross-board move, inspect the destination board and list and confirm that the configured Trello member can access both. - Propose: distinguish among
card_position_setfor reordering in the current list,card_movefor changing list or board, andcard_archivefor setting the recoverable archive state. If both move and archive are intended, show their order. - Approve: obtain agreement on the card, destination, position, and archive state before calling either mutation.
- Verify: use
card_get,card_list, and, for a cross-board move,card_boardto confirm the new location andclosedstate.
Archive with card_archive when the goal is reversible removal. card_delete
permanently deletes a Trello card and should be called only after the user has
explicitly requested deletion of the identified card. The server does not turn
“remove,” “clean up,” or “finish” into an automatic delete confirmation.
Review activity before adding a comment
Section titled “Review activity before adding a comment”Example prompt:
Review the latest activity on this card and, if the status is still blocked, post this update: “Waiting for legal review.”
- Discover: resolve the card from its ID or URL. Use
searchonly when the card itself is unknown, and confirm a unique result before continuing. - Inspect: call
card_get, thencard_actionswith a bounded limit and a suitable filter or date window. Useboard_actionsorlist_actionsonly when the decision genuinely depends on wider context. - Propose: summarize the activity that supports the recommendation and show the exact comment text. Do not infer a current status from an action history that was truncated or filtered too narrowly.
- Approve: adding a comment is a persistent, visible write. Ask for approval
of the final wording and target card before calling
card_comment_add. - Verify: use the returned comment action ID and a fresh
card_actionsread to confirm that the comment appears on the intended card.
Use card_comment_update only with the action ID of the comment to edit.
card_comment_delete removes that comment and has no server-side undo, so it
requires an explicit deletion request rather than an inferred cleanup step.
Set or clear a custom field
Section titled “Set or clear a custom field”Example prompt:
Set the Priority custom field on this card to High.
- Discover: use
card_boardto resolve the board, thenboard_custom_fieldsto find the field definition. For a dropdown/list field, callcustom_field_optionsand resolve the option ID from Trello. - Inspect: call
card_custom_field_itemsto see the value currently stored on the card. Usecustom_field_getwhen the field type or definition remains unclear. - Propose: identify the field and current value, then show the typed
card_custom_field_setvalue. Text usestext, number values are sent as strings, dates use an ISO-8601 timestamp, checkboxes usechecked, and list fields use anoptionIdreturned by Trello. - Approve: confirm the replacement value or an intentional clear. Call
card_custom_field_setto write a value orcard_custom_field_clearto remove the existing value. - Verify: call
card_custom_field_itemsagain and match the returned field ID and typed value to the proposal.
Custom field names and dropdown labels are not stable identifiers. Always use the field and option IDs returned for the card’s current board.
Attach a URL or a server-local file
Section titled “Attach a URL or a server-local file”Example prompts:
Attach https://example.com/launch-brief to this card as “Launch brief.”
Upload
review.pdffrom the server’s approved upload directory to this card.
- Discover: resolve the card and call
card_attachmentsto identify existing attachments and avoid an unintended duplicate. - Inspect: for a URL, validate the final public URL and display name. For a
local upload, confirm that the file exists on the server host inside
TRELLO_ATTACHMENT_UPLOAD_ROOT. With Docker, the path must exist inside the container through an explicit mount and the environment variable must name that container directory. - Propose: show the card, URL or server-side path, display name, MIME type
when supplied, and whether the attachment should become the card cover.
Explain that
card_attachment_add_urlstores a link whilecard_attachment_uploadreads and uploads a file from the server. - Approve: obtain approval before adding the attachment or changing the
cover. Then call
card_attachment_add_urlorcard_attachment_upload. - Verify: call
card_attachments, and optionallycard_attachment_get, to confirm the returned attachment ID, name, URL, and cover state.
An MCP client does not send arbitrary local file bytes through
card_attachment_upload. Relative paths resolve within the configured upload
root; absolute paths must still resolve inside it, and the server rejects paths
that escape through .. or symlinks. Local uploads remain disabled when the
root is unset. card_attachment_delete removes an attachment from the card and
should be reserved for an explicit request naming the attachment.