1.2 第一份配置:stdio 传输
stdio 是什么
本地服务器最常见的传输方式:DSH 把你的配置里的 command 启动成一个子进程,通过标准输入输出通信。通用客户端随 DSH 插件生命周期启动和停止这个子进程。
适合:跑在本机的 npm / Python / Go 二进制服务器。只要上游装好了、command 在 PATH 里,dsh 就能拉起来。
配置字段全表
| 字段 | 必填 | 说明 |
|---|---|---|
id |
是 | 本配置内唯一标识,建议全局唯一,便于日后删除定位 |
name |
是 | 固定为 @deepseek-ai/dsh-mcp-client |
serverName |
是 | 决定工具名前缀 mcp__<serverName>__<tool> |
transport |
是 | 本地填 stdio |
command |
是 | 要执行的命令(二进制名或解释器) |
args |
否 | 参数数组,如 ["mcp-server-fetch"] |
cwd |
否 | 工作目录,官方示例用 !!js process.cwd() |
env |
否 | 额外环境变量,密钥放这里 |
四个最关键的必填项:id、serverName、transport、command。其余按需补。
从零接第一个服务器
以官方参考服务器 memory 为例,完整四步。
第一步:安装上游服务器。 DSH 不负责这一步。
npm install --global @modelcontextprotocol/server-memory
第二步:写配置。 存成 my-memory.cordis.yml:
- insert:
- id: memory-my-server
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: my_memory
transport: stdio
command: mcp-server-memory
args: []
env: {}
cwd: !!js process.cwd()
注意 serverName 用了下划线。这决定工具名前缀,最终会是 mcp__my_memory__create_entities 之类。命名一旦定下,工具前缀就固定,改名等于换一组工具。
第三步:带补丁启动。
dsh web --patch "$PWD/my-memory.cordis.yml"
--patch 的路径可以指向磁盘任意位置的副本,不必放在仓库里。
第四步:等工具出现再提问。 初始发现是异步的,第一条提示词之前要等待 mcp__my_memory__... 工具出现。这是官方明确写的注意事项,也是“我配了却没反应”最常见的原因。
args 的几种常见写法
args 是数组,不同服务器用法不同:
| 服务器 | args 写法 | 说明 |
|---|---|---|
mcp-server-memory |
[] |
不需要参数 |
memorix |
["serve"] |
子命令 |
engram |
["mcp"] |
子命令 |
mcp-server-fetch (uvx) |
["mcp-server-fetch"] |
uvx 后面跟包名 |
python -m xxx |
["-m", "xxx"] |
解释器加模块 |
记住 args 是“参数数组”,不是“命令字符串”。不要写成 "serve --port 1234" 整个塞进去,要拆成 ["serve", "--port", "1234"]。
cwd 与相对路径的陷阱
cwd 决定服务器的“当前工作目录”。很多服务器用它来解析相对路径的数据文件、配置文件。官方示例统一用 !!js process.cwd(),也就是“启动 dsh 时所在的目录”。
如果你发现服务器找不到它自己的数据文件,第一反应应该是检查 cwd:你是想让它用项目目录、还是家目录、还是某个固定路径?把 cwd 显式指到确定位置,比依赖 process.cwd() 更稳,尤其在用 IDE 插件启动 dsh 时,当前目录可能不是你以为的那个。
官方三份记忆配置对照
官方文档给的三份示例可以直接抄:
| 文件 | serverName | command | args | 前置条件 |
|---|---|---|---|---|
memorix.cordis.yml |
memorix |
memorix |
[serve] |
Node 22.18+,npm i -g memorix@1.3.0 |
mcp-reference-memory.cordis.yml |
reference_memory |
mcp-server-memory |
无 | npm i -g @modelcontextprotocol/server-memory@2026.7.4 |
engram.cordis.yml |
engram |
engram |
[mcp] |
Go 1.25.10+,go install ...@v1.20.0 |
三份都是默认关闭的参考配置——交付组合不包含任何记忆服务器,不传 --patch 就全部保持关闭。
Python 服务器怎么配
官方参考服务器里 fetch / git / time 三个已改为 Python 实现。推荐用 uvx 直接跑,无需预先安装:
- insert:
- id: fetch
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: fetch
transport: stdio
command: uvx
args: ["mcp-server-fetch"]
cwd: !!js process.cwd()
或者先装再跑:
pip install mcp-server-fetch
command: python
args: ["-m", "mcp_server_fetch"]
没有 uvx 的环境,走第二种 pip 路线更可靠。
常见失败与处理
| 现象 | 原因 | 处理 |
|---|---|---|
| 工具始终不出现 | 没等异步发现完成 | 等 mcp__... 出现再发首条 |
| 工具出现即消失 | 子进程崩溃,重连预算耗尽 | 看上游是否可独立运行 |
| 报命令找不到 | 上游未安装或不在 PATH | 先手动跑一遍 command |
| 报权限错误 | 上游需要密钥但没给 | 加进 config.env |
小结
- stdio = 本地子进程,DSH 随插件生命周期启停。
- 四步:装上游 → 写 YAML →
--patch启动 → 等工具出现。 args是参数数组,按元素拆分;cwd决定相对路径基准。- Python 服务器用
uvx <包名>最省事。 - 密钥只进
config.env,不写明文、不靠继承。
延伸阅读
- 官方接入说明:连接第三方记忆 MCP 服务
- 本书后续:1.3 远程服务器:streamable-http
- 本章其余小节:1.4 持久化、密钥与验证排错
- 相关书籍:DeepSeek Harness 完全使用指南
