Rosetta模型上下文协议服务器

一个模型上下文协议(MCP)服务器,使Cursor(或任何MCP客户端)能够与Rosetta、PyRosetta和Biotite协同工作,运行RosettaScripts、验证XML协议、在Rosetta和Biotite之间进行转换、评分结构以及查询文档。

  • by Arielbs
  • JavaScript
  • 本地部署
  • 19 星标
  • 更新于
在 GitHub 查看 Arielbs/rosetta-mcp-server

使用说明

Rosetta MCP服务器

作者:Ariel J.Ben Sasson

一个模型上下文协议(MCP)服务器,允许Cursor(或任何MCP客户端)与Rosetta、PyRosetta和Biosite一起工作:运行RosettaScripts、验证XML协议、在Rosetta和biosite之间进行翻译、评分结构和查询文档——所有这些都可以从您的AI编码助手中完成。

v1.3.0的新功能(与npm上的v1.1.8相比)

新增:Biotite集成

  • rosetta_to_biotite --使用示例代码查找任何Rosetta函数的Biosite等价物(21个映射,涵盖结构I/O、SASA、RMSD、叠加、二级结构、接触、氢键、B因子、角度等)
  • biotite_to_rosetta --反向查找:找到与Biosite函数等效的Rosetta
  • translate_rosetta_script_to_biotite --将整个RosettaScripts XML或PyRosetta代码翻译成Biosite Python。设计/优化操作仅标记为Rosetta。
  • 带有关键字别名的模糊搜索(“联系人”、“结合能”、“表面积”、“对齐”等)

改进:XML到PyRosetta转换器

  • 37种元素类型 支持(6个):11个移动器、9个过滤器、10个选择器、7个任务操作
  • 全属性处理: repeats, disable_design, cartesian, tolerance, threshold, distance,以及更多
  • 儿童元素支持: MoveMap (与 Span), Reweight, ScoreFunction
  • 报告未识别的元素,以便您知道需要手动操作的内容

改进:帮助和文档

  • get_rosetta_help 现在接受任何主题:按名称(“FastRelax”)、概念(“约束”、“对接”)或分数函数(“ref2015”)移动者——自动从rosettacommons.org获取实时文档
  • search_rosetta_web_docs 后备方案:当DuckDuckGo受到速率限制时,会直接探测Rosetta文档URL
  • get_cached_docs 自动缓存:不需要打电话 cache_cli_docs 第一
  • 扩展了score_functions、movers、过滤器、xml和参数的静态帮助

改进:评分

  • **pyrosetta_score**新 per_residue 每次剩余能量分解的期权回报
  • scorefxn 参数 现在有效(在v1.1.8中被忽略)
  • 丢失文件的正确错误消息,而不是沉默 {}

改进:验证

  • **validate_xml**新 validate_against_schema 该选项根据Rosetta XSD模式检查元素名称(捕获拼写错误,如 FastRleax)

MCP规范合规性修复

  • tools/call 现在使用正确的答案 { content: [{ type: "text", text }] } 格式
  • 刀具错误返回 isError: true (非JSON-RPC错误)
  • 标准JSON-RPC错误代码(-32601、-32700、-32603)
  • 已删除false resources 能力广告

安全修补程序

  • 用户输入不再插入Python代码中(使用env-vars/stdin)
  • 写入临时文件 os.tmpdir() (不是模块目录)

清理

  • 删除了3个冗余工具: list_functions (合并成 get_rosetta_info), search_pyrosetta_wheels, cache_cli_docs (自动缓存在 get_cached_docs)
  • 删除了硬编码的个人路径
  • 修复了阴影变量、异步反模式、死代码
  • 18工具 (21岁),所有人都有改进的面向代理的描述

示例:问一个幼稚的问题

这就是MCP服务器的强大之处——AI代理可以通过自动调用正确的工具来回答域问题:

用户在游标中询问: “我如何放松我的蛋白质,Biotite的等效物是什么?”

代理在幕后调用两个MCP工具:

1. get_rosetta_help("FastRelax") 返回6000多个字符的实时文档:

FastRelax使用FastRelax协议执行所有原子弛豫。参数包括 scorefxn, repeats, cartesian, disable_design, MoveMap 配置。..

2. rosetta_to_biotite("FastRelax") 返回:

