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,不写明文、不靠继承。

延伸阅读