vmd-hydrate-mcp

vmd-hydrate-mcp

Drive VMD from any LLM — render GROMACS/LAMMPS trajectories and analyze clathrate-hydrate cages through the Model Context Protocol.

Category
访问服务器

README

<!-- mcp-name: io.github.wjgoarxiv/vmd-hydrate-mcp --> <p align="center"><img src="./cover.png" width="100%" /></p>

<h1 align="center">vmd-hydrate-mcp</h1> <p align="center"> <em>Drive VMD from any LLM — render GROMACS/LAMMPS trajectories and analyze clathrate-hydrate cages through the Model Context Protocol.</em> </p> <p align="center"> <a href="#quick-start">Quick Start</a> · <a href="#features">Features</a> · <a href="#mcp-tools">MCP Tools</a> · <a href="#usage">Usage</a> · <a href="./README-Ko-KR.md">한국어</a> </p> <p align="center"> <img src="https://img.shields.io/github/stars/wjgoarxiv/vmd-hydrate-mcp?style=social" /> <img src="https://img.shields.io/badge/license-MIT-blue" /> <img src="https://img.shields.io/badge/python-3.10+-green" /> <img src="https://img.shields.io/badge/MCP-server-blueviolet" /> <img src="https://img.shields.io/badge/VMD-2.0b1%20%2F%201.9.4+-red" /> </p>


[!NOTE] An MCP server that lets Claude (or any MCP client) control VMD directly — load GROMACS/LAMMPS trajectories, identify clathrate-hydrate cages (sI/sII/sH), script headless renders, and compute order parameters (F3/F4) and H-bond networks — turning molecular-dynamics analysis into a conversation. Unlike the existing VMD MCP, it keeps a stateful VMD session, is secure by default, and owns the one thing no other MCP does: hydrate cage science.

See it in action

<p align="center"><img src="./docs/media/demo.gif" width="70%" alt="vmd-hydrate-mcp identifying and rendering sII hydrate cages in VMD" /></p>

<p align="center"><em>Every frame is a <strong>real headless VMD (Tachyon) render</strong>, driven entirely through the MCP server. The sII cages — 128 × 5¹² + 60 × 5¹²6⁴ — are <strong>identified by this repo</strong>, not mocked. · <a href="./docs/media/demo.mp4">▶ full-quality MP4</a></em></p>

Features

  • Clathrate Cage Identification -- find and classify hydrate cages (5¹², 5¹²6², 5¹²6⁴, …) from the H-bond network and label the crystal structure (sI/sII/sH). Validated on the sII benchmark (128 small cages, exact).
  • Photorealistic, Style-by-Prompt Cage Rendering -- cages render with ambient occlusion + shadows, orthographic by default, each cage type in ONE unified color (a curated palette: 5¹²=cyan, 5¹²6⁴=red, …). Just ask: "show only the sII large cages in magenta with emphasized width" and the MCP filters, recolors, and thickens them.
  • Stateful VMD Session -- a persistent VMD process (Tcl socket server) keeps your molecules, selections, and camera alive across tool calls -- no reloading on every command.
  • Hydrate Order Parameters -- F3 (tetrahedrality) and F4 (⟨cos 3φ⟩) computed in pure NumPy, validated to the reference to 6 decimals (F4 = 0.926698 on the sII benchmark).
  • H-bond Networks -- water–water hydrogen-bond graph with coordination stats, the substrate for cage identification.
  • Headless Rendering -- CPU Tachyon ray-traced PNGs with no display or GPU, returned inline as images. Works on laptops, servers, and HPC.
  • Attended (GUI) Mode -- run fully offscreen (default), or set VMD_HYDRATE_MCP_DISPLAY=gui to open a visible VMD window and watch Claude load, color, rotate, and render your system live.
  • GROMACS + LAMMPS -- one server ingests .gro/.xtc/.trr, LAMMPS .data/dump, PDB, DCD, mmCIF.
  • Secure by Default -- filesystem allowlist + a Tcl command allowlist (not a bypassable denylist) + a loopback, token-gated control socket. No run_tcl foot-gun exposed.
  • MCP-Native -- clean English tool names and typed outputs; works in Claude Desktop, Claude Code, and any MCP client.

