rosetta-mcp-server について
rosetta-mcp-serverは、計算生物学のワークフローでRosetta、PyRosetta、Biotiteを使うためのMCPサーバーです。構造解析やコード変換に加え、RosettaScripts XMLの検証やドキュメント検索にも対応します。
主な機能
- 01RosettaScriptsの実行とタンパク質構造のスコアリング
- 02XMLの検証とPyRosettaコードへの変換
- 03RosettaとPyRosettaのドキュメント検索
- 04RosettaとBiotiteの関数対応付け
- 05RosettaスクリプトのBiotiteコードへの変換
活用シーン
- 01タンパク質構造モデリングプロトコルの実行
- 02RosettaScripts XMLの構文と要素の確認
- 03構造解析関数のライブラリ間対応の検索
MCP 対応
CursorなどのMCPクライアント向けに、Rosettaワークフローの実行、構造のスコアリング、コード変換、ドキュメント検索を行う18個のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y rosetta-mcp-serverROSETTA_BINPath to rosetta_scripts binary or its directoryPYTHON_BINPython interpreter with PyRosetta/Biotite installedMCP_DEBUGSet to 1 for debug loggingローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
18掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Rosetta MCP サーバー
著者:Ariel J. Ben-Sasson
Cursor(または任意の MCP クライアント)から Rosetta、PyRosetta、Biotite を利用できる Model Context Protocol(MCP)サーバーです。RosettaScripts の実行、XML プロトコルの検証、Rosetta と Biotite 間の変換、構造のスコアリング、ドキュメントの検索をすべて AI コーディングアシスタントから行えます。
v1.3.0 の新機能(npm の v1.1.8 との比較)
新機能:Biotite の統合
rosetta_to_biotite-- 任意の Rosetta 関数に相当する Biotite の関数を、動作するサンプルコードとともに検索します(構造の入出力、SASA、RMSD、重ね合わせ、二次構造、接触、水素結合、B 因子、角度などを網羅する 21 の対応関係)biotite_to_rosetta-- 逆引き:Biotite の関数に相当する Rosetta の関数を検索しますtranslate_rosetta_script_to_biotite-- RosettaScripts の XML または PyRosetta コード全体を Biotite の Python に変換します。設計/最適化操作には Rosetta 専用のフラグが付けられます。- キーワードの別名(「contacts」、「binding energy」、「surface area」、「align」など)にも対応したあいまい検索
改善:XML から PyRosetta への変換ツール
- 37 種類の要素タイプに対応(従来は 6 種類):mover 11 種類、filter 9 種類、selector 10 種類、task operation 7 種類
- 属性を完全に処理:
repeats、disable_design、cartesian、tolerance、threshold、distanceなど - 子要素に対応:
MoveMap(Spanを含む)、Reweight、ScoreFunction - 認識できない要素を報告するため、手作業が必要な箇所を把握できます
改善:ヘルプとドキュメント
get_rosetta_helpが任意のトピックを受け付けるようになりました:名前による mover(「FastRelax」)、概念(「constraints」、「docking」)、スコア関数(「ref2015」)を指定すると、rosettacommons.org から最新のドキュメントを自動取得しますsearch_rosetta_web_docsのフォールバック:DuckDuckGo の利用がレート制限された場合、Rosetta のドキュメント URL を直接確認しますget_cached_docsが自動でキャッシュするようになりました:先にcache_cli_docsを呼び出す必要はありません- score_functions、movers、filters、xml、parameters の静的ヘルプを拡充しました
改善:スコアリング
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)
- 誤った
resources機能の広告を削除しました
セキュリティ修正
- ユーザー入力を Python コードに補間しないようにしました(環境変数/stdin を使用)
- 一時ファイルの書き込み先をモジュールディレクトリではなく
os.tmpdir()に変更しました
整理
- 重複していた 3 つのツールを削除しました:
list_functions(get_rosetta_infoに統合)、search_pyrosetta_wheels、cache_cli_docs(get_cached_docsで自動キャッシュ) - ハードコードされていた個人用パスを削除しました
- 変数のシャドーイング、非同期処理のアンチパターン、未使用コードを修正しました
- ツールは 18 個(従来は 21 個)。すべてエージェント向けの説明を改善しました
例:素朴な質問をする
これこそが MCP サーバーの強力な点です。AI エージェントは、適切なツールを自動的に呼び出して、専門分野の質問に答えられます。
Cursor でのユーザーの質問: 「タンパク質をどのように緩和すればよいですか?また、Biotite では何に相当しますか?」
エージェントはバックグラウンドで、2 つの 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 の全原子緩和プロトコルです。使用方法は次のとおりです……注意:Biotite は解析専用で、相当する機能はありません。構造の最適化には 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 の関数に相当する Biotite の機能を検索します |
biotite_to_rosetta | Biotite の関数に相当する Rosetta の機能を検索します |
translate_rosetta_script_to_biotite | Rosetta のスクリプト全体を Biotite 用に変換します |
検証とスキーマ
| ツール | 説明 |
|---|---|
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(~/.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"
}
}
}
}
Claude Desktop(~/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/Biotite を含む 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}")
Rosetta <-> Biotite の対応範囲
| カテゴリ | Rosetta | Biotite | 同等性 |
|---|---|---|---|
| 構造入出力 | pose_from_pdb | PDBFile.read | 完全 |
| 構造入出力 | pose.dump_pdb | PDBFile.write | 完全 |
| 構造入出力 | 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 + selection | 部分的 |
| データベース | rcsb.pose_from_rcsb | rcsb.fetch | 完全 |
| 選択 | ChainSelector など | numpy のブールインデックス指定 | 完全 |
| 接触 | 距離行列 | CellList | 部分的 |
| ラマチャンドラン | pose.phi/psi | dihedral_backbone | 部分的 |
| 水素結合 | HBondSet | biotite.structure.hbond | 部分的 |
| B 因子 | pdb_info().bfactor | AtomArray.b_factor | 完全 |
| 重心 | center_of_mass | mass_center | 完全 |
| スコアリング | ScoreFunction | なし | Rosetta のみ |
| 最適化 | FastRelax | なし | Rosetta のみ |
| デザイン | FastDesign | なし | Rosetta のみ |
トラブルシューティング
- Cursor でサーバーが赤く表示される:Cursor を再起動してください。設定では絶対パスを使用してください(例:
/opt/homebrew/bin/rosetta-mcp-server)。Node 14+ と Python 3.8+ がインストールされていることを確認してください。 run_rosetta_scriptsが失敗する:ROSETTA_BINが有効なバイナリを指していることを確認してください。"$ROSETTA_BIN" -helpを試してください。- PyRosetta ツールに「not available」と表示される:
pip install pyrosetta-installerでインストールしてからインストーラーを実行するか、MCP サーバーによる初回使用時の自動インストールを利用してください。 - Biotite ツールが結果を返さない:同じ Python 環境に Biotite をインストールしてください:
pip install biotite get_rosetta_helpが「No detailed help」を返す:Rosetta の正確なクラス名を試してください(例:「relax」ではなく「FastRelax」)。このツールは一般的なエイリアスを解決しますが、珍しい名前は見つけられない場合があります。
コマンドラインから確認する
# 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-Clause ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。