Notion MCP
官方官方 Notion MCP 伺服器,供 AI 代理搜尋、讀取、建立及更新 Notion 頁面、資料庫與工作區內容。
你可以用 Notion MCP 做什麼?
- 依標題搜尋頁面或資料來源 — 使用
post-search依名稱在工作區中尋找頁面與資料來源。 - 以 Markdown 讀取頁面內容 — 透過
retrieve-page-markdown擷取頁面的完整內容,可選擇包含會議逐字稿。 - 以 Markdown 編輯頁面內容 — 使用
update-page-markdown覆寫或尋找並取代頁面內容。 - 使用篩選與排序查詢資料來源 — 透過
query-data-source對資料來源執行結構化查詢。 - 在上層頁面或資料來源內建立新頁面 — 使用
post-page新增頁面,並指定page_id或database_id作為上層。 - 將頁面移至不同的上層位置 — 透過
move-page移動頁面來重新整理工作區。
文件
Notion MCP 伺服器
[!NOTE]
我們推出了 Notion MCP,一個遠端 MCP 伺服器,具備以下改進:
- 透過標準 OAuth 輕鬆安裝。不再需要手動處理 JSON 或 API 權杖。
- 專為 AI 代理設計的強大工具,包括以 Markdown 編輯頁面。這些工具在設計時已考量到最佳化的權杖消耗。
前往 Notion MCP 文件 了解更多並開始使用。
我們目前優先處理並僅對 Notion MCP(遠端)提供積極支援。因此:
- 我們未來可能會淘汰這個本機 MCP 伺服器儲存庫。
- 此處的議題和拉取請求不會被積極監控。
- 請勿在此處提交與遠端 MCP 相關的議題;請改為聯絡 Notion 支援。
此專案實作了一個用於 Notion API 的 MCP 伺服器。
⚠️ 版本 2.0.0 重大變更
版本 2.0.0 遷移至 Notion API 2025-09-03,該版本引入了資料來源作為資料庫的主要抽象層。
變更內容
已移除的工具 (3):
post-database-query- 由query-data-source取代update-a-database- 由update-a-data-source取代create-a-database- 由create-a-data-source取代
新增工具 (7):
query-data-source- 使用篩選和排序查詢資料來源(資料庫)retrieve-a-data-source- 取得資料來源的中繼資料和結構描述update-a-data-source- 更新資料來源屬性create-a-data-source- 建立新的資料來源list-data-source-templates- 列出資料來源中可用的範本move-page- 將頁面移動到不同的父層位置retrieve-a-database- 取得資料庫中繼資料,包括其資料來源 ID
參數變更:
- 所有資料庫操作現在使用
data_source_id而非database_id - 搜尋篩選值從
["page", "database"]變更為["page", "data_source"] - 頁面建立現在支援
page_id和database_id父層(用於資料來源)
我需要遷移嗎?
無需更改程式碼。 MCP 工具會在伺服器啟動時自動探索。當您升級到 v2.0.0 時,AI 客戶端會自動看到新的工具名稱和參數。舊的資料庫工具已不再可用。
如果您有硬編碼的工具名稱或提示參照了舊的資料庫工具,請更新它們以使用新的資料來源工具:
| 舊工具 (v1.x) | 新工具 (v2.0) | 參數變更 |
|---|---|---|
post-database-query | query-data-source | database_id → data_source_id |
update-a-database | update-a-data-source | database_id → data_source_id |
create-a-database | create-a-data-source | 無變更(使用 parent.page_id) |
注意:
retrieve-a-database仍然可用,並會傳回資料庫中繼資料,包括資料來源 ID 清單。使用retrieve-a-data-source來取得特定資料來源的結構描述和屬性。
目前工具總數:22(v1.x 為 19)
以 Markdown 呈現的頁面內容
伺服器提供了兩個工具,用於將頁面內容作為增強的 Markdown 來處理,而非區塊 JSON,這對 AI 代理來說在權杖效率上顯著更高:
retrieve-page-markdown— 以 Markdown 讀取頁面的完整內容(GET /v1/pages/{page_id}/markdown)。傳遞include_transcript: true以內嵌會議記錄轉錄稿。update-page-markdown— 使用 Markdown 編輯頁面內容(PATCH /v1/pages/{page_id}/markdown)。偏好使用replace_content來覆寫整個頁面,或使用update_content進行目標性的尋找與取代編輯。
這些端點需要 Notion API 版本 2026-03-11。伺服器現在會根據 OpenAPI 規格針對每個操作取得 Notion-Version 標頭,因此這些工具使用 2026-03-11,而其餘 API 則繼續使用 2025-09-03 — 無需設定。如果您透過 OPENAPI_MCP_HEADERS 自行設定了 Notion-Version,您的值將對每個工具具有優先權。
安裝
1. 在 Notion 中設定整合
前往 https://www.notion.so/profile/integrations 並建立一個新的內部整合,或選取現有的整合。