Quick Start

[!IMPORTANT] Requires a local VMD install (2.0b1 or 1.9.4+) — this server drives your VMD; no registry or package ships it. On macOS, VMD lives inside a .app, so set VMD_BIN if vmd isn't on your PATH. (The pure hydrate/measure tools still work without VMD.)

Install

Zero-install via uvx (recommended):

uvx vmd-hydrate-mcp                                  # run the server
uvx --from 'vmd-hydrate-mcp[mda]' vmd-hydrate-mcp    # + MDAnalysis for measures/selection

Or from source:

git clone https://github.com/wjgoarxiv/vmd-hydrate-mcp.git
cd vmd-hydrate-mcp && uv pip install -e ".[mda]"

Register with an MCP client

Claude Code — one command:

claude mcp add vmd-hydrate -- uvx vmd-hydrate-mcp

Claude Desktop / any client — add to the mcpServers config (or commit a project .mcp.json):

{
  "mcpServers": {
    "vmd-hydrate": {
      "command": "uvx",
      "args": ["vmd-hydrate-mcp"],
      "env": { "VMD_HYDRATE_MCP_ALLOW_DIR": "/path/to/your/data" }
    }
  }
}

[!IMPORTANT] Set VMD_HYDRATE_MCP_ALLOW_DIR (os-path-separated) to the directories the server may read. All file arguments are realpath-checked against this allowlist — paths outside it are refused.

Attended (GUI) mode

By default the server drives VMD headless (offscreen). To instead open a real VMD window you can watch while Claude controls it live, add VMD_HYDRATE_MCP_DISPLAY=gui to the server's env:

{ "mcpServers": { "vmd-hydrate": {
  "command": "uvx", "args": ["vmd-hydrate-mcp"],
  "env": { "VMD_HYDRATE_MCP_DISPLAY": "gui", "VMD_HYDRATE_MCP_ALLOW_DIR": "/path/to/data" }
}}}

Then ask things like "load prod.gro, show water as points and the surfactant as VDW, then slowly rotate it" — the window updates in real time via load_structureadd_representationrotate_view. (Requires a local desktop session; the same Tcl socket drives both modes.)

MCP Tools

Tool Purpose Backend
vmd_status VMD version + molecules loaded in the live session VMD
load_structure Load a structure/trajectory (returns a molid) VMD
list_molecules List loaded molecules VMD
set_representation Style/color/material/selection for a molecule (replaces reps) VMD
add_representation Layer another representation (multi-rep views) VMD
clear_representations Remove all representations VMD
rotate_view / zoom_view / reset_view Live camera control (visible in GUI mode) VMD
render Headless PNG of the current view VMD + Tachyon
resolve_selection Atom count for a selection (catches the 0-atom .gro trap) MDAnalysis
measure_geometry Distance / angle / dihedral by atom index MDAnalysis
radius_of_gyration Rg of a selection MDAnalysis
hydrate_order_params F3 + F4 water order parameters NumPy
hbond_network Water H-bond network + coordination NumPy
identify_cages Cage counts (5¹²/5¹²6⁴/…) + sI/sII/sH structure NumPy
render_cages Photorealistic cage render (AO+shadows, ortho); filter / recolor / emphasize cages by prompt VMD + NumPy

Usage

1. Analyze hydrate order in a trajectory frame

Compute the F3/F4 order parameters for hydrate.gro

Returns f4_overall, f3_overall, water count, and a plain-language interpretation (crystalline / hydrate-like / liquid / ice).

2. Render a structure

Load hydrate.gro, show the water oxygens as VDW spheres, and render it

Produces an inline PNG rendered headlessly with CPU Tachyon.

