notion — Claude Code skill: what it does, how to install
This skill connects an agent to Notion through the ntn CLI and API, for reading and editing pages, querying data sources, and uploading files.
npx skills add openclaw/openclaw --skill notion -a claude-codeWhat notion does
The skill uses the official ntn CLI by default. It reads pages as Markdown, creates or updates them from text or page.md, and can move them to trash. Data-source queries support filters and sorting; ntn api handles raw API calls, including search and comments. File commands upload files and list them. The skill also supports Codex, Cursor, GitHub Copilot, Gemini CLI, and OpenCode.
Install the CLI with npm install -g ntn, then sign in with ntn login; headless scripts can use NOTION_API_TOKEN. curl is the fallback when ntn is unavailable or a direct request is clearer. Workers can be created and deployed, with run logs available; use may require a Business or Enterprise plan and workspace enablement. Install this skill if your agent needs to change Notion content. Otherwise, you can skip it.
What it helps with
- Create a Notion page from
page.md - Update an existing page in Markdown
- Query a data source with a filter or sort order
- Upload a file and list uploads
- Search Notion through the API
Example prompts for the agent
- Create a Notion page from `page.md`.
- Search Notion for `roadmap` through the API.
- Query a data source where `Done` equals `true`.
How to install notion
1Skills CLI (Vercel)
npx skills add openclaw/openclaw --skill notion -a claude-code2Manually: put the files in place
~/.claude/skills/notion/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/notion/
1Skills CLI (Vercel)
npx skills add openclaw/openclaw --skill notion -a codex2Manually: put the files in place
.agents/skills/notion/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add openclaw/openclaw --skill notion -a cursor2Manually: put the files in place
.cursor/skills/notion/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install openclaw/openclaw notion2Manually: put the files in place
.github/skills/notion/SKILL.md1Skills CLI (Vercel)
npx skills add openclaw/openclaw --skill notion -a gemini-cli2Platform CLI
gemini skills install https://github.com/openclaw/openclaw --path skills/notionManually: put the files in place
.devin/skills/notion/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add openclaw/openclaw --skill notion -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set45
The whole set →Similar
Questions about notion
How do I install the notion skill in Claude Code?
Run npx skills add openclaw/openclaw --skill notion -a claude-code.
What does the notion skill do?
It lets an agent work with Notion pages and data sources, call the API, and upload files through ntn.
Does using Workers require a particular plan?
Workers may require a Business or Enterprise plan and workspace enablement.
Source text
SKILL.md · MIT
---
name: notion
description: "Notion CLI/API for pages, Markdown content, data sources, files, comments, search, Workers, and raw API calls."
homepage: https://developers.notion.com/cli/get-started/overview
metadata:
{
"openclaw":
{
"emoji": "📝",
"requires": { "anyBins": ["ntn", "curl"] },
"primaryEnv": "NOTION_API_TOKEN",
"install":
[
{
"id": "node",
"kind": "node",
"package": "ntn",
"bins": ["ntn"],
"label": "Install official Notion CLI (npm)",
},
],
},
}
---
# Notion
Prefer official `ntn` CLI. Use curl only when `ntn` is unavailable or a raw request is clearer.
## Setup
```bash
npm install -g ntn
ntn --version
ntn login
```
Script/headless auth:
```bash
export NOTION_API_TOKEN=secret_or_ntn_token
export NOTION_API_VERSION=2026-03-11
```
`ntn api` sets `Authorization` and `Notion-Version` automatically. It uses CLI login by default, or `NOTION_API_TOKEN` when set.
## Inspect
```bash
ntn doctor
ntn api ls
ntn api ls --json
ntn api v1/comments --help
ntn api v1/comments --spec -X POST
ntn api v1/comments --docs -X POST
```
## Pages
Markdown-first helpers:
```bash
ntn pages get <page-id>
ntn pages get <page-id> --json
ntn pages create --parent page:<page-id> --content '# Title\n\nBody'
ntn pages create --parent data-source:<data-source-id> < page.md
ntn pages update <page-id> --content '# Updated'
ntn pages update <page-id> < page.md
ntn pages trash <page-id> --yes
```
Notes:
- `pages get` prints Markdown with page properties as frontmatter.
- Content input: `--content`, stdin, or editor in a TTY.
- Parent refs: `page:<id>`, `database:<id>`, `data-source:<id>`.
- For properties/templates/full Pages API, use `ntn api v1/pages`.
## Data sources
```bash
ntn datasources resolve <database-id>
ntn datasources resolve <database-id> --json
ntn datasources query <data-source-id>
ntn datasources query <data-source-id> --limit 50 --json
ntn datasources query <data-source-id> --sort 'Date desc'
ntn datasources query <data-source-id> --filter '{"property":"Done","checkbox":{"equals":true}}'
```
Use `resolve` when you have a database ID. Query needs a data source ID.
## Raw API
```bash
ntn api v1/users/me
ntn api v1/search query=roadmap page_size:=10
ntn api v1/pages 'parent[data_source_id]='"$DS_ID" 'properties[Name][title][0][text][content]=New item'
ntn api "v1/pages/$PAGE_ID" -X PATCH in_trash:=true
ntn api "v1/blocks/$PAGE_ID/children" -X PATCH \
'children[0][type]=paragraph' \
'children[0][paragraph][rich_text][0][text][content]=Hello'
```
Input syntax:
- `path=value`: string body field.
- `path:=json`: typed JSON body field.
- `name==value`: query parameter.
- `Header:Value`: request header.
- `--data '<json>'` or stdin JSON for larger bodies.
- Only one body source per request.
## Files
```bash
ntn files create < image.png
ntn files create --filename photo.png --content-type image/png < /tmp/photo
ntn files create --external-url https://example.com/photo.png
ntn files get <upload-id>
ntn files list
```
## Workers
```bash
ntn workers new
ntn workers deploy
ntn workers list --json
ntn workers runs list --json
ntn workers runs logs <run-id>
```
Workers may require Business/Enterprise plan and workspace enablement.
## Curl fallback
```bash
curl -sS "https://api.notion.com/v1/users/me" \
-H "Authorization: Bearer $NOTION_API_TOKEN" \
-H "Notion-Version: 2026-03-11" \
-H "Content-Type: application/json"
```
## Version notes
- Current latest API version: `2026-03-11`.
- Use `in_trash`, not `archived`.
- Append block positioning uses `position`, not flat `after`.
- `transcription` block renamed to `meeting_notes`.
- Databases can contain multiple data sources; page parents generally use `data_source_id`.
© openclaw · MIT · openclaw/openclaw