更好的mcp概念
一个MCP服务器,允许您使用单个Markdown文档操作Notion。
现有的Notion MCP服务器是精简的API包装器,单个操作需要多个round-trips。更好的mcp概念使用 一个Markdown文档(YAML frontmatter+body) 在一次调用中读取、创建和更新页面。
为什么有更好的mcp概念?
| 传统概念MCP | 更好的MCP概念 | |
|---|---|---|
| 工具 | 16-22个工具 | 9工具 |
| 创建数据库条目 | 3+调用(搜索数据库、获取模式、创建页面、附加块) | 1个电话 |
| 编辑页面 | 4+调用(获取页面、获取块、删除块、追加块) | 1个电话 (阅读、编辑、写作) |
| 格式 | 原始JSON块 | 标记语言 |
| 上下文窗口 | 繁重(工具定义+JSON) | 光 |
工具
| 工具 | 说明 |
|---|---|
read | 使用frontmatter以Markdown格式阅读Notion页面。支持递归子页面读取 depth. |
write | 从Markdown创建或更新页面。支持批处理操作和append/prepend。 |
search | 按关键字搜索工作区。返回一个Markdown格式的列表。 |
list | 将数据库记录作为表列出,或将子页作为列表列出。支持自然语言过滤和排序 |
update | 无需重写内容即可快速更新属性。只需传递页面+键值对。 |
schema | 查看或修改数据库架构--添加、删除或重命名列。 |
comment | 在页面上添加或阅读评论。 |
delete | 存档(软删除)页面。 |
move | 将页面移动到其他父页面或数据库。 |
快速开始
1.创建概念集成
- 首选 notion.so/profile/集成 并创建新的集成
- 复制API密钥(
ntn_...) - 使用集成(页面菜单中的“连接到”)共享要访问的页面/数据库
2.添加到您的MCP客户端
克劳德代码
claude mcp add better-notion -- npx better-mcp-notion然后设置环境变量:
export NOTION_API_KEY=ntn_your_api_key_here克劳德桌面/光标/风帆
添加到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.
` })更新页面(编辑读取的输出)
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 ascCreated 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 | optional | optional | 数据库属性(与架构匹配) |
读取(仅输出)
| 字段 | 描述 |
|---|---|
id | 页面UUID |
url | 通知页面URL |
title | 页面标题 |
parent / database | 父页或数据库ID |
icon, cover | 表情符号或图像URL |
properties | 所有数据库属性 |
created, last_edited | 时间戳(只读) |
只读字段(url, created, last_edited、公式等)在传递给时被安全地忽略 write.
发展
npm run dev # TypeScript watch mode
npm test # Run tests
npm run test:watch # Test watch mode许可证
弹性许可证2.0(ELv2) --免费使用、修改和分发。不能作为托管/托管服务提供。