{
  "found": true,
  "results": [{
    "rosetta": { "name": "FastRelax", "example": ["relax = FastRelax()", "relax.set_scorefxn(get_score_function('ref2015'))", "relax.apply(pose)"] },
    "biotite": null,
    "equivalence": "none_from_biotite",
    "notes": "Biotite does NOT perform structure optimization. These are Rosetta-specific capabilities."
  }]
}

该试剂合成: “FastRelax是Rosetta的全原子弛豫协议。以下是如何使用它……注意:Biosite仅用于分析,没有等效物——你需要PyRosetta进行结构优化。”

如果没有MCP,代理将根据训练数据进行猜测,并可能得到错误的参数名称或API签名。


你得到了什么(18个工具)

发现与帮助

工具 说明
get_rosetta_info 所有可用的评分函数、移动器、过滤器、选择器、参数
get_rosetta_help 任何主题的帮助——接受移动者名称、概念或分数函数
pyrosetta_introspect 实时PyRosetta API搜索与文档和签名

文档

工具 说明
search_rosetta_web_docs 搜索rosettacommons.org文档
get_rosetta_web_doc 获取并阅读特定的文档页面
get_cached_docs 搜索缓存的CLI帮助(首次使用时自动缓存)

执行与评分

工具 说明
run_rosetta_scripts 在PDB上运行RosettaScripts XML协议
pyrosetta_score 使用可选的每个残留物细分对PDB进行评分

翻译

工具 说明
xml_to_pyrosetta XML到PyRosetta Python(37种元素类型)
rosetta_to_biotite 找到Rosetta函数的Biosite等价物
biotite_to_rosetta 找到Rosetta中Biosite函数的等价物
translate_rosetta_script_to_biotite 将Rosetta的完整脚本翻译为Biosite

验证和模式

工具 说明
validate_xml 检查XML语法+可选模式验证
rosetta_scripts_schema 生成XSD架构并提取元素名称

环境

工具 说明
python_env_info Python版本和已安装的软件包
check_pyrosetta 验证PyRosetta是否可用
install_pyrosetta_installer 自动安装PyRosetta(10-30分钟)
find_rosetta_scripts 找到rosetta_scripts二进制文件

快速启动

1.从npm安装

npm install -g rosetta-mcp-server

2.设置Python环境

# Create a venv with PyRosetta and Biotite
uv venv ~/.venvs/rosetta-mcp
~/.venvs/rosetta-mcp/bin/pip install pyrosetta-installer biotite
~/.venvs/rosetta-mcp/bin/python -c "import pyrosetta_installer as I; I.install_pyrosetta()"

或者跳过这一步——PyRosetta在首次使用时自动安装(需要10-30分钟)。

3.配置您的MCP客户端

光标 (~/.cursor/mcp.json):

{
  "mcpServers": {
    "rosetta": {
      "command": "rosetta-mcp-server",
      "args": [],
      "env": {
        "ROSETTA_BIN": "/path/to/rosetta_scripts.default.macosclangrelease",
        "PYTHON_BIN": "/path/to/.venvs/rosetta-mcp/bin/python"
      }
    }
  }
}

克劳德桌面 (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "rosetta": {
      "command": "rosetta-mcp-server",
      "env": {
        "ROSETTA_BIN": "/path/to/rosetta_scripts.default.macosclangrelease",
        "PYTHON_BIN": "/path/to/.venvs/rosetta-mcp/bin/python"
      }
    }
  }
}

环境变量:

变量 必填 描述
ROSETTA_BIN 否 路径 rosetta_scripts 二进制文件或其目录。如果未设置,则搜索公共路径和PATH。
PYTHON_BIN 否 带有PyRosetta/Biosite的Python解释器。默认为 python3.
MCP_DEBUG 否 设置为 1 用于将调试日志记录到stderr。

4.重新启动编辑器

打开设置->MCP。“rosetta”服务器应显示为绿色,带有18个工具。


XML到PyRosetta的翻译示例

输入XML:

