Atlas / MCP servers / toki0413 / dsh-saturday

dsh-saturdayCAUTION

mcp/toki0413/dsh-saturday

Materials computing tools for AI agents: structures, engines, phonons, EOS, NEB, sampling, lineage.

Verdict
CAUTION
Grade
B
Trust score
82 /100
Exposed tools
56 49r · 7w · 0d
Transport
stdio · streamable-http
License
MIT
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/toki0413/dsh-saturday/actions/workflows/ci.yml) [](https://smithery.ai/servers/toki0413/saturday-materials)

简体中文 | English

Everything is a plugin。 Saturday 不是又一套材料计算引擎,不替代 DFT / MD / FEM / CFD 的任何求解器; 它是材料计算的组合层:引擎、结构源、工作流、分析工具全部以插件形态挂载到 DeepSeek Harness (dsh) / `@deepseek-ai/cordis` v4 运行时上,由 Agent 在运行时自由挂载、卸载与组合。

插件接口规范见 packages/bridge/docs/plugin-contract-v0.md(中文原本,英文摘要版同目录)。

60 秒上手

不需要 Python、不需要装任何求解器——有 Node ≥ 22 就能让 Agent 拿到真实的材料回算数值 (无 ASE 时自动走零依赖 lj-js 引擎;能量由引擎回算,非玩具占位假数)。

最快一行(连客户端都不配):npx -y @toki0413/mcp-server --relax Cu 直接打印 Cu 的每原子能量与所用引擎(装了 MACE/ASE 会自动升真物理)。

免装 Node/Python(全保真容器):docker run --rm ghcr.io/toki0413/saturday --relax Cu 一行拿 EMT 真值,镜像已内含 Node + Python + ASE(构建/推镜像由 GitHub Actions + GHCR 承担,本地不装工具链)。当前状态:镜像构建与容器内冒烟已在 CI 跑通,但 GHCR 推送只在打 v* tag 时发生,因此该命令自 v0.3.14 起可拉;现在就要零安装跑用上面那行 npx。

路径 A:接进任意 MCP 客户端(Claude Desktop / Cursor / Cherry Studio 等)——在客户端配置里加:

{
"mcpServers": {
"saturday-materials": { "command": "npx", "args": ["-y", "@toki0413/mcp-server"] }
}
}

存盘重启客户端,对它说一句“把 Cu 弛豫一下并给出每原子能量”,它会调 potential.relax 返回 energyPerAtom(eV);material.load / workflow.screen(掺杂筛选)/ analysis.phonon(声子) 等 56 个工具都在。想要真实 EMT/LAMMPS 物理,再装 Python≥3.10 + ASE(见下“环境矩阵”), 引擎按能力自动升级,插件面契约与单位/指纹门禁不变。

路径 B:本地跑起来看全链

git clone https://github.com/toki0413/dsh-saturday && cd dsh-saturday
npm install && npm test        # 全量回归(纯 Node 即可)
npm run demo                   # 一条十阶段端到端:加载→采样→筛选→声子→回算,环境自适应
npm run demo:agent             # 一个 prompt 驱动整个发现链(mock LLM,无外部依赖)

想知道“我该调哪个工具”→ 见 docs/recipes.md(按意图找工具与参数); 5 分钟上手与拒绝伪造证据的演示 → docs/agent-e2e-demo.md。

核心范式

时空可组合性(

Read from source at commit e0d4ad1a7283OBSERVED · 2026-10-12
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add mcp-server -- npx -y @toki0413/[email protected]
03

Exposed tools (56)

49 read · 7 write · 0 destructive.

ToolRiskDescription
analysis.coordinationread局域配位与短程有序分析。传 materialId(可选 rCut):逐原子配位数 + 最近/平均邻居距离、
analysis.elasticityread完整 6×6 弹性刚度张量(Voigt):6 种独立应变 ± 中心差分共 12 次引擎应力计算,
analysis.eosreadBirch-Murnaghan 状态方程拟合。两条数据路:
analysis.nebreadNEB 最小能量路径与过渡态势垒。内置玩具体系 lj-double-well
analysis.phononreadΓ 点声子分析(力注入式有限位移)。传 materialId,引擎做静态单点
analysis.phonon.thermoread全布里渊区声子热力学:从超胞有限位移提取实空间力常数 Φ_{ij}(R)(最近镜像折回小格矢 + 牛顿第三对称 + ASR),
analysis.quasiharmonicread准谐近似热膨胀 α(T)/Grüneisen:对种子材料施各向同性体变标度,逐标度算静态能 E_static
analysis.saddleSearchreadQMM 鞍点搜索(不需 NEB 带、不需二阶导 callable):方向 F_eff=−∇E+2(ĉ·∇E)ĉ,ĉ 取
analysis.xrdreadX 射线粉末衍射谱。传 materialId,纯几何计算各反射 d(hkl)/Bragg 2θ/相对强度 |F|2 与系统消光
analysis.xrd.latticeFromPeaksread点阵参数精修:给已指派的实测粉末峰(peaks=[{twoThetaDeg, hkl:[h,k,l]}])与波长,
analysis.xrd.phaseIdentifyreadXRD 相鉴定:给实测粉末峰(measuredPeaks=[{twoTheta,intensity}])与一组候选材料 ID,
derivation.invalidateread失效传播(§8.2):声明某引用失效并给出原因,沿推导图向下游传递;
derivation.recordread登记一条推导:导出量(output)由哪些输入(inputs)经哪个生产者(producer)得出。
derivation.statusread查询导出量的活性状态:valid / invalid、冻结、修正记录与失效来源。
engine.availabilityread可用性预检:逐已注册引擎探测运行时版本并如实报告(注册 = 声明层,可用 = 运行时层)。
material.loadread加载材料结构。支持化学式(如
potential.relaxread对材料做结构弛豫。引擎为 EMT:Python sidecar 有 ASE 时走真实 EMT
runtime.capability.listread运行时能力清单:每个已注册引擎的声明能力(capabilities+properties)、实测指纹
runtime.engine.attachwrite运行时挂载引擎插件(不重启宿主、不中断其他插件事件流):按包名动态 import 并 apply;
runtime.engine.crossCheckread跨引擎对账(A/B):把同一 materialId 在两个或多个引擎上回算,机器并列每引擎的
runtime.engine.detachread运行时拆下引擎:先查作业台账再注销——onActive refuse(缺省,有在途作业即拒 ACTIVE_JOBS)
runtime.engine.rankread跨引擎排序一致性:对一批 materialId 在两个(或多个)引擎回算 energyPerAtom,
sampler.anchor.addwrite混合提案锚点入库:闭环产出的参考结构(已注册材料或直交付 graph)
sampler.anchor.auditread审计调用方指定路径载荷的血缘完整率(只读,不回填):逐条目三态——可追溯(来源归一化为 material:/job:)/
sampler.anchor.exportread导出会话锚点库全量条目(无损 JSON 有效载荷):跨会话持久化的原语。
sampler.anchor.importwrite从导出载荷回填锚点:逐条入库(谱系门禁复用库层:无来源即拒),
sampler.anchor.loadread从调用方指定路径回填锚点(落盘载荷 → 会话库,支持 path 单载荷或 paths 多载荷合并):
sampler.anchor.repairread载荷侧修复原语(写新载荷,不碰原件):对审计报告中不可追溯条目逐条显式声明可追溯起源;
sampler.anchor.savewrite把会话锚点库落盘到调用方指定路径(导出载荷的磁盘端):无损 JSON,
sampler.anchor.statsread会话锚点库容量观测(只读,不变更):条目数 + 谱系形态分布(material:/job:/其他)+ 组分声明覆盖——
sampler.flowread仿射耦合流参考结构采样(§4.5 采样语义,invertible 首实证):
sampler.flow.encoderead双射输运映射的反向(契约:仅 invertible === true 提供):把与参考结构同拓扑的候选 graph
sampler.mixtureread锚点引导的混合采样:从会话锚点库检索(拓扑硬门禁 + 组分 L1 距离)→ 最大余数法配额 →
sampler.oureadOU 参考结构采样(§4.5 采样语义):均值回归锚定 referenceId 的受控扩散,
sampler.perturbread参考结构微扰采样(§4.5 采样语义):在 referenceId 结构的邻域内
sampler.rssreadRSS 随机结构搜索采样(§4.5 采样语义,非 flow 生成式路线):在成分/原子数/
sampler.trigger.snapshot.loadwrite判据快照回填(只读校验后原样交付):校验版本戳与形态,快照不进锚点库、不进数据燃料——
sampler.trigger.snapshot.savewrite判据快照落盘(跨会话续供):判据对账结论整体原样落盘——读数/阈值/结论一并保留,
session.compareread只读对照:并列各分支(默认全部)对同一 (subject,key) 的可见值、是否分歧、数值跨度。
session.forkread从某决策线(默认当前主干)分叉一条新支:只登记父子与分叉点序号,不复制/改动任何已有状态,
session.recordwrite把某支上算得的一个数值挂到 (subject,key)(如 energy/gap/aboveHull):add-only,同键再记则最新一条
session.statusread会话分支树快照:主干、各支(父/分叉点/祖先链/是否主干)、记录数。只读,便于 Agent 看清当前规划树。
session.trunkread选一条决策线为主干(trunk):只是移动指针 + 审计,绝不删除其它分支或其记录——
structure.fromCifreadCIF 文本 → 周期 Material(P1 子集:_cell 参数还原晶胞 + _atom_site 分数/笛卡尔坐标)。
structure.fromPoscarreadVASP POSCAR 文本 → 周期 Material(解析 lattice/按元素分组/分数或笛卡尔坐标)。
structure.fromSmilesreadSMILES → 3D 分子结构(RDKit ETKDG 嵌入 + MMFF/UFF 力场弛豫)。
structure.fromXyzreadXYZ 文本 → Material(分子/非周期:零胞 + pbc=false,同 structure.fromSmiles 语义)。
structure.resolveread经 Materials Project 解析化学式为候选结构(需 MP_API_KEY)。
trajectory.replayread回放 Trajectory(append-only 事件流):重建材料计算索引。
workflow.activeLearningreadbasin-hopping 主动学习闭环(§4.3+§4.5 迭代版):每轮从当前最优结构微扰产候选→引擎 relax
workflow.bayesOptimizereadGP 代理贝叶斯优化(1D,极小化昂贵黑箱):对种子材料施体变标度 x(各向同性缩放),
workflow.bayesOptimizeParetoread多目标(2)GP 贝叶斯优化:对种子材料体变标度 x,两目标 = [每原子能量 E/n, 最大残余力范数 max|F|](均最小化)
workflow.ergodicread遍历对账(§4.5 oracle 条款):采样候选的能量系综平均 对
workflow.exploreread采样 → 回算闭环(§4.5 oracle 条款):采样器在 referenceId 结构邻域产生候选,
workflow.freeEnergyread热力学第二档:构型自由能曲线。逐温度网格点恒温 MD 得 ⟨U⟩(β),
workflow.screenread批量掺杂筛选:基体 + 掺杂变体逐个弛豫,按能量排序。
04

Trust audit

CAUTIONgrade B · trust 82/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (1 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (14)

MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
packages/bridge/demo-anchor-auto.mjs:77
console.log(`证据源: ${joint.sourceNames.join(' × ')};权重归一 Σw = ${sum.toFixed(12)};ESS 占比 = ${joint.essFraction.toFixed(3)}`)
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
packages/bridge/demo-anchor-guided.mjs:69
console.log(`权重归一: Σw = ${sum.toFixed(12)}(配分函数归一,非近似);ESS 占比 = ${joint.essFraction.toFixed(3)}`)
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
packages/bridge/demo-anchor-resume.mjs:95
console.log(`联合排序: ${joint.entries.length} 候选全部回算成功;Σw = ${sum.toFixed(12)};ESS = ${joint.essFraction.toFixed(3)}`)
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
packages/bridge/demo-concentrations.mjs:46
console.log('排名  变体              成分                  ΔH_f (eV/atom)  hull 距离      判据形态')
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
packages/bridge/demo-concentrations.mjs:55
? '退化(= max(0,ΔH_f))' : '非退化(包络插值)'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/kernel/src/cordis-adapter.mjs:58
const trajectoryPath = options.trajectoryPath ?? fileURLToPath(new URL('../../data/trajectory.jsonl', import.meta.url))
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/python-bridge/src/bridge.mjs:17
sidecar: options.sidecar ?? fileURLToPath(new URL('../../python-bridge/sidecar.py', import.meta.url)),
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/mcp-server/test/http.test.mjs:33
const health = await (await fetch(`http://127.0.0.1:${http.port}/health`)).json()
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/mcp-server/test/http.test.mjs:40
await assert.rejects(() => fetch(`http://127.0.0.1:${http.port}/health`))
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, @toki0413/mcp-server, @deepseek-ai/cordis, @deepseek-ai/dsh-timeout
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/bridge/package.json
@toki0413/core, @toki0413/kernel, @toki0413/plugin-lj, @toki0413/python-bridge, @deepseek-ai/dsh-agent, @deepseek-ai/dsh-agent-loop, @deepseek-ai/dsh-invariants, @deepseek-ai/dsh-llm
Why it matters. 24 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/contract-tests/package.json
@toki0413/core
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/mcp-server/package.json
@modelcontextprotocol/sdk, @toki0413/bridge, @toki0413/kernel, @toki0413/plugin-ase, @toki0413/plugin-branch, @toki0413/plugin-coordination, @toki0413/plugin-derivation, @toki0413/plugin-elasticity
Why it matters. 26 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/python-bridge/package.json
@toki0413/core
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha e0d4ad1a7283full audit observations/trust-audit/mcp-server/toki0413__dsh-saturday.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12e0d4ad1a7283CAUTIONB82first audit
06

Questions

What is the dsh-saturday MCP server?

Materials computing tools for AI agents: structures, engines, phonons, EOS, NEB, sampling, lineage.

What tools does dsh-saturday expose?

56 in total: 49 read-only, 7 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is dsh-saturday safe to connect to an agent?

With care. The audit graded it B (82/100) and found 14 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does dsh-saturday need?

It reads MP_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does dsh-saturday run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @toki0413/plugin-xrd at 0.3.14.

How current is this page?

The grade is for one exact copy of the source (e0d4ad1a7283), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement