☰
DeepSeekHarness(番外01):MCP与Skill配置不再手改YAML,一条命令接入15个服务器
2026/9/25 13:05:45 网站建设 项目流程

1. 手改 YAML 装 MCP 到底有多痛

如果你正在用 DeepSeekHarness 折腾 MCP 和 Skill,大概率经历过这个场景:想加一个 GitHub 服务器,打开cordis.patch.yml,对着 12 个字段的 insert patch 一个一个填,id、command、args、env、transport、reconnect……填完保存,重启,发现工具没出来,再回去查是不是缩进错了。加第二个服务器,重复一遍。加到第五个的时候,你已经不想再加了。

这不是你笨,是手工路线本身就不适合批量操作。DeepSeekHarness 的 MCP 配置本质上是往注册表里写结构化数据,而 YAML 手写的方式把这个过程变成了「人肉序列化」——每个字段都要精确,每个缩进都不能错,密钥还要手动清理成引用格式。一个服务器 5 分钟,15 个就是 75 分钟,还不算调试时间。

dsh-install 这个插件就是来解决这个问题的。它把 MCP 服务器和 Skill 的安装、启停、改配置、诊断、迁移全部变成一条命令,内置 15 个常用服务器目录,支持任意 npm 包接入,改配置免重启。我实测下来,从零到接入第一个 MCP 服务器大概 5 分钟,之后每加一个服务器就是一行命令的事。

这篇文章面向的是已经在用 DeepSeekHarness、想批量管理 MCP 与 Skill 的开发者。不需要 TypeScript 基础,所有操作都在 PowerShell 里敲命令完成。读完之后你能做到:用一条命令装服务器、免重启换模型、用 doctor 诊断问题、把 Claude Code 的旧配置迁移过来,以及遇到 5 个常见报错时知道去哪查。

2. TaoToken 前置:统一 Key 与 API 通道

在装 MCP 服务器之前,先把模型通道配好。DeepSeekHarness 本身需要模型后端,而 MCP 服务器里的视觉理解、文档查询这类工具也需要 API Key。如果每个服务器都单独配一套 Key,管理起来会很乱。

TaoToken 在这里的角色是统一入口:一个 Key 走通模型对话和 API 调用,不用在多个平台之间切换。你可以先到官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 了解一下,然后进控制台创建 API Key。

具体操作路径:打开 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,在 API Keys 页面生成一个 Key。这个 Key 后面会作为环境变量注入到 MCP 服务器的配置里,注册表里只存${TAOTOKEN_API_KEY}这样的引用,不落明文。

如果你主要做模型对话测试,可以到 https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 先验证 Key 能不能正常调通。如果是要长期跑编码任务或者 Agent 场景,建议看一下 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,按套餐走比单次调用划算。

接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,API 基础地址是 https://taotoken.net/api ,注意这个地址不加 UTM 参数,直接用于代码里的 base_url 配置。

配好之后,在 PowerShell 里设置环境变量:

setx TAOTOKEN_API_KEY "你的Key"

新开一个终端让变量生效。后面所有 MCP 服务器的配置里,涉及 Key 的地方都写${TAOTOKEN_API_KEY},挂载时从环境展开。

3. 可复制配置:dsh-install 安装与骨架

3.1 环境检查

先确认基础环境。DeepSeekHarness 版本建议 v0.1.0-rc.5 及以上,Node.js 需要 ^22.19.0 或 ≥24,pnpm 建议 11.7.0。

dsh --version npx --version uvx --version docker --version

dsh --version应该输出0.1.0-rc.5或更高。npx随 Node 自带,装 node 系 MCP 需要。uvx是 Python 系 MCP 的运行时,没有的话pip install uv或pipx install uv。docker只有装 docker-* 条目才需要。

3.2 安装 dsh-install 到两个 profile

dsh-install 需要装到两个 profile:install profile 承载命令行,web profile 承载聚合器。

dsh plugin --profile install add @dsh-tools/dsh-install dsh plugin --profile web add @dsh-tools/dsh-install

预期输出里会出现+ @dsh-tools/dsh-install ^0.1.0,以及Done in xxxms using pnpm v11.7.0。如果看到[WARN] Issues with peer dependencies found,这是无害的——插件故意把 cordis、dsh-mcp-client 声明为 peer dependency,复用 harness 自己安装的那份,避免版本漂移。

3.3 启用聚合器行

这是全文唯一一次手改 YAML。打开<DSH_HOME>\profiles\web\cordis.patch.yml,初始内容只有一段注释,改成:

- id: mcp-registry disabled: false

机制是这样的:bundle 自带的 patch 里mcp-registry行默认disabled: true,聚合器默认不打扰任何人。你的 profile patch 层优先级更高,写disabled: false即覆盖启用。保存即热生效。

