Better Notion

io.github.ai-aviate由 GitHub 账号 ai-aviate 发布v0.3.2更新于 Oct 24, 2026

Operate Notion with a single Markdown document — read, create, and update pages in one call.

发布方自己的服务:Notion

已验证STDIO仅桌面效率与工作流知识与记忆

概览

AI 生成的概览

让助手用单个 Markdown 文档读取、创建、更新、搜索和整理 Notion 页面与数据库。

可以做什么
这是一个本地 MCP 服务器,提供九个操作 Notion 的工具:以带 YAML frontmatter 的 Markdown 读取页面、写入(创建或更新)页面与数据库条目、搜索工作区、列出数据库记录或子页面、快速更新属性、查看或修改数据库结构、添加或读取评论、归档页面以及移动页面。它的设计目标是让一份含 frontmatter 与正文的 Markdown 文档完成一次完整操作,包括批量创建和追加或前置编辑,而不必多次往返调用。
适用场景
当助手需要直接处理 Notion 内容时值得安装:撰写或更新会议记录与任务条目、按筛选和排序查询任务看板、调整数据库列结构,或连同子页面一起读取某个页面。适合希望输入输出都是 Markdown 形式、而非原始 Notion 区块 JSON 的用户。
运行要求
以 stdio 方式作为本地进程运行,通过 npm 包 better-mcp-notion 安装(例如使用 npx),或用 Node.js 从源码构建。需要 Notion 集成 API 密钥,通过环境变量 NOTION_API_KEY 提供,并且目标页面或数据库必须已共享给该集成。需要访问 Notion 的网络连接。
安装前请注意
NOTION_API_KEY 密钥可访问所有已共享给该集成的内容,应尽量缩小共享范围,并避免把密钥写入共享配置文件。write、update、schema、comment、delete、move 等工具会修改或移除 Notion 内容;delete 是归档而非永久删除,更新页面正文会替换原有区块,除非使用追加或前置方式。页面内容会发送到 Notion 的 API。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Better Notion,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

better-mcp-notion

Japanese / 日本語

An MCP server that lets you operate Notion with a single Markdown document.

Existing Notion MCP servers are thin API wrappers that require multiple round-trips for a single operation. better-mcp-notion uses one Markdown document (YAML frontmatter + body) to read, create, and update pages in a single call.

Why better-mcp-notion?

Traditional Notion MCPbetter-mcp-notion
Tools16-22 tools9 tools
Create a DB entry3+ calls (search DB, get schema, create page, append blocks)1 call
Edit a page4+ calls (get page, get blocks, delete blocks, append blocks)1 call (read, edit, write)
FormatRaw JSON blocksMarkdown
Context windowHeavy (tool definitions + JSON)Light

Tools

ToolDescription
readRead a Notion page as Markdown with frontmatter. Supports recursive child page reading with depth.
writeCreate or update pages from Markdown. Supports batch operations and append/prepend.
searchSearch the workspace by keyword. Returns a Markdown-formatted list.
listList database records as a table or child pages as a list. Supports natural language filter & sort.
updateQuick property update without rewriting content. Just pass page + key-value pairs.
schemaView or modify database schema — add, remove, or rename columns.
commentAdd or read comments on a page.
deleteArchive (soft-delete) a page.
moveMove a page to a different parent page or database.

Quick Start

1. Create a Notion Integration

  1. Go to notion.so/profile/integrations and create a new integration
  2. Copy the API key (ntn_...)
  3. Share the pages/databases you want to access with the integration ("Connect to" in the page menu)

2. Add to your MCP client

Claude Code
bash
claude mcp add better-notion -- npx better-mcp-notion

Then set the environment variable:

bash
export NOTION_API_KEY=ntn_your_api_key_here
Claude Desktop / Cursor / Windsurf

Add to your MCP config file (e.g. claude_desktop_config.json, .cursor/mcp.json):