雖然我們限制了 Notion API 的公開範圍(例如,您將無法透過 MCP 刪除資料庫),但將工作區資料暴露給 LLM 仍存在非零風險。注重安全性的使用者可能希望進一步設定整合的 功能。
例如,您可以僅從「設定」分頁授予「讀取內容」存取權,以建立唯讀整合權杖:

2. 將內容連結到整合
確保相關頁面和資料庫已連結到您的整合。
為此,請前往內部整合設定中的 存取 分頁。編輯存取權並選取您要使用的頁面。


或者,您可以個別授予頁面存取權。您需要前往目標頁面,點擊 3 個點,然後選取「連結到整合」。

3. 將 MCP 設定新增到您的客戶端
使用 npm
Cursor 和 Claude
將以下內容新增到您的 .cursor/mcp.json 或 claude_desktop_config.json(MacOS:~/Library/Application\ Support/Claude/claude_desktop_config.json)
選項 1:使用 NOTION_TOKEN(建議)
{
"mcpServers": {
"notionApi": {
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": {
"NOTION_TOKEN": "ntn_****"
}
}
}
}
選項 2:使用 OPENAPI_MCP_HEADERS(用於進階使用案例)
{
"mcpServers": {
"notionApi": {
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2025-09-03\" }"
}
}
}
}
Zed
將以下內容新增到您的 settings.json
{
"context_servers": {
"some-context-server": {
"command": {
"path": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2025-09-03\" }"
}
},
"settings": {}
}
}
}
GitHub Copilot CLI
使用 Copilot CLI 以互動方式新增 MCP 伺服器:
/mcp add
或者,建立或編輯設定檔 ~/.copilot/mcp-config.json 並新增:
{
"mcpServers": {
"notionApi": {
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": {
"NOTION_TOKEN": "ntn_****"
}
}
}
}
如需更多資訊,請參閱 Copilot CLI 文件。
使用 Docker
使用 Docker 執行 MCP 伺服器有兩種選項:
選項 1:使用官方 Docker Hub 映像檔
將以下內容新增到您的 .cursor/mcp.json 或 claude_desktop_config.json
使用 NOTION_TOKEN(建議):
{
"mcpServers": {
"notionApi": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e", "NOTION_TOKEN",
"mcp/notion"
],
"env": {
"NOTION_TOKEN": "ntn_****"
}
}
}
}
使用 OPENAPI_MCP_HEADERS(用於進階使用案例):
{
"mcpServers": {
"notionApi": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e", "OPENAPI_MCP_HEADERS",
"mcp/notion"
],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\":\"Bearer ntn_****\",\"Notion-Version\":\"2025-09-03\"}"
}
}
}
}
此方法:
- 使用官方 Docker Hub 映像檔
- 透過環境變數正確處理 JSON 跳脫
- 提供更可靠的設定方式
選項 2:在本機建置 Docker 映像檔
您也可以在本機建置並執行 Docker 映像檔。首先,建置 Docker 映像檔:
docker compose build
然後,將以下內容新增到您的 .cursor/mcp.json 或 claude_desktop_config.json
使用 NOTION_TOKEN(建議):
{
"mcpServers": {
"notionApi": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"NOTION_TOKEN=ntn_****",
"notion-mcp-server"
]
}
}
}
使用 OPENAPI_MCP_HEADERS(用於進階使用案例):
{
"mcpServers": {
"notionApi": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"OPENAPI_MCP_HEADERS={\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2025-09-03\"}",
"notion-mcp-server"
]
}
}
}
別忘了將 ntn_**** 替換為您的整合密鑰。從您的整合設定分頁中找到它:
傳輸選項
Notion MCP 伺服器支援兩種傳輸模式:
STDIO 傳輸(預設)
預設傳輸模式使用標準輸入/輸出進行通訊。這是大多數客戶端(如 Claude Desktop)使用的標準 MCP 傳輸方式。
# Run with default stdio transport
npx @notionhq/notion-mcp-server
# Or explicitly specify stdio
npx @notionhq/notion-mcp-server --transport stdio
可串流的 HTTP 傳輸
對於偏好 HTTP 通訊的網頁應用程式或客戶端,您可以使用可串流的 HTTP 傳輸:
# Run with Streamable HTTP transport on port 3000 (default)
npx @notionhq/notion-mcp-server --transport http
# Run on a custom port
npx @notionhq/notion-mcp-server --transport http --port 8080
# Bind to a different host. The default is 127.0.0.1.
npx @notionhq/notion-mcp-server --transport http --host 0.0.0.0
# Run with a custom authentication token
npx @notionhq/notion-mcp-server --transport http --auth-token "your-secret-token"
使用可串流的 HTTP 傳輸時,伺服器預設可在 http://127.0.0.1:<port>/mcp 上使用。
驗證
可串流的 HTTP 傳輸需要 Bearer 權杖驗證以確保安全性。您有三個選項:
選項 1:自動產生的權杖(僅供開發使用)
npx @notionhq/notion-mcp-server --transport http
伺服器將產生一個安全的隨機權杖,並將其寫入具有受限權限的檔案:
Generated auth token written to: /tmp/.notion-mcp-auth-token-12345
選項 2:透過命令列自訂權杖(建議用於生產環境)
npx @notionhq/notion-mcp-server --transport http --auth-token "your-secret-token"
選項 3:透過環境變數自訂權杖(建議用於生產環境)
AUTH_TOKEN="your-secret-token" npx @notionhq/notion-mcp-server --transport http
如果同時提供,命令列引數 --auth-token 的優先權高於 AUTH_TOKEN 環境變數。
不安全選項:停用 HTTP 驗證
您只能透過明確的不安全旗標來停用 Bearer 權杖驗證:
npx @notionhq/notion-mcp-server --transport http --unsafe-disable-auth
警告:--unsafe-disable-auth 是不安全的。伺服器可能會透過 DNS 重新綁定對您造訪的頁面開放存取。請僅在隔離的網路上使用。
當驗證停用時,伺服器會透過檢查 Host 和 Origin 標頭是否符合設定的本機主機和迴路主機來啟用 DNS 重新綁定保護。先前的 --disable-auth 旗標仍被接受為已棄用的別名,但會印出警告。
發出 HTTP 請求
所有對可串流 HTTP 傳輸的請求都必須在 Authorization 標頭中包含 Bearer 權杖:
# Example request
curl -H "Authorization: Bearer your-token-here" \
-H "Content-Type: application/json" \
-H "mcp-session-id: your-session-id" \
-d '{"jsonrpc": "2.0", "method": "initialize", "params": {}, "id": 1}' \
http://localhost:3000/mcp
注意: 使用任一傳輸模式時,請確保設定 NOTION_TOKEN 環境變數(建議)或 OPENAPI_MCP_HEADERS 環境變數,並帶有您的 Notion 整合權杖。
服務多個整合(每個請求的權杖傳遞)
預設情況下,伺服器在啟動時使用單一權杖向 Notion 進行驗證,這會將一個部署鎖定到一個 Notion 整合。若要讓單一部署能服務多個整合,請啟用權杖傳遞,以便每個客戶端在每個連線中提供自己的 Notion 整合權杖:
# Enable per-request Notion tokens (flag or ENABLE_TOKEN_PASSTHROUGH=true)
npx @notionhq/notion-mcp-server --transport http --enable-token-passthrough
然後,客戶端在 initialize 請求中使用專用的 Notion-Token 標頭傳送其 Notion 權杖:
curl -H "Authorization: Bearer <server-auth-token>" \
-H "Notion-Token: ntn_****" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "initialize", "params": {}, "id": 1}' \
http://localhost:3000/mcp
每個連線的權杖解析順序如下:
Notion-Token標頭(首選 — 明確無歧義,且可與伺服器自身的Authorization閘道驗證並存)。如果存在,它必須是有效的 Notion 權杖,否則請求會以401被拒絕。Authorization: Bearer ntn_****— 僅當伺服器自身的 Bearer 驗證關閉時(--unsafe-disable-auth),此標頭才能直接用於攜帶 Notion 權杖。- 否則,如果設定了啟動時的環境變數權杖(
NOTION_TOKEN/OPENAPI_MCP_HEADERS),則使用該權杖,這樣權杖傳遞和預設整合可以在一個部署中共存。
注意事項:
- 只有帶有 Notion 權杖前綴(
ntn_、舊版secret_)的值才會被視為 Notion 權杖,因此伺服器的閘道密鑰和租用戶的 Notion 權杖永遠不會衝突。 - 每個權杖都綁定到其 MCP 工作階段;權杖絕不會被記錄(只會發出經過遮蔽的前綴)。
- 這是一個經過深思熟慮的權杖傳遞設定。請務必透過 TLS 部署,並建議保持伺服器自身的 Bearer 驗證(
--auth-token)啟用,作為多租用戶流量前的閘道。
範例
- 使用以下指令
Comment "Hello MCP" on page "Getting started"
AI 將正確規劃兩個 API 呼叫,v1/search 和 v1/comments,以完成任務
- 同樣地,以下指令將導致在父頁面「Development」中新增一個名為「Notion MCP」的頁面
Add a page titled "Notion MCP" to page "Development"
- 您也可以直接參照內容 ID
Get the content of page 1a6b35e6e67f802fa7e1d27686f017f2
開發
建置與測試
npm run build
npm test
執行
npx -y --prefix /path/to/local/notion-mcp-server @notionhq/notion-mcp-server
在 Cursor 中本機測試變更:
- 從儲存庫根目錄執行
npm link命令,以建立指向notion-mcp-server套件的機器全域符號連結。 - 將下方的設定片段合併到 Cursor 的
mcp.json(或您想測試的其他 MCP 客戶端)中。 - (清理)從儲存庫根目錄執行
npm unlink。
{
"mcpServers": {
"notion-local-package": {
"command": "notion-mcp-server",
"env": {
"NOTION_TOKEN": "ntn_..."
}
}
}
}
發布
npm login
npm publish --access public