Token导航 LogoToken导航TokenDH.com
研究检索敏感数据clawhub未标认证来源可访问clear审计提醒

notion-proNotion 专业版

Agent Skill

用于处理 Notion 页面、数据库、工作区内容和结构化记录。它适合让 Agent 查询知识库、整理页面内容、创建记录或把外部信息同步到 Notion。使用时需要确认集成是否已被授权到目标页面或数据库,并区分读取、追加和覆盖更新;涉及批量写入或修改数据库属性时,应先核对字段名称、属性类型和目标页面。

总安装

3,795

周安装

163

GitHub Stars

公开资料未说明

下载量

1,330
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:notion-pro(Notion 专业版)
来源仓库:https://github.com/baixiaodev/notion-pro
安装命令:
openclaw skills install notion-pro
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install notion-pro

简介

完整的 Notion API 集成,支持自动分页、递归块和速率限制重试。

  • 适合高效处理大规模页面和数据库操作。
  • 通过 Python CLI 实现代理操作策略优化。
  • 安装命令:openclaw skills install notion-pro。
  • 需配置环境变量和认证信息。notion-pro 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

name: notion-pro description: Complete Notion API skill with Python CLI tool — auto-pagination, recursive blocks, 429 retry, and agent operation strategies. version: 1.0.1 homepage: https://github.com/baixiaodev/notion-pro-skill metadata: {"clawdbot":{"emoji":"📝"}} env: - NOTION_API_KEY: Notion integration API key (or configure in openclaw.json → skills.entries.notion-pro.apiKey)


Notion Pro — Complete Notion API Skill for OpenClaw

A production-grade Notion API skill with a built-in Python CLI tool. Unlike basic Notion skills that only provide command syntax, this skill includes agent operation strategies, automatic pagination, recursive block fetching, 429 rate-limit retry, and comprehensive API reference — everything an AI agent needs to operate Notion effectively.

What Makes This Different

CapabilityThis SkillBasic Skills
Agent operation strategy (5-step workflow)
Recursive block fetching (--recursive, 5 levels)
Auto-pagination (--all)
429 rate-limit auto-retry (Retry-After)
Positional insert (--after)
API limits quick reference✅ CompletePartial
4 operation pattern SOPs
Zero dependencies (stdlib only)✅ Python 3Node.js / curl

Setup

  1. Create a Notion Integration and copy the API key
  2. Configure the key via one of:

- Environment variable: export NOTION_API_KEY="ntn_xxxxx" - OpenClaw config: openclaw.jsonskills.entries.notion-pro.apiKey

  1. Share target pages/databases with your integration (click "..." → "Connect to" → your integration name)
  2. If a page/database isn't found via search, it likely hasn't been shared with the integration yet

Tool: notion_api.py

All Notion operations must go through this script — do not use curl directly.

