admet-prediction
Goal
Compute ADMET-relevant physicochemical descriptors and rule-based drug-likeness heuristics from SMILES strings using RDKit.
This skill reports:
- Core descriptors: molecular weight (average and exact), Wildman-Crippen cLogP, TPSA, HBD/HBA, rotatable bonds, ring counts, aromatic rings, heavy atoms, fractionCSP3, molar refractivity.
- Heuristics:
- Lipinski Rule of Five (Ro5) compliance (≤ 1 violation) as a permeability/absorption triage heuristic.
- Veber oral bioavailability heuristic (RB ≤ 10 and TPSA ≤ 140 Ų; plus reporting the alternative HBD+HBA ≤ 12 condition).
- QED (Quantitative Estimate of Drug-likeness) score.
Note: This does not predict experimental ADMET endpoints (e.g., clearance, CYP inhibition, hERG, Ames, etc.). It is an early-stage physchem/heuristics screen.
Instructions
The drugdisc MCP server provides a compute_molecular_descriptors tool that can be called directly:
Single molecule analysis:
mcp_drugdisc_compute_molecular_descriptors(
smiles="CC(=O)Oc1ccccc1C(=O)O",
output_file="aspirin_admet.json"
)
Batch analysis from a SMILES file:
mcp_drugdisc_compute_molecular_descriptors(
smiles_file=".agents/skills/drug-admet-prediction/examples/compounds.smi",
output_file="batch_admet.json"
)
With S/P-inclusive TPSA:
mcp_drugdisc_compute_molecular_descriptors(
smiles="OC(=O)P(=O)(O)O",
include_sandp_tpsa=True,
output_file="foscarnet_admet.json"
)
Examples
Example compounds.smi:
CN1C=NC2=C1C(=O)N(C(=O)N2C)C caffeine
CC(=O)Oc1ccccc1C(=O)O aspirin
CC(C)Cc1ccc(cc1)C(C)C(=O)O ibuprofen
Run:
mcp_drugdisc_compute_molecular_descriptors(
smiles_file=".agents/skills/drug-admet-prediction/examples/compounds.smi",
output_file="drug_admet.json"
)
Constraints
- MCP Server: Requires
drugdisc MCP server
- Dependencies: RDKit (Chem, Descriptors, Lipinski, Crippen, QED)
- Scope: Outputs physchem descriptors + rule-based heuristics only; not ML/experimental ADMET prediction
- Ro5 interpretation: A "pass" is defined here as ≤ 1 violation (common industry convention)
- Veber interpretation: Primary check uses TPSA ≤ 140 Ų and rotatable bonds ≤ 10, and additionally reports the alternative (HBD + HBA ≤ 12) criterion
- Standardization: If SMILES contains multiple fragments (e.g., salts, "."), results are reported but flagged with a warning; consider desalting/neutralization upstream for library triage
- TPSA option: By default, TPSA uses RDKit's default behavior (no S/P);
include_sandp_tpsa=True includes S/P contributions
- Two HBA definitions, both reported:
hba is rdMolDescriptors.CalcNumHBA, the
strict SMARTS acceptor count that excludes amide and pyrrole-type N with delocalised
lone pairs (caffeine = 3: two carbonyl O plus one imidazole =N-). hba_lipinski is
rdMolDescriptors.CalcNumLipinskiHBA, the raw N+O count Lipinski 1997 specified
(caffeine = 6). Ro5 is scored on hba_lipinski, per the original paper.
Do not call the Lipinski.NumHAcceptors alias: its meaning changed between rdkit
2025.09.4 and 2025.09.6 (caffeine 6 -> 3), so results computed through it are not
comparable across environments. hba inherits that library change and will read 6
on rdkit <= 2025.09.4 and 3 on >= 2025.09.6; hba_lipinski is stable on both.
Author: Matthew Cox
Contact: GitHub @mcox3406
1---2name: drug-admet-prediction3description: Compute RDKit physicochemical descriptors and rule-based drug-likeness heuristics (Ro5, Veber, QED) from SMILES.4---56# admet-prediction78## Goal9Compute ADMET-relevant **physicochemical descriptors** and **rule-based drug-likeness heuristics** from SMILES strings using RDKit.1011This skill reports:12- Core descriptors: molecular weight (average and exact), Wildman-Crippen cLogP, TPSA, HBD/HBA, rotatable bonds, ring counts, aromatic rings, heavy atoms, fractionCSP3, molar refractivity.13- Heuristics:14 - **Lipinski Rule of Five (Ro5)** compliance (≤ 1 violation) as a permeability/absorption triage heuristic.15 - **Veber** oral bioavailability heuristic (RB ≤ 10 and TPSA ≤ 140 Ų; plus reporting the alternative HBD+HBA ≤ 12 condition).16 - **QED** (Quantitative Estimate of Drug-likeness) score.1718> Note: This does **not** predict experimental ADMET endpoints (e.g., clearance, CYP inhibition, hERG, Ames, etc.). It is an early-stage physchem/heuristics screen.1920## Instructions2122The drugdisc MCP server provides a `compute_molecular_descriptors` tool that can be called directly:2324**Single molecule analysis:**25```bash26mcp_drugdisc_compute_molecular_descriptors(27 smiles="CC(=O)Oc1ccccc1C(=O)O",28 output_file="aspirin_admet.json"29)30```3132**Batch analysis from a SMILES file:**33```bash34mcp_drugdisc_compute_molecular_descriptors(35 smiles_file=".agents/skills/drug-admet-prediction/examples/compounds.smi",36 output_file="batch_admet.json"37)38```3940**With S/P-inclusive TPSA:**41```bash42mcp_drugdisc_compute_molecular_descriptors(43 smiles="OC(=O)P(=O)(O)O",44 include_sandp_tpsa=True,45 output_file="foscarnet_admet.json"46)47```4849## Examples5051Example `compounds.smi`:52```text53CN1C=NC2=C1C(=O)N(C(=O)N2C)C caffeine54CC(=O)Oc1ccccc1C(=O)O aspirin55CC(C)Cc1ccc(cc1)C(C)C(=O)O ibuprofen56```5758Run:59```bash60mcp_drugdisc_compute_molecular_descriptors(61 smiles_file=".agents/skills/drug-admet-prediction/examples/compounds.smi",62 output_file="drug_admet.json"63)64```6566## Constraints67- **MCP Server**: Requires `drugdisc` MCP server68- **Dependencies**: RDKit (Chem, Descriptors, Lipinski, Crippen, QED)69- **Scope**: Outputs physchem descriptors + rule-based heuristics only; not ML/experimental ADMET prediction70- **Ro5 interpretation**: A "pass" is defined here as **≤ 1 violation** (common industry convention)71- **Veber interpretation**: Primary check uses **TPSA ≤ 140 Ų and rotatable bonds ≤ 10**, and additionally reports the alternative **(HBD + HBA ≤ 12)** criterion72- **Standardization**: If SMILES contains multiple fragments (e.g., salts, "."), results are reported but flagged with a warning; consider desalting/neutralization upstream for library triage73- **TPSA option**: By default, TPSA uses RDKit's default behavior (no S/P); `include_sandp_tpsa=True` includes S/P contributions74- **Two HBA definitions, both reported**: `hba` is `rdMolDescriptors.CalcNumHBA`, the75 strict SMARTS acceptor count that excludes amide and pyrrole-type N with delocalised76 lone pairs (caffeine = 3: two carbonyl O plus one imidazole `=N-`). `hba_lipinski` is77 `rdMolDescriptors.CalcNumLipinskiHBA`, the raw N+O count Lipinski 1997 specified78 (caffeine = 6). **Ro5 is scored on `hba_lipinski`**, per the original paper.79 Do not call the `Lipinski.NumHAcceptors` alias: its meaning changed between rdkit80 2025.09.4 and 2025.09.6 (caffeine 6 -> 3), so results computed through it are not81 comparable across environments. `hba` inherits that library change and will read 682 on rdkit <= 2025.09.4 and 3 on >= 2025.09.6; `hba_lipinski` is stable on both.83---8485**Author:** Matthew Cox86**Contact:** [GitHub @mcox3406](https://github.com/mcox3406)