# Store starter: Trello. `scripts/read_store.py` reads this file as the base layer; the project's # _bmad/custom/ticketing-store-config.toml names the store, fills the empty fields below, and replaces # any other key here, key by key. # It updates with the skill and holds only what is specific to this store: the rules every store shares # are in references/board.md. Comments and `description` are never loaded; `description` is for choosing a store. # # One tool: the official Trello MCP server. Trello is flat: lists carry status, labels carry type, card # urls in descriptions carry hierarchy and blocking. Using the defaults below: the board needs the lists # Backlog, In Progress, Review, Done, Initiatives, Epics and a label per type plus hitl; `setup` says how. Members, comments, attachments, and label creation # are not in the MCP yet. Weakest fit of the shipped configs; expect to tune it. description = "Trello through its MCP server: lists as status, labels as type, card links as hierarchy. For small teams that run a Trello board and want to keep it." [tickets] store = "trello" key = "" # ids are card short links (from the card url); leave empty board = "" # the board url access = """ Use the Trello MCP (trelloReadBoard, trelloReadCard, trelloWriteCard, trelloWriteChecklist, trelloSearch) against `board`. Write tools take the server's ids, not urls: resolve a url with `trelloReadCard get` first. """ fields = """ risk is a label risk:; severity a label P0-P3. The MCP cannot create labels: `setup` asks the user to add them with the type labels. estimate is an `estimate:` line in the description. Empty field: no label. """ reference = """ Attachments are not in the MCP yet; the description line is the reference. """ [verbs] setup = """ Connect, unless the Trello tools already answer: add the MCP server https://mcp.trello.com/v1 to the agent tool in use (in Claude Code, `claude mcp add --transport http trello https://mcp.trello.com/v1`), then sign in over OAuth with write permission. The MCP can create a board but not lists or labels. When `board` is empty, offer to create one; then ask the user to add the lists in [tickets.status] (Backlog, In Progress, Review, Done) plus Initiatives and Epics, and labels for every value in [tickets.types] plus hitl, risk:low, risk:medium, risk:high, and P0-P3. Check with `trelloReadBoard` before first publish and name what is still missing. """ write = """ tracker_id is the card's short link and remote its url. `trelloWriteCard create` makes a card, `update` changes description or labels, `move` changes list, `archive` is dropped. Status is the list [tickets.status].; initiative cards live in the Initiatives list, epics in Epics, both carrying a `status:` line at the top of the description. Labels carry type, hitl, risk, severity. Trello has no fields for the rest — conventions in the description: `parent: ` as its first line, an `assignee:` line (no member tools yet), after as card urls; the parent card keeps a checklist with each child's url. A standalone ticket: no parent line. The body is the description, and the `assignee:` line stays in it. """ query = """ One card: `trelloReadCard get` by url — name, list, labels, description (assignee, parent, covers, after live there), checklists; a container's children are its checklist items. Many: `trelloSearch` scoped to `board`, or `trelloReadBoard` filtered by the maps. """ # BMad type -> this store's type. [tickets.types] initiative = "initiative" epic = "epic" story = "story" spike = "spike" bug = "bug" # BMad state -> this store's status. [tickets.status] backlog = "Backlog" in-progress = "In Progress" review = "Review" done = "Done" dropped = "archived"