← Về thư mục
📄 / / profiles / r-and-d / raw_evidence / OpenAI4S / openai4s / mcp_servers / protein_design / README_zh.md

可审计的 protein-design MCP server

English

本包通过 stdio MCP 暴露九个原子 protein-design 工具。server 和编排层只使用 Python 标准库;RFdiffusion、ProteinMPNN、ColabFold、PyRosetta、ESM-2 和 OpenMM 均在单独配置的环境中运行,不会作为 OpenAI4S core 的 import 依赖。

哪些部分是真实实现,哪些需要部署者准备

这不是只写了 schema 的示例,而是真实的 MCP server:它通过 stdio 完成 MCP initialize、tools/list 和 tools/call 交互,启动已配置的 backend 子进程,验证输入 与输出,并返回结构化终态结果。OpenAI4S 使用与其他 custom MCP server 相同的持久化 connector manager 启动它。

它不是内置模型 runtime。仅把本包放在源码树中,不会安装 RFdiffusion、ProteinMPNN、 ColabFold、PyRosetta、ESM-2、OpenMM、checkpoint 或 GPU driver。需要在 Customize → Connectors 中注册,并 bring up 下述 backend 配置。凡是会拉起这个 server 的路径——Agent 的工具调用,以及 connector 的 probe/call 接口——都走同一道 confinement:默认路径 root 是调用方的会话工作区而不是 daemon 的源码 checkout, bring-up 准入闸门也处于开启状态。operator 显式给出的值仍然优先,但空值不算一次选择: connector 编辑器会把一行光秃秃的 NAME= 写成 "",若把它当成已配置,闸门就被悄悄 关掉了。默认离线 测试使用真实 MCP 进程和 fake scientific executable 验证命令构造;每个真实 GPU backend 是否成功执行,仍属于 operator 部署验收。

Connector 配置

在 Customize → Connectors 的 connector directory 中添加 Protein Design。 添加表示明确启用这项能力,但此时不会启动进程;OpenAI4S 只会在 第一次工具发现或工具调用时懒启动 MCP server。等价的自定义 stdio command 使用 OpenAI4S 安装环境的 Python 解释器,参数为:

-m openai4s.mcp_servers.protein_design

confinement 会把 OPENAI4S_PROTEIN_DESIGN_ROOT 绑定为调用方的会话工作区,并按这个 root 划分被缓存的 MCP 进程,使两个会话不会共用同一个路径权威;operator 也可 在 connector 设置中显式指定其他 root。调用传入的所有路径都会在这个 root 下解析,越界 路径会被拒绝。operator 配置的 backend 位置则不在此列:模型 checkout 本来就可能不在 任何会话工作区里,因此 OPENAI4S_RFDIFFUSION_PATH=/opt/RFdiffusion 不会经过那道 面向 Agent 的路径围栏——否则每一个正确的安装都会被判为路径越界。

还有两个变量属于 server 自身,而不属于某个 backend:

分别用以下环境变量冻结 backend revision:

命令配置使用 JSON 字符串数组,不是 shell 片段:

Blind complex prediction 还要求设置 OPENAI4S_PROTEIN_DESIGN_OFFLINE_PREFIX: 这个 JSON 数组必须明确创建无网络执行边界,例如包含 --unshare-net 的 bubblewrap 前缀。仅设置 offline 环境变量不能被当作网络隔离证明;一个先声明隔离、又把网络放回来的 前缀同样会被拒绝(--share-net、--network=host,或后面又出现一个不为 none 的 --net):终态记录里的 network_isolation_enforced 正是由这道检查得出的,因此它 证明不了的结论,宁可直接拒绝。

RFdiffusion、ProteinMPNN 和 ESM-2 调用都提供 checkpoint 路径与预期 SHA-256。未给 路径时,Agent 先询问用户是否已有该文件;stage_model_asset 可导入经审批的本地路径, 用户没有文件时才走常规审批下载路径。connector 不会在科学调用里暗中下载权重。 内置 Agent runtime 只在同一 MCP 进程用同一 tool、backend revision、checkpoint digest 和 execution target 成功执行 run_mode=canary 后,才放行 run_mode=formal。准入记录在 该进程的台账里,因此重启会将其撤销。若某个 attempt_id 已有配置一致的终态记录, 再次调用会把那份记录标上 replayed 返回,准入状态按当前台账重新推导,而不是照抄 文件里的旧值;已存的 formal 记录在一个尚未获得准入的进程里则根本不允许重放——重放 说明的是「当时跑过」,不是「现在跑了」。 ColabFold prediction 改用 JSON bundle manifest,其中相对 data_dir 与 files 要列出完整模型数据树及 SHA-256;server 会拒绝 symlink 和未列出的文件, 并在启动前验证全部内容。

工具边界

工具 契约
generate_backbone 单次 RFdiffusion attempt,显式 seed/chain/hotspot,保留 PDB、.trb 和终态 manifest。
design_sequence ProteinMPNN design chain 和 chain-local fixed position,运行后独立验证序列和 residue map。
predict_structure 冻结参数、no-MSA、no-template 的 monomer prediction,并保留 raw scores。
predict_complex OS 级断网的 blind complex prediction,保留 raw PAE、interface PAE 和 ipTM。
rosetta_score Rosetta 物理能量证据。
rosetta_relax 带 seed 的 FastRelax 和显式输出结构。
rosetta_interface_score dG、dSASA、packstat,以及语义正确命名的 unsatisfied-H-bond delta。
score_stability ESM-2 masked pseudo-log-likelihood,只标为 sequence naturalness。
energy_minimize OpenMM refinement 证据,不能证明设计能够折叠、结合或实现功能。

这里有意不提供 design_binder、hotspot suggestion、近似 interface analyzer 或伪 status 工具。

文件

文件 职责
__init__.py Service 的窄导出。
__main__.py stdio module entry point。
schemas.py 九个工具的封闭 MCP schema 和证据描述。
server.py 最小 MCP JSON-RPC framing 和 structured result 投影。
service.py 路径约束、命令构造、digest、终态记录和运行后验证。
scientific_backend.py 单独执行的 PyRosetta、ESM-2、OpenMM 可选依赖 worker。
README.md 英文配置、边界和文件清单。
README_zh.md 中文配置、边界和文件清单。

上游影响

工具选择和部分 backend wrapper 思路参考了 Apache-2.0 许可的 jasonkim8652/protein-design-mcp revision 7a45f13d5c7667513f4b3cfc47e472f3209b1be1。本实现围绕 OpenAI4S 的 stdlib、 provenance 和可复现约束重写,没有 vendoring 该项目、其依赖、容器或权重。各模型包和 权重继续遵循各自的上游许可证。