77 lines
3.7 KiB
TOML
77 lines
3.7 KiB
TOML
# 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:<value>; 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].<state>; 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: <card url>` 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"
|