<ROSETTASCRIPTS>
  <SCOREFXNS>
    <ScoreFunction name="ref" weights="ref2015"/>
  </SCOREFXNS>
  <RESIDUE_SELECTORS>
    <Chain name="chainA" chains="A"/>
  </RESIDUE_SELECTORS>
  <MOVERS>
    <FastRelax name="relax" scorefxn="ref" repeats="5" cartesian="true"/>
  </MOVERS>
  <PROTOCOLS>
    <Add mover="relax"/>
  </PROTOCOLS>
</ROSETTASCRIPTS>

生成的PyRosetta代码:

import pyrosetta
from pyrosetta import pose_from_pdb
from pyrosetta.rosetta.core.scoring import get_score_function
from pyrosetta.rosetta.core.select.residue_selector import *
from pyrosetta.rosetta.protocols.relax import *

pyrosetta.init("-mute all")

pose = pose_from_pdb("your_protein.pdb")

# Residue Selectors
chainSelector = ChainSelector()
chainSelector.set_chain_strings("A")

# Movers
fastRelax = FastRelax()
fastRelax.set_scorefxn(get_score_function("ref"))
fastRelax.set_default_repeats(5)
fastRelax.cartesian(True)

sfxn = get_score_function("ref2015")

# Apply movers
fastRelax.apply(pose)

pose.dump_pdb("output.pdb")
score = pose.energies().total_energy()
print(f"Final score: {score}")

罗塞塔<->生物群测绘覆盖率

类别 罗塞塔 生物岩 等效
结构I/O pose_from_pdb PDBFile.read 满
结构I/O pose.dump_pdb PDBFile.write 满
结构I/O pose_from_file (CIF) CIFFile.read 满
表面分析 SasaMetric biotite.structure.sasa 满
对齐 SuperimposeMover biotite.structure.superimpose 满
RMSD all_atom_rmsd biotite.structure.rmsd 满
二级结构 DsspMover annotate_sse 部分
序列 pose.sequence() get_residues 满
距离 AtomPairConstraint biotite.structure.distance 满
角度 pose.phi/psi/omega biotite.structure.dihedral 满
接口 InterfaceAnalyzerMover sasa +选择 部分
数据库 rcsb.pose_from_rcsb rcsb.fetch 满
选择 ChainSelector 等等 numpy布尔索引 完整
联系人 距离矩阵 CellList 部分
拉玛钱德兰 pose.phi/psi dihedral_backbone 部分
H键 HBondSet biotite.structure.hbond 部分
B因素 pdb_info().bfactor AtomArray.b_factor 满
质心 center_of_mass mass_center 满
评分 ScoreFunction 无 仅限罗塞塔
优化 FastRelax 无 仅限罗塞塔
设计 FastDesign 无 仅限罗塞塔

故障排除

  • 服务器在光标中显示红色:重新启动游标。在配置中使用绝对路径(例如。, /opt/homebrew/bin/rosetta-mcp-server).确保Node 14+和Python 3.8+。
  • run_rosetta_scripts 失败:验证 ROSETTA_BIN 指向一个有效的二进制文件。尝试 "$ROSETTA_BIN" -help.
  • PyRosetta工具显示“不可用”:通过安装 pip install pyrosetta-installer 然后运行安装程序,或者让MCP服务器在首次使用时自动安装。
  • Biosite工具未返回任何结果:在同一Python环境中安装Biosite: pip install biotite
  • get_rosetta_help return“无详细帮助”:尝试精确的Rosetta类名(例如,“FastRelax”而不是“relax”)。该工具可以解析常见别名,但可能会遗漏不寻常的名称。

从命令行验证

# Check version
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05"}}' | rosetta-mcp-server 2>/dev/null | python3 -c "import sys,json; print(json.loads(sys.stdin.readline())['result']['serverInfo'])"

# List all tools
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | rosetta-mcp-server 2>/dev/null | python3 -c "import sys,json; [print(t['name']) for t in json.loads(sys.stdin.readline())['result']['tools']]"

发展

rosetta-mcp-server/
├── rosetta_mcp_wrapper.js   # Node MCP server (protocol + all 18 tools)
├── rosetta_mcp_server.py    # Python helper (static Rosetta data)
├── install_pyrosetta.js     # Standalone PyRosetta installer
├── package.json             # npm package config
└── README.md

许可和归属

  • MIT用于此存储库
  • Rosetta/PyRosetta:请参阅RosettaCommons许可证;商业使用需要适当的许可证
  • Biotite:BSD 3条款许可