Notion Doc Reader
Read Notion page content through official Notion API endpoints. This skill is portable: copying this directory to another repository preserves the workflow, scripts, and tests.
Scope
Use this skill for:
- Reading a user-provided Notion page as markdown.
- Recursively reading direct child pages.
- Verifying that a local Notion internal integration token can read a page.
- Producing a compact page tree summary for agent context.
Do not use this skill for:
- Deleting, trashing, archiving, erasing, or moving Notion content.
- Updating Notion pages unless a separate write-oriented workflow is designed.
- Replacing official Notion API / SDK surfaces with a custom runtime client.
Requirements
NOTION_ACCESS_TOKENin the environment or in a local.env.- Optional
NOTION_VERSION; defaults to2026-03-11. - The Notion integration must have
Read content. - The target page or a parent page must be shared with the integration.
Read Workflow
- Load token from local environment or
.env. - Extract the page id from the user-provided Notion URL.
- Read page markdown with:
GET /v1/pages/{page_id}/markdown. - List page children with:
GET /v1/blocks/{page_id}/children?page_size=100. - For every direct
child_pageblock, repeat the same read flow until--max-depthor--max-pagesis reached.
Default traversal follows page hierarchy only. It does not deep-scan every
non-page nested block because large pages can contain many nested blocks and
make smoke tests slow or noisy. --max-pages defaults to 50 to avoid
accidentally crawling a very wide workspace tree.
Smoke Command
python3 .ai/skills/notion-doc-reader/scripts/notion_read_smoke.py \
--env-file /path/to/.env \
--max-depth 3 \
--max-pages 50 \
"<notion-page-url>"
Output is JSON with page ids, titles, markdown character counts, Notion
markdown truncation flags, optional truncated_at_page_limit page-limit flags,
unknown block ids, and discovered child pages. The script does not print tokens
or full page markdown.
Verification
Run the bundled unit tests:
python3 .ai/skills/notion-doc-reader/scripts/test_notion_read_smoke.py
Run live read-only smoke only when a token and user-approved Notion page links are available:
python3 .ai/skills/notion-doc-reader/scripts/notion_read_smoke.py \
--env-file /path/to/.env \
--max-depth 3 \
--max-pages 50 \
"<notion-page-url-1>" \
"<notion-page-url-2>"