mcpField
B
better-notion

better-notion

本地服务
github.com/ai-aviate生产力236 周前更新

关于 better-notion

better-notion 是通过带 YAML frontmatter 的 Markdown 文档操作 Notion 的 MCP 服务。它可在单次调用中读取、创建和编辑页面,并通过 9 个工具提供工作区、数据库和评论操作。

主要功能

  1. 01以 Markdown 读取和写入页面
  2. 02搜索工作区页面
  3. 03筛选并列出数据库记录
  4. 04更新属性和数据库结构
  5. 05管理评论与页面位置

适用场景

  1. 01一次调用创建或编辑页面
  2. 02按条件查询数据库记录
  3. 03追加笔记而不替换页面内容
  4. 04修改数据库列或页面评论

MCP 相关

该项目是 MCP 服务,提供 9 个工具来读取、写入、搜索、列出、更新和管理 Notion 页面及数据库。它通过 Notion 集成 API 密钥连接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"ai-aviate-better-notion": {
"command": "npx",
"args": [
"-y",
"better-mcp-notion"
],
"env": {
"NOTION_API_KEY": "<NOTION_API_KEY>"
}
}
}
}
启动命令npx -y better-mcp-notion
需要配置的环境变量
NOTION_API_KEY密钥Notion API key (starts with ntn_)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmbetter-mcp-notion0.3.2

工具

9

收录的工具列表 · 更新于 2 周前

