

我已经把 DSH 里 MCP 相关的实现和本机配置都查清楚了(dsh-mcp-client 插件、profile 结构、凭据机制、当前 settings.yaml)。下面是完整答案。
一、DSH 与 MCP 的关系
DSH(DeepSeek Harness)本身是 MCP 客户端:内置桥接插件 @deepseek-ai/dsh-mcp-client(已随 @deepseek-ai/dsh 安装在 /root/.dsh/profiles/node_modules/,不需要额外安装)。你只需要:
- 准备一个 MCP 服务器(现成的,或自己用官方 SDK 写一个);
- 在 web profile 的配置里声明它,DSH 就会连上去、把服务器上的工具注册给模型,工具名形如
mcp__<serverName>__<工具名>(和 Claude Code / Codex 的命名一致)。
二、接入现成 MCP 服务器(两步)
第 1 步:编辑 /root/.dsh/profiles/web/cordis.patch.yml(这是用户覆盖层,不要动自动生成的 cordis.yml),追加一个 insert 列表。两种传输方式任选:
- insert:
# 方式一:stdio —— spawn 一个子进程(如官方 GitHub 服务器)
- id: mcp-github
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: github # 命名空间,[A-Za-z0-9_-]{1,32},须唯一
transport: stdio
command: npx
args: ['-y', '@modelcontextprotocol/server-github']
env:
GITHUB_TOKEN: !!js process.env.GITHUB_TOKEN
# 方式二:streamable-http —— 连接一个 HTTP MCP 端点
- id: mcp-myserver
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: myserver
transport: streamable-http
url: http://127.0.0.1:3001/mcp
headers:
Authorization: !!js '`Bearer ${process.env.MCP_TOKEN}`'第 2 步:保存即可生效。web 应用开着 HMR,配置改动会触发断开→重连→重新发现工具,无需重启进程。模型立刻就能调用 mcp__github__create_issue 这类工具。
常用配置项:
| 字段 | 传输 | 说明 |
|---|---|---|
transport | 两者 | stdio 或 streamable-http |
serverName | 两者 | 工具命名空间,存活实例中唯一 |
command / args / env / cwd | stdio | 子进程启动方式(env 覆盖在净化后的环境之上) |
url / headers | http | 端点与认证头 |
toolCallTimeoutMs | 两者 | 单次工具调用超时,默认 60000 |
failOnStartupError | 两者 | 初始连接失败是否拒绝激活,默认 false(仅记日志) |
reconnect.* | 两者 | 自动重连策略(默认开启,指数退避) |
三、自己写一个 MCP 服务器再接入
用官方 SDK 写个最简 stdio 服务器(TypeScript):
// my-server.ts
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
const server = new McpServer({ name: 'demo', version: '1.0.0' });
server.tool('echo', { text: z.string() }, async ({ text }) => ({
content: [{ type: 'text', text }],
}));
await server.connect(new StdioServerTransport());然后同样在 cordis.patch.yml 里注册:
- id: mcp-demo
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: demo
transport: stdio
command: node
args: ['/root/plex/my-server.js']HTTP 版则把 StdioServerTransport 换成 StreamableHTTPServerTransport 挂到任意 Web 框架上,DSH 用 transport: streamable-http + url 接入。注意 DSH 只桥接 MCP 的 tools 能力(resources/prompts 暂未消费)。
四、b.ai 的 API key 能用吗?
能用,而且本部署默认就是走 b.ai。 当前 /root/.dsh/settings.yaml 里已经是:
llm-deepseek:
baseURL: https://api.b.ai/v1
agent-default-model:
provider: deepseek-official
model: deepseek-v4-flash即 deepseek-official 这个路由(dsh-llm-deepseek 适配器)请求的就是 api.b.ai/v1(OpenAI 兼容路径,我实测 /v1/models 返回 401 待鉴权,端点真实可达)。存 key 有三种方式,优先级从高到低:
- Web 界面:设置 → 模型(Models)→ DeepSeek 那一行 → 填 API 密钥。密钥经
credentials.set只写存入~/.dsh/.credentials.yaml(0600 权限,永不回显),立即生效,不用重启; - 环境变量:启动时
DEEPSEEK_API_KEY=sk-… dsh(启动环境层始终优先且只读,适合 CI/容器); - 手写凭据文件:
~/.dsh/.credentials.yaml,格式就是一个 mapping,如DEEPSEEK_API_KEY: sk-…。
两点提醒:
- 默认凭据引用是
DEEPSEEK_API_KEY;如果你在 Models 页输入,页面会自动派生并保存这个引用; - MCP 与 LLM key 是两回事:b.ai 的 key 只供
deepseek-official这条 LLM 路由使用。你写的 MCP 服务器如果要自己调 b.ai(或其他)API,需要在它自己的env里单独配置(如env: { BAI_API_KEY: '…' }),互不干扰。
如果你告诉我具体想接哪个 MCP 服务器(比如 GitHub、Playwright、某个自建服务),或想让我直接帮你写一个示例 MCP 服务器并把配置写进 cordis.patch.yml,我可以直接动手改好。
沙盒能完成的任务类型
1. 代码开发与调试
- 写、改、重构代码(支持多语言,通过文件编辑 + shell 执行)
- 跑测试、构建项目、修 bug、代码审查
- 示例:给你写一个 Python/Node 脚本,直接在沙盒里运行验证结果
2. 数据处理与分析
- 写脚本处理 CSV / JSON / 日志文件、批量转换格式、批量重命名
- 数据清洗、统计计算、生成图表(matplotlib 等可安装)
3. 网络与信息获取
- 实时联网搜索(web_search 工具,带来源链接)
- 用 curl 抓取网页、调用 API、下载文件
- 示例:抓取某个网站的数据存成结构化文件
4. 多代理并行协作(特色能力)
- 子代理:把独立任务(比如"分析 A 文件""写 B 模块的测试")并行委派给多个子代理同时干,效率翻倍
- 工作流:大规模编排,几十个子代理分阶段并行处理(比如批量审计一堆文件、多角度调研)
- 长周期目标:一个目标可以跨多轮自动持续推进,中途断点续做
5. 环境运维类
- 安装依赖(
npm install、python3 -m pip——注意没有 pip3 命令,但可用模块方式) - git 克隆/提交、后台长任务运行(如长时间运行的服务器、爬虫)
6. 与 Web GUI 集成
- 当前 DSH 管理界面跑在
http://127.0.0.1:3080,可以开发/修改前端界面和插件
限制说明
- 文件沙盒:默认只能写
/root/plex;需要写工作区外(如/etc、/usr)时,命令会被拒绝,我可申请临时提升权限(workspace-write或danger-full-access),需你批准 - 资源有限:2 核 / 1.9GB 内存,不适合跑重型训练、大型构建(比如编译 Chromium)
- 无持久 shell 状态:每条命令都是全新 shell,环境变量和 cwd 不保留,需显式传入
- 无浏览器自动化:不能帮你操作真实浏览器页面(没有 playwright/selenium 类工具)
- 系统级操作:默认无 root 系统管理权限,装系统包(apt)需要提权审批
简单说:凡是"写代码、跑脚本、处理数据、上网查信息、并行委派子代理"这类工作,沙盒都能做;
附注(Ray): 过程比较详细,应该可以避免不少幻觉/胡说吧
