
本文收录于专栏AI Agent智能体系列—— 专栏系统覆盖 AI Agent 工具链、MCP 与蛋白质设计自动化实战点击订阅可跟踪后续更新。你要用 MCP 让 LLM 调度蛋白质设计——靶点界面分析、RFdiffusion 出 binder 骨架、LigandMPNN 设计序列、Boltz-2 折叠验证、PyRosetta 算界面能github路线protein-design-mcp是一个 265 GiB 解压的 Docker 巨镜像单机塞不下裸机装又会撞上引擎前缀、外挂资产、SDK 配对三座暗墙。这篇在 Ubuntu 22.04 加消费级 GPU12 GB 显存上把 protein-design-mcp v2.4.5 的 41 个原子工具不走 Docker完整部署让 14 个工具立即可用本地已有权重零重复下载全部接入run_mpnn、run_interface_residues、ESMFold2 三轮全链实测出真数字泛素设计 confidence 0.452、BCL-2 复合物 20 界面残基 / 951.8 Ų、ESMFold2 泛素 RMSD 1.28 Å部署要点全部通用化给出路径假设表 资产挂载结构并附两条硬核排查法HF 仓库静默换代导致的 checkpoint 错配怎么定位、低版本 pip 查不到高版本包的陷阱。照着做完你按需补引擎就能接入自己的 MCP 客户端让 agent 一步步显式调度整条设计链路。关键字protein-design-mcp、MCP、原子工具、RFdiffusion、LigandMPNN、PyRosetta、软链农场、裸机部署目录1. protein-design-mcp是什么41 个工具的设计哲学§2. 裸机可行性的三个源码依据§3. 部署server、软链、资产挂载§4. 实测一run_mpnn 序列设计全链§5. 实测二run_interface_residues 界面分析§6. 接入 MCP 客户端与使用模式§7. 局限、参考来源与资产包§1. protein-design-mcp 是什么41 个工具的设计哲学protein-design-mcp 是给 LLM agent 用的蛋白质设计 MCP server。v22.4.5 线是一次破坏性重写39 个run_*工具每个只跑一个引擎外加describe_tool和get_job_status两个元工具。生成、序列设计、折叠、对齐、打分永不打包在一次调用里——agent 每选一个引擎、每定一个参数都是显式动作可以在任何一步插手或换引擎对比。两条用之前必须知道的纪律MSA 永远显式传入。所有折叠工具的msa参数没有默认值null 明确 MSA-free路径 用该文件缺省 拒绝。没有 “auto”。原因有二折叠工具内置 MSA 搜索会让两次预测不可比模型差异和 MSA 差异混在一起多个引擎默认走远程 MSA 服务器新设计序列会静默外发。chains 永不推断。binder 单独折叠和在复合物里折叠是调用者的显式决定——同一个 binder 跑两种设置是两个实验。39 个工具按功能分十类binder 生成 7、单体生成 6、序列设计 2、结构预测 11、MSA 2、打分 4、运行分析 4、靶点分析 2、结构准备 1、元工具 2。引擎覆盖 27 个RFdiffusion 1/2/3、Genie 2/3、FrameFlow、MultiFlow、La-Proteina、Protpardelle、Proteina-Complexa、BoltzGen、LigandMPNN、ESMFold2、Boltz-2、Chai-1、Protenix、OpenFold3、Promera、RoseTTAFold3、AlphaFold 3、AF2-Multimer、MMseqs2、ColabFold、ipSAE、PRODIGY、PyRosetta、OpenMM。一个工具 一个 YAML manifest零 Python。manifest 同源生成四样东西MCP Tool 的 inputSchema、describe_tool的应答、dispatch 入口、文档页。400 个参数每个都有描述做什么、移动它会改变什么、合理范围75% 带 enum/min/max/pattern 约束manifest 只钉 plumbingPYTHONPATH、缓存位置、CUDA_HOME不钉任何科学选择。§2. 裸机可行性的三个源码依据官方推荐路线是 265.78 GiB 的集成镜像181.41 GiB 压缩层含全部 21 个引擎环境与公共权重。单机可能不现实——但读源码发现三个机制天然支持裸机按需部署依据一缺引擎优雅降级manifest/registry.py。启动时对每个 manifest 做可用性检查引擎环境前缀不存在、或外挂资产缺失 →该工具被排除并在 stderr 给出原因server 照常启动。装几个引擎用几个不追求全集。依据二引擎启动走绝对路径前缀dispatch/env.py。每个引擎进程以micromamba run -p prefix entry启动prefix 是 manifest 里写死的绝对路径校验只做is_dir() os.access()——软链即可命中。名字解析型env: name则走~/micromamba/envs/nameMAMBA_ROOT_PREFIX 默认。依据三manifest 目录可覆盖app.py。PROTEIN_MCP_MANIFEST_DIR环境变量可指向自改副本不动上游代码就能改任何工具的引擎前缀或入口。§3. 部署server、软链、资产挂载裸机部署的本质是三件事装一个轻量 server、用软链满足 manifest 对路径的三个假设、把已有权重挂到 manifest 要求的位置。以下命令中的...都是要按你机器替换的占位。第一步server 本体。依赖极轻mcp/uvicorn/numpy/biopython/aiofiles/pyyaml/tqdm 七件套独立环境十分钟conda create -n pd-mcp python3.11 -y conda activate pd-mcp git clone https://github.com/jasonkim8652/protein-design-mcp cd protein-design-mcp pip install -e . --no-deps pip install mcp1.25,2 uvicorn numpy biopython aiofiles pyyaml tqdm第二步满足 manifest 的三个路径假设。启动时 registry 逐个 manifest 做可用性检查检查的就是三类路径——任何一个不满足对应工具被排除并在 stderr 说明原因这本身就是你的部署待办清单路径假设manifest 写死的值满足方式引擎环境前缀/opt/conda/envs/name软链你的 conda env 根目录过去sudo ln -sfn conda envs 目录 /opt/conda/envs引擎入口脚本/app/scripts/engines/name.py软链 repo 的scripts/子目录不是 repo 根否则/app/scripts/engines解析到不存在的repo根/enginessudo ln -sfn repo/scripts /app/scripts名字解析型环境~/micromamba/envs/name少数 manifest 用env: name而非 prefix逐个软链映射如ln -sfn 你的RFdiffusion env ~/micromamba/envs/mpnn第三步外挂资产挂载。少数工具要求特定的资产文件存在于特定位置weights、license 包、数据库。全部用软链零复制。两个容易踩的结构细节# PyRosetta: 检查的是两层路径 /data/licenses/pyrosetta/pyrosetta/__init__.py # → 挂载点必须是包的父目录 (site-packages), 软链到包本身会少一层 sudo ln -sfn env/lib/python3.11/site-packages /data/licenses/pyrosetta AlphaFold 3: prefix 是 /alphafold3_venv (从官方镜像抽取的 venv 命名, 非 conda 约定) 资产另走 /data/models/alphafold3 sudo ln -sfn AF3 env /alphafold3_venv sudo ln -sfn af3.bin 所在目录 /data/models/alphafold3缺哪个引擎就装哪个引擎环境各引擎的安装方法见其官方仓库装完软链进上表的对应位置即可——不需要一次凑齐 27 个。第四步启动验收。三条 JSON-RPC 报文管子进去看可用工具数和 stderr 缺口清单(printf %s\n {jsonrpc:2.0,id:1,method:initialize,params:{protocolVersion:2025-06-18,capabilities:{},clientInfo:{name:t,version:1}}}; sleep 8; \ printf %s\n {jsonrpc:2.0,method:notifications/initialized}; sleep 4; \ printf %s\n {jsonrpc:2.0,id:2,method:tools/list,params:{}}; sleep 15) \ | protein-design-mcp 2stderr.logLinux 实测Ubuntu 22.04 消费级 GPU复用已有的 RFdiffusion / Boltz-2 / OpenMM / AF2 / PyRosetta 环境14 个工具立即可用stderr 同时给出其余各工具的逐条缺口原因。引擎报错时注意看 stderr 的尾部——引擎的进度条占满头部真 traceback 在最后。个别引擎还要补依赖才能跑通以 LigandMPNN 为例三个坑它官方仓库是平铺脚本不是 pip 包要手工收进ligandmpnn/目录并把内部from data_utils改成from ligandmpnn.data_utils它的 side-chain packing 要 import openfold把仓库自带的 openfold 子目录软链到 site-packages 顶层并补ml_collections dm-tree它的 checkpoint 默认路径是相对 cwd 的./model_params/而 dispatch 的 cwd 是临时 scratch 目录且权重文件名带proteinmpnn_前缀——权重软链双名并存 run.py 默认路径改绝对路径。遇到权重在本地却加载失败的通用排查法卡在 MISMATCH / missing keys 时第一动作是查 HF 仓库的lastModified——仓库可能已静默换代你手里的本地副本是上一代架构ESMFold2 就是这样2026-09 仓库换代后旧单文件 checkpoint 与任何 PyPI 版本的 transformers 都配不上换新 6 分片 checkpoint 后 2 秒加载成功。另一个副坑用低版本 Python 的 pip 查包看不到要求更高 Python 的版本py3.11 的 pip 查 esm 最高只显示 3.2.1实际 3.4.0 存在只是要求 ≥3.12——查版本用 PyPI JSON API 的requires_python字段不要信低版本 pip 的版本列表。§4. 实测一run_mpnn 序列设计全链run_mpnn的引擎是LigandMPNN不是裸 ProteinMPNN——v2 换了引擎entry 为python -m ligandmpnn.run。裸机跑通要补的三件事见上节末段。实测输入泛素晶体结构PDB 1UBQ76 残基2 条设计。实测输出Ubuntu 22.04 消费级 GPU全程约 3 分钟{designs: [ {id: 1, sequence: MTIKVKFEDGTTLTLEVNPDDTIAKLKEKIEAKTGIPPEEQKLIYKGKELEDDKTLADYNIQAGDTIELKLVPAGG, overall_confidence: 0.4519}, {id: 2, sequence: MTIKVKREDGTTLELEVSPSDTIAKLKKKIEEKTGIPPEEQVLIYKGKELEDDKTLADYNIQEGDTIELRLKPAGG, overall_confidence: 0.4368}], num_designs: 2}设计序列对泛素 wt 保持高同源T0.1 采样下约 55% 恢复率量级说明同一套模型权重换了调度框架后行为正常。输出还带designs_fasta落盘路径下游折叠工具直接吃。§5. 实测二run_interface_residues 界面分析这是 v2 靶点分析类的代表工具测量而非预测一个已有复合物里哪些靶点残基真的在与 binder 接触、各埋没多少表面积。它没有新几何代码——就是把 server 自己已测试的get_interface_residuesCA-CA 接触和calculate_sasa溶剂可及面积接到 CLI 上。实测输入一个 BCL-2 / mini-binder 复合物 PDB靶点链 Abinder 链 B接触阈值默认 8.0 Å。实测输出n_interface_residues: 20 total_buried_sasa_a2: 951.8 hotspot_tags: [A206, A207, A108, A201, A118, A146, A136, A202, A111, ...]输出里的hotspot_tags“链ID残基号” 列表按埋没面积降序不经任何重排直接喂给四个 binder 生成工具run_rfdiffusion_binder的hotspot_res、run_genie3_binder的hotspot_residues、run_protpardelle的hotspots接 JSON 数组run_rfdiffusion3_binder接逗号拼接串——manifest 明文保证了这套 token 语法在各工具间一致。一个诚实的精度注记manifest 自己写明的SASA 实现把所有原子的范德华半径都按碳处理1.70 Å绝对数值是系统性近似当排序用可靠、当物理量读需谨慎is_contact来自独立的 CA 距离计算不受影响。§6. 接入 MCP 客户端与使用模式以 Hermes任何支持 stdio MCP 的客户端等价为例mcp_servers: protein_design: command: ~/anaconda3/envs/pd-mcp/bin/protein-design-mcp args: [] timeout: 1800 # 引擎单次上限 30 分钟, 默认 120s 会掐死 connect_timeout: 90 env: PATH: ~/anaconda3/bin:/usr/local/bin:/usr/bin:/bin # micromamba 要在 PATH enabled: true改配置重启网关后日志应出现工具注册条目。对话式调度的样子——一条 binder 设计链拆成显式步骤每步可换引擎、可插手对 complex.pdb 跑 run_interface_residues 拿热点 → run_rfdiffusion_binder 用热点出 5 条骨架 → run_mpnn 每条 3 个序列 → run_boltz 逐条折叠 (msa: null 显式声明) → pLDDT80 的送 run_rosetta_interface 算 dG12 GB 显存的现实约束各 GPU 引擎都是按调用起停的子进程串行调度天然无冲突ESMFold 级模型常驻约占 8-9 GB不与 Boltz/RFdiffusion 同时驻留。局限、参考来源与资产包局限41 工具里本机 14 个可用缺的按 stderr 清单逐个补run_prodigy 的亲和力数值是排序参考非实验值PyRosetta 学术免费商用付费AF3 权重非商业 licenseBoltz/ColabFold 的 MSA 服务器依赖外网。资源链接与本文关系protein-design-mcp 仓库github.com/jasonkim8652/protein-design-mcp本文对象v2.4.5工具全表docs/TOOLS.md39 工具与设计规则LigandMPNNgithub.com/dauparas/LigandMPNNrun_mpnn 引擎RFdiffusiongithub.com/RosettaCommons/RFdiffusionbinder 生成引擎Boltzgithub.com/jwohlwend/boltz结构预测引擎PyRosettapyrosetta.org物理打分license 门控MCP 规范modelcontextprotocol.io协议层系列导航专栏全集AI Agent智能体系列更多专栏蛋白 / 抗体 / 多肽 / 核酸分子模拟 / 动力学 / 对接药物 / 设计 / 案例AI / Agent / 大模型开源蛋白结构预测分子模拟基础小分子药物设计案例AI Agent系列开源蛋白生成方法实践分子动力学模拟-Amber蛋白药物设计案例化学大模型开源多肽设计模型分子动力学模拟-Gromacs多肽药物设计案例《AI Agent原理与实战》开源多肽性质预测分子动力学模拟-OpenMM开源小分子生成设计CADD中的机器学习模型DNA/RNA药物设计結合自由能开源药代动力学软件高效计算配置siRNA药物设计模型UCSF DOCK系列我胡师兄说药ASO药物设计模型rDock系列 LeDock系列 gnina系列