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 整合