mcpField
V
vibe-notionbot

vibe-notionbot

github.com/devxoul生产力63161 次安装2 天前更新
代码仓库

关于 vibe-notionbot

vibe-notionbot 是通过 Notion 官方 API 操作工作区的 TypeScript 命令行工具,适用于 Agent 和人工用户。它提供页面、数据库、区块、用户、评论和搜索操作,并支持批量写入。

主要功能

  1. 01官方 Notion API 集成
  2. 02页面与数据库操作
  3. 03区块及评论管理
  4. 04工作区搜索与用户查询
  5. 05批量执行写操作
  6. 06JSON 输出

适用场景

  1. 01搜索 Notion 页面或数据库
  2. 02创建并更新页面和数据库
  3. 03批量追加区块或创建评论
  4. 04以集成令牌访问工作区

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/devxoul/vibe-notion --skill vibe-notionbot

安装后在 Claude Code 中输入/vibe-notionbot确认已加载。

详细介绍

Vibe Notionbot

一个 TypeScript 命令行工具,可让 AI Agent 和用户通过官方 Notion API 与 Notion 工作区交互。支持页面、数据库、块、用户、评论和搜索。

使用哪个 CLI

此软件包提供两个 CLI。根据你的情况选择合适的一个:

vibe-notionvibe-notionbot(此 CLI)
API非官方私有 API官方 Notion API
身份验证从 Notion 桌面应用自动提取 token_v2NOTION_TOKEN 环境变量(Integration 令牌)
身份以用户身份操作以机器人身份操作
设置无需设置——自动提取凭据手动设置——在 notion.so/my-integrations 创建 Integration
数据库行add-row、update-row通过 page create --database 创建
视图管理view-get、view-update、view-list、view-add、view-delete不支持
工作区列表支持不支持
稳定性私有 API——Notion 变更时可能失效官方版本化 API——稳定

选择流程:

  1. 如果已安装 Notion 桌面应用 → 使用 vibe-notion
  2. 如果已设置 NOTION_TOKEN,但没有桌面应用 → 使用 vibe-notionbot(此 CLI)
  3. 如果两者都可用 → 优先使用 vibe-notion(功能更全面,且无需设置)
  4. 如果两者都不可用 → 请用户设置其中一种

重要:仅使用 CLI

绝不要直接调用 Notion API。 始终使用此技能中介绍的 vibe-notionbot CLI 命令。不要向 Notion API 发送原始 HTTP 请求,也不要直接使用 @notionhq/client。直接调用 API 可能会泄露凭据,并触发 Notion 的滥用检测,导致用户账号被封禁。

如果 vibe-notionbot 不支持你需要的功能,请告知用户,并提出代表他们在 devxoul/vibe-notion 提交功能请求。提交前,请删除所有真实用户数据——ID、姓名、邮箱、令牌、页面内容,以及任何其他可用于识别用户或其工作区的信息。改用通用占位符,并聚焦描述缺少的功能。

重要:绝不编写脚本

绝不要编写脚本(Python、TypeScript、Bash 等)来自动执行 Notion 操作。 batch 命令已能处理任意规模的批量操作。编写脚本循环调用 API 总是不对的——请改用带 --file 的 batch。

以下情况也适用:

  • 需要创建 100 行或页面以上
  • 需要在新创建的项目之间建立交叉引用(使用多轮 batch——参见批量操作策略)
  • 操作看起来“太大”,无法用单条命令完成

如果你发现自己在想“我应该为此编写一个脚本”,请停下来改用 batch。

快速开始

# Check authentication status
vibe-notionbot auth status

# Search for a page or database
vibe-notionbot search "Project Roadmap"

# List all databases
vibe-notionbot database list

# Create a new page
vibe-notionbot page create --parent <parent_id> --title "My New Page"

身份验证

Integration 令牌(官方 API)

在 NOTION_TOKEN 环境变量中设置从 Notion Developer Portal 获取的 Integration 令牌。

export NOTION_TOKEN=secret_xxx
vibe-notionbot auth status

Integration 令牌可访问官方 Notion API(@notionhq/client)。

命令

页面命令
# Retrieve a page
vibe-notionbot page get <page_id>

# Create a new page under a parent page or database
vibe-notionbot page create --parent <parent_id> --title "New Page Title"
vibe-notionbot page create --parent <database_id> --title "New Database Item" --database

# Create a page with markdown content
vibe-notionbot page create --parent <parent_id> --title "My Doc" --markdown '# Hello\n\nThis is **bold** text.'

# Create a page with markdown from a file
vibe-notionbot page create --parent <parent_id> --title "My Doc" --markdown-file ./content.md

# Create a page with markdown containing local images (auto-uploaded to Notion)
vibe-notionbot page create --parent <parent_id> --title "My Doc" --markdown-file ./doc-with-images.md

