Skill Tracer
Skills › BMAD Method › bmad-agent-po › notion-ticketing.toml

notion-ticketing.toml

78 lines · skills/bmad-agent-po/config/notion-ticketing.toml at bd70c64

1# Store starter: Notion. `scripts/read_store.py` reads this file as the base layer; the project's
2# _bmad/custom/ticketing-store-config.toml names the store, fills the empty fields below, and replaces
3# any other key here, key by key.
4# It updates with the skill and holds only what is specific to this store: the rules every store shares
5# are in references/board.md. Comments and `description` are never loaded; `description` is for choosing a store.
6#
7# One tool: Notion's official MCP server. One database holds every ticket; properties carry type,
8# status, assignee, and hitl; two self-relations carry hierarchy (Parent) and blocking (Blocked by);
9# a board view grouped by Status is the kanban. `setup` creates all of it.
11description = "Notion through its MCP server: one tickets database with a board view, relations for hierarchy and blocking. For teams that plan in Notion and want tickets beside their docs."
13[tickets]
14store = "notion"
15key = "" # prefix of the database's ID property, e.g. "SHOP" gives SHOP-12; empty = page ids only
16database = "" # url or id of the tickets database; empty = `setup` creates it
17access = """
18Use the Notion MCP (notion-fetch, notion-create-pages, notion-update-page,
19notion-query-data-sources, notion-create-comment, notion-get-users) against `database`. Confirm
20from the tool schema how relation and person properties are passed; `notion-get-users` resolves a name.
21An empty `database` means `setup` has not run.
22"""
24fields = """
25risk and severity are select properties: Risk (low, medium, high) and Severity (P0-P3); `setup`
26creates them, publish and update set them. estimate is a text property Estimate, created with the rest. Empty field: property left empty.
27"""
29reference = """
30Notion renders urls as links; a Notion page url becomes a mention.
31"""
33[verbs]
34setup = """
35Connect, unless the Notion tools already answer: add the MCP server https://mcp.notion.com/mcp to
36the agent tool in use (in Claude Code, `claude mcp add --transport http notion https://mcp.notion.com/mcp`),
37then sign in over OAuth. Either way, share the database, or the page it will be created under, with
38the connection.
39When `database` is empty: ask which page to create under, then `notion-create-database` named
40Tickets with properties Title (title), Type (select, options per [tickets.types]), Status (status,
41options per [tickets.status]), Parent (relation to this database), Blocked by (relation to this
42database), Assignee (person), Covers (text), Risk (select: low, medium, high), Severity (select:
43P0, P1, P2, P3), Estimate (text), hitl (checkbox), and, when `key` is set, ID (unique id
44with that prefix). Then `notion-create-view`: a board grouped by Status. Give the user the url and
45put it in `database` in the project's store config.
46When `database` is set: `notion-fetch` it and compare its properties and options with the maps;
47add a missing option with `notion-update-data-source`, and tell the user about anything the
48schema needs a person to change.
49"""
51write = """
52tracker_id is the ID property when `key` is set, else the page id; remote is the page url.
53`notion-create-pages` into `database` creates; `notion-update-page` changes any property or the
54content — Status, Assignee, Parent, Blocked by, Covers, Risk, Severity, hitl. Status is [tickets.status].<state>. No parent: leave the Parent relation empty. An initiative
55is a page of Type initiative with no Parent. The body is the page content.
56"""
58query = """
59One page: `notion-fetch` — Title, Type, Status, Assignee, Parent, Blocked by, Covers, Risk,
60Severity, hitl, and the content; after is Blocked by. Many: `notion-query-data-sources` on `database` filtered by any
61property; `notion-search` scoped to `database` for a looser match.
62"""
64# BMad type -> this store's type (Type select options; `setup` creates them).
65[tickets.types]
66initiative = "initiative"
67epic = "epic"
68story = "story"
69spike = "spike"
70bug = "bug"
72# BMad state -> this store's status (Status property options; `setup` creates them).
73[tickets.status]
74backlog = "Backlog"
75in-progress = "In Progress"
76review = "Review"
77done = "Done"
78dropped = "Dropped"