1. EquiScore Docking Ranking Skill
SkillDev toolsEnd-to-end docking-score ranking using EquiScore for candidate molecules against a target protein.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the 1. EquiScore Docking Ranking Skill skill
What this skill tells your AI
The instructions your AI receives, as published by internscience/molclaw in skills/L1_tools/molclaw-equiscore-docking/SKILL.md and read by ahel’s review.
Note:
- Local files are not directly accessible by the server. Please upload them to the server using
molclaw-file-transferbefore execution. - For PDB file inputs, it is recommended to preprocess them using
molclaw-pdbfixerbefore execution. - Please refer to skill
molclaw-scp-serverto complete tool invocation.
step 1. Retrieve target protein structure (skip if user already provides PDB).
- Use skill
molclaw-protein-structure-retrieve.
step 2. Optional chain extraction (only if specific chains are required).
response = await client.session.call_tool(
"extract_and_save_chains",
arguments={"pdb_file_path": pdb_path, "chain_ids": chain_ids}
)
result = client.parse_result(response)
pdb_path = result["out_file"]
step 3. Fix receptor structure with PDBFixer.
response = await client.session.call_tool(
"fix_pdb",
arguments={
"input_path": pdb_path,
"add_hydrogens": True,
"ph": 7.0,
"remove_heterogens": True,
"remove_water": True,
"replace_nonstandard": True
}
)
result = client.parse_result(response)
fixed_pdb_path = result["output_file"]
2. EquiScore-based Ranking Flow
step 4. Drug-likeness filtering.
- Keep molecules satisfying:
QED >= 0.2andlipinski_rule_of_5_violations <= 2. - Always compute from returned
result["metrics"]; do not use manually copied values. - Assert
len(metrics) == len(candidate_smiles_list)before filtering.
response = await client.session.call_tool(
"calculate_mol_drug_chemistry",
arguments={"smiles_list": candidate_smiles_list}
)
result = client.parse_result(response)
metrics = result["metrics"]
filtered_smiles = [
m["smiles"] for m in metrics
if m["qed"] >= 0.2 and m["lipinski_rule_of_5_violations"] <= 2
]
step 5. Build EquiScore docking input.
Important:
- EquiScore needs a docking-result SDF (ligand poses relative to receptor).
- Raw SDF converted directly from SMILES is not sufficient for
equiscore_pocket.
Two valid modes:
-
Mode A: user already provides
docking_result_sdf_path-> use directly. -
Mode B: only SMILES provided -> first generate docking poses using
molecule_docking_quickvina_fullprocess, then perform a pose-preserving PDBQT-to-SDF conversion and setdocking_result_sdf_pathto that converted docked file before continuing to step 6.
The deployed convert_smiles_to_format tool accepts SMILES strings or .smi files; it does not convert an existing docked PDBQT pose. Using it here would regenerate ligand coordinates and lose the receptor-relative pose. Perform the file conversion with a pose-preserving converter such as Open Babel where available, then upload the resulting SDF with molclaw-file-transfer. If no such conversion path is available, require an already docked SDF instead of substituting a raw SMILES-derived SDF.
step 6. Run EquiScore pocket extraction first.
- Use
molclaw-equiscore-tool->equiscore_pocket. - Before first call, verify tool argument names from schema (
list_tools+inputSchema) if uncertain.
response = await client.session.call_tool(
"equiscore_pocket",
arguments={
"docking_result": docking_result_sdf_path,
"receptor_pdb": fixed_pdb_path,
"pocket_cutoff": None,
"dry_run": False
}
)
pocket_res = client.parse_result(response)
pocket_dir = pocket_res["pocket_dir"]
If split_sdf_count == 0 or pocket_item_count == 0, fix docking input first and rerun this step.
step 7. Run EquiScore screening.
- Use
molclaw-equiscore-tool->equiscore_screen.
response = await client.session.call_tool(
"equiscore_screen",
arguments={
"pocket_dir": pocket_dir,
"ngpu": 1,
"batch_size": 128,
"num_workers": 8,
"multi_pose": False,
"pose_num": 1,
"debug": False,
"dry_run": False
}
)
screen_res = client.parse_result(response)
predictions_path = screen_res["predictions_path"]
score_field = screen_res.get("score_field")
step 8. Rank and return.
- Prefer direct CSV read from
predictions_path. - If direct read fails, use
molclaw-file-transfer(server_file_to_base64) to fetch CSV and parse locally. - Preserve
ligand_to_smiles_map; do not assume CSV always has asmilescolumn.
Signals
- GitHub stars
- 33
- Forks
- 3
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
molclaw-equiscore-docking- Source
- github.com/internscience/molclaw