# Update page properties
vibe-notionbot page update <page_id> --set "Status=In Progress" --set "Priority=High"

# Replace all content on a page with new markdown
vibe-notionbot page update <page_id> --replace-content --markdown '# New Content'
vibe-notionbot page update <page_id> --replace-content --markdown-file ./updated.md

# Archive (delete) a page
vibe-notionbot page archive <page_id>

# Retrieve a specific page property
vibe-notionbot page property <page_id> <property_id>
数据库命令
# Retrieve a database schema
vibe-notionbot database get <database_id>

# Query a database with optional filters and sorts
vibe-notionbot database query <database_id> --filter '{"property": "Status", "select": {"equals": "In Progress"}}'
vibe-notionbot database query <database_id> --sort '[{"property": "Created time", "direction": "descending"}]'
vibe-notionbot database query <database_id> --page-size 10 --start-cursor <cursor>

# Create a database under a parent page
vibe-notionbot database create --parent <page_id> --title "My Database" --properties '{"Name": {"title": {}}}'

# Update a database schema or title
vibe-notionbot database update <database_id> --title "Updated Title"
vibe-notionbot database update <database_id> --properties '{"Status": {"select": {"options": [{"name": "Active"}, {"name": "Archived"}]}}}'
vibe-notionbot database update <database_id> --title "Updated Title" --properties '{"Status": {"select": {}}}'

# Delete a property from a database
vibe-notionbot database delete-property <database_id> --property "Status"

# List all databases accessible by the integration
vibe-notionbot database list
vibe-notionbot database list --page-size 10 --start-cursor <cursor>
块命令
# Retrieve a block
vibe-notionbot block get <block_id>

# List direct children of a block (paginated)
vibe-notionbot block children <block_id>
vibe-notionbot block children <block_id> --page-size 50 --start-cursor <cursor>

# Append child blocks to a parent
vibe-notionbot block append <parent_id> --content '[{"type": "paragraph", "paragraph": {"rich_text": [{"type": "text", "text": {"content": "Hello World"}}]}}]'

# Append markdown content as blocks
vibe-notionbot block append <parent_id> --markdown '# Hello\n\nThis is **bold** text.'

# Append markdown from a file
vibe-notionbot block append <parent_id> --markdown-file ./content.md

# Append markdown with local images (auto-uploaded to Notion)
vibe-notionbot block append <parent_id> --markdown-file ./doc-with-images.md

# Append nested markdown (indented lists become nested children blocks)
vibe-notionbot block append <parent_id> --markdown '- Parent item\n  - Child item\n    - Grandchild item'

# Append blocks after a specific block (positional insertion)
vibe-notionbot block append <parent_id> --after <block_id> --markdown '# Inserted after specific block'
vibe-notionbot block append <parent_id> --after <block_id> --content '[{"type": "paragraph", "paragraph": {"rich_text": [{"type": "text", "text": {"content": "Inserted after"}}]}}]'

# Append blocks before a specific block
vibe-notionbot block append <parent_id> --before <block_id> --markdown '# Inserted before specific block'

# Update a block's content
vibe-notionbot block update <block_id> --content '{"paragraph": {"rich_text": [{"type": "text", "text": {"content": "Updated content"}}]}}'

# Delete (archive) a block
vibe-notionbot block delete <block_id>

# Upload a file as a block (image or file block)
vibe-notionbot block upload <parent_id> --file ./image.png --pretty
vibe-notionbot block upload <parent_id> --file ./document.pdf --pretty
vibe-notionbot block upload <parent_id> --file ./image.png --after <block_id> --pretty
vibe-notionbot block upload <parent_id> --file ./image.png --before <block_id> --pretty
用户命令
# List all users in the workspace
vibe-notionbot user list
vibe-notionbot user list --page-size 10 --start-cursor <cursor>

# Get info for a specific user
vibe-notionbot user get <user_id>

# Get info for the current bot/integration
vibe-notionbot user me
搜索命令
# Search across the entire workspace
vibe-notionbot search "query text"

# Filter search by object type
vibe-notionbot search "Project" --filter page
vibe-notionbot search "Tasks" --filter database

# Sort search results
vibe-notionbot search "Meeting" --sort desc

# Paginate search results
vibe-notionbot search "Notes" --page-size 10 --start-cursor <cursor>
评论命令
# List comments on a page
vibe-notionbot comment list --page <page_id>
vibe-notionbot comment list --page <page_id> --page-size 10 --start-cursor <cursor>

# List inline comments on a specific block
vibe-notionbot comment list --block <block_id>

# Create a comment on a page
vibe-notionbot comment create "This is a comment" --page <page_id>

# Reply to a comment thread (discussion)
vibe-notionbot comment create "Replying to thread" --discussion <discussion_id>

# Retrieve a specific comment
vibe-notionbot comment get <comment_id>