json
{  "mcpServers": {    "better-notion": {      "command": "npx",      "args": ["-y", "better-mcp-notion"],      "env": {        "NOTION_API_KEY": "ntn_your_api_key_here"      }    }  }}
From source
bash
git clone https://github.com/ai-aviate/better-mcp-notion.gitcd better-mcp-notionnpm install && npm run build

Then point your MCP config to node /path/to/better-mcp-notion/build/index.js.

Usage

Read a page

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

Returns:

markdown
---id: abc123-def456title: My Pagedatabase: task-db-idproperties:  Status: In Progress  Tags:    - backend---## Notes- Completed API design

Create a page

write({ markdown: `---title: Meeting Notesparent: "Project Alpha"icon: "📝"---## Agenda- Review progress- Discuss next steps` })

Create a database entry

write({ markdown: `---title: Fix login bugdatabase: "Task Board"properties:  Status: In Progress  Tags:    - backend    - urgent  Due Date: "2026-03-01"---## DescriptionLogin fails when password contains special chars.` })

Update a page (edit the output from read)

write({ markdown: `---id: abc123-def456title: Updated Titleproperties:  Status: Done---## New contentBody replaces all existing blocks.` })

Append content to an existing page

Use position: "append" to add content to the end without rewriting the entire page. Only the new content needs to be provided — existing content is preserved.

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

position: "prepend" adds content to the beginning instead.

Batch create (multiple pages in one call)

Separate pages with ===:

write({ markdown: `---title: Task 1database: "Task Board"properties:  Status: Todo---Task 1 details===---title: Task 2database: "Task Board"properties:  Status: Todo---Task 2 details` })

Query a database with filters

list({  target: "Task Board",  filter: "Status is Done AND Priority is High",  sort: "Due Date ascending"})
Filter syntax
  • Status is Done / Status = Done - equals
  • Priority != Low - not equals
  • Tags contains backend - multi-select contains
  • Done is true - checkbox
  • Score > 80 - number comparison (>, <, >=, <=)
  • Due Date after 2026-03-01 - date after/before
  • Combine with AND: Status is Done AND Priority is High
Sort syntax
  • Due Date ascending or Due Date asc
  • Created descending or Created desc

Read with child pages

read({ page: "parent-page-id", depth: 2 })

depth: 1 = current page only (default), 2 = include children, 3 = include grandchildren.

Quick property update

Update properties without rewriting content:

update({ page: "My Task", properties: { "Status": "Done", "Priority": "High" } })

Manage database schema

// View schemaschema({ database: "Task Board" })
// Add a columnschema({ database: "Task Board", action: "add", property: "Priority", type: "select", options: ["Low", "Medium", "High"] })
// Rename a columnschema({ database: "Task Board", action: "rename", property: "Due", name: "Due Date" })
// Remove a columnschema({ database: "Task Board", action: "remove", property: "Old Column" })

Comments

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

Frontmatter Reference

Write (create/update)

FieldCreateUpdateDescription
id-requiredPage ID to update
titlerecommendedoptionalPage title
parentrequired*ignoredParent page name or ID
databaserequired*ignoredDatabase name or ID (*either parent or database)
iconoptionaloptionalEmoji or image URL
coveroptionaloptionalCover image URL
propertiesoptionaloptionalDatabase properties (matched against schema)

Read (output only)

FieldDescription
idPage UUID
urlNotion page URL
titlePage title
parent / databaseParent page or database ID
icon, coverEmoji or image URL
propertiesAll database properties
created, last_editedTimestamps (read-only)

Read-only fields (url, created, last_edited, formulas, etc.) are safely ignored when passed to write.

Development

bash
npm run dev          # TypeScript watch modenpm test             # Run testsnpm run test:watch   # Test watch mode

License

Elastic License 2.0 (ELv2) — Free to use, modify, and distribute. Cannot be offered as a managed/hosted service.

来源:README.md,提交 962fe3b

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.3.2最新Sep 16, 2026

评分

已满足适用检查项的 40%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。

其他 Notion 集成