3. Inspect the H-bond network

Build the water hydrogen-bond network for hydrate.gro at frame 0

Returns bond count and average coordination (≈4 for a well-formed clathrate).

4. Style hydrate cages by prompt

Load hydrate.gro and show only the sII large cages in magenta with emphasized width

Renders a photorealistic, orthographic image of just the 5¹²6⁴ cages in magenta with thicker edges — the MCP maps this to render_cages(cage_types=["51264"], highlight_color="magenta", emphasis=True). Omit the filters and every cage type is drawn in its palette color (5¹²=cyan, 5¹²6⁴=red, …).

Does it really drive VMD?

Yes — and you can confirm it in one command. examples/verify.py runs the same code the MCP server exposes on a bundled sII CO₂-hydrate example: it pings the real VMD binary, identifies the cages, and renders them headlessly.

python examples/verify.py

Expected output:

[1] VMD found : /Applications/VMD2b1.app/.../vmd_MACOSXARM64
    ping      : pong 2.0b1 MACOSXARM64
[2] Identifying cages in a real sII CO2 hydrate (1088 waters)...
    cage counts : {'51264': 60, '512': 128}
    structure   : sII  (confidence 0.93)
    F4 order    : 0.965  (highly ordered (crystalline hydrate / ice-like))
[3] Rendering cages headlessly (blue = 5^12, red = 5^12 6^4)...
    saved       : examples/output/cages.png (362495 bytes)
OK — vmd-hydrate-mcp drove VMD and identified the cages above.

The images below are real, unretouched VMD renders from that pipeline (not illustrations):

<table> <tr> <td align="center" width="50%"><img src="./docs/media/hydrate_system.png" width="100%"/><br/><em>sII crystal — cages colored by type (cyan 5¹², red 5¹²6⁴), photorealistic Tachyon</em></td> <td align="center" width="50%"><img src="./docs/media/hydrate_cage.png" width="100%"/><br/><em>a single 5¹² dodecahedron, unwrapped across PBC (ambient occlusion + shadows)</em></td> </tr> </table>

The demo video at the top is assembled from frames like these — see video/build_frames.py (drives VMD) and video/remotion/ (Remotion compositing). Rebuild it with python video/build_frames.py && cd video/remotion && npm i && npm run gif.

How It Works

  [.gro / .xtc / LAMMPS dump]
            |
            v
     MCP client (Claude)  --stdio-->  vmd-hydrate-mcp (FastMCP)
                                          |            |
                          numbers  <------+            +------>  visualization
                     MDAnalysis + NumPy                     persistent VMD session
                   (F3/F4, H-bonds, Rg)                    (Tcl socket, 127.0.0.1)
                          |                                         |
                          v                                         v
                  structured JSON                         Tachyon --> PNG image

Numeric science runs in Python (no display, unit-testable in CI). Visualization and rendering run in a long-lived, token-gated VMD process. The two never mix units: hydrate math is nanometers, VMD/MDAnalysis measures are Ångström.

Requirements

Dependency Required Purpose
VMD 2.0b1 or 1.9.4+ for viz/render the visualization engine
Python 3.10+ yes the server
mcp yes Model Context Protocol SDK
MDAnalysis ([mda]) for measures/selection topology-aware loading
sips / ImageMagick / Pillow for render TGA→PNG conversion

[!WARNING] On macOS, VMD ships as a .app and its CLI binary lives inside the bundle. If vmd is not on your PATH, set VMD_BIN to the binary (e.g. /Applications/VMD*.app/Contents/vmd*/vmd_MACOSXARM64). Pure hydrate/measure tools work without VMD.

Contributing

  1. Fork and branch (git checkout -b feature/x).
  2. uv pip install -e ".[dev,mda]" and keep pytest green (science tests need no VMD).
  3. Commit, push, open a PR. Found a bug? Open an issue.

License

MIT — see LICENSE.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选