Notion Agent
by @chloepark85
Notion integration for OpenClaw. Manage pages, databases, and blocks via AI agent.
clawhub install notion-agentπ About This Skill
name: notion-agent description: "Notion integration for OpenClaw. Manage pages, databases, and blocks via AI agent." license: "MIT-0" metadata: { "openclaw": { "emoji": "π", "requires": { "bins": ["uv"] }, "primaryEnv": "NOTION_TOKEN", }, }
Notion Agent
OpenClaw skill for managing Notion workspaces via AI agents. Provides CLI commands for pages, databases, blocks, and search.
Setup
1. Create a Notion Integration: - Go to https://www.notion.so/my-integrations - Click "New integration" - Give it a name (e.g., "OpenClaw") - Copy the "Internal Integration Token"
2. Set environment variable:
export NOTION_TOKEN=your_integration_token_here
3. Share pages/databases with your integration: - Open the page or database in Notion - Click "..." β "Add connections" - Select your integration
Usage
All commands use the pattern:
uv run {baseDir}/scripts/notion.py [options]
Page Operations
Create a page:
uv run {baseDir}/scripts/notion.py page create \
--parent \
--title "My New Page" \
--content "Initial paragraph content"
Get a page:
uv run {baseDir}/scripts/notion.py page get
Update a page:
uv run {baseDir}/scripts/notion.py page update \
--title "Updated Title"
Delete (archive) a page:
uv run {baseDir}/scripts/notion.py page delete
List child pages:
uv run {baseDir}/scripts/notion.py page list --parent
Database Operations
Query a database:
# Simple query
uv run {baseDir}/scripts/notion.py db query With filter
uv run {baseDir}/scripts/notion.py db query --filter Name=TodoWith sort
uv run {baseDir}/scripts/notion.py db query --sort Priority:desc
Add page to database:
uv run {baseDir}/scripts/notion.py db add \
--props '{"Name":{"title":[{"text":{"content":"Task"}}]},"Status":{"select":{"name":"Done"}}}'
List all databases:
uv run {baseDir}/scripts/notion.py db list
Block Operations
Append paragraph:
uv run {baseDir}/scripts/notion.py block append \
--type paragraph \
--text "This is a paragraph"
Append to-do:
uv run {baseDir}/scripts/notion.py block append \
--type todo \
--text "Task to complete" \
--checked
Append heading:
uv run {baseDir}/scripts/notion.py block append \
--type heading1 \
--text "Section Title"
Append code block:
uv run {baseDir}/scripts/notion.py block append \
--type code \
--text "print('Hello, World!')" \
--language python
List child blocks:
uv run {baseDir}/scripts/notion.py block children
Search
Search workspace:
# Search all
uv run {baseDir}/scripts/notion.py search "project plan"Search only pages
uv run {baseDir}/scripts/notion.py search "meeting notes" --type pageSearch only databases
uv run {baseDir}/scripts/notion.py search "tasks" --type database
Error Handling
The CLI handles common errors:
NOTION_TOKEN not set β Set the environment variableInvalid NOTION_TOKEN β Check your integration tokenResource not found β Page/database doesn't exist or integration lacks accessPermission denied β Share the resource with your integrationAPI Reference
https://api.notion.com/v12022-06-28NOTION_TOKENLimitations
requests library only (no Notion SDK)Examples for AI Agents
Create a meeting notes page:
uv run {baseDir}/scripts/notion.py page create \
--parent \
--title "Meeting Notes - 2026-03-10" \
--content "Attendees: Team"
Add task to project database:
uv run {baseDir}/scripts/notion.py db add \
--props '{"Name":{"title":[{"text":{"content":"Fix bug #123"}}]},"Status":{"select":{"name":"In Progress"}},"Priority":{"select":{"name":"High"}}}'
Build a structured page:
PAGE_ID=$(uv run {baseDir}/scripts/notion.py page create --parent --title "Report" | jq -r .id)
uv run {baseDir}/scripts/notion.py block append $PAGE_ID --type heading1 --text "Executive Summary"
uv run {baseDir}/scripts/notion.py block append $PAGE_ID --type paragraph --text "Key findings..."
uv run {baseDir}/scripts/notion.py block append $PAGE_ID --type heading2 --text "Details"
uv run {baseDir}/scripts/notion.py block append $PAGE_ID --type todo --text "Review findings"
Help
uv run {baseDir}/scripts/notion.py --help
uv run {baseDir}/scripts/notion.py page --help
uv run {baseDir}/scripts/notion.py db --help
uv run {baseDir}/scripts/notion.py block --help
π‘ Examples
All commands use the pattern:
uv run {baseDir}/scripts/notion.py [options]
Page Operations
Create a page:
uv run {baseDir}/scripts/notion.py page create \
--parent \
--title "My New Page" \
--content "Initial paragraph content"
Get a page:
uv run {baseDir}/scripts/notion.py page get
Update a page:
uv run {baseDir}/scripts/notion.py page update \
--title "Updated Title"
Delete (archive) a page:
uv run {baseDir}/scripts/notion.py page delete
List child pages:
uv run {baseDir}/scripts/notion.py page list --parent
Database Operations
Query a database:
# Simple query
uv run {baseDir}/scripts/notion.py db query With filter
uv run {baseDir}/scripts/notion.py db query --filter Name=TodoWith sort
uv run {baseDir}/scripts/notion.py db query --sort Priority:desc
Add page to database:
uv run {baseDir}/scripts/notion.py db add \
--props '{"Name":{"title":[{"text":{"content":"Task"}}]},"Status":{"select":{"name":"Done"}}}'
List all databases:
uv run {baseDir}/scripts/notion.py db list
Block Operations
Append paragraph:
uv run {baseDir}/scripts/notion.py block append \
--type paragraph \
--text "This is a paragraph"
Append to-do:
uv run {baseDir}/scripts/notion.py block append \
--type todo \
--text "Task to complete" \
--checked
Append heading:
uv run {baseDir}/scripts/notion.py block append \
--type heading1 \
--text "Section Title"
Append code block:
uv run {baseDir}/scripts/notion.py block append \
--type code \
--text "print('Hello, World!')" \
--language python
List child blocks:
uv run {baseDir}/scripts/notion.py block children
Search
Search workspace:
# Search all
uv run {baseDir}/scripts/notion.py search "project plan"Search only pages
uv run {baseDir}/scripts/notion.py search "meeting notes" --type pageSearch only databases
uv run {baseDir}/scripts/notion.py search "tasks" --type database
βοΈ Configuration
1. Create a Notion Integration: - Go to https://www.notion.so/my-integrations - Click "New integration" - Give it a name (e.g., "OpenClaw") - Copy the "Internal Integration Token"
2. Set environment variable:
export NOTION_TOKEN=your_integration_token_here
3. Share pages/databases with your integration: - Open the page or database in Notion - Click "..." β "Add connections" - Select your integration