From chemaudit
Validates and scores chemical structures using ChemAudit's 16 deep checks, 1500+ structural alerts, and drug-likeness metrics like Lipinski and QED. Supports SMILES, InChI, MOL, IUPAC, and DB IDs.
npx claudepluginhub kohulan/chemauditThis skill is limited to using the following tools:
Single-molecule validation with three complementary layers:
Applies drug-likeness rules (Lipinski, Veber), PAINS filters, structural alerts, and complexity metrics to filter and prioritize compound libraries in drug discovery.
Applies medicinal chemistry filters like Lipinski, Veber rules, PAINS patterns, structural alerts, and complexity metrics to prioritize and filter compound libraries in drug discovery.
Analyzes molecules using RDKit: parses SMILES/SDF, computes descriptors (MW, LogP, TPSA), fingerprints (Morgan, MACCS), Tanimoto similarity, SMARTS filtering, Lipinski checks, reactions, 2D/3D coords.
Share bugs, ideas, or general feedback.
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.