Pharmaclaw Chemistry Query
by @cheminem
Chemistry agent skill for PubChem API queries (compound info/properties, structures/SMILES/images, synthesis routes/references) + RDKit cheminformatics (SMIL...
clawhub install pharmaclaw-chemistry-queryπ About This Skill
name: pharmaclaw-chemistry-query description: Chemistry agent skill for PubChem API queries (compound info/properties, structures/SMILES/images, synthesis routes/references) + RDKit cheminformatics (SMILES to molecule props/logP/TPSA, 2D PNG/SVG viz, Morgan fingerprints, retrosynthesis/BRICS disconnects, multi-step synth planning). Use for chemistry tasks involving compounds, molecules, structures, PubChem data, RDKit analysis, SMILES processing, synthesis routes, retrosynthesis, reaction simulation. Triggers on chemistry, compounds, molecules, chemical data/properties, PubChem, RDKit, SMILES, structures, synthesis, reactions, retrosynthesis, synth plan/route. type: code dependencies: python: ">=3.10" python-packages: - rdkit - gradio - pandas - Pillow system: - java (JRE 8+ for OPSIN, optional β only needed for IUPAC nameβSMILES conversion) external-apis: - PubChem REST API (public, no key required) - ChEMBL API (public, no key required) - PubMed/NCBI E-utilities (public, no key required) notes: > OPSIN JAR (13.8MB) is auto-downloaded on first use of IUPAC name conversion with pinned SHA-256 checksum verification (d25bc08f...). All other functionality works without Java/OPSIN.
Chemistry Query Agent v1.4.1
Overview
Full-stack chemistry toolkit combining PubChem data retrieval with RDKit molecule processing, visualization, analysis, retrosynthesis, and synthesis planning. All outputs are structured JSON for easy downstream chaining. Generates PNG/SVG images on demand.
Key capabilities:
Quick Start
# PubChem compound info
exec python scripts/query_pubchem.py --compound "aspirin" --type infoMolecular properties from SMILES
exec python scripts/rdkit_mol.py --smiles "CC(=O)Oc1ccccc1C(=O)O" --action propsRetrosynthesis
exec python scripts/rdkit_mol.py --target "CC(=O)Oc1ccccc1C(=O)O" --action retro --depth 2Full chain (name β props + draw + retro)
exec python scripts/chain_entry.py --input-json '{"name": "caffeine", "context": "user"}'
Scripts
scripts/query_pubchem.py
PubChem REST API queries with automatic nameβCID resolution and timeout handling.--compound --type [--format smiles|inchi|image|json] [--threshold 80]
scripts/rdkit_mol.py
RDKit cheminformatics engine. Resolves names via PubChem automatically.--smiles --action
| Action | Description | Key Args |
|--------|-------------|----------|
| props | MW, logP, TPSA, HBD, HBA, rotB, aromRings | --smiles |
| draw | 2D PNG/SVG (300Γ300) | --smiles --output file.png --format png\|svg |
| retro | BRICS recursive retrosynthesis | --target |
| plan | Multi-step retro route | --target |
| react | Forward reaction via SMARTS | --reactants "smi1 smi2" --smarts " |
| fingerprint | Morgan fingerprint bitvector | --smiles --radius 2 |
| similarity | Tanimoto similarity scoring | --query_smiles --target_smiles "smi1,smi2" |
| substruct | Substructure matching | --query_smiles --target_smiles "smi1,smi2" |
| xyz | 3D coordinates (MMFF optimized) | --smiles |
scripts/chain_entry.py
Standard agent chain interface. Accepts {"smiles": "...", "context": "..."} or {"name": "...", "context": "..."}. Returns unified JSON with props, visualization, and retrosynthesis.python scripts/chain_entry.py --input-json '{"name": "sotorasib", "context": "user"}'
Output schema:
{
"agent": "chemistry-query",
"version": "1.4.0",
"smiles": "",
"status": "success|error",
"report": {"props": {...}, "draw": {...}, "retro": {...}},
"risks": [],
"viz": ["path/to/image.png"],
"recommend_next": ["pharmacology", "toxicology"],
"confidence": 0.95,
"warnings": [],
"timestamp": "ISO8601"
}
scripts/templates.json
21 named reaction templates with SMARTS, expected yields, conditions, and references. Includes: Suzuki, Heck, Buchwald-Hartwig, Grignard, Wittig, Diels-Alder, Click, Sonogashira, Negishi, and more.Chaining
1. Name β Full Profile: chain_entry.py with {"name": "ibuprofen"} β props + draw + retro
2. Chemistry β Pharmacology: Output feeds directly into pharma-pharmacology-agent
3. Retro + Viz: Get precursors, then draw each one
4. Suzuki Test: --action react --reactants "c1ccccc1Br c1ccccc1B(O)O" --smarts "[c:1][Br:2].[c:3]B(O)O>>[c:1][c:3]"
Tested With
All features verified end-to-end with RDKit 2024.03+:
| Molecule | SMILES | Tests Passed |
|----------|--------|-------------|
| Caffeine | CN1C=NC2=C1C(=O)N(C(=O)N2C)C | info, structure, props, draw, retro, plan, chain |
| Aspirin | CC(=O)Oc1ccccc1C(=O)O | info, structure, props, draw, retro, plan, chain |
| Sotorasib | PubChem name lookup | info, structure, props, draw, retro, chain |
| Ibuprofen | PubChem name lookup | info, structure, props, chain |
| Invalid SMILES | XXXINVALID | Graceful JSON error |
| Empty input | {} | Graceful JSON error |
Resources
references/api_endpoints.md β PubChem API endpoint reference and rate limitsscripts/rdkit_reaction.py β Legacy reaction modulescripts/chembl_query.py, scripts/pubmed_search.py, scripts/admet_predict.py β Additional query modulesscripts/advanced_chem.py
Advanced cheminformatics engine with 6 Tier 1 capabilities.--action --smiles [options]
| Action | Description | Key Args |
|--------|-------------|----------|
| standardize | Salt stripping, charge normalization, tautomer enumeration | --smiles |
| descriptors | 217+ molecular descriptors (RDKit full set), QED, SA Score, Lipinski/Veber rules | --smiles --descriptor_set all\|druglike\|physical\|topological |
| scaffold | Murcko scaffold extraction, generic scaffolds, diversity analysis, R-group decomposition | --smiles or --target_smiles "smi1,smi2,..." --rgroup_core |
| mcs | Maximum Common Substructure across 2+ molecules | --target_smiles "smi1,smi2,..." |
| mmpa | Matched Molecular Pair Analysis β find single-point transformations | --target_smiles "smi1,smi2,..." |
| chemspace | Chemical space visualization (PCA/t-SNE/UMAP scatter plot PNG) | --target_smiles "smi1,smi2,..." --method pca\|tsne\|umap --output plot.png |
Examples:
# Standardize a salt form
python scripts/advanced_chem.py --action standardize --smiles "[Na+].CC(=O)[O-]"Full descriptors (217+)
python scripts/advanced_chem.py --action descriptors --smiles "CC(=O)Oc1ccccc1C(=O)O" --descriptor_set allScaffold diversity of a set
python scripts/advanced_chem.py --action scaffold --target_smiles "CC(=O)Oc1ccccc1C(=O)O,CN1C=NC2=C1C(=O)N(C(=O)N2C)C,CC(C)Cc1ccc(cc1)C(C)C(=O)O"MCS of aspirin and salicylic acid
python scripts/advanced_chem.py --action mcs --target_smiles "CC(=O)Oc1ccccc1C(=O)O,c1ccccc1C(=O)O"Matched molecular pairs
python scripts/advanced_chem.py --action mmpa --target_smiles "c1ccc(CC(=O)O)cc1,c1ccc(CCC(=O)O)cc1"Chemical space PCA plot
python scripts/advanced_chem.py --action chemspace --target_smiles "CC(=O)Oc1ccccc1C(=O)O,CN1C=NC2=C1C(=O)N(C(=O)N2C)C,c1ccccc1" --method pca --output space.png
Changelog
v2.0.0 (2026-02-28)
advanced_chem.py with 6 Tier 1 cheminformatics capabilitiesv1.4.1 (2026-02-25)
_sanitize_input() β length limits, null-byte rejection for all user inputs_sanitize_output_path() β prevents path traversal, restricts extensions, blocks arbitrary file writesresolve_target()chem_ui.py before subprocess callsquery_pubchem.py (length/null-byte checks)resolve_target() PubChem subprocess callv1.4.0 (2026-02-14)
v1.3.0
v1.2.0
π‘ Examples
# PubChem compound info
exec python scripts/query_pubchem.py --compound "aspirin" --type infoMolecular properties from SMILES
exec python scripts/rdkit_mol.py --smiles "CC(=O)Oc1ccccc1C(=O)O" --action propsRetrosynthesis
exec python scripts/rdkit_mol.py --target "CC(=O)Oc1ccccc1C(=O)O" --action retro --depth 2Full chain (name β props + draw + retro)
exec python scripts/chain_entry.py --input-json '{"name": "caffeine", "context": "user"}'