参数类型必填说明
pagestring是Notion 页面 URL(https://notion.so/...)或页面 ID(UUID 或 32 位十六进制)
depthinteger否读取子页面的深度:1 = 仅此页面(默认),2 = 包含子页面,3 = 包含孙页面

详细介绍

better-mcp-notion

Japanese / 日本語

一个 MCP 服务,让你只需使用一份 Markdown 文档即可操作 Notion。

现有的 Notion MCP 服务只是单薄的 API 封装,完成一项操作需要多次往返调用。better-mcp-notion 使用一份 Markdown 文档(YAML frontmatter + 正文),即可通过一次调用读取、创建和更新页面。

为什么选择 better-mcp-notion?

传统 Notion MCPbetter-mcp-notion
工具16-22 个工具9 个工具
创建数据库条目3 次以上调用(搜索数据库、获取架构、创建页面、追加区块)1 次调用
编辑页面4 次以上调用(获取页面、获取区块、删除区块、追加区块)1 次调用(读取、编辑、写入)
格式原始 JSON 区块Markdown
上下文窗口开销大(工具定义 + JSON)开销小

工具

工具描述
read将 Notion 页面读取为带 frontmatter 的 Markdown。支持通过 depth 递归读取子页面。
write根据 Markdown 创建或更新页面。支持批量操作以及追加/前置内容。
search按关键词搜索工作区。返回 Markdown 格式的列表。
list将数据库记录列为表格,或将子页面列为列表。支持自然语言筛选和排序。
update快速更新属性,无需重写内容。只需传入页面和键值对。
schema查看或修改数据库架构——添加、移除或重命名列。
comment添加或读取页面评论。
delete归档(软删除)页面。
move将页面移动到其他父页面或数据库。

快速开始

1. 创建 Notion 集成
  1. 前往 notion.so/profile/integrations 并创建新的集成
  2. 复制 API 密钥(ntn_...)
  3. 将你要访问的页面/数据库分享给该集成(在页面菜单中选择“Connect to”)
2. 添加到 MCP 客户端
Claude Code
claude mcp add better-notion -- npx better-mcp-notion

然后设置环境变量:

export NOTION_API_KEY=ntn_your_api_key_here
Claude Desktop / Cursor / Windsurf

将以下内容添加到 MCP 配置文件中(例如 claude_desktop_config.json、.cursor/mcp.json):

{
  "mcpServers": {
    "better-notion": {
      "command": "npx",
      "args": ["-y", "better-mcp-notion"],
      "env": {
        "NOTION_API_KEY": "ntn_your_api_key_here"
      }
    }
  }
}
从源码安装
git clone https://github.com/ai-aviate/better-mcp-notion.git
cd better-mcp-notion
npm install && npm run build

然后将 MCP 配置指向 node /path/to/better-mcp-notion/build/index.js。

用法

读取页面
read({ page: "https://notion.so/My-Page-abc123def456" })

返回:

---
id: abc123-def456
title: My Page
database: task-db-id
properties:
  Status: In Progress
  Tags:
    - backend
---
## Notes
- Completed API design
创建页面
write({ markdown: `
---
title: Meeting Notes
parent: "Project Alpha"
icon: "📝"
---
## Agenda
- Review progress
- Discuss next steps
` })
创建数据库条目
write({ markdown: `
---
title: Fix login bug
database: "Task Board"
properties:
  Status: In Progress
  Tags:
    - backend
    - urgent
  Due Date: "2026-03-01"
---
## Description
Login fails when password contains special chars.
` })
更新页面(编辑 read 的输出)
write({ markdown: `
---
id: abc123-def456
title: Updated Title
properties:
  Status: Done
---
## New content
Body replaces all existing blocks.
` })
向现有页面追加内容

使用 position: "append" 可在末尾添加内容,而无需重写整个页面。 只需提供新增内容——现有内容会保留。

write({ markdown: `
---
id: abc123-def456
---
## New section
This is added to the end of the page.
`, position: "append" })

position: "prepend" 则会在开头添加内容。

批量创建(一次调用创建多个页面)

使用 === 分隔页面:

write({ markdown: `
---
title: Task 1
database: "Task Board"
properties:
  Status: Todo
---
Task 1 details
===
---
title: Task 2
database: "Task Board"
properties:
  Status: Todo
---
Task 2 details
` })
使用筛选条件查询数据库
list({
  target: "Task Board",
  filter: "Status is Done AND Priority is High",
  sort: "Due Date ascending"
})
筛选语法
  • Status is Done / Status = Done - 等于
  • Priority != Low - 不等于
  • Tags contains backend - 多选包含
  • Done is true - 复选框
  • Score > 80 - 数值比较(>、<、>=、<=)
  • Due Date after 2026-03-01 - 日期晚于/早于
  • 使用 AND 组合:Status is Done AND Priority is High
排序语法
  • Due Date ascending 或 Due Date asc
  • Created descending 或 Created desc
读取页面及其子页面
read({ page: "parent-page-id", depth: 2 })

depth: 1 = 仅当前页面(默认),2 = 包含子页面,3 = 包含孙级页面。

快速更新属性

无需重写内容即可更新属性:

update({ page: "My Task", properties: { "Status": "Done", "Priority": "High" } })
管理数据库架构
// View schema
schema({ database: "Task Board" })

// Add a column
schema({ database: "Task Board", action: "add", property: "Priority", type: "select", options: ["Low", "Medium", "High"] })

// Rename a column
schema({ database: "Task Board", action: "rename", property: "Due", name: "Due Date" })

// Remove a column
schema({ database: "Task Board", action: "remove", property: "Old Column" })
评论
// Read comments
comment({ page: "abc123" })

// Add a comment
comment({ page: "abc123", body: "Looks good! Ready to ship." })

Frontmatter 参考

写入(创建/更新)
字段创建更新说明
id-必填要更新的页面 ID
title建议填写可选页面标题
parent必填*忽略父页面名称或 ID
database必填*忽略数据库名称或 ID(*parent 和 database 二选一)
icon可选可选表情符号或图片 URL
cover可选可选封面图片 URL
properties可选可选数据库属性(与架构匹配)
读取(仅输出)
字段说明
id页面 UUID
urlNotion 页面 URL
title页面标题
parent / database父页面或数据库 ID
icon、cover表情符号或图片 URL
properties所有数据库属性
created、last_edited时间戳(只读)

传入 write 时,只读字段(url、created、last_edited、公式等)会被安全忽略。

开发

npm run dev          # TypeScript watch mode
npm test             # Run tests
npm run test:watch   # Test watch mode

许可证

Elastic License 2.0 (ELv2) — 可免费使用、修改和分发。不得将其作为托管服务提供。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。