# Ligandmpnn

Inverse-fold a backbone with ligand, nucleic-acid, and metal context using LigandMPNN...

- Repository: https://github.com/aipoch/open-science (5414 stars)
- Category: Design
- License: Apache-2.0
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add aipoch/open-science --skill ligandmpnn -g -a claude-code -y`
Codex: `npx skills add aipoch/open-science --skill ligandmpnn -g -a codex -y`
Cursor: `npx skills add aipoch/open-science --skill ligandmpnn -g -a cursor -y`
Gemini CLI: `npx skills add aipoch/open-science --skill ligandmpnn -g -a gemini-cli -y`

## Description

Inverse-fold a backbone with ligand, nucleic-acid, and metal context using LigandMPNN (Dauparas et al. 2023, github.com/dauparas/LigandMPNN). Reach for this skill to redesign the residues lining a binding pocket around a bound small molecule or cofactor, to design metal-coordinating sites where the geometry must be respected, or to get threaded designed-sequence PDBs out of any MPNN run.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# LigandMPNN

LigandMPNN extends the ProteinMPNN graph with non-protein atoms, small
molecules, nucleic acids, and metals are visible to the network, so it is the
right inverse-folding tool whenever the design surface includes a bound ligand
or cofactor that vanilla `proteinmpnn` would ignore. The same `run.py` is also
the most convenient runner for the other MPNN families because, unlike the
original ProteinMPNN script, it threads designs back onto the input structure
and writes PDBs alongside the FASTA. Code and weights are MIT
(github.com/dauparas/LigandMPNN). The model is small enough to run on CPU, for a handful of designs on one structure that is seconds and usually faster
than dispatching, so the normal path is local with
`pip install torch numpy biopython ProDy ml_collections dm-tree`; a GPU helps
for batched campaigns.

## Running it

```bash
pip install torch numpy biopython ProDy ml_collections dm-tree
git clone --depth 1 https://github.com/dauparas/LigandMPNN.git ligandmpnn
cd ligandmpnn
sed -i 's/np\.int\b/np.int64/g' openfold/np/residue_constants.py   # repo pins numpy 1.23; alias removed in >=1.24
bash get_model_params.sh ./model_params
python run.py \
  --model_type ligand_mpnn \
  --checkpoint_ligand_mpnn ./model_params/ligandmpnn_v_32_010_25.pt \
  --pdb_path complex.pdb \
  --out_folder out \
  --batch_size 8 --number_of_batches 4 \
  --temperature 0.1 \
  --fixed_residues "A45 A46 A47 A48"
```

Residue selections are space-separated `{chain}{resnum}` tokens inside one
quoted string (`"A45 A46 B10"`; insertion codes append directly, `"B82A"`).
That is the format for `--fixed_residues` and `--redesigned_residues`;
`--bias_AA_per_residue` and `--omit_AA_per_residue` instead take a path to a
JSON file whose keys use the same `{chain}{resnum}` form, and
`--chains_to_design` is comma-separated (`"A,B"`). If you want to redesign only the pocket, naming the pocket residues
in `--redesigned_residues` is usually shorter than fixing everything else.

The rest: https://github.com/aipoch/open-science/blob/HEAD/resources/skills/ligandmpnn/SKILL.md