批量操作

在一次 CLI 调用中运行多个写入操作。当你需要一次创建、更新或删除多个项目时,请使用此方式,而不是重复调用 CLI。可节省令牌并减少往返次数。

# Inline JSON (no --workspace-id needed, uses NOTION_TOKEN)
vibe-notionbot batch '<operations_json>'

# From file (for large payloads)
vibe-notionbot batch --file ./operations.json '[]'

支持的操作(共 11 种):

操作说明
page.create创建页面
page.update更新页面属性
page.archive归档页面
block.append向父级追加区块
block.update更新区块
block.delete删除区块
comment.create创建评论
database.create创建数据库
database.update更新数据库标题或架构
database.delete-property删除数据库属性
block.upload将文件上传为图片或文件区块

操作格式:每个操作都是一个包含 action 和传给单项命令处理器的相同字段的对象。混合操作示例:

[
  {"action": "page.create", "parent": "<parent_id>", "title": "Meeting Notes"},
  {"action": "block.append", "parent_id": "<page_id>", "markdown": "# Agenda\n\n- Item 1\n- Item 2"},
  {"action": "comment.create", "content": "Page created via batch", "page": "<page_id>"}
]

输出格式:

{
  "results": [
    {"index": 0, "action": "page.create", "success": true, "data": {"id": "page-uuid", "...": "..."}},
    {"index": 1, "action": "block.append", "success": true, "data": {"...": "..."}},
    {"index": 2, "action": "comment.create", "success": true, "data": {"id": "comment-uuid", "...": "..."}}
  ],
  "total": 3,
  "succeeded": 3,
  "failed": 0
}

快速失败行为:操作按顺序运行。如果任何操作失败,执行会立即停止。输出将包含所有已完成操作以及失败操作的结果。失败时进程以代码 1 退出,成功时以代码 0 退出。

{
  "results": [
    {"index": 0, "action": "page.create", "success": true, "data": {"...": "..."}},
    {"index": 1, "action": "block.append", "success": false, "error": "Block not found"}
  ],
  "total": 3,
  "succeeded": 1,
  "failed": 1
}
批量操作策略

对于大型操作(数十或数百个项目),使用 --file 以避免 shell 参数长度限制,并便于管理。

步骤 1:将操作 JSON 写入文件,然后使用 --file 运行批处理:

# Write operations to a file (using your Write tool), then:
vibe-notionbot batch --file ./operations.json '[]'

多轮处理模式 — 当新项目需要相互引用时(例如,某个页面属性链接到另一个新建页面):

  1. 第 1 轮 — 创建所有项目(不添加交叉引用):创建包含所有创建操作的批处理 JSON 文件,并省略指向其他新建项目的属性。运行该文件,并从输出中收集返回的 ID。
  2. 第 2 轮 — 设置交叉引用:创建第二个包含更新操作的批处理 JSON 文件,使用第 1 轮返回的 ID 设置引用属性。运行该文件。
Pass 1: Create items A, B, C (no cross-refs) → get IDs for A, B, C
Pass 2: Update A.related=B, C.parent_ref=A (using real IDs from Pass 1)

这与使用脚本达到的效果相同,但无需编写任何代码。只需调用两次批处理命令。

速率限制

Notion 会对其 API 实施速率限制。批量操作按顺序运行,因此大型批次(30 个及以上操作)可能会触发 429 Too Many Requests 错误。为避免此情况:

将大型批次拆分为多个区块,每次批处理调用约处理 25–30 个操作 如果批次中途因 429 失败,只需重新运行尚未处理的操作 batch 输出会显示失败前哪些操作已成功;使用 index 字段确定从哪里继续

输出格式

JSON(默认)

所有命令默认输出 JSON,便于 AI 使用:

{
  "id": "...",
  "object": "page",
  "properties": { ... }
}
美化格式(便于阅读)

使用 --pretty 标志输出格式化内容:

vibe-notionbot search "Project" --pretty

错误处理

Notion API 的常见错误:

  • object_not_found:ID 不正确,或集成无权访问。
  • unauthorized:NOTION_TOKEN 无效。
  • rate_limited:请求过多。

故障排除

vibe-notionbot: command not found

未安装 vibe-notion 包。使用包运行器直接运行。询问用户要使用哪一种:

npx -y -p vibe-notion vibe-notionbot ...
bunx -p vibe-notion vibe-notionbot ...
pnpm dlx --package vibe-notion vibe-notionbot ...

如果你已了解用户偏好的包运行器,请直接使用,而无需询问。

限制

  • 支持 Notion API 版本 2025-09-03。
  • 不支持 OAuth(仅支持令牌)。
  • 支持通过 block upload 上传文件。
  • 页面属性更新仅支持通过 --set 设置简单的键值对。

评论

支持 Markdown