MCP 客户端(dsh-mcp-client)
MCP client bridge
别名:@deepseek-ai/dsh-mcp-client、MCP、MCP 接入、mcp-client
DSH 自带的 MCP 客户端桥接(@deepseek-ai/dsh-mcp-client,0.1.0-rc.6):一个插件实例接一台 MCP 服务器,把对方的工具注册进 ctx.tools,模型看到的名字是 mcp__<serverName>__<rawName>——与 Claude Code、Codex 同一套「服务器限定名」。
一句话
MCP 客户端桥接是 DSH 里唯一「把外部世界的工具接成模型能力」的官方通道:一台服务器 = 一个插件实例, 接上之后模型看到的是 mcp__github__create_issue 这样的原生工具,不再需要你去粘贴什么适配代码。
它解决什么问题
模型自己只能调用 harness 内建的那些工具。想让它在你的 GitHub、数据库、浏览器里干活,过去只有两条路: 写一个插件(要懂 DSH 的插件契约),或者把结果手工贴进对话。MCP 是第三条——外面已经有一大批 按协议暴露工具的服务器,桥接层把它们统一注册进来,你只写一段配置。
两种传输
一个实例接一台服务器,传输只有两种:
| 传输 | 要填 | 典型用途 |
|---|---|---|
stdio | command(+ args / env / cwd) | 本机进程。例:npx -y @modelcontextprotocol/server-github |
streamable-http | url(+ headers) | 已经在跑的 HTTP 服务,本机或远端 |
env 是合并进一个已经清理过的环境,不是替换;cwd 决定子进程的工作目录—— 涉及相对路径的服务器要留意这一项。
工具命名:这一段最容易踩坑
每个 MCP 工具在协议上有两个名字:
- 原始名(
rawName):在tools/call里上网线的那个; - 公开名:注册到
ctx.tools的mcp__<serverName>__<rawName>,模型看到的是它。
公开名会被规范到 DeepSeek 的函数名约定(64 字符、[A-Za-z0-9_-]);一旦发生替换或截断, 就会追加 (serverName, rawName) 的确定性 12 位十六进制 hash。这条设计的价值在于: 名字是 (serverName, rawName) 的纯函数——连接顺序、重新同步、别的服务器都不会让一个工具改名。 所以你的提示词里写死 mcp__github__create_issue 是安全的。
几条边界,都是实测口径:
- 两台服务器各有一个
search:各自带命名空间,共存,不冲突。 serverName重复:后加载的那个插件实例会失败(不是静默合并)。- 服务器在工具列表里把同一个名字列两次:整个列表按无效拒绝。
- 有外部注册抢占这个服务器的命名空间:整代回滚(绝不留下一个残缺的工具集),并明确报错。
断线、超时与启动失败
| 项 | 默认 | 说明 |
|---|---|---|
| 自动重连 | 开 | 首次失败等 500ms,之后翻倍,上限 30s |
| 重连尝试上限 | 10 次 | 连续失败到上限就彻底放弃(等下一次配置变更) |
| 单次工具调用超时 | 60s | toolCallTimeoutMs |
| 初始连接失败是否阻止激活 | 否 | failOnStartupError: false——配置写错时插件仍然挂上,只是没有工具 |
最后一项是个取舍:默认 false 让「服务器没起来」不至于连累整个 profile,代价是错误不显眼。 如果你希望配置写错时立刻炸出来,把它设成 true。
改配置不需要重启:HMR 会断开旧连接、按新配置重连;serverName 没变时工具名完全一致, 所以正在进行的对话不会因为改名而找不到工具。
凭据:这一页最大的风险点
stdio 用 env、HTTP 用 headers 传 token。给服务器什么凭据,模型就能用那些工具做到什么程度—— 一个全权限的 GitHub token 意味着它可以改你所有仓库。建议:
- 按最小必要给:只读的先用只读 token;
- 把 token 放在环境变量里,用配置的表达式语法引用,别写死在文件里;
- 记住这台服务器的工具对模型是始终可见可调用的,除非你在权限档位上另行限制。
怎么自己核实
本机就能核,不需要联网:
~/.dsh/profiles/node_modules/@deepseek-ai/dsh-mcp-client/README.zh.md
字段名、默认值、命名规则都在这份 README 里(快照 2026-10-02,0.1.0-rc.6)。 想确认某一台服务器到底暴露了哪些工具,就把它接上、看模型侧的可用工具列表—— 公开名一定是 mcp__<你填的 serverName>__<原始名>。
与别的东西的关系
- 它是插件(宿主侧),所以安装、版本、兼容这些事和别的插件一样走 profile 与 patch 层。
- 它接进来的工具属于那台服务器,不属于 DSH:服务器换了版本,工具名或行为可能变—— 这也是「名字是纯函数」这件事值得单独讲的原因。
- 想找服务器,别在本站翻:去 官方合集(快照 2026-10-02,约 9.09 万 star)。 本站只收「桥接机制 + 值得单独讲的接法」。
信息表
- auth
- stdio 走 env(如 GITHUB_TOKEN),HTTP 走 headers.Authorization。给服务器什么 token,模型就能用它做什么——按最小必要给。
- category
- capability.mcp
- docs
- https://modelcontextprotocol.io/
- install
- 在 profile 的 cordis.yml 里加一个 @deepseek-ai/dsh-mcp-client 实例:stdio 填 command/args/env/cwd,HTTP 填 url/headers。改完 HMR 自动断开重连,不必重启进程。
- provides
- 把一台 MCP 服务器的全部工具注册成模型的原生工具,命名空间是 mcp__<serverName>__、两种传输:stdio(spawn 本机进程)与 streamable-http(连 HTTP 服务)、断线自动重连(默认开启,退避上限 30s),单次工具调用超时可控
- repo
- deepseek-ai/deepseek-harness
- risk
- network、credentials
- titleEn
- MCP client bridge
- transport
- both
- updatedAt
- 2026-10-02
按标签浏览:MCP(3)