From luke-notion
Exhaustively enumerate a Notion data source beyond the hosted MCP's 100-row cap. Use when the user asks to dump, export, pull, get all, or audit; count everything in a status; or otherwise needs completeness guarantees over a Notion DB with >100 rows. Internally also called by luke-tasks for domain-wide enumeration queries.
How this skill is triggered — by the user, by Claude, or both
Slash command
/luke-notion:luke-dumpThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Exhaustive pagination of Notion data sources via the bundled `luke-notion` MCP server. Uses the Notion REST API directly with cursor-based pagination — no 100-row cap.
Exhaustive pagination of Notion data sources via the bundled luke-notion MCP server. Uses the Notion REST API directly with cursor-based pagination — no 100-row cap.
luke-tasks) needs to enumerate a domain.notion-fetch.notion-search.notion-query-database-view is fine.| DB | Data source URI |
|---|---|
| Tasks | collection://b0d00fd8-eebb-434d-84c1-a652260fbe79 |
| Meetings | collection://db2e5ca6-92b7-4e39-ab23-f4c496d2636c |
| Initiatives | collection://28a0a1b7-d639-4e34-898f-e19415823dec |
For "how many X in Y status" queries — paginate fully but return just the number.
mcp__luke-notion__dump-data-source({
data_source_id: "collection://b0d00fd8-eebb-434d-84c1-a652260fbe79",
filter: { "property": "Status", "select": { "equals": "Backlog" } },
count_only: true
})
Response: {"count": 237}.
For large enumerations — write to a file to keep the tool response small, then read + process the file.
mcp__luke-notion__dump-data-source({
data_source_id: "collection://b0d00fd8-eebb-434d-84c1-a652260fbe79",
filter: { "property": "Status", "select": { "equals": "Backlog" } },
output_path: "/tmp/luke-dump-backlog.json"
})
Response: {"count": 237, "path": "/tmp/luke-dump-backlog.json"}. Then Read the file or use Bash with jq to slice/aggregate.
For enumerations expected to return <200 rows. Returns the full array in the tool response.
mcp__luke-notion__dump-data-source({
data_source_id: "collection://28a0a1b7-d639-4e34-898f-e19415823dec"
})
Response: {"count": N, "rows": [...]}.
If pagination hits a persistent 429 or 5xx mid-dump (after one retry), the server returns partial: true in the response with whatever rows it successfully fetched. ALWAYS check for partial before reporting counts as authoritative.
{"count": 412, "partial": true, "path": "/tmp/x.json"} // got 412 of an unknown total
In that case, surface the partial state to the user:
"Got 412 rows before hitting a rate limit. Count is incomplete — re-run to get the rest."
The filter JSON is passed through verbatim to POST /v1/data_sources/{id}/query. Follow the Notion data_sources endpoint schema (may differ slightly from the legacy databases endpoint — consult https://developers.notion.com/reference/query-a-data-source when composing non-trivial filters).
Common filter patterns:
{"property": "Status", "select": {"equals": "Backlog"}}{"property": "Initiative", "relation": {"is_empty": true}}{"and": [filterA, filterB]}{"or": [filterA, filterB]}/plugin install luke-notion@luke-plugins to re-prompt, or export NOTION_TOKEN=ntn_... in shell.••• → Connections → Add luke-notion.collection:// URI. Multi-source database URLs are NOT supported in v0.2.0 — pass the data source UUID directly.When reporting results to the user after an enumeration:
partial: true, flag that the count is incomplete.Bash + jq on the output_path file rather than dumping raw rows into the conversation.Never flood the conversation with >50 raw rows. The whole point of output_path is to keep bulk data out of context.
/luke-tasks — routes enumerate-style queries into this tool automatically.Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub collin-ho/luke-plugins --plugin luke-notion