dsh-notion:在 DSH 裏用六個工具操作 Notion

前言

在 DeepSeek Harness(DSH)裏接 Notion,常見做法是掛 Notion 官方 MCP。官方 MCP 會暴露大量工具(數量隨版本變動,往往 60+),能力重疊、命名分散。模型每輪要消化的 schema 變長,選錯工具的概率也會上去,實際改一頁、查一張表反而更慢。

dsh-notion 走另一條路:不維護一套獨立 API 客戶端,而是基於 Notion 官方的 ntn CLI,把日常最高頻的動作收成 六個 具名工具(找、讀、建、改、刪,再加查表)。工具名即動作,沒有統一的 action 參數;改正文用查找替換,不提供整頁覆蓋。下面介紹它是什麼、怎麼裝、典型參數長什麼樣。

這是什麼

dsh-notion 由社區維護者 tututuhehehe 發佈,在 SkillHub 插件目錄 中歸類爲「聯網工具」。源碼與說明見 GitHub:tututuhehehe/dsh-notion(當前 package 版本 1.1.1,許可證 MIT)。

定位一句話:爲 DeepSeek Harness 提供六個收斂後的 Notion 工具,底層調用官方 ntn CLI,而不是 Notion 官方 MCP 服務器。 返回給模型的是結構化、精簡的 JSON 字段,而不是整份原始 Notion 對象。寫操作帶校驗與回滾:庫頁屬性按 schema 校驗、create 失敗自動回滾、移動拒絕成環和覆蓋;有子頁面的刪除需經 doublecheck 複覈。

爲什麼是六個工具,而不是幾十個

Notion 官方 MCP 工具面大,dsh-notion deliberately 縮小範圍:

  • 找 → 讀 → 建 → 改 → 刪,外加 對已知庫/ data source 查行(notion_query)。
  • notion_search 找對象(按標題搜 page / database),notion_query 查表裏的行;職責不混。
  • 建頁、改頁、刪頁各是一個工具,參數只聲明該動作真正接受的字段,避免建頁誤帶 old_str、改頁誤把 database:<id> 當父級之類的問題。
  • 後續 README 說明只會補充確實必要的能力(如評論、文件上傳),不爲「全」而堆工具。
工具 作用 典型場景
notion_search 按標題搜索工作區(page / database) 還沒有 id,先「找一下某頁」
notion_get 讀頁面 Markdown,或讀數據庫/data source 的 schema 讀正文、看有哪些列可寫
notion_page_create 新建頁面或數據庫行 新建頁、寫列、掛父級
notion_page_edit 查找替換正文、改標題/列/圖標、移動父級 改一句話、補一段、改狀態、搬家
notion_page_trash 刪除頁面或行(有子頁面時先複覈) 刪掉廢棄頁
notion_query 對已知 database/data source 做 filter / sort / 分頁 「這個庫裏未完成的任務有哪些」

三個寫工具(create / edit / trash)的 timeoutMs 均爲 180 秒,isConcurrencySafe 均爲 false(每個動作都可能寫入)。

安裝與啓用

DSH 生態是「一切皆插件」;SkillHub 目錄是社區站點,與 DeepSeek / 幻方無官方從屬關係。安裝前請自行查看倉庫源碼與 MIT 許可證。插件以當前 dsh 進程的權限運行,token 與 ntn 調用都在該環境下生效。

1. 安裝官方 Notion CLI

先裝 ntn,並確認版本:

# macOS (Homebrew)
brew install --cask notion-cli

# 或 npm
npm i -g ntn

ntn --version

登錄二選一:執行 ntn login,或配置 NOTION_API_TOKEN(見下一步)。

2. 把插件裝進 DeepSeek Harness

需要 profile 可寫。README 給出的方式是本地 bundle 或 git 地址,不要憑插件名自行拼接未在文檔出現的命令:

plugin_manager install_bundle  target=/absolute/path/to/dsh-notion

