From chemaudit
Validates and scores chemical structures using ChemAudit's 16 deep checks, 1,500+ structural alerts, and drug-likeness rules. Supports SMILES, InChI, MOL, IUPAC, and database IDs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/chemaudit:chemaudit-molecule-validationThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Single-molecule validation with three complementary layers:
Single-molecule validation with three complementary layers:
/validate) — 16 deep cheminformatics checks, 0-100 score./score) — drug-likeness (Lipinski, QED, Veber, Ghose, Egan, Muegge, Ro3), ADMET, ML-readiness, NP-likeness, safety filters./alerts, /alerts/screen) — PAINS, Brenk, NIH, ZINC, Kazius, NIBR, plus 7 ChEMBL pharma filter sets.Score interpretation: ≥70 pass, 40–69 warn, <40 fail.
http://localhost:8000).chemaudit validate|score|standardize|profile with --local for offline mode.chemaudit MCP server exposes all tagged endpoints at /mcp.Input formats auto-detected: SMILES, InChI, MOL block, IUPAC name (OPSIN then PubChem fallback). Identifier resolution (ChEMBL ID, CAS, PubChem CID, ChEBI, UNII, DrugBank, etc.) goes through /api/v1/resolve first.
curl -sS -X POST http://localhost:8000/api/v1/validate \
-H 'Content-Type: application/json' \
-d '{"molecule": "CC(=O)Oc1ccccc1C(=O)O", "format": "auto"}'
Response (abridged):
{
"status": "completed",
"molecule_info": {
"canonical_smiles": "CC(=O)OC1=CC=CC=C1C(=O)O",
"inchikey": "BSYNRYMUTXBXSQ-UHFFFAOYSA-N",
"molecular_formula": "C9H8O4",
"molecular_weight": 180.16,
"num_stereocenters": 0,
"has_stereochemistry": false
},
"overall_score": 95,
"issues": [],
"all_checks": [...],
"execution_time_ms": 42,
"cached": false
}
Pass specific check names instead of "all" (the default). Full list in references/validation-checks.md:
curl -sS -X POST http://localhost:8000/api/v1/validate \
-H 'Content-Type: application/json' \
-d '{
"molecule": "CC(C)(C)C1=CC=C(C=C1)[N+](=O)[O-]",
"checks": ["stereoisomer_enumeration", "tautomer_detection",
"hypervalent_atoms", "radical_detection", "charged_species"]
}'
Each failing check returns severity (info/warning/error), message, affected_atoms, and a details dict.
curl -sS -X POST http://localhost:8000/api/v1/score \
-H 'Content-Type: application/json' \
-d '{
"molecule": "CC(=O)Oc1ccccc1C(=O)O",
"include": ["druglikeness", "admet", "np_likeness", "ml_readiness",
"safety_filters", "consensus", "bioavailability_radar",
"boiled_egg"]
}'
Druglikeness returns Lipinski (0–4 violations), QED (0–1), Veber, Ro3, Ghose, Egan, Muegge. ADMET returns SAscore, ESOL solubility, Fsp3, CNS MPO, Pfizer 3/75, GSK 4/400, Golden Triangle. ML-readiness returns 0–100 with 4-dimension breakdown.
Profiles live in the database and are seeded at startup. Retrieve or use by ID:
curl -sS http://localhost:8000/api/v1/profiles
The 8 presets are: Drug-like (Lipinski), Lead-like, Fragment-like (Rule of 3), CNS-penetrant, Ghose (Amgen), Veber (GSK), PPI-like, NP-like. Presets are immutable — duplicate before editing.
Targeted screen against a chosen set of catalogs:
curl -sS -X POST http://localhost:8000/api/v1/alerts \
-H 'Content-Type: application/json' \
-d '{
"molecule": "CC(=O)Oc1ccccc1C(=O)O",
"catalogs": ["PAINS", "BRENK", "NIH", "ZINC"]
}'
Unified one-shot screen across all catalogs (PAINS A/B/C, BRENK, NIH, ZINC, Kazius, NIBR, 7 ChEMBL pharma filters, 21 custom SMARTS) with deduplicated concern groups:
curl -sS -X POST http://localhost:8000/api/v1/alerts/screen \
-H 'Content-Type: application/json' \
-d '{"molecule": "CCOC(=O)N=Nc1ccccc1"}'
List available catalogs:
curl -sS http://localhost:8000/api/v1/alerts/catalogs
Critical caveat: alerts are investigation flags, not rejections. 87 FDA-approved drugs contain PAINS patterns.
curl -sS -X POST http://localhost:8000/api/v1/profiler/full \
-H 'Content-Type: application/json' \
-d '{"smiles": "CC(=O)Oc1ccccc1C(=O)O"}'
Returns PFI, Abbott #stars, consensus LogP, skin permeation, CNS MPO, SA comparison (SA Score + SCScore + SYBA when installed). 3D shape descriptors are lazy — call /profiler/shape-3d separately.
chemaudit validate --smiles "CC(=O)Oc1ccccc1C(=O)O"
chemaudit validate --smiles "CCO" --local # offline
chemaudit validate --file compounds.csv --format json
echo "CCO" | chemaudit validate # stdin
chemaudit score --smiles "CCO" --local
chemaudit profile --smiles "CCO"
--local bypasses the HTTP server and calls service functions directly.
Before validating a compound given as a non-structural identifier, resolve it first:
curl -sS -X POST http://localhost:8000/api/v1/resolve \
-H 'Content-Type: application/json' \
-d '{"identifier": "50-78-2", "identifier_type": "auto"}'
Supported types: auto, smiles, inchi, inchikey, pubchem_cid, chembl_id, cas, drugbank_id, chebi_id, unii, wikipedia, name. Response includes canonical_smiles, cross_references (CIDs, ChEMBL, DrugBank, UNII, CAS), and resolution_chain provenance.
POST /api/v1/validate with {"molecule": "<smi>"} → check overall_score, list issues.POST /api/v1/score with {"molecule": "<smi>", "include": ["ml_readiness", "druglikeness"]} → read ml_readiness.score (0–100) and interpretation.POST /api/v1/validate with {"molecule": "<smi>", "checks": ["all"]}.all_checks where passed=false, group by severity.check_name using references/validation-checks.md, show affected_atoms and the details dict.GET /api/v1/profiles → find IDs for Drug-like (Lipinski), Ghose (Amgen), CNS-penetrant.POST /api/v1/score with {"molecule": "<smi>", "include": ["druglikeness"]} gets Lipinski and Ghose directly./profiler/full → read cns_mpo.score and cns_mpo.cns_penetrant boolean.Anonymous (no API key):
/validate, /checks, /score, /score/compare, /alerts, /alerts/catalogs, /alerts/quick-check, /alerts/screen, /standardize./validate/async, /validate/similarity, /standardize/options, /profiler/full, /profiler/efficiency, /profiler/mpo./profiler/sa-comparison./profiler/shape-3d.API key via X-API-Key header raises the tier (300/min on most endpoints).
The detail dict includes errors[], warnings[], and format_detected. Common fixes:
POST /api/v1/diagnostics/smiles for position-specific fix suggestions."format": "iupac" explicitly to force OPSIN/PubChem.M END terminator is present and on its own line.The validator blocks `< > & ; | $ ``. Strip these client-side before calling.
Short valid SMILES like CO, O, CCO are ambiguous. Pass "input_type": "smiles" or "format": "smiles" to skip name resolution.
/validate/asyncThe high-priority Celery worker is unavailable. Either use the sync /validate endpoint or check that the high_priority queue worker is running (docker compose logs worker-priority).
Use X-API-Key header for the 300/min tier, or stagger requests client-side. Batch endpoints (/batch/upload) have their own limits — see the chemaudit-batch-validation skill.
/validate caches by (inchikey, checks); repeated calls return cached: true with the same score. To bypass, add a meaningless suffix to checks or flush Redis.
references/validation-checks.md — catalog of all 16 deep validation checks with severity, rationale, and fix recipes.chemaudit-batch-validation — upload CSV/SDF for bulk validation with analytics.chemaudit-diagnostics — when you need to know why a SMILES fails, not just that it did.chemaudit-standardization — before validating heterogeneous datasets, standardize first.npx claudepluginhub kohulan/chemauditApplies medicinal-chemistry filters (Lipinski, Veber, PAINS, structural alerts) and molecular complexity metrics for compound library triage and drug-likeness assessment.
Medicinal chemistry filters. Apply drug-likeness rules (Lipinski, Veber), PAINS filters, structural alerts, complexity metrics, for compound prioritization and library filtering.
Applies medicinal chemistry filters for compound triage: drug-likeness rules (Lipinski Ro5, Veber, Oprea, CNS), structural alerts (PAINS, NIBR), group detectors, complexity metrics. Built on RDKit/datamol for Python drug discovery.