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 约束写删风险。

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

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

小夜