notionlisted
Install: claude install-skill AnotherSava/claude-code-common
# Notion: two APIs, one decision table
Notion is reachable two ways, and picking wrong is the usual failure. **Default to MCP.** Drop to the
internal v3 API only for an operation on the closed list below — not on the first error.
## Context
- Toolbox tooling: !`python -c "import notion_tools,pathlib;print(pathlib.Path(notion_tools.__file__).resolve().parents[3])" 2>/dev/null || echo MISSING`
- Notion token: !`T=$(python -c "import notion_tools,pathlib;print(pathlib.Path(notion_tools.__file__).resolve().parents[3])" 2>/dev/null) && ( cd "$T" && doppler secrets --only-names 2>/dev/null | grep -q NOTION_TOKEN_V2 && echo PRESENT || echo MISSING ) || echo NO-TOOLING`
If **Toolbox tooling** is `MISSING`, only the MCP half of this skill is available: the v3 client is the
`notion_tools` package from the user's `toolbox` repo, installed with `pip install -e .`. If **Notion
token** is `MISSING`, v3 cannot authenticate — see *Running a v3 call* below.
## Which surface
| Operation | Surface | Why |
|---|---|---|
| Read rows, filter, aggregate | **MCP** `notion-query-data-sources` | Real SQL. Avoids the v3 view-id trap entirely. |
| Read a page, resolve ancestry, get inline image URLs | **MCP** `notion-fetch` | Returns pre-signed S3 image URLs needing no cookie — v3 needs the proxy dance. |
| Edit page properties (under ~50 rows) | **MCP** `notion-update-page` | Safer, no transaction to hand-assemble. |
| Create a database with a simple schema | **MCP** `notion-create-database` | One