kohulan/chemaudit/chemaudit-molecule-validation
Claude Code and agent skill by kohulan/chemaudit
- community
Checking that the SKILL.md file is still in the repository.
Validate and score chemical structures using ChemAudit's 16 deep validation checks, 1,500+ structural alerts, and multi-rule drug-likeness scoring. Use when user says "validate this molecule", "check this SMILES", "is this compound valid", "ML-readiness score", "drug-likeness", "deep validation", "quality score", "PAINS check", or asks about stereochemistry, valence, tautomers, or structural issues. Supports SMILES, InChI, MOL blocks, IUPAC names (OPSIN + PubChem), and database identifiers (ChEMBL ID, CAS, PubChem CID, InChIKey) via the /resolve endpoint.
Install
npx vskill@latest install kohulan/chemaudit/chemaudit-molecule-validationSKILL.md
ChemAudit Molecule Validation
Overview
Single-molecule validation with three complementary layers:
- Validation (
/validate) — 16 deep cheminformatics checks, 0-100 score. - Scoring (
/score) — drug-likeness (Lipinski, QED, Veber, Ghose, Egan, Muegge, Ro3), ADMET, ML-readiness, NP-likeness, safety filters. - Alerts (
/alerts,/alerts/screen) — PAINS, Brenk, NIH, ZINC, Kazius, NIBR, plus 7 ChEMBL pharma filter sets.
Score interpretation: ≥70 pass, 40–69 warn, <40 fail.
Access modes
- API: HTTP calls to a running ChemAudit instance (default
http://localhost:8000). - CLI:
chemaudit validate|score|standardize|profilewith--localfor offline mode. - MCP:
chemauditMCP 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.
Workflow
1. Quick validation (default 16 checks + scoring)
Response (abridged):
2. Targeted deep checks
Pass specific check names instead of "all" (the default). Full list in references/validation-checks.md:
Each failing check returns severity (info/warning/error), message, affected_atoms, and a details dict.
3. Drug-likeness and ADMET scoring
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.
4. Scoring profile presets (8 built-in)
Profiles live in the database and are seeded at startup. Retrieve or use by ID:
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.
5. Structural alerts
Targeted screen against a chosen set of catalogs:
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:
List available catalogs:
Critical caveat: alerts are investigation flags, not rejections. 87 FDA-approved drugs contain PAINS patterns.
6. Compound profiling (PFI, #stars, bioavailability, SA comparison)
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.
7. CLI usage
--local bypasses the HTTP server and calls service functions directly.
8. Identifier resolution (CAS, ChEMBL ID, PubChem CID, names)
Before validating a compound given as a non-structural identifier, resolve it first:
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.
Examples
Example 1 — "Validate this SMILES and tell me if it's ML-ready"
POST /api/v1/validatewith{"molecule": "<smi>"}→ checkoverall_score, listissues.POST /api/v1/scorewith{"molecule": "<smi>", "include": ["ml_readiness", "druglikeness"]}→ readml_readiness.score(0–100) andinterpretation.- Summarise: parseable, passes Lipinski with X violations, ML-readiness = Y/100 with breakdown across 4 dimensions.
Example 2 — "Run deep validation and explain all issues"
POST /api/v1/validatewith{"molecule": "<smi>", "checks": ["all"]}.- Filter
all_checkswherepassed=false, group byseverity. - For each issue, explain the
check_nameusingreferences/validation-checks.md, showaffected_atomsand thedetailsdict.
Example 3 — "Score against Lipinski, Ghose, and CNS-penetrant profiles"
GET /api/v1/profiles→ find IDs forDrug-like (Lipinski),Ghose (Amgen),CNS-penetrant.POST /api/v1/scorewith{"molecule": "<smi>", "include": ["druglikeness"]}gets Lipinski and Ghose directly.- For CNS-penetrant, use
/profiler/full→ readcns_mpo.scoreandcns_mpo.cns_penetrantboolean.
Rate limits
Anonymous (no API key):
- 10/min:
/validate,/checks,/score,/score/compare,/alerts,/alerts/catalogs,/alerts/quick-check,/alerts/screen,/standardize. - 30/min:
/validate/async,/validate/similarity,/standardize/options,/profiler/full,/profiler/efficiency,/profiler/mpo. - 20/min:
/profiler/sa-comparison. - 10/min:
/profiler/shape-3d.
API key via X-API-Key header raises the tier (300/min on most endpoints).
Troubleshooting
400 "Failed to parse molecule"
The detail dict includes errors[], warnings[], and format_detected. Common fixes:
- Unbalanced ring closures — use
POST /api/v1/diagnostics/smilesfor position-specific fix suggestions. - IUPAC name with unusual punctuation — pass
"format": "iupac"explicitly to force OPSIN/PubChem. - MOL block — ensure
M ENDterminator is present and on its own line.
400 "Invalid characters in molecule string"
The validator blocks < > & ; | $ \`. Strip these client-side before calling.
Input auto-classified as IUPAC when it's a valid SMILES
Short valid SMILES like CO, O, CCO are ambiguous. Pass "input_type": "smiles" or "format": "smiles" to skip name resolution.
504 on /validate/async
The 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).
429 rate limit
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.
InChIKey-based caching
/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.
Further reading
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.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/chemaudit-molecule-validation/SKILL.md
Popularity
- Repository stars
- 63
- Repository forks
- 7
- 7-day trend score
- 21
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/kohulan/chemaudit/chemaudit-molecule-validation)