Script path: scripts/notion_api.py (relative to this skill's directory)

# The script auto-detects its own location. Usage:
python3 <SKILL_DIR>/scripts/notion_api.py <command> [options]

Agent Operation Strategy (Must Read)

Task Planning Workflow

Follow this sequence for any Notion task:

  1. Discover — Use search to find the target page/database ID
  2. Inspect — Use get-page or get-blocks to understand current structure
  3. Plan — Determine the operation sequence (create/update/append/delete)
  4. Execute — Execute in batches, ≤50 blocks per batch (safety margin)
  5. Verify — After critical operations, use get-blocks to verify results

Read Strategy

  • Search before read: Never guess IDs — use search to find the exact page/database
  • Recursively read nested content: get-blocks only returns direct children. If a block has has_children: true, you must call get-blocks again with that block's ID to get nested content. Or use --recursive for automatic traversal.
  • Handle pagination: If response contains has_more: true, make multiple calls. Use --all for automatic pagination.

Write Strategy

  • Split long text: A single rich_text element's text.content is limited to 2000 characters. Split longer content into multiple paragraph blocks.
  • Batch writes: One append-blocks call supports up to 100 block elements. Split into multiple calls if needed.
  • Replace = Delete + Append: Notion API has no "replace block content" endpoint. To replace content: delete-block old blocks, then append-blocks new content at the correct position.
  • Insert position: append-blocks appends to the end by default. To insert at a specific position, use --after with the preceding block's ID.

Database Write Strategy

  • Schema-First: Before creating a page, use get-page or query-database to inspect the database's property schema. Ensure your properties JSON matches.
  • Title is required: Every database has exactly one title property — it must be provided when creating a page.
  • Exact property names: Property names are case-sensitive and space-sensitive.

API Limits Quick Reference

LimitValue
Rate limit3 requests/sec (average), returns 429 when exceeded
Max request payload500 KB
Max blocks per payload1000 blocks
Max array elements (blocks/rich_text)100
rich_text text.content2000 characters
rich_text text.link.url2000 characters
URL property2000 characters
multi_select options100
relation linked pages100
Database schema recommended size≤ 50 KB
Pagination default/max page_size100

429 handling: When rate-limited, the script automatically reads the Retry-After header and retries (up to 3 times). For manual batch operations, add 300–500ms between calls.


Command Reference

Search

python3 scripts/notion_api.py search --query "keyword"
python3 scripts/notion_api.py search --query "keyword" --filter page
python3 scripts/notion_api.py search --query "keyword" --filter database --page-size 20

# Pagination (use next_cursor from previous response)
python3 scripts/notion_api.py search --query "keyword" --start-cursor "xxx"

# Auto-fetch all results (auto-paginates, may take time for large datasets)
python3 scripts/notion_api.py search --query "keyword" --all

Read Page

# Get page metadata (properties, parent, URL, etc.)
python3 scripts/notion_api.py get-page --page-id "xxx-xxx"

# Get page content (blocks) — check has_children for recursive fetching
python3 scripts/notion_api.py get-blocks --block-id "xxx-xxx"

# Recursively fetch full page (auto-expands all nested blocks, max depth 5)
python3 scripts/notion_api.py get-blocks --block-id "xxx-xxx" --recursive

# Pagination
python3 scripts/notion_api.py get-blocks --block-id "xxx-xxx" --start-cursor "xxx"

Query Database

# Get all rows
python3 scripts/notion_api.py query-database --database-id "xxx"

# With filter
python3 scripts/notion_api.py query-database \
  --database-id "xxx" \
  --filter '{"property": "Status", "select": {"equals": "Active"}}'

# With sort
python3 scripts/notion_api.py query-database \
  --database-id "xxx" \
  --sorts '[{"property": "Date", "direction": "descending"}]'

# Compound filter (AND/OR)
python3 scripts/notion_api.py query-database \
  --database-id "xxx" \
  --filter '{"and": [{"property": "Status", "select": {"equals": "Active"}}, {"property": "Priority", "select": {"equals": "High"}}]}'

# Pagination
python3 scripts/notion_api.py query-database --database-id "xxx" --start-cursor "xxx"

# Auto-fetch all results
python3 scripts/notion_api.py query-database --database-id "xxx" --all

Create Page

# Create in database (properties must match schema)
python3 scripts/notion_api.py create-page \
  --parent-id "database_id" \
  --parent-type database \
  --properties '{"Name": {"title": [{"text": {"content": "New Entry"}}]}}'

# Create sub-page with content
python3 scripts/notion_api.py create-page \
  --parent-id "page_id" \
  --parent-type page \
  --properties '{"title": {"title": [{"text": {"content": "Sub-page Title"}}]}}' \
  --children '[{"object": "block", "type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": "Hello World"}}]}}]'

Update Page Properties

python3 scripts/notion_api.py update-page \
  --page-id "xxx" \
  --properties '{"Status": {"select": {"name": "Done"}}}'

Append Blocks

# Append to end (default)
python3 scripts/notion_api.py append-blocks \
  --block-id "page_id" \
  --children '[{"object": "block", "type": "heading_2", "heading_2": {"rich_text": [{"text": {"content": "Title"}}]}}, {"object": "block", "type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": "Body text"}}]}}]'

# Insert after a specific block
python3 scripts/notion_api.py append-blocks \
  --block-id "page_id" \
  --after "target_block_id" \
  --children '[{"object": "block", "type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": "Inserted here"}}]}}]'

Delete Block

python3 scripts/notion_api.py delete-block --block-id "block_id"

Block Type Reference

Common Blocks (Creatable)

// Paragraph
{"object": "block", "type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": "Text"}}]}}

// Headings
{"object": "block", "type": "heading_1", "heading_1": {"rich_text": [{"text": {"content": "H1"}}]}}
{"object": "block", "type": "heading_2", "heading_2": {"rich_text": [{"text": {"content": "H2"}}]}}
{"object": "block", "type": "heading_3", "heading_3": {"rich_text": [{"text": {"content": "H3"}}]}}

// Toggleable heading (click to expand/collapse children)
{"object": "block", "type": "heading_2", "heading_2": {"rich_text": [{"text": {"content": "Title"}}], "is_toggleable": true}}

