| name | trello |
| description | Manage Trello workspaces, boards, lists, cards, labels, checklists, members and comments directly from Claude. Supports the full task board management workflow via natural language — no need to remember the API.
ALWAYS use this skill when the user mentions Trello, or wants to: switch workspaces, create/view/update boards, create/move/archive cards, manage lists, add labels/checklists/comments, search cards. Also use when the user says "task board", "kanban", "sprint board" without explicitly mentioning Trello. Triggers: "tạo board", "thêm card", "chuyển card", "xem danh sách", "archive", "tìm card", "gán label", "checklist", "assign member", "comment on card", "due date", "board nào", "list nào".
|
| swagger | https://dac-static.atlassian.com/cloud/trello/swagger.v3.json?_v=1.957.0 |
Trello Skill
Manage Trello via natural language — Claude translates requests into API calls and returns structured results.
Setup
- Get API key: https://trello.com/app-key
- Create Token (click the "Token" link on that same page)
- Set env vars:
export TRELLO_API_KEY="your-api-key"
export TRELLO_TOKEN="your-token"
Operating Principles
Auth pattern — every request requires:
?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN
Base URL: https://api.trello.com/1
ID lookup workflow — Trello uses IDs for all operations. Always follow this order:
- Get workspace ID →
GET /members/me/organizations (if filtering by workspace)
- Get board ID →
GET /members/me/boards or GET /organizations/{orgId}/boards
- Get list ID →
GET /boards/{boardId}/lists
- Get card ID →
GET /lists/{listId}/cards or GET /boards/{boardId}/cards
After obtaining IDs, store them in shell variables for reuse within the same session.
Output handling: Pipe through jq for formatting. Use jq '.[] | {name, id}' or custom selectors.
Determining Context — Workspaces & Boards
curl -s "https://api.trello.com/1/members/me/organizations?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&fields=displayName,name,id,url" | jq '.[] | {displayName, name, id}'
curl -s "https://api.trello.com/1/organizations/{orgId}/boards?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&filter=open&fields=name,id,url,closed" | jq '.[] | {name, id}'
curl -s "https://api.trello.com/1/members/me/boards?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&fields=name,id,url,closed" | jq '.[] | select(.closed == false) | {name, id}'
curl -s "https://api.trello.com/1/boards/{boardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&lists=open&members=all&labels=all" | jq '{name, id, lists: [.lists[].name]}'
curl -s -X POST "https://api.trello.com/1/boards?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "name=Board Name" \
-d "defaultLists=false"
curl -s -X PUT "https://api.trello.com/1/boards/{boardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "name=New Name"
curl -s -X PUT "https://api.trello.com/1/boards/{boardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "closed=true"
curl -s -X DELETE "https://api.trello.com/1/boards/{boardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN"
When the user has multiple workspaces, always list workspaces first to determine the correct context.
Full workspace CRUD: see references/workspaces.md
Lists (Columns)
curl -s "https://api.trello.com/1/boards/{boardId}/lists?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&filter=open" | jq '.[] | {name, id}'
curl -s -X POST "https://api.trello.com/1/boards/{boardId}/lists?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "name=List Name" \
-d "pos=bottom"
curl -s -X PUT "https://api.trello.com/1/lists/{listId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "name=New Name"
curl -s -X PUT "https://api.trello.com/1/lists/{listId}/closed?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "value=true"
curl -s "https://api.trello.com/1/lists/{listId}/cards?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&fields=name,id,desc,due,labels" | jq
curl -s -X POST "https://api.trello.com/1/lists/{listId}/archiveAllCards?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN"
curl -s -X PUT "https://api.trello.com/1/lists/{listId}/idBoard?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "value={newBoardId}"
Cards
curl -s "https://api.trello.com/1/boards/{boardId}/cards?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&fields=name,id,idList,desc,due,labels,checklists" | jq
curl -s "https://api.trello.com/1/cards/{cardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&checklists=all&members=true&attachments=true" | jq
curl -s -X POST "https://api.trello.com/1/cards?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "idList={listId}" \
-d "name=Card Name" \
-d "desc=Detailed description" \
-d "pos=bottom"
curl -s -X PUT "https://api.trello.com/1/cards/{cardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "name=New Name" \
-d "desc=New description" \
-d "due=2025-12-31T23:59:59.000Z"
curl -s -X PUT "https://api.trello.com/1/cards/{cardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "idList={newListId}"
curl -s -X PUT "https://api.trello.com/1/cards/{cardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "idBoard={newBoardId}" \
-d "idList={newListId}"
curl -s -X PUT "https://api.trello.com/1/cards/{cardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "closed=true"
curl -s -X DELETE "https://api.trello.com/1/cards/{cardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN"
curl -s -X PUT "https://api.trello.com/1/cards/{cardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
-d "dueComplete=true"
curl -s -X PUT "https://api.trello.com/1/cards/{cardId}?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN" \
--header 'Content-Type: application/json' \
--data '{"cover": {"color": "blue", "size": "normal", "brightness": "dark"}}'
Search
curl -s "https://api.trello.com/1/search?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&query=keyword&modelTypes=cards,boards&cards_fields=name,id,idList,idBoard" | jq
curl -s "https://api.trello.com/1/search?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&query=keyword&idBoards={boardId}&modelTypes=cards" | jq '.cards[] | {name, id}'
curl -s "https://api.trello.com/1/search?key=$TRELLO_API_KEY&token=$TRELLO_TOKEN&query=@{username}&modelTypes=cards" | jq '.cards[] | {name, id}'
Limits & Notes
- Rate limit: 300 requests/10s (per API key); 100 requests/10s (per token)
- Endpoint
/1/members: limited to 100 requests/900s — avoid repeated calls
- Delete card: permanent, cannot be undone — confirm with user before deleting
- Delete board:
DELETE /boards/{id} — permanent, deletes all lists/cards inside. Prefer archive (closed=true) first, only delete when user explicitly confirms
- Delete workspace: permanent, deletes all boards inside — confirm with user first
- IDs: stable, do not change even when renaming board/list/card
- Date format: ISO 8601 — e.g.
2025-12-31T23:59:59.000Z
- Position: use
"top", "bottom", or a float number for precise ordering
References — read when needed
| File | When to read |
|---|
| workspaces.md | Create, update, delete workspace; view workspace members |
| collaboration.md | Members (assign, invite, remove from board), Comments (CRUD), Attachments (attach file/URL) |
| task-organization.md | Labels (create, assign, change color), Checklists (create, check items, delete) |
| advanced-workflows.md | Board snapshot, moveAllCards, activity log, pluginData, Power-Ups, batch request |
| api-reference.md | Quick lookup table for all endpoints |