3.4 重启一次 web

装/卸插件包属于 bundle 层改动,只在 boot 时读入,所以必须重启一次 web。在启动 web 的窗口按 Ctrl+C,然后重新启动:

dsh web

此后所有 mcp/skills 命令的改动全部免重启。

3.5 验证安装

dsh --profile install mcp list

没有报错、列表为空就是正常的。然后在 web 输入框敲/,命令面板应该出现/mcp、/skills两个斜杠命令。

3.6 config.toml / settings.json 骨架参考

如果你习惯用配置文件的方式管理,这里给一份骨架。注意 dsh-install 的主存储是<DSH_HOME>\mcp.json,下面的 config.toml 是给需要对接其他工具链的场景参考的:

# config.toml 骨架参考 [model] provider = "taotoken" base_url = "https://taotoken.net/api" api_key = "${TAOTOKEN_API_KEY}" model = "deepseek-chat" [mcp.github] command = "npx" args = ["-y", "@modelcontextprotocol/server-github"] env = { GITHUB_TOKEN = "${GITHUB_TOKEN}" } [mcp.zai] command = "npx" args = ["-y", "@z_ai/mcp-server"] env = { ZAI_API_KEY = "${ZAI_API_KEY}", Z_AI_VISION_MODEL = "GLM-4.6V-Flash" }

settings.json 骨架:

{ "mcpServers": { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } }, "zai": { "command": "npx", "args": ["-y", "@z_ai/mcp-server"], "env": { "ZAI_API_KEY": "${ZAI_API_KEY}", "Z_AI_VISION_MODEL": "GLM-4.6V-Flash" } } } }

4. 一条命令接入 15 个服务器

4.1 内置目录一览

dsh-install 内置了 15 个常用服务器,mcp add <名字>即可,不用记 npx 命令:

名字运行时说明特殊要求
githubnpxIssue/PR/仓库搜索-e GITHUB_TOKEN
filesystemnpx读写指定目录-- 补路径参数
everythingnpx集成测试服务器—
memorynpx知识图谱记忆—
sequential-thinkingnpx分步推理—
fetchuvx网页转 Markdown需 uvx
gituvxGit 仓库操作需 uvx
sqliteuvxSQLite 查询-- 补库路径
timeuvx时间与时区换算需 uvx
sentrynpxSentry 错误监控-- 补 --auth-token
context7npx实时库文档查询—
playwrightnpx浏览器自动化—
brave-searchnpxBrave 搜索 API-e BRAVE_API_KEY
docker-gitdockerGit 操作(Docker)需 docker
docker-fetchdocker网页抓取(Docker)需 docker

4.2 批量接入示例

装官方 GitHub 服务器:

dsh --profile install mcp add github -e GITHUB_TOKEN

mcp list立即出现github stdio, user cli。三列含义:名字、传输方式+作用域、来源标签。

装智谱视觉 MCP(任意包用--形式):

dsh --profile install mcp add zai -e ZAI_API_KEY -- npx -y @z_ai/mcp-server

语法红线三条:--是分界线,之后内容原样成为启动命令;-e等选项必须在--之前;-e KEY=VALUE存字面值,-e KEY存环境变量引用,装密钥永远用第二种。

验证存储内容:

dsh --profile install mcp get zai

输出里env应该是"ZAI_API_KEY": "${ZAI_API_KEY}",不是明文。

4.3 生命周期命令

dsh --profile install mcp list [--format json] dsh --profile install mcp get zai dsh --profile install mcp on zai dsh --profile install mcp off zai dsh --profile install mcp remove zai [--all] [--dry-run]

免重启换模型:

dsh --profile install mcp update zai -e Z_AI_VISION_MODEL=GLM-4.6V-Flash -e ZAI_API_KEY -- npx -y @z_ai/mcp-server

注意 update 会整体重写该条目,原来带过的-e要重新声明一遍。

4.4 Skill 安装

dsh --profile install skills add .\my-skill dsh --profile install skills add github:owner/repo#subdir@v1.0 dsh --profile install skills add <path> --link dsh --profile install skills list dsh --profile install skills remove <n> [--all] [--dry-run]

装进<DSH_HOME>\skills或<project>\.dsh\skills,harness 的 skill 提供方自带 watcher 自动发现,免重启。

4.5 迁移旧配置

dsh --profile install mcp import --from claude dsh --profile install mcp import --from codex dsh --profile install mcp import --from mcp-json [--path <p>] dsh --profile install mcp import --from auto

迁移的是服务器定义,密钥字段一律以${VAR}引用形式落盘。

5. 验证请求与成功结果

5.1 doctor 诊断