也可以直接用 git 地址安裝。裝好後插件行 id 爲 notion-tools,上述六個工具會出現在工具列表裏。

3. 配置 token 與可選字段

Token 不寫進插件代碼,按優先級讀取:

  1. 環境變量 NOTION_API_TOKEN
  2. 插件目錄內的 notion-token 文件(首個非註釋行)
  3. ntn login 保存的登錄態
export NOTION_API_TOKEN=secret_xxx
# 或
echo 'secret_xxx' > <插件目錄>/notion-token

Integration 必須在 Notion 裏 Share 給目標頁面/數據庫,否則 API 可能返回 404。

字段 默認 說明
tokenFile notion-token token 文件;相對路徑按插件目錄解析
workspaceId 空 多 workspace token 時指定(NOTION_WORKSPACE_ID)
ntnPath 自動發現 ntn 可執行文件路徑
timeoutMs 60000 單次 ntn 調用超時(毫秒)

典型用法

以下 JSON 示例均來自插件 README,可直接對照工具 schema 使用。

搜索(還沒有 id 時):

{ "query": "項目計劃", "limit": 10, "filter_object": "page" }

讀取頁面 Markdown 或庫 schema:

{ "id_or_url": "https://www.notion.so/<id>", "format": "md" }
{ "id_or_url": "<database-id>" }

新建子頁或數據庫行(body_content、icon 與 title 平級;props 只放真實列):

{ "parent": "page:<page-id>", "title": "標題",
  "body_content": "# 正文標題\n\n正文", "icon": "🎯" }

{ "parent": "data-source:<ds-id>", "title": "任務 A",
  "body_content": "說明",
  "props": { "Status": "進行中", "標籤": ["驗收"],
             "截止日期": "2026-01-31", "Done": false } }

改正文(查找替換;與 body_content 追加互斥,不可同傳):

{ "id": "<page-id>", "edits": [
    { "old_str": "舊的那句話", "new_str": "新的那句話" } ] }

查表(已知 database / data source id):

{
  "database_or_data_source": "<ds-id 或 url>",
  "limit": 25,
  "filter": { "property": "Status", "status": { "equals": "進行中" } },
  "sort": "截止日期 asc",
  "under": "<父行 id>"
}

刪除(有子頁面時第一次調用不刪,返回 pending;後續步驟用 double_check 並傳 yes: true/false):

{ "id": "<page-id>" }

notion_page_edit 一次調用可同時做正文、標題/列/圖標、移動父級,固定順序爲 (1) 正文 → (2) 標題/列/圖標 → (3) 移動;三步互相獨立,一步失敗不會取消其它步,響應中會說明哪些生效、哪些未命中。

改正文只有兩條路:傳 edits 做查找替換,或 不傳/空 edits 且傳 body_content 追加到頁尾。沒有整頁覆蓋模式;頁面上未提到的內容不會因一次調用被清空。

適用場景與注意

適合誰:已經在 DSH 裏跑智能體、希望用少量穩定工具讀寫 Notion 工作區的開發者;願意先裝 ntn、在 Notion 裏給 Integration 授權,並接受「工具面收斂」而不是 MCP 全量能力。

注意:

  • 目錄頁簡介若寫「四個工具」,以 GitHub README 爲準:當前爲六個工具,插件 id notion-tools。
  • 未知列名或只讀列會返回可寫列提示;值類型不符會指出屬性與期望類型。
  • notion_page_edit 仍兼容舊拼法 props.block_update(僅當未傳 edits 時),新調用請直接用頂層 edits。
  • 安裝與 token 配置涉及本機路徑與環境變量,生產環境請按團隊規範保管 secret_ token。

結尾

dsh-notion 把 Notion 日常操作收成六個動作清晰的工具,壓在官方 ntn CLI 之上,減輕 MCP 工具爆炸帶來的 schema 與誤選成本,並用查找替換約束改文方式、用校驗與 doublecheck 約束寫刪風險。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