- name
- notion-agent
- description
- Notion integration for OpenClaw. Manage pages, databases, and blocks via AI agent.
- license
- MIT-0
- metadata
Notion Agent
OpenClaw skill for managing Notion workspaces via AI agents. Provides CLI commands for pages, databases, blocks, and search.
Setup
- 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"
- Set environment variable:
export NOTION_TOKEN=your_integration_token_here- 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 <command> [options]Page Operations
Create a page:
uv run {baseDir}/scripts/notion.py page create \
--parent <parent_page_id> \
--title "My New Page" \
--content "Initial paragraph content"Get a page:
uv run {baseDir}/scripts/notion.py page get <page_id>Update a page:
uv run {baseDir}/scripts/notion.py page update <page_id> \
--title "Updated Title"Delete (archive) a page:
uv run {baseDir}/scripts/notion.py page delete <page_id>List child pages:
uv run {baseDir}/scripts/notion.py page list --parent <page_id>Database Operations
Query a database:
# Simple query
uv run {baseDir}/scripts/notion.py db query <db_id>
# With filter
uv run {baseDir}/scripts/notion.py db query <db_id> --filter Name=Todo
# With sort
uv run {baseDir}/scripts/notion.py db query <db_id> --sort Priority:descAdd page to database:
uv run {baseDir}/scripts/notion.py db add <db_id> \
--props '{"Name":{"title":[{"text":{"content":"Task"}}]},"Status":{"select":{"name":"Done"}}}'List all databases:
uv run {baseDir}/scripts/notion.py db listBlock Operations
Append paragraph:
uv run {baseDir}/scripts/notion.py block append <page_id> \
--type paragraph \
--text "This is a paragraph"Append to-do:
uv run {baseDir}/scripts/notion.py block append <page_id> \
--type todo \
--text "Task to complete" \
--checkedAppend heading:
uv run {baseDir}/scripts/notion.py block append <page_id> \
--type heading1 \
--text "Section Title"Append code block:
uv run {baseDir}/scripts/notion.py block append <page_id> \
--type code \
--text "print('Hello, World!')" \
--language pythonList child blocks:
uv run {baseDir}/scripts/notion.py block children <block_id>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 page
# Search only databases
uv run {baseDir}/scripts/notion.py search "tasks" --type databaseError 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 integration
API Reference
- Base URL:
https://api.notion.com/v1 - API Version:
2022-06-28 - Authentication: Bearer token via
NOTION_TOKEN
Limitations
- Uses
requestslibrary only (no Notion SDK) - Simple filter/sort syntax (single property)
- Rich text limited to plain text content
- Database properties must be formatted as JSON
Examples for AI Agents
Create a meeting notes page:
uv run {baseDir}/scripts/notion.py page create \
--parent <workspace_root_id> \
--title "Meeting Notes - 2026-03-10" \
--content "Attendees: Team"Add task to project database:
uv run {baseDir}/scripts/notion.py db add <project_db_id> \
--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 <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