SkillHub

intern-pubchem-name-conversion

v0.1.0

Convert molecules between IUPAC, SMILES, and molecular formula using PubChem as the source of truth. Use this whenever the user asks to convert, normalize, or cross-check molecular representations in chemistry/science workflows (including Intern research tasks). Prefer API lookup over memory; do not...

Sourced from ClawHub, Authored by guox18

Installation

Please help me install the skill `intern-pubchem-name-conversion` from SkillHub official store. npx skills add guox18/intern-pubchem-name-conversion

Intern PubChem Name Conversion

Convert one molecular representation into all three fields: - smiles - iupac - formula

When to use

Use this skill when the user asks to: - convert IUPAC <-> SMILES - fetch molecular formula from IUPAC/SMILES - validate molecule identity against PubChem

Do not use this skill for: - reaction mechanism explanation - quantum chemistry simulation - docking or property prediction beyond PubChem identifiers

Input contract

Expect one input value and one type: - input_type: iupac or smiles - input_value: raw string

If the user gives only one string without type: - treat strings with many bond symbols (=, #, [, ], @) as smiles - otherwise treat as iupac/name query

Required behavior

Always query PubChem first. Do not answer from memory when tools are available.

1) URL-encode the full input string:

ENCODED=$(python3 -c 'import urllib.parse,sys; print(urllib.parse.quote(sys.argv[1], safe=""))' "$INPUT_VALUE")

2) Build the primary endpoint: - If input_type == iupac: - https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/{ENCODED}/property/SMILES,IUPACName,MolecularFormula/JSON - If input_type == smiles: - https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/smiles/{ENCODED}/property/SMILES,IUPACName,MolecularFormula/JSON

3) If smiles primary endpoint is non-200, retry once with: - https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/fastidentity/smiles/{ENCODED}/property/SMILES,IUPACName,MolecularFormula/JSON

4) If still non-200, do CID fallback: - Resolve CID: - iupac: .../compound/name/{ENCODED}/cids/JSON - smiles: .../compound/smiles/{ENCODED}/cids/JSON - Then fetch properties by CID: - .../compound/cid/{CID}/property/SMILES,IUPACName,MolecularFormula/JSON

5) Parse PropertyTable.Properties[0] and map: - smiles <- SMILES (fallback ConnectivitySMILES) - iupac <- IUPACName - formula <- MolecularFormula

Output format

Return JSON only (no markdown fences, no extra prose):

{
  "smiles": "...",
  "iupac": "...",
  "formula": "..."
}

If all attempts fail, still return the same schema with empty strings:

{
  "smiles": "",
  "iupac": "",
  "formula": ""
}

Quality rules

  • Keep PubChem values verbatim; do not rewrite or normalize names.
  • If multiple records are returned, use the first record consistently.
  • Do not silently swap stereochemistry markers.