作者:Ariel J. Ben-Sasson
这是一个模型上下文协议(MCP)服务器,允许Cursor(或任何MCP客户端)与Rosetta和PyRosetta进行交互:运行RosettaScripts,验证XML协议,列出常见的移动器、过滤器和选择器,并可选地通过PyRosetta进行评分或查询。
run_rosetta_scripts)rosetta_scripts_schema)validate_xml)list_functions, get_rosetta_info, get_rosetta_help)pyrosetta_score, pyrosetta_introspect)python_env_info, check_pyrosetta, install_pyrosetta_installer, find_rosetta_scripts, search_pyrosetta_wheels)npm install -g rosetta-mcp-server
注意:npm安装仅安装MCP服务器包装器。PyRosetta的安装会在您首次使用PyRosetta工具时自动进行,这可能需要10-30分钟。在安装过程中会显示进度指示器。
rosetta-install-pyrosetta立即安装brew install node
python3 --version
git clone https://github.com/yourusername/rosetta-mcp-server.git
cd rosetta-mcp-server
npm install -g .
安装包后,您可以使用以下命令安装PyRosetta:
rosetta-install-pyrosetta
npm run install-pyrosetta
node -e "const { RosettaMCPServer } = require('rosetta-mcp-server'); const server = new RosettaMCPServer(); server.installPyRosettaViaInstaller().then(console.log);"
注意:所有方法都会显示进度指示器,并警告10-30分钟的安装时间。
现在,当需要时,PyRosetta工具会自动安装PyRosetta!
当您调用任何PyRosetta工具(如pyrosetta_score或pyrosetta_introspect)时:
这意味着您可以在npm安装后立即开始使用PyRosetta工具——无需手动设置!
自动将RosettaScripts XML转换为PyRosetta Python代码!
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="ref2015" weights="ref2015"/>
</SCOREFXNS>
<MOVERS>
<FastRelax name="relax" scorefxn="ref2015"/>
</MOVERS>
<PROTOCOLS>
<Add mover="relax"/>
</PROTOCOLS>
</ROSETTASCRIPTS>
# 从RosettaScripts XML生成的PyRosetta代码
# ==================================================
import pyrosetta
from pyrosetta import pose_from_pdb
from pyrosetta.rosetta.protocols.moves import *
from pyrosetta.rosetta.protocols.simple_moves import *
from pyrosetta.rosetta.protocols.filters import *
from pyrosetta.rosetta.core.select.residue_selector import *
from pyrosetta.rosetta.core.pack.task.operation import *
# 初始化PyRosetta
pyrosetta.init("-mute all")
# 加载您的PDB文件
pose = pose_from_pdb("your_protein.pdb")
# 创建移动器
fast_relax = FastRelax()
fast_relax.score_function = get_score_function("ref2015")
# 将移动器应用于姿态
fast_relax.apply(pose)
# 保存结果
pose.dump_pdb("output.pdb")
# 打印最终得分
score = pose.energies().total_energy()
print(f"最终得分: {score}")
安装程序现在会自动检测并处理环境冲突:
环境位置:~/.venv/pyrosetta_mcp_env/(根据需要自动创建)
~/.cursor/mcp.json并添加/更新rosetta条目:{
"mcpServers": {
"rosetta": {
"command": "/opt/homebrew/bin/rosetta-mcp-server",
"args": [],
"env": {
"ROSETTA_BIN": "/绝对路径/到/rosetta/main/source/bin",
"PYTHON_BIN": "/Users/<你>/.venvs/rosetta-mcp/bin/python"
}
}
}
}
注意事项:
ROSETTA_BIN为包含RosettaScripts可执行文件的目录或可执行文件的完整路径(例如,.../rosetta_scripts.default.macosclangrelease或.../rosetta_scripts_jd3.default.macosclangrelease)。PYTHON_BIN是可选的;如果设置了,服务器将使用该解释器(建议在使用PyRosetta时使用)。⚠️ 重要提示:首次运行时,PyRosetta安装可能需要10-30分钟! 这涉及下载和编译大型科学库。请耐心等待,不要中断过程。
安装npm包会发生什么:
- ✅ 快速:npm安装MCP服务器包装器(几秒钟)
- ⏳ 稍后:首次使用PyRosetta工具时,服务器会自动安装PyRosetta(10-30分钟)
- 🆕 智能:如果检测到环境冲突,将在
~/pyrosetta_mcp_env/创建一个干净的环境
选项A(uv虚拟环境;推荐):
uv venv ~/.venvs/rosetta-mcp
~/.venvs/rosetta-mcp/bin/python -m pip install --upgrade pip
不使用conda安装PyRosetta,使用官方安装程序:
~/.venvs/rosetta-mcp/bin/python -m pip install pyrosetta-installer
~/.venvs/rosetta-mcp/bin/python -c "import pyrosetta_installer as I; I.install_pyrosetta()"
验证:
~/.venvs/rosetta-mcp/bin/python -c "import pyrosetta; pyrosetta.init('-mute all'); print('PyRosetta OK')"
选项B(Conda):
conda create -n rosetta-mcp python=3.9 -y
conda activate rosetta-mcp
conda install -c rosettacommons pyrosetta -y
# 然后在~/.cursor/mcp.json中设置PYTHON_BIN为此环境的python
run_rosetta_scripts:运行RosettaScripts
xml_path,input_pdb,out_dir(必需)exe_path(覆盖),extra_flags(CLI标志数组)exe_path → ROSETTA_BIN(文件或目录)→ 常见目录 → rosetta_scripts在PATH上rosetta_scripts_schema:写入XSD模式到缓存目录,可选元素列表validate_xml:基本语法验证XML字符串/文件get_rosetta_info,list_functions,get_rosetta_help:整理信息pyrosetta_score(可选):使用PyRosetta对PDB进行评分pyrosetta_introspect(可选):搜索PyRosetta类;返回文档/签名xml_to_pyrosetta(可选):将RosettaScripts XML翻译成PyRosetta Python代码python_env_info,check_pyrosetta,install_pyrosetta_installer,find_rosetta_scripts,search_pyrosetta_wheelsget_rosetta_info
rosetta_path,pyrosetta_available以及整理好的列表(评分函数、移动器、过滤器、选择器、任务操作、参数、命令行选项)。list_functions
get_rosetta_help
validate_xml
{ valid: true }或{ valid: false, error: "..." },带有失败的行/列。run_rosetta_scripts
xml_path,input_pdb,out_dir(以及可选标志,例如-nstruct 1)。{ exit_code, stdout, stderr, out_dir }。结果(PDBs、得分)由Rosetta写入out_dir下。rosetta_scripts_schema
extract_elements: true。{ schema_path, size, elements? }其中elements是标签名的去重列表。cache_cli_docs
{ saved: [help.txt, parser_info.txt] }路径在缓存目录下。get_cached_docs
query: "parser"(以及可选max_lines)。{ count, matches: [{ file, line, text }, ...] }。pyrosetta_score(需要PyRosetta)
pdb_path。{ score: <数字> },或者如果未安装则为{ error: 'PyRosetta不可用:...' }。pyrosetta_introspect(需要PyRosetta)
query: "FastRelax",可选kind: "mover|filter|selector|task"。{ results: [{ name, module, bases, doc, init }, ...], count }。xml_to_pyrosetta(需要PyRosetta)
xml_content: "<你的XML字符串>",可选include_comments: true,output_format: "python"。{ success: true, python_code: "...", components_found: {...} }。which rosetta-mcp-server
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"check","version":"1"}}}\n' | rosetta-mcp-server
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"check","version":"1"}}}\n{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}\n' | rosetta-mcp-server
~/.cursor/mcp.json后重启Cursor。/opt/homebrew/bin/rosetta-mcp-server)。ROSETTA_BIN指向有效的目录或可执行文件,或者删除它并依赖于PATH。run_rosetta_scripts无法启动
"$ROSETTA_BIN" -help)或明确传递exe_path。pyrosetta-installer(pip)或conda安装PyRosetta。rosetta-mcp-server/
├── rosetta_mcp_server.py # Python服务器(信息/帮助/XML)
├── rosetta_mcp_wrapper.js # Node MCP服务器(标准I/O协议+工具)
├── package.json # NPM包(全局二进制)
└── README.md # 此文件