前言¶
DeepSeek Harness (DSH) 采用“一切皆插件”的理念,允许开发者将各种模型和工具能力挂载到工作流中。Wolfram 官方提供的 Wolfram/AgentTools MCP Server 是一个功能完备的数学与计算工具集,但在 DSH 环境下直接集成需要解决内核发现、进程生命周期管理以及权限审批等中间问题。
dsh-wolfram 是一个集成 bundle,旨在填补这些缺口。它不重写任何一方:底层协议由 DSH 通用客户端处理,Wolfram 工具由官方 Paclet 提供。本插件主要处理三件事:自动发现内核、管理 Wolfram 进程树(仅管理自身启动的进程)、以及对接 DSH 的原生权限策略。
核心功能¶
本插件提供以下能力:
- 内核发现:自动探测本机 Wolfram 可执行文件(支持注册表、标准目录、
wolframscript),也支持显式覆盖。 - Windows 透明 stdio supervisor:启动并管理 Wolfram 进程。插件关闭或重载时,只会终止自己启动的进程树,不会影响已打开的 Mathematica 前端或其他客户端的内核。
- DSH 原生权限策略:将工具调用纳入 DSH 的审批链。未知工具默认为
ask,已知工具根据配置决定是否需要审批。 - WSL 复用支持:支持在 WSL 中复用 Windows 侧的 Mathematica,配置 POSIX 路径以避免冲突。
- 图像块转发:支持 DSH 0.1.1-rc.2+ 版本的图像块转发机制,原始 MCP 值会被保留。
- 离线依赖构建:支持基于
docs/offline-dependencies.json的离线安装。
前置条件¶
在使用前,请确保满足以下环境要求:
- DeepSeek Harness:版本需在
0.1.1-rc.2或0.1.0-rc.5以上。 - Node.js:版本要求
^22.19 || >=24。 - Wolfram 环境:需安装 Wolfram 桌面产品或 Wolfram Engine,并安装
Wolfram/AgentToolsPaclet。
PacletInstall["Wolfram/AgentTools"]
安装¶
通过 DSH 的插件命令安装此 bundle:
dsh plugin --profile <你的 profile> add D:\dsh-dev\dsh-wolfram
安装完成后,dsh plugin 会在 profile 目录初始化依赖,并将插件追加到 dsh.profile.bundles 列表中。确认配置生效:
dsh --profile <你的 profile> --dump-config
输出中应出现 id: wolfram 与 id: wolfram-permission。
使用说明与默认行为¶
安装后,DSH 会默认连接内置的 WolframLanguage server。模型会看到 7 个工具,命名空间统一为 mcp__wolfram__ 前缀。
所有工具默认需审批 (ask),因为这些操作具有副作用(如读写文件、执行代码)。未列出的新工具默认也是 ask。只有 WolframLanguageContext 和 SymbolDefinition(只读元数据)被设为 delegate,直接交给后续策略处理。
注意:Wolfram 工具不在沙箱中,可执行任意代码、读写文件。在部署时应谨慎配置权限策略。
配置项¶
配置文件位于 $DSH_HOME/profiles/<profile>/cordis.patch.yml。主要有两行配置:id: wolfram 和 id: wolfram-permission。
1. id: wolfram 行¶
控制内核的发现与启动。
| 字段 | 默认值 | 说明 |
|---|---|---|
serverName |
wolfram |
工具名命名空间 |
mcpServerName |
WolframLanguage |
启动的内置 Server 名称 |
command |
自动发现 | 显式指定可执行文件路径 |
graceMs |
1000 |
关闭 stdin 后等待进程退出的时间 |
recordDirectory |
$DSH_HOME/.dsh-wolfram |
Supervisor 记录子进程的位置 |
reclaimOrphans |
true |
装载时回收残留的进程树 |
probeWolframScript |
true |
是否启用 wolframscript 探测(较慢) |
2. id: wolfram-permission 行¶
控制审批策略。
| 字段 | 默认值 | 说明 |
|---|---|---|
unknown |
ask |
未知工具的决策 |
delegate |
[WolframLanguageContext, WolframAlphaContext, SymbolDefinition] |
交给后续策略的只读工具 |
配置示例:指定内核路径并关闭未知审批
- id: wolfram
config:
serverName: wolfram
mcpServerName: WolframLanguage
command: 'D:\mathematica\Mathematica 15.0\wolfram.exe'
graceMs: 1000
reclaimOrphans: true
- id: wolfram-permission
config:
serverName: wolfram
unknown: deny
delegate: []
WSL 环境复用¶
如果在 WSL 中使用,需要显式指定路径并关闭自动探测,以避免启动错误的默认 server。
- id: wolfram
config:
serverName: wolfram
mcpServerName: WolframLanguage
command: /mnt/d/mathematica/Mathematica 15.0/wolfram.exe
probeWolframScript: false
recordDirectory: /home/<user>/.local/state/dsh-wolfram
reclaimOrphans: true
排障¶
找不到内核¶
启动时报错 no Wolfram kernel found。检查顺序:
1. 确认 Wolfram 已安装:wolframscript -code '$InstallationDirectory'。
2. 在配置中显式指定 installationDirectory 或 command。
3. 环境变量 DSH_WOLFRAM_COMMAND 也可临时覆盖。
工具为空¶
检查 Wolfram/AgentTools Paclet 是否安装及版本。可以手动运行 supervisor 测试:
node D:\dsh-dev\dsh-wolfram\src\supervisor-main.js --command 'D:\mathematica\Mathematica 15.0\wolfram.exe' --arg -run --arg 'PacletSymbol["Wolfram/AgentTools","Wolfram`AgentTools`StartMCPServer"][]' --arg -noinit --arg -noprompt
或运行仓库内置的测试:
npm run test:live
进程残留¶
插件仅管理通过 supervisor 启动的进程。检查时不要按进程名批量杀戮,应对比父进程 ID。正常的 Wolfram 进程其父进程应为 node.exe(运行 supervisor-main.js 的进程)。
总结¶
dsh-wolfram 插件为 DeepSeek Harness 提供了与 Wolfram 官方工具集的标准化集成路径。它解决了进程隔离、权限控制和环境配置的繁琐细节,让开发者可以直接在 DSH 生态中使用 Wolfram 的计算能力。