Protein Design MCP Server
by qfoldit
README.md
# qFoldIT Protein Design MCP
**This repository has two parts under two different licenses — see `NOTICE` for full attribution.**
1. **The MCP server** (this directory, outside `claude-skills/`) — Apache-2.0, based on [jasonkim8652/protein-design-mcp](https://github.com/jasonkim8652/protein-design-mcp). Currently unmodified from upstream; installation below correctly points to the upstream project's own PyPI/Docker/GitHub since qFoldIT has not yet published an independent build.
2. **`claude-skills/`** — MIT, originally authored by qFoldIT: 21 Claude Skills covering scientific simulation (VQE, protein folding, bio-mining, corrosion, plant growth...) and digital-twin engine adapters (Unreal, Unity, Unigine, Omniverse, Apple, Three.js). See `claude-skills/README.md`.
Actual current directory layout (server portion; run `tree claude-skills/` separately for the skills side):
```
Protein-Design-MCP/
├── README.md
├── NOTICE ← licensing/attribution for both parts of this repo
├── LICENSE ← Apache-2.0 (governs everything EXCEPT claude-skills/)
├── pyproject.toml
├── docker-compose.yml
├── Dockerfile*
├── src/protein_design_mcp/
│ ├── server.py
│ ├── pipelines/ (alphafold2, boltz_runner, esmfold, openmm_runner,
│ │ proteinmpnn, pyrosetta_runner, rfdiffusion)
│ ├── tools/ (19 MCP tools -- design, predict, score, analyze)
│ ├── resources/
│ └── utils/
├── tests/
└── claude-skills/ ← MIT license (own LICENSE file), see claude-skills/README.md
```
[](https://pypi.org/project/protein-design-mcp/)
[](https://hub.docker.com/r/jeonghyeonkim8652/protein-design-mcp)
[](https://github.com/jasonkim8652/protein-design-mcp/pkgs/container/protein-design-mcp)
[](https://smithery.ai/server/protein-design-mcp)
[](LICENSE)
An [MCP](https://modelcontextprotocol.io) server that gives LLM agents access to computational protein design tools. Ask your LLM to design binders, generate de novo folds, predict structures, score interfaces, or relax with Rosetta — it calls the right tool automatically.
**25 tools total**, spanning generative design, structure prediction, physics-based scoring, analysis, bioactivity/QSAR prediction, and quantum-computing-assisted peptide folding. Built on RFdiffusion, ProteinMPNN, ESMFold, AlphaFold2, **Boltz-2**, **PyRosetta**, ESM2, OpenMM, **ZairaChem**, **QuPepFold** (CVaR-VQE), and a classical simulation inspired by **QFold**'s quantum-walk Metropolis algorithm. 3D output from any of these -- or from external MCPs like BindCraft's `bindcraft_mcp` -- can be exported to OpenUSD (`uag_exporter.py`) for NVIDIA Omniverse / NanoVer VR / Unreal / Unity.
| Distribution | Tools out-of-the-box | Extras |
|---|---|---|
| `pip install "protein-design-mcp[gpu]"` | 13 core tools | `[rosetta]` (license required), `[boltz]` (isolated venv) |
| `docker pull jeonghyeonkim8652/protein-design-mcp` | 13 core tools (GPU), 10 (CPU) | PyRosetta / Boltz not bundled (license + torch conflict) |
The 6 non-bundled tools (`rosetta_*` x4, `predict_*_boltz` x2) install cleanly via pip extras — see [Optional Tools](#optional-tools-pyrosetta--boltz-2).
## claude-skills/ (qFoldIT's own work, MIT-licensed)
The `claude-skills/` subdirectory is a self-contained Claude Code plugin — 20 skills spanning scientific simulation (VQE quantum chemistry, HP-lattice protein folding, bio-mining kinetics, pipeline corrosion, plant growth/NPK modeling, L-systems, plastic pyrolysis) and a Universal Assembly Graph (UAG) based digital-twin pipeline with adapters for Unreal, Unity, Unigine, OpenUSD/Omniverse, Apple RealityKit, and Three.js. It has its own `LICENSE` (MIT), `README.md`, `CITATION.cff`, and governance docs (`CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`). To install just this plugin in Claude Code, point a marketplace add at the `claude-skills/` directory rather than the repo root. Full details: [`claude-skills/README.md`](claude-skills/README.md).
---
## MCP Server (upstream: jasonkim8652/protein-design-mcp, Apache-2.0)
### Installation
Choose the method that fits your situation. Listed from simplest to most customizable.
---
### 1. Auto-Setup (Recommended)
One command. Detects your environment, pulls Docker if available, writes MCP client config.
```bash
pip install protein-design-mcp
protein-design-mcp-setup
```
What it does:
- Checks for Docker and NVIDIA GPU
- Pulls the Docker image (or falls back to local Python mode)
- Writes config for Claude Desktop or Claude Code automatically
- Model weights download lazily on first tool call
Options:
```bash
protein-design-mcp-setup --docker # Force Docker mode
protein-design-mcp-setup --local # Force local Python mode
protein-design-mcp-setup --modal URL # Use Modal cloud GPU
protein-design-mcp-setup -y # Skip confirmation prompt
```
---
### 2. Smithery
If you use [Smithery](https://smithery.ai):
```bash
npx -y @smithery/cli install protein-design-mcp --client claude
```
---
### 3. pip + Manual Config
```bash
pip install protein-design-mcp # Core CPU (12 tools -- includes predict_structure_quantum_walk and export_structure_to_spatial_twin, no extra deps)
pip install "protein-design-mcp[gpu]" # + PyTorch + ESM (15 tools)
pip install "protein-design-mcp[gpu,rosetta]" # + PyRosetta (19 tools) *
pip install "protein-design-mcp[gpu,rosetta,boltz]" # + Boltz-2 (21 of 25 tools -- ZairaChem's 3 tools and predict_peptide_quantum_vqe need separate envs, see below) **
```
\* PyRosetta requires a [free academic license](https://www.pyrosetta.org/downloads). The `[rosetta]` extra installs `pyrosetta-installer` which fetches the wheel after you accept the license.
\** Boltz needs `torch>=2.2` which conflicts with RFdiffusion's `torch==2.0.1`. Install in an isolated venv, not alongside `[gpu]`.
Add to your MCP client config:
**Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
"mcpServers": {
"protein-design": {
"command": "protein-design-mcp"
}
}
}
```
**Claude Code** (`.mcp.json` in your project root):
```json
{
"mcpServers": {
"protein-design": {
"command": "protein-design-mcp"
}
}
}
```
Restart your client after editing config.
---
### 4. Docker
Isolated, reproducible environments with all computational backends pre-installed. **Primary registry: [Docker Hub](https://hub.docker.com/r/jeonghyeonkim8652/protein-design-mcp).**
#### Pull
```bash
# Latest release (GPU image, ~12GB, bundles RFdiffusion + ProteinMPNN + ESMFold + ColabFold + ESM2 + OpenMM)
docker pull jeonghyeonkim8652/protein-design-mcp:latest
docker pull jeonghyeonkim8652/protein-design-mcp:1.0.0 # pin a specific version
```
GHCR mirror (equivalent):
```bash
docker pull ghcr.io/jasonkim8652/protein-design-mcp:latest
```
Tools included in the image: **13 of 19**. The 6 license/conflict-gated tools (`rosetta_*`, `predict_*_boltz`) are not bundled — install via pip extras instead. See [Optional Tools](#optional-tools-pyrosetta--boltz-2).
#### Run (GPU)
Model weights download lazily on first use and persist in a named volume so subsequent runs are instant:
```bash
docker volume create protein-design-models
docker run --rm -i \
--gpus all \
-v protein-design-models:/models \
-v $(pwd):/data \
jeonghyeonkim8652/protein-design-mcp:latest
```
GPU mode requires [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html). The image stdin/stdout is the MCP protocol — you normally don't run it directly, your MCP client does (see below).
#### Run (CPU)
No GPU — works with the same image:
```bash
docker run --rm -i \
-e DEVICE=cpu \
-v protein-design-models:/models \
-v $(pwd):/data \
jeonghyeonkim8652/protein-design-mcp:latest
```
CPU mode disables `design_binder`, `design_fold`, `generate_backbone` (RFdiffusion is GPU-only) → 12 tools available.
#### MCP client config
**Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, or `%APPDATA%/Claude/claude_desktop_config.json` on Windows):
```json
{
"mcpServers": {
"protein-design": {
"command": "docker",
"args": [
"run", "-i", "--rm", "--gpus", "all",
"-e", "SKIP_MODEL_DOWNLOAD=true",
"-v", "protein-design-models:/models",
"-v", "/absolute/path/to/your/pdbs:/data",
"jeonghyeonkim8652/protein-design-mcp:latest"
]
}
}
}
```
**Claude Code** (`.mcp.json` in your project root):
```json
{
"mcpServers": {
"protein-design": {
"command": "docker",
"args": [
"run", "-i", "--rm", "--gpus", "all",
"-v", "protein-design-models:/models",
"-v", "${workspaceFolder}:/data",
"jeonghyeonkim8652/protein-design-mcp:latest"
]
}
}
}
```
For **CPU-only hosts**, drop `"--gpus", "all"` and add `"-e", "DEVICE=cpu"`.
Restart your MCP client after editing config.
#### Tags available on Docker Hub
| Tag | Purpose |
|---|---|
| `latest` | Tracks the most recent release on `main` |
| `1.0.0`, `1.0`, `1` | Semver-pinned (recommended for production) |
| `<sha>` | Exact commit SHA (immutable) |
Check the full tag list at [hub.docker.com/r/jeonghyeonkim8652/protein-design-mcp/tags](https://hub.docker.com/r/jeonghyeonkim8652/protein-design-mcp/tags).
#### Build locally
```bash
git clone https://github.com/jasonkim8652/protein-design-mcp.git
cd protein-design-mcp
docker build -t protein-design-mcp:dev . # GPU image
docker build -f Dockerfile.lite -t protein-design-mcp:lite . # CPU-only, ~3-5GB
```
The GPU build needs ~30 GB free disk and ~20 minutes.
---
### 5. Modal (Cloud GPU)
No local GPU? Deploy to your own [Modal](https://modal.com) account. Serverless GPU on demand, billed per-second (~$1.10/hr A10G). Containers auto-stop after 5 min idle.
```bash
pip install modal
modal setup # One-time: link your Modal account
git clone https://github.com/jasonkim8652/protein-design-mcp.git
cd protein-design-mcp
pip install -e .
modal deploy deploy/modal_app.py # Deploy GPU endpoint
```
After deploying, Modal prints your endpoint URL. Connect via the local proxy:
```json
{
"mcpServers": {
"protein-design": {
"command": "python",
"args": ["-m", "protein_design_mcp.modal_proxy"],
"env": {
"MODAL_URL": "https://<your-workspace>--protein-design-tools.modal.run"
}
}
}
}
```
21 of 25 tools available (ZairaChem's 3 tools and `predict_peptide_quantum_vqe` need their own separate environments, see below -- not part of this Modal image). Local PDB files are automatically sent to Modal.
---
### 6. From Source (Development)
```bash
git clone https://github.com/jasonkim8652/protein-design-mcp.git
cd protein-design-mcp
pip install -e ".[gpu,dev]"
python -m protein_design_mcp.server
```
For full GPU pipeline, install [RFdiffusion](https://github.com/RosettaCommons/RFdiffusion) and [ProteinMPNN](https://github.com/dauparas/ProteinMPNN) separately and set `RFDIFFUSION_PATH` / `PROTEINMPNN_PATH`.
---
## CPU vs GPU
| | GPU | CPU |
|---|---|---|
| **Tools available** | All 19 | 14 (no `design_binder`, `design_fold`, `generate_backbone`, `predict_structure_boltz`, `predict_affinity_boltz`) |
| **RFdiffusion** | ~30s/design | Disabled |
| **Boltz-2** | ~10-30s | Disabled |
| **ESMFold** | ~10s | ~2-5min |
| **ESM2** | ~5s | ~30s |
| **ProteinMPNN** | ~30s | ~5-10min |
| **PyRosetta** | Fast | Comparable |
| **OpenMM** | Fast | Comparable |
| **AlphaFold2 (API)** | Works | Works |
GPU is auto-detected. To force CPU mode, set `DEVICE=cpu`.
## Available Tools
Tools marked **(optional)** are not bundled in the Docker image. See [Optional Tools](#optional-tools-pyrosetta--boltz-2) for install.
### Design & Generation
#### `design_binder` (GPU only)
End-to-end binder design: RFdiffusion (backbone) -> ProteinMPNN (sequence) -> ESMFold (validation).
```json
{
"target_pdb": "path/to/target.pdb",
"hotspot_residues": ["A45", "A46", "A49"],
"num_designs": 10,
"binder_length": 80
}
```
Returns ranked designs with sequences, PDB structures, pLDDT, pTM, and mpnn_score.
#### `generate_backbone` (GPU only)
De novo backbone generation using unconditional RFdiffusion. No target protein required.
```json
{"length": 100, "num_designs": 5}
```
#### `design_fold` (GPU only)
End-to-end de novo fold design: RFdiffusion (unconditional backbone) → ProteinMPNN (sequence) → AlphaFold2 (validation, falls back to ESMFold). Returns ranked designs filtered by pLDDT/pTM.
```json
{"length": 120, "num_designs": 10, "num_sequences_per_backbone": 4}
```
#### `design_sequence`
Design sequences for a given backbone using ProteinMPNN. Unlike `optimize_sequence` (which refines an existing sequence), this designs from scratch given only a backbone PDB — the correct tool after `generate_backbone`. Optionally validates each design with ESMFold.
```json
{
"backbone_pdb": "path/to/backbone.pdb",
"num_sequences": 8,
"sampling_temp": 0.1,
"fixed_positions": [1, 5, 10],
"validate": true
}
```
#### `optimize_sequence`
Redesign a protein sequence for improved stability and/or binding affinity using ProteinMPNN.
```json
{
"current_sequence": "MTKLYV...",
"target_pdb": "path/to/target.pdb",
"optimization_target": "both",
"fixed_positions": [1, 5, 10]
}
```
### Structure Prediction
#### `predict_structure`
Single-chain structure prediction via ESMFold (fast) or AlphaFold2 (accurate).
```json
{"sequence": "MTKLYV...", "predictor": "esmfold"}
```
Returns PDB file, mean pLDDT, pTM, per-residue confidence.
#### `predict_complex`
Multi-chain complex structure prediction using AlphaFold2-Multimer.
```json
{
"sequences": ["BINDER_SEQ...", "TARGET_SEQ..."],
"chain_names": ["binder", "target"]
}
```
Returns predicted complex PDB with pLDDT, pTM/ipTM, and PAE matrix.
#### `predict_structure_boltz` (GPU only, **optional**)
Single-chain structure prediction with [Boltz-2](https://github.com/jwohlwend/boltz) — a fast, high-accuracy open model competitive with AF2.
```json
{"sequence": "MTKLYV...", "model": "boltz2", "num_samples": 1}
```
Returns predicted PDB, mean pLDDT, pTM.
#### `predict_affinity_boltz` (GPU only, **optional**)
Multi-chain complex + binding affinity prediction with Boltz-2. Returns affinity score alongside the predicted complex structure and confidence metrics.
```json
{"sequences": ["BINDER_SEQ...", "TARGET_SEQ..."], "model": "boltz2"}
```
#### `validate_design`
Predict structure of a designed sequence and optionally compute RMSD against a reference.
```json
{
"sequence": "MTKLYV...",
"expected_structure": "path/to/reference.pdb",
"predictor": "esmfold"
}
```
### Analysis & Scoring
#### `analyze_interface`
Analyze protein-protein interface: contacts, buried surface area, hydrogen bonds, salt bridges.
```json
{"complex_pdb": "path/to/complex.pdb", "chain_a": "A", "chain_b": "B"}
```
#### `suggest_hotspots`
Predict binding hotspots from multiple sources. Accepts protein names, UniProt IDs, PDB IDs, or file paths.
```json
{"target": "EGFR", "criteria": "druggable", "include_literature": true}
```
Criteria: `"exposed"` (SASA), `"druggable"` (pocket geometry), `"conserved"` (evolution).
#### `score_stability`
Protein stability scoring via ESM2 pseudo-log-likelihood. Optionally score individual mutations.
```json
{
"sequence": "MTKLYV...",
"mutations": ["A42G", "L55V"]
}
```
Returns overall stability score and per-mutation delta log-likelihood (stabilizing/destabilizing).
#### `energy_minimize`
All-atom energy minimization with OpenMM (AMBER14 + implicit solvent).
```json
{"pdb_path": "path/to/structure.pdb", "num_steps": 500, "solvent": "implicit"}
```
Returns minimized PDB, energy change, and RMSD from input.
### Rosetta (Physics-Based Design & Scoring) — **optional**
PyRosetta-backed tools for physics-based scoring, relaxation, and fixed-backbone design. All use `ref2015` by default. **Not bundled in Docker** — install via `pip install "protein-design-mcp[rosetta]"` after accepting the PyRosetta license.
#### `rosetta_score`
Score a structure with a Rosetta energy function. Returns total score, per-residue energies, and component breakdown.
```json
{"pdb_path": "path/to/structure.pdb", "score_function": "ref2015"}
```
#### `rosetta_relax`
FastRelax protocol to find a low-energy conformation. Returns relaxed PDB, energy before/after, and CA-RMSD from input.
```json
{"pdb_path": "path/to/structure.pdb", "nstruct": 1}
```
#### `rosetta_interface_score`
Interface analysis via `InterfaceAnalyzerMover`: binding energy (dG_separated), buried surface area (dSASA), interface hydrogen bonds, packstat.
```json
{"pdb_path": "path/to/complex.pdb", "chains": "A_B"}
```
#### `rosetta_design`
Fixed-backbone redesign pipeline: score → PackRotamers → MinMover → score. Returns designed PDB, mutation list, and energy delta. Composite tool — in benchmark mode, call `rosetta_score` / `rosetta_relax` individually instead.
```json
{"pdb_path": "path/to/input.pdb", "chains": "A_B", "fixed_positions": [12, 14, 18]}
```
### Bioactivity / QSAR (**optional**, see [Optional Tools: ZairaChem](#optional-tools-zairachem-bioactivityqsar-prediction))
#### `predict_bioactivity` (**optional**)
Score candidate molecules against a trained ZairaChem model (yours, or a published pretrained one e.g. from the H3D Centre screening cascade). Classification only.
```json
{"input_csv": "path/to/candidates.csv", "model_dir": "path/to/model", "output_dir": "path/to/output"}
```
#### `train_qsar_model` (**optional**)
Train a new binary-classification QSAR model from labeled SMILES + activity data.
```json
{"input_csv": "path/to/training_data.csv", "output_dir": "path/to/model_output", "cutoff": 6.5, "direction": "high"}
```
#### `predict_admet_profile` (**optional**)
Run ZairaChem's `predict` across every endpoint you've configured (solubility, toxicity, malaria/tuberculosis bioactivity via `ZAIRACHEM_MODEL_<ENDPOINT>` env vars, e.g. from the H3D Centre screening cascade) for a single SMILES, and return one combined profile. Endpoints with no configured model report `"status": "not_configured"` rather than a fabricated score.
```json
{"smiles": "CCO"}
```
### Quantum Peptide Folding & Spatial Digital Twin (**optional**, see [Optional Tools: QuPepFold](#optional-tools-qupepfold-quantum-peptide-folding))
#### `predict_peptide_quantum_vqe` (**optional**)
Estimate a low-energy peptide conformation with QuPepFold's CVaR-optimized Variational Quantum Eigensolver (Qiskit Aer / Amazon Braket / IonQ Aria-1). Best suited to short peptides (≲10 residues). If `qupepfold` isn't installed in the active environment, returns a structured `"status": "unavailable"` result instead of failing.
```json
{"sequence": "ACDEFGHIK", "alpha": 0.1, "shots": 1024}
```
#### `predict_structure_quantum_walk`
Classical, quantum-walk-inspired torsion-angle (φ,ψ) Metropolis simulation, loosely modeled on QFold's continuous off-lattice algorithm, followed by NeRF backbone reconstruction. Returns a 3D N/CA/C coordinate tensor. Pure Python — no extra dependency, available in every install including core CPU.
```json
{"sequence": "ACDEFGHIK", "steps": 500, "continuous_space": true}
```
Feed the resulting `coordinates` (or Boltz-2's output, reshaped similarly) into `uag_exporter.export_to_openusd()` to get a `.usda` file for NVIDIA Omniverse, NanoVer VR, Unreal Engine 5, or Unity. Uses real `pxr`/`UsdGeom` if `usd-core` is installed (`pip install "protein-design-mcp[usd]"`); otherwise falls back to a hand-written, schema-valid ASCII `.usda` writer with no extra dependency.
### Utility
#### `get_design_status`
Check progress of long-running design jobs.
```json
{"job_id": "abc123"}
```
#### `export_structure_to_spatial_twin`
Export any existing PDB file to OpenUSD (.usda), for NVIDIA Omniverse / NanoVer VR / Unreal Engine 5 / Unity. Source-agnostic -- works on this server's own PDB output as well as PDB output from external MCPs (see [Optional Tools: MacromNex/BindCraft](#optional-tools-macromnexbindcraft-binder-design)).
```json
{"pdb_path": "path/to/structure.pdb", "output_path": "path/to/output.usda"}
```
## Optional Tools: PyRosetta + Boltz-2
These 6 tools (`rosetta_score`, `rosetta_relax`, `rosetta_interface_score`, `rosetta_design`, `predict_structure_boltz`, `predict_affinity_boltz`) are **not included in the Docker image** because:
- **PyRosetta** requires a Rosetta license (free for academics, paid for commercial) and cannot be legally redistributed in a container.
- **Boltz-2** needs `torch>=2.2`, while RFdiffusion's dependency chain (e3nn, dgl) pins `torch==2.0.1`. Both cannot coexist in one venv.
### Installing PyRosetta tools
1. Register at [pyrosetta.org/downloads](https://www.pyrosetta.org/downloads) and accept the license.
2. Install alongside the MCP server:
```bash
pip install "protein-design-mcp[gpu,rosetta]"
python -c "import pyrosetta_installer; pyrosetta_installer.install_pyrosetta()"
```
3. Verify: `python -c "import pyrosetta; print(pyrosetta.__version__)"`
The 4 `rosetta_*` tools become available immediately.
### Installing Boltz-2 tools
Create a separate virtualenv (isolated from the RFdiffusion torch stack):
```bash
python -m venv ~/.venvs/protein-design-boltz
source ~/.venvs/protein-design-boltz/bin/activate
pip install "protein-design-mcp[boltz]"
```
Then point your MCP client at this venv's `protein-design-mcp` binary (or run two MCP servers — one for RFdiffusion/Docker tools, one for Boltz).
### Configuring two MCP servers side-by-side
```json
{
"mcpServers": {
"protein-design": {
"command": "docker",
"args": ["run", "-i", "--rm", "--gpus", "all",
"-v", "protein-design-models:/models",
"jeonghyeonkim8652/protein-design-mcp:latest"]
},
"protein-design-boltz": {
"command": "/home/you/.venvs/protein-design-boltz/bin/protein-design-mcp"
}
}
}
```
Your LLM will see all 20 of those tools through the two servers (includes `predict_structure_quantum_walk`, which needs no extra dependency) and call whichever is appropriate (add a third server entry pointing at a zairachem conda env's Python for the 3 ZairaChem tools, and a fourth pointing at a quantum venv for `predict_peptide_quantum_vqe`, following the same pattern -- see `claude_desktop_config.json` in the repo root for a complete 4-server example).
## Optional Tools: ZairaChem (bioactivity/QSAR prediction)
`predict_bioactivity`, `train_qsar_model`, and `predict_admet_profile` wrap [ZairaChem](https://github.com/ersilia-os/zaira-chem), a published open-source AutoML QSAR/QSPR pipeline from the Ersilia Open Source Initiative (Turon, Hlozek, Woodland et al., "First fully-automated AI/ML virtual screening cascade implemented at a drug discovery centre in Africa," *Nature Communications* 14, 5736, 2023). ZairaChem was co-developed with and validated at the [H3D Centre](https://h3d.uct.ac.za/) (University of Cape Town) -- pretrained models from that malaria/tuberculosis screening cascade are published separately at [ersilia-os/h3d-screening-cascade-models](https://github.com/ersilia-os/h3d-screening-cascade-models) and can be used directly with `predict_bioactivity`/`predict_admet_profile` with no retraining needed.
**Not included in the Docker image** for the same class of reason as PyRosetta/Boltz-2: ZairaChem is a heavy, conda-orchestrated, multi-environment AutoML stack (it also depends on the separately-installed Ersilia Model Hub CLI for descriptor calculation, which itself needs Docker or Singularity for most descriptor models) -- not something that fits cleanly into a single pip extra or a shared container alongside RFdiffusion's pinned torch stack.
### Installing ZairaChem
```bash
git clone https://github.com/ersilia-os/zaira-chem.git
cd zaira-chem
bash install_script.sh
conda activate zairachem
```
Verify: `zairachem --help` should print the CLI's subcommands (`fit`, `predict`, `distill`).
Then point a separate MCP server instance at this conda environment's Python (same "configure two/three MCP servers side-by-side" pattern shown above for Boltz-2).
### Usage notes
- **Classification only** (not regression) -- binarize continuous assay data yourself, or pass `cutoff`/`direction` to `train_qsar_model` and let ZairaChem do it.
- **`predict_bioactivity` needs an existing model** -- either one you trained with `train_qsar_model`, or a pretrained one (e.g. download an H3D screening-cascade model for a malaria/TB-relevant endpoint and point `model_dir` at it directly).
- Natural pipeline position: score candidate molecules from `design_binder`/`design_fold`/an external molecule-generation step (e.g. qFoldIT's `genmol` skill) for predicted bioactivity *before* committing to expensive downstream validation (docking, synthesis).
- Descriptor calculation (especially GROVER embeddings) can be slow on first run or CPU-only setups -- both new tools default to a generous 4-hour subprocess timeout, configurable via `ZairaChemConfig.timeout_seconds` in `pipelines/zairachem_runner.py`.
## Optional Tools: QuPepFold (quantum peptide folding)
`predict_peptide_quantum_vqe` wraps **QuPepFold**, a published Python package for CVaR-tuned Variational Quantum Eigensolver peptide conformational sampling (Uttarkar, Niranjan, Saxena, Kumar, "QuPepFold: A python package for hybrid quantum-classical protein folding simulations with CVaR-optimized VQE," *PLOS ONE*, 2026, [doi:10.1371/journal.pone.0342012](https://doi.org/10.1371/journal.pone.0342012)), runnable on Qiskit Aer, Amazon Braket's tensor-network simulator, or IonQ Aria-1 hardware. No official package repository URL was independently verified for this addition -- install from PyPI (`pip install qupepfold`) if available, or from the paper's own supplementary materials/links, and confirm the source before pinning a version in production.
**Not included in any bundled image** for the same class of reason as PyRosetta/Boltz-2: Qiskit + Amazon Braket SDK + `qupepfold` is a large, independent dependency stack best kept in its own venv.
### Installing the quantum stack
```bash
python -m venv ~/.venvs/protein-design-quantum
source ~/.venvs/protein-design-quantum/bin/activate
pip install "protein-design-mcp[quantum]"
```
Then point a separate MCP server instance at this venv's Python -- see `claude_desktop_config.json` in the repo root for a worked 5-environment example (core / boltz / zairachem / quantum / macromnex-bindcraft), or the "Configuring two MCP servers side-by-side" pattern above.
### Usage notes
- **Best suited to short peptides** (≲10 residues) -- matches the published benchmark range where CVaR-VQE reliably reaches the ground state.
- **Never crashes the server if unavailable**: if `qupepfold` isn't importable, `predict_peptide_quantum_vqe` returns `{"status": "unavailable", "install_hint": ...}` instead of raising.
- `predict_structure_quantum_walk` (the classical, quantum-walk-*inspired* Metropolis simulation + NeRF backbone builder) needs **no** extra dependency and is available in every install, including the base `pip install protein-design-mcp`. See `pipelines/quantum_runner.py`'s module docstring for exactly what it does and doesn't reproduce from the real QFold quantum-walk algorithm.
- QuPepFold's exact importable Python API (class/function names) was not independently re-verified against an installed copy of the package when this wrapper was written -- see `_run_qupepfold_job` in `pipelines/quantum_runner.py` before relying on it in production.
## Spatial Digital Twin Export (OpenUSD)
`uag_exporter.export_to_openusd(atom_coordinates, output_path)` converts any 3D atom-coordinate list produced by this server (Boltz-2, `predict_structure_quantum_walk`, RFdiffusion, etc. -- anything shaped as a list of `{atom, element, x, y, z, residue_index}` dicts) into a `.usda` OpenUSD scene, for live sync with NVIDIA Omniverse, NanoVer VR, Unreal Engine 5, or Unity.
```bash
pip install "protein-design-mcp[usd]" # optional -- enables the real pxr/UsdGeom path
```
Without `usd-core` installed, the same function still works via a hand-written, schema-valid ASCII `.usda` fallback (no extra dependency) -- you lose time-sampling/composition-arc support, but get a working file either way.
#### `export_structure_to_spatial_twin` -- exporting *any* PDB file, including from external MCPs
For anything that only produces a PDB file rather than this repo's own coordinate-dict shape, use the `export_structure_to_spatial_twin` MCP tool (or `uag_exporter.export_pdb_to_openusd(pdb_path, output_path)` directly): it parses the PDB with this repo's own `utils/pdb.py`, flattens it to the coordinate-dict shape above, and hands it straight to `export_to_openusd`. It has no dependency on whatever tool produced the PDB -- it only reads a file path off disk.
```json
{"pdb_path": "path/to/binder_design.pdb", "output_path": "path/to/output.usda"}
```
This is the integration point for **BindCraft** (via ProteinMCP's `bindcraft_mcp`, see [Optional Tools: MacromNex/BindCraft](#optional-tools-macromnexbindcraft-binder-design) below) -- point this tool at whatever `.pdb` file BindCraft's `quick_design` writes to disk and get back a live OpenUSD 3D model, no manual conversion step required.
## Optional Tools: MacromNex/BindCraft (binder design)
`claude_desktop_config.json`'s 5th server entry, `qfoldit-mcp-macromnex-bindcraft`, launches an **external, independently-maintained** MCP: `bindcraft_mcp`, a wrapper around [BindCraft](https://github.com/martinpacesa/BindCraft) (Pacesa, Nickel, Schellhaas et al., "One-shot design of functional protein binders with BindCraft," developed at EPFL's Correia Lab with MIT's Ovchinnikov Lab). `bindcraft_mcp` itself is published as part of [ProteinMCP](https://github.com/charlesxu90/ProteinMCP) (Xu et al., *Protein Science*, 2026, doi:10.1002/pro.70547), forked at [MacromNex/ProteinMCP](https://github.com/MacromNex/ProteinMCP) -- [MacromNex](https://github.com/MacromNex) is a real, independently-confirmed GitHub organization ("Macromolecular Nexus") focused on macromolecular design tooling.
**Naming note:** "macromnex-bindcraft" is this config entry's own label, not a published package or command name -- no repository by that exact name was found. What actually gets launched is `bindcraft_mcp`'s own `src/server.py`, run with its own dedicated conda/mamba environment's Python (its documented invocation is `<env>/bin/python src/server.py`, using `fastmcp`) -- **not** this repo's `protein_design_mcp.server` module. See the config entry's own inline comment for the full correction.
**Not vendored in this repo** -- it's a separate project with its own install script, its own JAX/CUDA setup, and its own PyRosetta license requirement (same license terms as this repo's own `rosetta_*` tools). To use it:
1. Clone `MacromNex/ProteinMCP` (or `charlesxu90/ProteinMCP`) and follow `tool-mcps/bindcraft_mcp`'s own README for environment setup (creates its own `./env`, installs BindCraft itself).
2. Point `claude_desktop_config.json`'s `qfoldit-mcp-macromnex-bindcraft` entry's paths at wherever that ends up on your machine.
3. Once it's running, its `quick_design` (or async equivalent) tool writes a `.pdb` file -- feed that path directly to this repo's own `export_structure_to_spatial_twin` tool to get a live OpenUSD 3D model in Omniverse/NanoVer/Unreal/Unity.
**One framing note:** MacromNex's own stated mission (per its GitHub organization page) is "Geometric Deep Learning, Molecular Physics, and Synthetic Biology" research -- it does not describe itself as a gamification or gaming initiative anywhere in its own materials. Any "gamification"/game-related framing applied to this integration is qFoldIT's own product positioning, not a claim made by or about MacromNex, BindCraft, or ProteinMCP.
## Configuration
| Variable | Description | Default |
|----------|-------------|---------|
| `DEVICE` | `"auto"`, `"cuda"`, or `"cpu"` | `auto` |
| `RFDIFFUSION_PATH` | Path to RFdiffusion installation | `/opt/RFdiffusion` |
| `PROTEINMPNN_PATH` | Path to ProteinMPNN installation | `/opt/ProteinMPNN` |
| `COLABFOLD_BACKEND` | `"api"` (remote MSA) or `"local"` (local DB) | `api` |
| `CACHE_DIR` | Cache directory | `~/.cache/protein-design-mcp` |
| `TORCH_HOME` | ESM model weights directory | (PyTorch default) |
| `SKIP_MODEL_DOWNLOAD` | Skip eager weight download in Docker | `true` |
## Architecture
```
MCP Server (stdio)
|
+-- Design tools
| +-- design_binder RFdiffusion -> ProteinMPNN -> ESMFold
| +-- design_fold RFdiffusion -> ProteinMPNN -> AlphaFold2
| +-- generate_backbone RFdiffusion (unconditional)
| +-- design_sequence ProteinMPNN (+ optional ESMFold validation)
| +-- optimize_sequence ProteinMPNN + ESMFold
|
+-- Structure prediction
| +-- predict_structure ESMFold or AlphaFold2
| +-- predict_complex AlphaFold2-Multimer (ColabFold)
| +-- predict_structure_boltz Boltz-2 (monomer)
| +-- predict_affinity_boltz Boltz-2 (complex + affinity)
| +-- validate_design Structure prediction + RMSD
|
+-- Rosetta (PyRosetta)
| +-- rosetta_score ref2015 energy scoring
| +-- rosetta_relax FastRelax
| +-- rosetta_interface_score InterfaceAnalyzerMover
| +-- rosetta_design PackRotamers + MinMover
|
+-- Bioactivity / QSAR (ZairaChem)
| +-- predict_bioactivity Score molecules against a trained/pretrained model
| +-- train_qsar_model Train a new binary-classification QSAR model
| +-- predict_admet_profile Multi-endpoint ZairaChem orchestration (solubility/toxicity/bioactivity)
|
+-- Quantum peptide folding
| +-- predict_peptide_quantum_vqe QuPepFold CVaR-VQE (Qiskit/Braket)
| +-- predict_structure_quantum_walk Classical quantum-walk-inspired Metropolis + NeRF
|
+-- Spatial digital twin export
| +-- uag_exporter.export_to_openusd Atom coordinates -> OpenUSD (.usda)
| +-- export_structure_to_spatial_twin Any PDB file -> OpenUSD (source-agnostic, incl. external MCPs)
|
+-- Analysis tools
| +-- analyze_interface PDB geometry analysis
| +-- suggest_hotspots SASA + pockets + UniProt + PubMed
| +-- score_stability ESM2 pseudo-log-likelihood
| +-- energy_minimize OpenMM (AMBER14)
|
+-- Utilities
+-- get_design_status Job queue polling
+-- Structure fetching (RCSB, AlphaFold DB, UniProt)
+-- Conservation scoring, caching
```
## Development
```bash
git clone https://github.com/jasonkim8652/protein-design-mcp.git
cd protein-design-mcp
pip install -e ".[gpu,dev]"
pytest tests/ # Run tests
ruff check . # Lint
black . # Format
mypy src/ # Type check
```
## License
Apache License 2.0 - see [LICENSE](LICENSE) for details.
## References
- [MCP Specification](https://modelcontextprotocol.io/docs)
- [RFdiffusion](https://github.com/RosettaCommons/RFdiffusion) - Protein backbone generation
- [ProteinMPNN](https://github.com/dauparas/ProteinMPNN) - Sequence design
- [ESMFold / ESM2](https://github.com/facebookresearch/esm) - Structure prediction and stability scoring
- [ColabFold](https://github.com/sokrypton/ColabFold) - Fast AlphaFold2 with MMseqs2
- [Boltz](https://github.com/jwohlwend/boltz) - Open structure and affinity prediction
- [PyRosetta](https://www.pyrosetta.org/) - Physics-based protein modeling
- [OpenMM](https://github.com/openmm/openmm) - Molecular dynamics and energy minimization
- [ZairaChem](https://github.com/ersilia-os/zaira-chem) - AutoML QSAR/bioactivity prediction (Turon, Hlozek, Woodland et al., "First fully-automated AI/ML virtual screening cascade implemented at a drug discovery centre in Africa," *Nature Communications* 14, 5736, 2023, https://doi.org/10.1038/s41467-023-41512-2)
- [H3D Centre screening cascade models](https://github.com/ersilia-os/h3d-screening-cascade-models) - Pretrained ZairaChem models usable directly with `predict_bioactivity` / `predict_admet_profile`
- QuPepFold - CVaR-optimized VQE peptide folding (Uttarkar, Niranjan, Saxena, Kumar, *PLOS ONE*, 2026, https://doi.org/10.1371/journal.pone.0342012)
- QFold - Quantum-walk Metropolis protein folding (Casares, Campos, Martin-Delgado, "QFold: quantum walks and deep learning to solve protein folding," *Quantum Science and Technology* 7, 025013, 2022, https://doi.org/10.1088/2058-9565/ac4f2f, arXiv:2101.10279) -- classical inspiration only for `predict_structure_quantum_walk`, see that tool's own scope note
- [OpenUSD](https://openusd.org/) - Scene description format used by `uag_exporter.py` for spatial digital-twin export (NVIDIA Omniverse, NanoVer VR, Unreal Engine 5, Unity)
- [BindCraft](https://github.com/martinpacesa/BindCraft) - De novo protein binder design (Pacesa, Nickel, Schellhaas et al., EPFL Correia Lab / MIT Ovchinnikov Lab). Not vendored -- integrated externally via `bindcraft_mcp`, see [Optional Tools: MacromNex/BindCraft](#optional-tools-macromnexbindcraft-binder-design)
- [ProteinMCP](https://github.com/charlesxu90/ProteinMCP) - Agentic MCP framework packaging BindCraft as `bindcraft_mcp` (Xu et al., *Protein Science*, 2026, https://doi.org/10.1002/pro.70547), forked at [MacromNex/ProteinMCP](https://github.com/MacromNex/ProteinMCP)
- Full citation metadata, including software/consortium references: see [CITATION.cff](CITATION.cff)
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues