dsh-origin-bridge
通过 27 个 MCP 工具在对话里驱动本机 Origin/OriginPro:导入 .dat/.csv/.txt 与 CHI 工作站 .bin,绘图、改样式、拟合,交付 PNG/TIF/SVG/PDF 图片和可继续编辑的 .opju 工程;绘图、样式、导出都带读回验证。需要 Windows、Origin/OriginPro 2021+ 与 Python 3.10+,并把 `pip install originpro numpy` 装进 dsh 启动的那个解释器:缺包时每个工具都会返回 `missing_originpro`,PATH 上没有解释器时工具完全不注册。
安装
dsh plugin --profile web add dsh-origin-bridge
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
<p align="center">
<img src="icon.svg" width="128" height="128" alt="Origin Bridge">
</p>
<h1 align="center">Origin Bridge</h1>
<p align="center">
<b>中文说明</b> · <a href="README.en.md">English</a>
</p>
<p align="center">
用自然语言驱动<b>本机</b> Origin / OriginPro:<br>
丢给它一个 <code>.dat</code> / <code>.csv</code> / Excel / 电化学工作站 <code>.bin</code>,<br>
拿回一张发表级图片和一个<b>能在 Origin 里继续编辑</b>的 <code>.opju</code> 工程。
</p>
<p align="center">
<sub>27 个工具 · <b>1135 例全链路测试全部通过</b> · 数据不出本机 · 支持工作站 <code>.txt</code> / <code>.bin</code></sub>
</p>
<p align="center">
<a href="#安装"><img alt="platform" src="https://img.shields.io/badge/platform-Windows%20%2B%20Origin%202021%2B-blue"></a>
<img alt="tests" src="https://img.shields.io/badge/tests-1135%2F1135%20passing-brightgreen">
<img alt="license" src="https://img.shields.io/badge/license-MIT-lightgrey">
<a href="https://github.com/angelky7/dsh-origin-bridge/actions/workflows/offline-checks.yml"><img alt="offline checks" src="https://github.com/angelky7/dsh-origin-bridge/actions/workflows/offline-checks.yml/badge.svg"></a>
</p>
<p align="center">
<img src="docs/preview.png" width="640" alt="两条曲线、轴标题齐全的 Origin 成图">
</p>
上图由scripts/make_preview.py生成:导入 → 画两条曲线 → 配色与符号 → 关掉图例 → 导出 PNG,全部走本插件自己的引擎调用,轴标题与图例可见性都读回校验后才导出。数据是sample.dat的合成序列,不含任何真实实验数据。
为什么是它
市面上把 Origin 接进聊天的尝试,要么要求把数据上传到云端,要么是个 200 行的玩具。Origin Bridge 反着来:
- 数据不出本机。 没有 API key、没有云端组件,dsh 拉起一个本地 Python 进程,通过 OriginLab 官方的
originpro驱动你机器上的 Origin。 - 每一步都有证据。 Origin 的 X-Function 普遍"返回成功但什么都没发生"。这里画图后读回轴范围与数据跨度比对,导出后校验文件存在/体积/文件头魔数,样式逐项读回——读不回的进
failed列表,不会假装成功。 - 不是 74 个工具,是 27 个。 每个都有实测用途,工具描述里写着实测限制,模型不会踩坑。
- 1000+ 次真实测试,不是自称。 1136 例全链路用例跑在真实 stdio 服务器 + 本机 OriginPro 上,1136 通过 / 0 失败:27 个工具每个至少 15 例、最多 135 例,按副作用分五层(L0 纯解析 301、L1 只读 COM 63、L2 改会话 531、L3 落盘 163、L4 进程级 78)。提示词全部按人话写,跑之前先用在线
tools/listschema 校验用例本身,所以失败只会是产品问题,不会是题目写错。另有 409 项离线/单元/边界检查(asciiio 84、binio 15、lifecycle 42、smoke 129、edge 30、paths 35、json 29、readfile 12、labtalk 33;binio 在机器上有真实工作站导出时会追加逐点对账项)随包发布,你可以直接复跑;那 1136 例题库含提示词与模拟数据,是开发侧资产,不随包分发。originpro 的十几个文档陷阱全部记录在案并绕开。
它能做什么
你说 · 它做
"把 D:\data\spectrum.dat 画成散点连线,X 轴 Time (s),导出到 D:\out" · origin_figure:导入 → 画图 → 轴标题 → PNG + .opju
"这两个文件画在一张图上,双 Y 轴" · origin_layer(右 Y 轴)+ origin_plot(往指定层画)
"给这条谱图加个图例,放右上角" · origin_legend(文字/位置/可见性全部读回)
"这组 EIS 数据拟合一下" · origin_fit(gauss / lorentz / voigt / expdec1… 预设,参数可固定)
"这是 CHI 工作站导出的 cv.bin" · origin_import 直接读二进制,电势轴按头部方法参数重建
"这是工作站导出的 txt,前面一大段参数" · origin_import 自动跳过参数头,紧贴数据的那行(Potential/V, Current/A)当表头,单位拆到列的 Units 里,参数进 metadata
"做一张 XPS 图" · origin_chart_render(40 个科研预设:轴标题/图类型/建议拟合)
"热力图显示这个矩阵" · origin_matrix(heat_map / cmap / mesh / contline,Origin 自带图模)
数据源支持:.dat .csv .txt .tsv(origin_read_file 只读这些文本类;.xls/.xlsx/.wks 会明确报 unsupported_file_type 让你改用 origin_import。自动嗅探分隔符;编码覆盖 UTF-8 / GBK / UTF-16(有无 BOM 都行) / cp1252;多行表头、Fortran 指数、NA/-;还有 <0.001 检出限、2.5±0.1、25 mV、1,234.5、(500)、2.5* 这类被装饰过的数值——每解一种都会在 warnings 里写清代入了什么)、.xls .xlsx、电化学工作站(CH Instruments 等)导出的 .txt(几十行仪器说明自动收进 metadata,不会把首行日期当成列名),以及头部为 80 F2 1B 00 的电化学工作站二进制 .bin。
安装
要求:Windows、Origin/OriginPro 2021 或更高(originpro 的硬性下限,实测 2018 不可用)、Python 3.10+。
方式 A:用 dsh plugin 从 npm 装(推荐)
dsh plugin --profile desktop add dsh-origin-bridge
只多装 1 个包(隔离 profile 实测 pnpmPackages: +1,620ms)。宿主自带的@deepseek-ai/dsh-mcp-client声明成可选 peer,不会在插件目录里再塞一份 loader 副本。
装的时候报ERR_PNPM_NO_MATCHING_VERSION、提示 "latest release is 0.4.x":那是镜像滞后,不是包没发出去。dsh 安装完全沿用你本机的 npm 配置(npm config get registry看一眼),实测 0.4.5 发布 2.5 小时后registry.npmmirror.com上仍只有 0.4.4。两种解法都验证过:
```bash
# 1) 显式走官方源(这个参数会透传给 pnpm;24 小时新鲜度门禁会自己写进 minimumReleaseAgeExclude)
dsh plugin --profile desktop add dsh-origin-bridge --registry=https://registry.npmjs.org/
# 2) 离线包,完全不经过 registry
dsh plugin --profile desktop add file:C:\path\to\dsh-origin-bridge
```
dsh plugin --profile desktop add dsh-origin-bridge
旧账号下的转发壳 @caob23/dsh-origin-bridge 已弃用(deprecated),请直接安装上面的正式包。
本包是 bundle 包(package.json 的 dsh.bundle.patch 指向根目录的 cordis.patch.yml),dsh plugin 装完会自动把它加进 profile 的 dsh.profile.bundles,重启 dsh 即加载,不用再手写补丁。dsh plugin 转发给 pnpm,所以 pnpm 要在 PATH 上。
npm 只管分发,不管你的 Python 环境——Origin 依赖必须自己装进 dsh 实际使用的那个解释器:
pip install originpro numpy # 国内网络慢就加 -i https://pypi.tuna.tsinghua.edu.cn/simple
前置缺了会怎样,两种情况不一样(2026-10-19 实测,别猜):
- 解释器在、originpro不在:27 个工具照常注册,每一次调用都返回code=missing_originpro和原因(No module named 'originpro'),isError: true——看得见、知道修什么。
- PATH 上没有python(补丁默认命令就是python):桥进程起不来,failOnStartupError: false保证 dsh 照常启动,代价是那一轮工具完全不注册、也没有报错。这时先设ORIGIN_BRIDGE_PYTHON。
Origin 没开不影响注册:COM 连接是第一次工具调用时才建立的。
包内补丁的默认取值是 python(PATH 上那个)和 profiles/desktop。依赖装在 venv 里、或者你用的是别的 profile,就设这两个用户环境变量(设完要重开终端、再彻底重启 dsh):
setx ORIGIN_BRIDGE_PYTHON "C:\path\to\.venv\Scripts\python.exe" setx ORIGIN_BRIDGE_HOME "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-origin-bridge"
装完自检(路径按你的 profile 名改):
Test-Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-origin-bridge\server.py"
彻底退出 dsh 再打开,新会话里说"列出 origin 开头的工具",应看到 27 个 mcp__origin_bridge__origin_*。卸载:
dsh plugin --profile desktop remove dsh-origin-bridge
failOnStartupError: false 是刻意的:Origin 没开或有模态框卡住 COM 时,只让工具这一轮不注册,不把 dsh 一起拖崩。
方式 B:本地 clone(要跑测试或改代码时)
cd C:\path\to\dsh-origin-bridge python -m venv .venv .\.venv\Scripts\Activate.ps1 pip install -r requirements.txt # 国内网络慢就加 -i https://pypi.tuna.tsinghua.edu.cn/simple
先确认能独立跑通(会自己拉起 Origin):
.\.venv\Scripts\python.exe smoke_test.py # 129 项,看到 ALL GOOD 才算过 .\.venv\Scripts\python.ex …(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:13,最后更新 2026-11-04