dsh --profile install mcp doctor zai

预期输出:

runtime "npx" found at D:\Program Files (x86)\nodejs\npx env var ZAI_API_KEY is not set

两条信息直击要害:运行时在不在 PATH、env 引用的环境变量在不在当前环境。`` 意味着注册表写的是${ZAI_API_KEY},但当前终端没有这个变量。补上setx ZAI_API_KEY "你的Key",新终端生效后再跑 doctor。

5.2 会话内验证

重启 web 后开新会话,模型工具列表应该出现mcp__<server>__<tool>格式的工具。比如装了 github 服务器,会出现mcp__github__search_repositories这类工具。

输入框敲/,命令面板出现/mcp、/skills。用/mcp可以查看当前挂载的服务器列表。

5.3 实际调用测试

以 zai 视觉 MCP 为例,在会话里让模型调用mcp__zai__analyze_image,传入一张图片的 URL。如果返回正常的图片描述,说明整条链路通了:注册表 → 聚合器 → 工具挂载 → 模型调用 → TaoToken 通道 → 返回结果。

如果报1113 insufficient balance,说明默认视觉模型glm-4.6v是付费的,换成GLM-4.6V-Flash即可:

dsh --profile install mcp update zai -e Z_AI_VISION_MODEL=GLM-4.6V-Flash -e ZAI_API_KEY -- npx -y @z_ai/mcp-server

再次调用,错误码从 1113 变成 1305service temporarily overloaded,说明请求已进入免费模型的限流逻辑,换模型成功。

6. 本篇常见错排查

6.1 路径含 & 被截断

报错:[WARN] Installing a dependency from a non-existent directory: D:/Workspace/DSH-Install-MCP

根因:&在 shell 里是元字符,路径DSH-Install-MCP&Skill在&处被切断。即使路径没有&,目录安装是 link 安装,pnpm 只建符号链接、不把依赖装进 profile。

修复:pack 成 tarball 再 add,或直接用 npm 包名:

pnpm --dir packages/dsh-install pack --pack-destination .\.local\dist dsh plugin --profile install add D:\...\dsh-tools-dsh-install-0.1.0.tgz

6.2 模型看不到 MCP 工具

没有报错,但 web 会话里就是没有mcp__*工具。三查清单:

第一查聚合器行:<DSH_HOME>\profiles\web\cordis.patch.yml是否含- id: mcp-registry且disabled: false。

第二查是否重启过 web:bundle 层只在 boot 读入,装完包直接继续用旧会话,插件代码还没加载。

第三查 doctor:mcp doctor <n>是否 runtime 、env 无 。

6.3 密钥写进 -- 后面

错误写法:

dsh --profile install mcp add zai -- npx -y @z_ai/mcp-server -e ZAI_API_KEY=sk-xxxx

后果:-e没被识别成 env,认证失败;mcp get zai里 args 躺着明文密钥,还可能被模型带进聊天记录。

修复:删条目、轮换密钥、用正确姿势重装:

dsh --profile install mcp remove zai setx ZAI_API_KEY "轮换后的新Key" dsh --profile install mcp add zai -e ZAI_API_KEY -- npx -y @z_ai/mcp-server

6.4 迁移 DSH_HOME 后启动报错

根因:Windows 普通复制会把 junction 解引用成真实目录,链接拓扑被破坏。

修复:改名触发自愈,或直接用 robocopy /XJ:

Rename-Item $env:DSH_HOME\profiles\node_modules node_modules.bak dsh web robocopy C:\Users\<用户名>\.dsh D:\Agents\.dsh /E /XJ

6.5 doctor 报 env var not set

setx ZAI_API_KEY "你的Key"

新开终端再跑 doctor。注意 setx 只对新终端生效,当前终端需要手动$env:ZAI_API_KEY="..."。

7. 语义一致 CTA

排障和接入相关的问题,建议先看 API Keys 页面和接入文档:

  • API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
  • 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite

想先验证模型通道是否正常,到模型对话页面试一下:

  • 模型对话:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite

长期跑编码任务或 Agent 场景,看 Coding Plan:

  • Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite

如果你用的是 Claude Code 或 Anthropic 系工具链,这里有专门的接入说明:

  • ClaudeCodeAnthropic:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claudecodeanthropic&utm_campaign=rewrite

最后,日常管理命令速查:

dsh --profile install mcp list dsh --profile install mcp doctor <n> dsh --profile install mcp on/off <n> dsh --profile install mcp update <n> -e KEY -- <command> dsh --profile install skills list

审计日志在<DSH_HOME>\logs\install.jsonl,出问题可以Get-Content按时间回放。注册表在<DSH_HOME>\mcp.json,密钥只存${VAR}引用,全文没有明文。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询