// Lists
{"object": "block", "type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"text": {"content": "Item"}}]}}
{"object": "block", "type": "numbered_list_item", "numbered_list_item": {"rich_text": [{"text": {"content": "Item"}}]}}

// To-do
{"object": "block", "type": "to_do", "to_do": {"rich_text": [{"text": {"content": "Task"}}], "checked": false}}

// Quote
{"object": "block", "type": "quote", "quote": {"rich_text": [{"text": {"content": "Quote text"}}]}}

// Callout
{"object": "block", "type": "callout", "callout": {"rich_text": [{"text": {"content": "Important note"}}], "icon": {"type": "emoji", "emoji": "⚠️"}}}

// Code
{"object": "block", "type": "code", "code": {"rich_text": [{"text": {"content": "print('hello')"}}], "language": "python"}}

// Divider
{"object": "block", "type": "divider", "divider": {}}

// Toggle
{"object": "block", "type": "toggle", "toggle": {"rich_text": [{"text": {"content": "Expandable"}}]}}

// Bookmark
{"object": "block", "type": "bookmark", "bookmark": {"url": "https://example.com"}}

// Equation
{"object": "block", "type": "equation", "equation": {"expression": "E = mc^2"}}

Block Types Supporting Nested Children

These block types can contain children (use append-blocks to add child content):

  • paragraph, bulleted_list_item, numbered_list_item, to_do
  • quote, callout, toggle
  • heading_1/2/3 (only when is_toggleable: true)
  • column, synced_block, table

Types Not Creatable/Modifiable via API

  • link_preview — read-only
  • meeting_notes / transcription — read-only
  • synced_block — cannot update content
  • template — creation deprecated
  • table.table_width — immutable after creation

Rich Text Advanced Formatting

// Bold + Italic
{"text": {"content": "Emphasis"}, "annotations": {"bold": true, "italic": true}}

// Code style
{"text": {"content": "variable"}, "annotations": {"code": true}}

// With link
{"text": {"content": "Click here", "link": {"url": "https://example.com"}}}

// Color (text/background)
{"text": {"content": "Colored"}, "annotations": {"color": "red"}}
// Available colors: default, gray, brown, orange, yellow, green, blue, purple, pink, red
// Background: gray_background, brown_background, ..., red_background

// Mention page
{"type": "mention", "mention": {"type": "page", "page": {"id": "page-id"}}}

// Mention date
{"type": "mention", "mention": {"type": "date", "date": {"start": "2026-03-22"}}}

Property Type Reference

{"title": [{"text": {"content": "..."}}]}           // Title (required, one per database)
{"rich_text": [{"text": {"content": "..."}}]}        // Rich text
{"select": {"name": "Option"}}                        // Select
{"multi_select": [{"name": "A"}, {"name": "B"}]}     // Multi-select
{"date": {"start": "2026-01-15"}}                     // Date
{"date": {"start": "2026-01-15", "end": "2026-01-20"}} // Date range
{"checkbox": true}                                     // Checkbox
{"number": 42}                                         // Number
{"url": "https://..."}                                 // URL
{"email": "a@b.com"}                                   // Email
{"phone_number": "+1-555-xxxx"}                        // Phone
{"relation": [{"id": "page_id"}]}                     // Relation
{"status": {"name": "In Progress"}}                   // Status
{"people": [{"id": "user_id"}]}                       // People

Read-only properties (not writable via API): formula, rollup, created_time, created_by, last_edited_time, last_edited_by, unique_id


Common Operation Patterns

Pattern 1: Bulk Knowledge Base Population

Scenario: Batch-write entries to a Notion knowledge base (database)

1. search → find database ID
2. query-database → get schema and existing entries (avoid duplicates)
3. For each entry:
   a. create-page → create page (properties match schema)
   b. append-blocks → batch-append content (≤50 blocks per batch)
   c. sleep 300ms between batches to avoid 429
4. query-database to verify entry count

Pattern 2: Page Content Update

Scenario: Replace or supplement parts of an existing page

1. get-blocks → read all current blocks and their IDs
2. Identify the block ID range to replace
3. delete-block → delete old blocks one by one
4. append-blocks → append new content at correct position
Note: There is no "replace block" API — only delete + append

Pattern 3: Recursive Full-Page Read

Scenario: Retrieve complete page content including nested toggles/lists

# Recommended: one command to recursively expand (max depth 5)
get-blocks --block-id <page_id> --recursive

# Manual layer-by-layer (for specific subtrees only):
1. get-blocks --block-id <page_id> → get top-level blocks
2. For blocks with has_children: true:
   get-blocks --block-id <block_id> → get children
3. Recurse until all levels are read
Note: --recursive auto-handles pagination and rate limiting (350ms interval)

Pattern 4: Conditional Query + Bulk Update

Scenario: Filter specific entries and batch-update their properties

1. query-database --filter '...' → get matching page IDs
2. For each page ID:
   update-page --page-id <id> --properties '{"Status": {"select": {"name": "Done"}}}'
3. sleep 300ms between updates

API Version Notes (2025-09-03)

  • Databases → Data Sources: Query endpoint uses /data_sources/. The script auto-handles both.
  • Dual IDs: Each database has both database_id and data_source_id

- database_id: Used when creating pages (parent: {"database_id": "..."}) - data_source_id: Used for queries — the script handles this automatically

  • Rate limit: ~3 requests/sec average
  • Linked Databases: API cannot operate on linked database data sources — find the original
  • Wiki Databases: Can only be created in Notion UI; API has limited read access

Important Reminders

  • Never confuse Notion with other platforms. Notion → api.notion.com. Different platforms have different APIs.
  • Empty strings are invalid: To clear a property value, use null, not "".
  • ID format is flexible: The API accepts UUIDs with or without hyphens.
  • Pagination awareness: search and query-database return up to 100 items by default. For larger datasets, paginate via start_cursor or use --all.

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

98.52%
按下载量换算1,310

安全审计

VirusTotal

通过

ClawScan

可疑

Static analysis

通过

权限和风险

敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills