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函数等效的Rosettatranslate_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文档URLget_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-server2.设置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:
生成的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_helpreturn“无详细帮助”:尝试精确的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条款许可
