前言¶
DSH 的官方理念是「一切皆插件」,一个外部系统接进 DSH,通常意味着你要写一份连接器清单,声明连接对象、授权方式、启动命令或 URL。这类清单的问题不在于「写不出来」,而在于写完之后很难回答三个问题:文件结构是否符合 schema、有没有把真实凭证写进文件、分享给别人之后会不会踩到同名冲突。更多时候,Agent 直接改了 mcp-servers.json 或者把 Token 写进了命令行,出了问题才回头查。
下面介绍的 wilshi/dsh-connector-builder 就是把这件事流程化:把「让 DSH 接入一个外部系统/API」交付为标准、安全、可分享的 *.dsh-connector.json。
这是什么¶
这是一个面向 DSH 0.1.5-rc.2 的 Skill 加工具箱,维护者是 WilShi。它注册一个叫 create-dsh-connector 的 Skill,覆盖需求确认、隔离实现、分步验证、注册门禁和分享导入,另外附一个 connector-toolkit.mjs 命令行工具箱处理脚手架、校验、打包和注册。仓库按 MIT License 发布,语言是 TypeScript,package.json 版本号是 0.1.0,标记为 private。
在社区目录中它被归入「工作流」分类,GitHub 上的星标数目前是 0,可以理解为一个刚公开不久的个人项目。它不是官方仓库,SkillHub 目录页也是独立的社区站点,与 DeepSeek / 幻方没有官方从属关系。
核心能力¶
README 与 SKILL.md 里写明的能力可以归为四块。
- 流程 Skill:
create-dsh-connector按「先确认方案 → 隔离实现 → 分步验证 → 注册门禁」的顺序推进,并且在每个需要用户决策的点停下来等明确确认。 - 两种连接器类型:
mcp-stdio(本地进程)和mcp-http(远程 MCP)。有现成 MCP Server 就直接做清单;没有就先在隔离目录里实现并测试 Server。 - 工具箱
connector-toolkit.mjs:
scaffold:生成安全的起点,凭证只写${ENV_KEY}占位符;validate:校验清单结构、安全占位符、内置 ID / serverName 冲突;package:导出分享文件并复核,确保不含真实凭证;register/unregister(remove是同义别名):在目标 DSH home 中写入或移除连接器目录注册。
- 安全红线原样摘录:不把 Token、Cookie、密码写入设计、命令行、源码或分享文件;不修改
deepseek-harness本体;不直接编辑mcp-servers.json。
安装与启用¶
这个仓库没有提供 dsh plugin add github:owner/repo 形式的安装命令。README 明确说明本仓库是「来自一个 Yarn workspace 的 packages/ 目录」的源码快照,构建需在拥有兼容 DSH 依赖的工作区中进行;仓库根目录只含 src、skills、tests、package.json、tsconfig.json、tsdown.config.ts、cordis.patch.yml 等文件,不含 lockfile,实际的构建宿主需要你自己准备。package.json 里的依赖是 dsh-connectors: workspace:*,peerDependencies 是 @deepseek-ai/cordis 4.0.2 和 @deepseek-ai/dsh-skill 0.1.5-rc.2,engines 要求 Node ^22.19.0 || ^24.0.0。
package.json 的 scripts 只有三条,内容如下,具体用哪个包管理器跑,取决于你自己那套兼容 DSH 的 workspace:
build = tsdown
typecheck = tsc -p tsconfig.json --noEmit
test = vitest run --pool=threads --maxWorkers=1 --no-file-parallelism
也就是说,先构建,再类型检查,再跑测试,每一步只做一件事。
启用方式不是命令行,而是在 DSH 中让 Agent 执行 create-dsh-connector,或者直接描述需求,例如「把团队搜索 API 做成 DSH 连接器」。Skill 会先读 references/schema.md 和目标系统的当前配置,给出方案,等你确认之后才动代码。
典型用法¶
下面几个命令都来自 SKILL.md,<skill-dir> 是 Skill 所在目录,需要替换成实际路径。
第一步生成起点,指定 ID、显示名、类型、启动命令和凭证环境变量名:
node <skill-dir>/scripts/connector-toolkit.mjs scaffold \
--id team-search \
--name "团队搜索" \
--description "检索团队知识库" \
--type stdio \
--command node \
--arg server.mjs \
--credential TEAM_TOKEN \
--output <isolated-dir>
HTTP 连接器把 --type stdio --command ... 换成 --type http --url https://example.test/mcp。--arg 可以重复,也可以传以 -- 开头的 MCP 参数,例如 --arg --stdio,为避免歧义写成 --arg=--stdio 也可以。
第二步校验清单,这一步只检查结构、占位符和内置冲突:
node <skill-dir>/scripts/connector-toolkit.mjs validate <manifest>
第三步打包成分享文件,输出后会再做一次凭证复核:
node <skill-dir>/scripts/connector-toolkit.mjs package <manifest> --output <id>.dsh-connector.json
第四步注册。这里有一个门禁:方案确认、同意开始实现、同意测试打包,都不等价于注册许可,Skill 必须单独展示目标 Profile/home、连接器 ID、是否覆盖、精确命令和回滚方式之后,再问一次是否注册。
node <skill-dir>/scripts/connector-toolkit.mjs register <manifest> --home <target-dsh-home>
更新已有自定义连接器必须额外传 --replace。回滚用:
node <skill-dir>/scripts/connector-toolkit.mjs unregister <connector-id> --home <target-dsh-home>
注册只写目标 Profile 的 connectors/custom-connectors.json,不会写凭证也不会自动启用,凭证由你在「设置 → 连接器」里单独填。
清单格式要点¶
references/schema.md 给出分享文件的结构,字段是 schemaVersion、kind: dsh-connector 和 connector 对象,其中 connector 里有 id、displayName、description、category、version、type、serverName、authFields 和 mcpServer。
约束值得单独记住:id 是小写字母、数字、连字符,1–48 字符;serverName 允许字母、数字、下划线、连字符,1–32 字符且不能与其他连接器重复;type 只能是 mcp-stdio 或 mcp-http;authFields[].envKey 必须是大写环境变量格式,凭证值不属于清单。HTTP 用 mcpServer.url 加可选 headers,stdio 用 mcpServer.command、args 和 env,任何涉及密钥的 Header、环境变量、URL 查询参数或命令参数都必须引用已声明的 ${ENV_KEY}。导入时 DSH 还会强制设置 managed: true、userToggleable: true、origin: user,分享文件里企图改这些所有权字段的值会被忽略。
连接器只描述 MCP 接入。如果还需要 DSH 页面、Host Service 或非 MCP 工具,就该走标准 DSH Bundle 的制作流程,必要时配合 cordis-plugin-development。
适用场景与注意事项¶
适合两类人:一是想让 Agent 帮忙把内部 API 或已有 MCP Server 接进 DSH,又不想自己手搓清单的人;二是想把做好的连接器安全地发给同事、让对方在自己的 DSH 里导入的人。分享文件只含结构,导入方再单独配置凭证,这样同一份文件在各团队之间可以安全流转。
有几点必须知道。这个插件以当前 DSH 进程权限运行,注册命令会写入你指定的 DSH home 目录,所以授予权限之前先看源码和 cordis.patch.yml,确认没有问题再让它注册。它针对 DSH 0.1.5-rc.2 编写,DSH 目前处于 developer preview 阶段,官方明确会持续产生兼容性破坏变更,新版本下可能需要重新校验。仓库是源码快照而非正式发布包,版本号 0.1.0、private: true,意味着它不适合直接当作依赖版本来引用,更现实的用法是把它的 skills/ 目录作为 Skill 源来使用。另外它只覆盖连接器这一层,不要把「格式校验通过」等同于「MCP 已连通」,validate 之后仍需在真实 DSH 里做启动、initialize、tools/list 和断开路径的检查。
结尾¶
回头再看,这个插件的价值不在新增了多少功能,而在把连接器制作的几个容易出问题的环节固定下来:凭证只留占位符、校验集中在工具箱里、注册前必须过一次明确确认。作为个人维护的工作流类插件,星标数和复用情况还需要观察,但清单约束、校验逻辑和注册门禁这些设计是可以直接参考的。
- 社区目录页:https://www.skillhub.cn/plugins/WilShi/dsh-connector-builder
- 源码仓库:https://github.com/WilShi/dsh-connector-builder