投稿

MCPでAutoDock Vinaを動かす

MCPでAutoDock Vinaを動かす

Model Concept Protocol (MCP)

参考1: zenn
参考2: DeepLearning.ai
MCPクライアント(Claude DesktopとかCursorとか)からMCPサーバーにリクエストを投げたら、MCPサーバーが持っている情報にアクセスして検索結果を返してくれます。LLMが外部の情報にアクセスできるようになるのが良い点です。

Claude Desktop からSMILESと標的名を投げてドッキング計算

とりあえず触ってみるためにvinaで計算したドッキングスコアを計算してもらいました。MCPサーバーのリソースには標的タンパク質の名前とconfigの情報(ポケット中心とかグリッドサイズとか)だけ与えておき、Claude DesktopでSMILESと事前に定義した標的名を指定したらドッキングが走るようにします。

ソースコード:
https://github.com/shogo-d-nakamura/MCP_Vina

参考にしたもの:
Claude document
chatMol
ブログ

Claude Desktopのダウンロード

MCPのサーバーのたてかたについて、Claudeからドキュメントが公開されています(↑のリンク)。これに沿ってやるのでClaude Desktopを使えるようにしておきます。後に出てくるconfigのjsonをを移植するだけでCursorとかでも動きます。

uvで仮想環境作成

1
curl -LsSf https://astral.sh/uv/install.sh | sh

curlの後にrestart terminalするとuvが使えるようになります。
公開したリポジトリにpyproject.tomlがあるので、

1
uv pip install -e .

で一通りパッケージがインストールされます。

自分で一からパッケージを管理する場合はClaudeのドキュメントにもあるようにuv initした後にuv addで必要なものを追加していきます。 uv init $DIR_NAME -p 3.10 でpythonのバージョンを指定できます。

1
2
3
4
5
uv init test -p 3.10
cd test
source .venv/bin/activate
# install packages
uv add httpx rdkit meeko "mcp[cli]"

SMILESから3次元構造を生成するのにscrubber(現molscrub)を使いました。scrubberのscrub.pyと、meekoのmk_prepare_ligand.pyのPATHが通っていればリガンドの前処理ができます。

1
2
git clone --single-branch --branch develop https://github.com/forlilab/scrubber.git
cd scrubber; uv pip install -e .; cd .. 

Claude Desktop の設定

Claude DesktopのSettings -> Developer -> Edit Conifg で、jsonファイルが開きます。ここに、以下をコピペします。 Settings

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "mcpServers": {
    "molecular-docking": {
      "command": "uv",
      "args": [
        "--directory",
        "/PATH/TO/molDocking",
        "run",
        "server.py"
      ]
    }
  },
  "globalShortcut": ""
}

Settingsを更新したら、Claudeを再起動します。

Claudeのドキュメントはこれで動いてるっぽいですが、自分の場合はここでエラーが出ました(macbook m4, Sequoia)。uvが認識されていない感じだったので、which uvで取得した絶対パスを入力すると正常に認識されました。これを別のクライアントのMCP configのjsonにコピペするだけで同じように接続できます。標準化サイコゥーです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "mcpServers": {
    "molecular-docking": {
      "command": "/PATH/TO/uv",
      "args": [
        "--directory",
        "/PATH/TO/molDocking",
        "run",
        "server.py"
      ]
    }
  },
  "globalShortcut": ""
}

使ってみる

標的タンパク質の種類

標的タンパク質に何が登録されているか聞いてみると、AKT1が返ってきました。これは、/molDocking/server.pyのmcp.tool()デコレータが付いたlist_available_targetsという関数を動かしてくれています。あらかじめAKT1のpdbqtとconfigの情報だけ置いてあるので、それを返してくれています。

1
2
3
@mcp.tool()
def list_available_targets() -> Dict[str, Any]:
~

config.txtの情報

ポケット中心の座標とかを出してくれる関数も@mcp.tool()デコレータを付けて書いてあります。

実際に計算を投げる

適当なSMILESをAKT1にドッキングしてもらいます。@mcp.tool()のrun_molecular_docking()が実行されます。 役に立ちませんがClaudeなりの解釈も述べてくれます。

以上で、あらかじめ登録した標的タンパク質の名前とSMILESを投げたらVinaのスコアが返ってくるようになりました。今回はMCPにタンパク質のpdbqtとconfigを置いただけですが、ローカルのファイルやREST APIなど色々組み合わせればLLMをラッパーとして分子デザイン的なことができそうです。