前言¶
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 的計算能力。