Every list-returning tool reports the total beside the page it gave you and takes an offset to reach the rest, so an agent can tell a short answer from a complete one — cross-references and interactions even page per type, each with its own total. Search can hydrate results with properties in the same call, which removes the usual second trip through the detail tool. The gaps that remain belong to the data, not the server: not every compound has computed 3D coordinates, and interaction coverage is richest for approved drugs.
A read-only client for PubChem's compound, assay and safety data — ten tools covering search, structure retrieval and every record that hangs off a CID. The same records are also exposed as URI-templated resources such as pubchem://compound/{cid}/safety.
- Search by identifier — name, SMILES or InChIKey, batched up to 25 — or by molecular formula in Hill notation, by substructure or superstructure containment, or by 2D Tanimoto similarity above a threshold (pubchem_search_compounds).
- Compound detail for up to 100 CIDs in one call across 27 properties including molecular weight, SMILES, InChIKey, XLogP and TPSA, optionally with a textual description, known synonyms, Lipinski and Veber drug-likeness, and FDA, MeSH and ATC classification (pubchem_get_compound_details).
- Structures in a form you can use downstream: a 2D diagram as PNG, and the default 3D conformer either as parsed atoms and bonds or as raw V2000 SDF to hand to docking or rendering (pubchem_get_compound_image, pubchem_get_compound_3d_structure).
- GHS safety records per compound — signal word, pictograms, hazard statements and precautionary statements — with the depositor attributed (pubchem_get_compound_safety).
- Bioactivity by assay: outcome, target identifiers as NCBI Gene ID or UniProt and GenBank accession, and values such as IC50, EC50 and Ki, filterable down to one target (pubchem_get_bioactivity).
- Interaction records split by kind — drug-drug from DrugBank, drug-food, and chemical-target binding from BindingDB and ChEMBL — each entry naming its own source (pubchem_get_compound_interactions).
- External cross-references: PubMed citations, patent IDs, gene and protein associations, registry numbers and taxonomy IDs (pubchem_get_compound_xrefs).
- Assay discovery from a biological target given as gene symbol, protein name, NCBI Gene ID or UniProt accession, and descriptive summaries for assays, genes, proteins and taxonomy up to 10 per call (pubchem_search_assays, pubchem_get_summary).
No account and no key — PubChem's API is open. Run it locally over stdio with `bunx @cyanheads/pubchem-mcp-server@latest`, which needs Bun v1.3.0 or higher (or Node.js v24+); the same package serves Streamable HTTP on port 3010 at /mcp when you want it over the network. A public hosted instance at https://pubchem.caseyjhand.com/mcp takes a Streamable HTTP client with nothing installed. The detail tools work from CIDs, so a search comes first unless you already hold one.
One command — npx -y @cyanheads/pubchem-mcp-server
