DeepSeek Harness(DSH)实战:接入MCP配置指南
DeepSeek 刚发布了 DSH,一个开源智能体框架,自带插件系统和 MCP 客户端。本文一步步带你实操:安装 DSH、把 MCP 服务器配进 profile,再在聊天界面里调用自定义 SEO 工具。
一句话总结 —— DSH(npm @deepseek-ai/dsh)是 DeepSeek 的开源智能体框架:自带 web UI、插件 profile 体系、内置 MCP 客户端。安装约 10 分钟。本文完整走一遍:安装、启动 web UI,再把自定义 MCP 工具服务器接进 profile,让模型原生调用你自己的 Python 工具——全部是真实运行的输出,不是演示。
每一个新的 agent harness 都会遇到同一个冷启动问题:为什么不直接用 Claude Code 就完事了?DeepSeek 给出的答案是 DSH,它安静地以 @deepseek-ai/dsh 的名义发布在 npm 上,它的定位不是”更好的聊天工具”,而是一个可组合的 harness——终端工具、web UI、甚至模型路由,全都是栈里的一个插件。找不到的插件,你随时可以通过 MCP 自己接上去。
最后这一点才是本文真正要测的东西。我们装了 DSH,跑了它的 web UI,然后接上了我们自己的 MCP server——ZensInk SEO 工具包——这样模型就能在对话里直接调用 22 个 SEO 工具(keyword_research、kd、geo_score…)。下面所有的输出都是那次会话的真实结果,不是 mockup。
DSH 到底是什么
抛开 branding 不谈,DSH 就是三层东西叠在 Cordis 插件内核上:
- 一个启动 CLI。
dsh --profile <name>按顺序组合插件 bundle 栈——基础层、模式层(web/headless/tui)、然后是你的个人 patch 文件。后面的层按配置行覆盖前面的层。 - 一个 Web UI。
dsh web启动一个本地聊天界面,支持会话、plan 模式、终端视图和 markdown 渲染。默认只监听 loopback。 - 一个 MCP 客户端。
@deepseek-ai/dsh-mcp-client插件通过 stdio 或 streamable-http 连接外部 MCP server,把它们的工具注册成模型的原生工具,用的是和 Claude Code、Codex 一样的mcp__<server>__<tool>命名约定。
profile 系统才是最有意思的部分。你的自定义配置不会修改任何已安装的代码——它们存放在一个 cordis.patch.yml 覆盖文件里,每次启动时自动应用。升级 harness 永远不会覆盖你的配置,而且 HMR 会在你保存文件的瞬间热重载。
安装和首次启动
需要 Node 18+ 和 DeepSeek API key。
npm install -g @deepseek-ai/dsh
export DEEPSEEK_API_KEY=sk-your-key
dsh web
安装就这么多。dsh web 启动默认的 web profile 并打印一个 localhost URL。打开就是一个聊天界面——新建会话、输入提示词、模型带着 bash、文件编辑和网页搜索的工具权限开始干活。
有一个细节值得知道:模型凭证存放在 ~/.dsh/settings.yaml 里,不在 profile 里。web UI 的 Models 页面会写入那里。如果你第一条提示词报 MISSING_CREDENTIAL,那就是 key 没配好。
关键部分:接入 MCP server
下面是值得切换工具链的工作流。假设你有一个工具 server——我们的是暴露 SEO CLI 工具的 Python MCP server,但也可以是数据库客户端、部署工具,任何能通过 stdio 说 MCP 的东西。
DSH 的 MCP 桥接只需要一条配置项。编辑 ~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: mcp-zensink
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: zensink
transport: stdio
command: python3
args: ['-m', 'zens_ink.mcp']
cwd: /path/to/your/mcp-server
toolCallTimeoutMs: 300000
保存文件。不用重启——HMR 会自动断开并重连 server,工具就会出现。模型现在能看到 mcp__zensink__keyword_research、mcp__zensink__kd 以及另外二十多个工具,就像它们是内置的一样。
真实会话:在聊天里调用 SEO 工具
接好 server 之后,我们用一句大白话问会话:“classify the search intent for ‘best astro seo plugin’ and ‘buy seo audit tool’.”
模型自己选了 mcp__zensink__search_intent,返回:
"best astro seo tool" → commercial (0.85, ranked-list content type)
"buy seo audit tool" → transactional (0.85, buyer flag set)
两秒钟、一次工具调用、零手动命令。同一个会话随后又用 geo_score 给一个本地 HTML 文件打分(46/100,D 级,附带五层明细)——又是靠一句话完成的。
这就是这个方案的价值所在:你的脚本不再是”我记得怎么调用”的东西,而变成了”模型替你编排”的东西。“找我这个细分领域的长尾关键词,聚类,然后给赢家打分”变成了一条消息,自动串联 keyword_research → keyword_cluster → kgr_auto。
长耗时工具的超时调优
我们踩了一个坑:默认的单次调用超时是 60 秒,对批量工具来说太紧了。一个完整的 audit 流水线可能要跑好几分钟。需要按 server 设置 toolCallTimeoutMs——我们在 audit 密集型 profile 里用的是 3,600,000(一小时)。超时是按单次工具调用算的,不是按会话算的,所以聊天频繁的工具不受影响。
另外注意上面配置里的 cwd:stdio server 会以那个工作目录启动,如果你的 server 要解析相对路径(.env 文件、数据缓存),这就很重要。不设置的话,你会继承 shell 当前的 cwd,然后在凌晨两点被各种莫名其妙的 “file not found” 折磨。
谁应该关注
经过一周的日常使用,三个诚实的评价:
- 如果你在用 Claude Code 而且用得挺好:MCP 命名是兼容的,但没必要现在迁移一个能正常工作的环境。关注这个项目就好。
- 如果你在做 agent 工具链:插件 bundle 架构确实干净。把 profile 当作有序 patch 层的设计,比大多数 dotfile 方案更好地解决了”我的配置 vs 上游更新”的问题。
- 如果你把 DeepSeek 当主力模型:这就是原生 harness,而且模型路由适配层意味着同一个 profile 可以在不同 provider 之间通用。
光是那个 MCP 客户端就改变了自建工具的经济性。用纯 Python 写一个 stdio MCP server 只需要一个下午;之后,每个聊天会话里你的工具都是一等公民。
自己验证
我们接入的 SEO 工具包是开源的——16 个免费工具、零 pip 依赖,就是本文里记录的那个 MCP server。克隆下来,跑 python3 -m zens_ink.mcp,粘贴上面那段配置,你就有个参考集成可以用来边玩边评估 DSH。
如果想在这个基础上做关键词发现工作流,可以看看我们如何用 Python 挖掘 autocomplete 数据和用免费 CLI 审计 Astro 站点的 SEO。完整的工具参考在文档里。
FAQ
DeepSeek Harness(DSH)是什么?
DSH 是 DeepSeek 的开源智能体框架(npm 包 @deepseek-ai/dsh)。它按顺序加载称为 profile 的插件 bundle 栈,自带本地 web UI,并内置 MCP 客户端,外部工具服务器可以直接注册为模型原生工具。
怎么给 DSH 添加 MCP 服务器?
编辑 profile 目录(~/.dsh/profiles/web/)下的 cordis.patch.yml,插入一个使用 @deepseek-ai/dsh-mcp-client 的条目,配置 transport stdio、启动命令和 toolCallTimeoutMs。HMR 会自动热加载,无需重启。
DSH 收费吗?
框架本身 MIT 开源免费。模型调用需要 DeepSeek API key,也可以通过它的 LLM 适配层接入其他服务商。
DSH 能替代 Claude Code 吗?
定位不同:DSH 是基于 Cordis 插件系统的可组合框架,而非一体化 CLI。它使用相同的 MCP 工具命名约定(mcp__server__tool),现有 MCP 服务器两边都能用。