Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.cyanheads/pubchem-mcp-server

REMOTE · PUBCHEM.CASEYJHAND.COM · 2 COMPONENTS

Search PubChem compounds, properties, safety data, bioactivity, and cross-references.

0 this week 89 Trust /100

Last scanned (19 hours ago)

Scores higher than 97% of remote servers

Reachable. Last reached 4 Nov 2026.

Category Health and Science

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security83
Transport & Reachability100
Schema Quality & AI Usability74
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5149 tokens (~468/item across 11 items; 10 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 10 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 28 Oct 26 +3
    • Schema quality: unverified → 100 ▲ functional
    • New resource “pubchem-guide” functional
    • Server version: 0.7.1 → 0.8.0 functional
    • “pubchem_get_bioactivity” reworded the description of “targetAccession” cosmetic
    • “pubchem_get_bioactivity” reworded the description of “targetGeneId” cosmetic
    • “pubchem_search_assays” reworded the description of “targetType” cosmetic
  • 24 Oct 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “pubchem_get_compound_interactions” rewrote its description, which is the text the model reads security
    • Tool “pubchem_get_compound_xrefs” rewrote its description, which is the text the model reads security
    • Tool “pubchem_search_compounds” rewrote its description, which is the text the model reads security
    • Tool “pubchem_get_bioactivity” rewrote its description, which is the text the model reads security
    • Schema quality: 440 → 492 ▼ functional
    • Server version: 0.7.0 → 0.7.1 functional
    • “pubchem_get_bioactivity” added an optional parameter “assayType” cosmetic
    • “pubchem_search_compounds” reworded the description of “identifierType” cosmetic
    • “pubchem_get_compound_interactions” reworded the description of “kinds” cosmetic
    • “pubchem_get_compound_interactions” reworded the description of “offset” cosmetic
    • “pubchem_get_compound_xrefs” reworded the description of “xrefTypes” cosmetic
    • “pubchem_get_summary” reworded the description of “identifiers” cosmetic
    • “pubchem_search_compounds” reworded the description of “identifiers” cosmetic
    • “pubchem_search_compounds” reworded the description of “offset” cosmetic
    • “pubchem_search_compounds” reworded the description of “searchType” cosmetic
  • 15 Oct 26 −1
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “pubchem_search_compounds” rewrote its description, which is the text the model reads security
    • Tool “pubchem_get_summary” rewrote its description, which is the text the model reads security
    • Tool “pubchem_get_compound_xrefs” rewrote its description, which is the text the model reads security
    • Tool “pubchem_get_compound_safety” rewrote its description, which is the text the model reads security
    • Tool “pubchem_get_compound_interactions” rewrote its description, which is the text the model reads security
    • Tool “pubchem_get_compound_details” rewrote its description, which is the text the model reads security
    • Schema quality: 339 → 440 ▼ functional
    • Server version: 0.6.6 → 0.7.0 functional
    • “pubchem_search_compounds” added an optional parameter “aid” cosmetic
    • “pubchem_search_compounds” added an optional parameter “activeOnly” cosmetic
    • “pubchem_get_bioactivity” reworded the description of “maxResults” cosmetic
    • “pubchem_search_compounds” reworded the description of “searchType” cosmetic
    • “pubchem_search_compounds” reworded the description of “query” cosmetic
    • “pubchem_search_compounds” reworded the description of “offset” cosmetic
    • “pubchem_search_compounds” reworded the description of “maxResults” cosmetic
    • “pubchem_search_compounds” reworded the description of “identifiers” cosmetic
    • “pubchem_search_assays” reworded the description of “targetQuery” cosmetic
    • “pubchem_search_assays” reworded the description of “maxResults” cosmetic
    • “pubchem_get_summary” reworded the description of “identifiers” cosmetic
    • “pubchem_get_compound_xrefs” reworded the description of “maxPerType” cosmetic
    • “pubchem_get_compound_safety” reworded the description of “cids” cosmetic
    • “pubchem_get_compound_interactions” reworded the description of “maxEntries” cosmetic
    • “pubchem_get_compound_interactions” reworded the description of “kinds” cosmetic
    • “pubchem_get_compound_details” reworded the description of “maxSynonyms” cosmetic
    • “pubchem_get_compound_details” reworded the description of “maxDescriptions” cosmetic
    • “pubchem_get_compound_details” reworded the description of “cids” cosmetic
    • “pubchem_get_bioactivity” reworded the description of “targetGeneId” cosmetic
    • “pubchem_get_bioactivity” reworded the description of “targetAccession” cosmetic
    • “pubchem_get_bioactivity” reworded the description of “outcomeFilter” cosmetic
  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 19 Sept 26 0
    • Server version: 0.6.2 → 0.6.3 functional
  • 13 Sept 26 0
    • Server version: 0.6.1 → 0.6.2 functional
  • 9 Sept 26 0
    • Stability: 0.97 → pass security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Probed https://pubchem.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 2 Nov 2026 31 Jan 2027 ECDSA 256 ECDSA-SHA256 995a30681ab772540e934241ca1d576c
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of pubchem.caseyjhand.com. — Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
caseyjhand.com. present 2371 13 Verified
pubchem.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://pubchem.caseyjhand.com/mcp Verified 200
http (plaintext) http://pubchem.caseyjhand.com/mcp HTTPS enforced 301 https://pubchem.caseyjhand.com/mcp
MCP tools · 10 exposed · ~4,746 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
pubchem_get_bioactivity ~740

Get a compound's bioactivity profile: which assays tested it, activity outcomes (Active/Inactive/Inconclusive), target identifiers (NCBI Gene ID, UniProt/GenBank accession), quantitative values (IC50, EC50, Ki, etc.), each assay's type (confirmatory, screening, summary, other), and the PubMed IDs it cites. Filter by outcome, a specific molecular target (NCBI Gene ID or protein accession), and/or assay type to focus the profile — e.g. "is this compound active against target T in confirmatory assays?".

NameTypeReqDescription
assayTypearray–Keep only assays of these types: "confirmatory" (dose-response and other follow-up assays), "screening" (primary high-throughput screens), "summary" (records summarizing a project's assays), "other".…
cidintegeryesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
maxResultsinteger–Max assay results to return per page. The per-call cap is 100: a larger value (up to 1000) returns a page of 100 and is reported in cappedInputs. Well-studied compounds have thousands of records; use…
offsetinteger–Zero-based index of the first assay to return, applied after the outcome and target filters. Pass the nextOffset from a previous call to read the following page. Default: 0.
outcomeFilterstring–Filter by activity outcome against each assay's reported target: the target a target filter matched, else the first target the assay lists. For a multi-target assay, outcomes against its other target…
targetAccessionstring–Filter to assays against this target protein accession (UniProt/RefSeq/GenBank/PDB chain), e.g. "P35354", including assays recorded only under a Gene ID or another accession this compound's assay tab…
targetGeneIdinteger–Filter to assays against this NCBI Gene ID (1 to 2147483647), including assays recorded only under a protein accession this compound's assay table pairs with the Gene ID (e.g. 5742 also reaches rows…
NameTypeReqDescription
activeCountnumber–Assays whose outcome against their first listed target is "Active", across all assays and before any filter. A multi-target assay counts by its first target only.
assayTypeFilterstring–Assay types kept, comma-separated (e.g. "confirmatory, summary"), when assayType is set.
capnumber–The page size applied: maxResults, or the per-call cap when maxResults exceeds it.
cappedInputsarray–Inputs that asked for more than their per-call cap, with the value requested and the value served. An ID batch lists the IDs past the cap in unprocessed. Omitted when every input was within its cap.
cidnumber–PubChem Compound ID.
errorobject–Present when the call failed. Absent on success.
filteredCountnumber–Exact number of assays matching the outcome, target, and assay-type filters, across all pages.
inactiveCountnumber–Assays whose outcome against their first listed target is "Inactive", across all assays and before any filter. A multi-target assay counts by its first target only.
nextOffsetnumber–Offset to pass on the next call to continue past this page. Omitted when no further assays match.
noticestring–Recovery guidance when the filter yields no results or the compound has no bioactivity data.
offsetnumber–Zero-based index of the first assay returned.
outcomeFilterstring–Outcome filter applied: active, inactive, or all.
resultsarray–Assay results matching the filter.
returnedCountnumber–Assays returned on this page.
shownnumber–Assays returned on this page.
targetFilterstring–Target identifiers matched, when a target filter is set: those passed plus every Gene ID and accession the compound's assay table pairs with them. When the two inputs name different targets, only the…
totalAssaysnumber–Total unique assays for this compound.
truncatedboolean–True when matching assays remain past this page.

No examples provided.

pubchem_get_compound_3d_structure ~361

Get a compound's default 3D conformer — atomic coordinates and bonds — for one CID. format="json" (default) returns atoms and bonds parsed into structured fields; format="sdf" returns the raw V2000 SDF text for passthrough to docking, rendering, or conformer tools. Optionally lists alternate conformer IDs. Not every compound has computed 3D coordinates (large molecules, mixtures, and some salts do not).

NameTypeReqDescription
cidintegeryesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
formatstring–Output format. "json" (default) returns parsed atoms and bonds. "sdf" returns the raw V2000 SDF text for passthrough to other tools.
includeAlternateConformerIdsboolean–List the IDs of additional computed conformers beyond the default. Slower than the default response. Default: false.
includeRawSdfboolean–For format="sdf", return the complete raw V2000 SDF even when it exceeds the safe line cap. Default false: an SDF longer than 500 lines is line-capped with disclosure. No effect when format="json".
maxAtomsinteger–Cap the atoms returned in the format="json" preview. atomCount always reports the full total; omitted rows are disclosed via the truncated/shownAtoms enrichment. Defaults to the first 200 atoms.
maxBondsinteger–Cap the bonds returned in the format="json" preview. bondCount always reports the full total; omitted rows are disclosed via the truncated/shownBonds enrichment. Defaults to the first 200 bonds.
NameTypeReqDescription
alternateConformerIdsarray–Conformer IDs beyond the default. Present when includeAlternateConformerIds is set and alternates exist.
atomCapnumber–The atom cap applied (explicit maxAtoms or the safe default), when the atom list was capped.
atomCountnumber–Number of atoms in the conformer.
atomsarray–Parsed atoms. Populated when format="json".
bondCapnumber–The bond cap applied (explicit maxBonds or the safe default), when the bond list was capped.
bondCountnumber–Number of bonds in the conformer.
bondsarray–Parsed bonds. Populated when format="json".
cidnumber–PubChem Compound ID.
conformerIdstring–Default (primary) conformer ID. Present when includeAlternateConformerIds is set.
errorobject–Present when the call failed. Absent on success.
noticestring–Guidance naming which lists were capped and how to widen them.
sdfstring–Raw V2000 SDF text. Populated when format="sdf".
shownAtomsnumber–Atoms returned after the cap, when fewer than atomCount. Raise maxAtoms for more.
shownBondsnumber–Bonds returned after the cap, when fewer than bondCount. Raise maxBonds for more.
shownSdfLinesnumber–SDF lines returned when format="sdf" and the raw text was line-capped. Set includeRawSdf for the full record.
truncatedboolean–True when the atom list, bond list, or raw SDF was capped below its total. atomCount/bondCount always report the full totals.

No examples provided.

pubchem_get_compound_details ~763

Get detailed compound information by CID. Returns physicochemical properties (molecular weight, SMILES, InChIKey, XLogP, TPSA, etc.), optionally with a textual description (pharmacology, mechanism, therapeutic use), known synonyms, drug-likeness assessment (Lipinski/Veber rules), and/or pharmacological classification (FDA classes, MeSH classes, ATC codes). Fetches up to 100 CIDs per call; CIDs past that are returned in unprocessed for a follow-up call.

NameTypeReqDescription
cidsarrayyesPubChem Compound IDs to fetch. The per-call cap is 100: the first 100 are fetched, and any past that (up to 1000 in all) are returned in unprocessed, in input order, and reported in cappedInputs. Res…
descriptionOffsetinteger–Zero-based index of the first description to return within each compound's description list. The same offset is applied to every compound in the batch. Pass the nextDescriptionOffset from a previous…
includeClassificationboolean–Include pharmacological classification: FDA Established Pharmacologic Classes, mechanisms of action, MeSH classes, and ATC codes. Fetched only for the first 10 CIDs in the batch; remaining CIDs retur…
includeDescriptionboolean–Include textual descriptions (pharmacology, mechanism, therapeutic use) attributed by source. Well-studied compounds have many overlapping summaries — paged via descriptionOffset/maxDescriptions. Fet…
includeDrugLikenessboolean–Compute drug-likeness assessment: Lipinski Rule of Five (MW, XLogP, HBD, HBA) and Veber rules (TPSA, rotatable bonds). Computed from the returned properties, so it adds no latency.
includeSynonymsboolean–Fetch known names and synonyms (trade names, systematic names, registry numbers), paged via synonymOffset/maxSynonyms. Fetched for every found CID in the batch. Slower for large CID lists.
maxDescriptionsinteger–Max number of distinct description entries per compound per page. The per-call cap is 20: a larger value (up to 1000) returns 20 per compound and is reported in cappedInputs. PubChem returns near-dup…
maxSynonymsinteger–Max synonyms returned per compound per page. The per-call cap is 100: a larger value (up to 1000) returns 100 per compound and is reported in cappedInputs. PubChem lists hundreds for common drugs; us…
propertiesarray–Properties to retrieve. Defaults to a core set: MolecularFormula, MolecularWeight, IUPACName, CanonicalSMILES, IsomericSMILES, InChIKey, XLogP, TPSA, HBondDonorCount, HBondAcceptorCount, RotatableBon…
synonymOffsetinteger–Zero-based index of the first synonym to return within each compound's synonym list. The same offset is applied to every compound in the batch. Pass the nextSynonymOffset from a previous call to read…
NameTypeReqDescription
cappedInputsarray–Inputs that asked for more than their per-call cap, with the value requested and the value served. An ID batch lists the IDs past the cap in unprocessed. Omitted when every input was within its cap.
compoundsarray–Compound detail records, one per CID fetched, in input order. CIDs past the per-call cap are in unprocessed instead.
descriptionOffsetnumber–Zero-based index of the first description returned within each compound's list. Present when includeDescription is true.
enrichedCidsarray–CIDs whose descriptions and classification were fetched. Present only when the batch exceeded the per-call fan-out limit and other CIDs were skipped.
errorobject–Present when the call failed. Absent on success.
nextDescriptionOffsetnumber–descriptionOffset to pass on the next call to continue past this page. Omitted when no compound in the batch has further descriptions.
nextSynonymOffsetnumber–synonymOffset to pass on the next call to continue past this page. Omitted when no compound in the batch has further synonyms.
noticestring–Recovery guidance covering the skipped CIDs, an offset that runs past every compound, and pages that remain. Absent when nothing was skipped or truncated.
skippedCidsarray–CIDs found in PubChem whose descriptions and classification were NOT fetched because the batch exceeded the per-call fan-out limit. Their absence from a record means "not requested", not "PubChem has…
synonymOffsetnumber–Zero-based index of the first synonym returned within each compound's list. Present when includeSynonyms is true.
truncatedboolean–True when this response is not the whole picture: a compound has further synonyms or descriptions past this page, CIDs were skipped by the per-call fan-out limit, or CIDs past the per-call cap were l…
unprocessedarray–CIDs past the per-call cap of 100, in input order, not fetched. Pass them in a follow-up call. Omitted when every CID was fetched.

No examples provided.

pubchem_get_compound_image ~84

Fetch a 2D structure diagram (PNG image) for a compound by CID.

NameTypeReqDescription
cidintegeryesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
sizestring–Image size: "small" (100x100) or "large" (300x300). Default: "large".
NameTypeReqDescription
cidnumber–PubChem Compound ID.
errorobject–Present when the call failed. Absent on success.
heightnumber–Image height in pixels.
imageBase64string–Base64-encoded PNG image data.
mimeTypestring–MIME type — always "image/png".
widthnumber–Image width in pixels.

No examples provided.

pubchem_get_compound_interactions ~467

Get a compound's interaction data: drug-food interactions, and the molecular targets its bioassays name — one entry per target as kinds defines it, with its assay counts by outcome and most potent active value, Active targets first, most potent first. Each entry carries its originating source. Results are paged per kind, with the record total and the next offset reported for each. Drug-food coverage is richest for approved drugs; target covers any compound PubChem has assay data for, and pubchem_get_bioactivity lists one target's assays when given the entry's GeneID or accession. Drug-drug interactions (DrugBank) are unavailable while PubChem's SDQ service refuses automated requests: an explicit drug-drug request is reported in failedKinds while the other kinds still return.

NameTypeReqDescription
cidintegeryesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
kindsarray–Interaction kinds to fetch. "drug-food" (dietary interactions, from PUG View), "target" (molecular targets from the compound's assay summary: one entry per Gene ID with the accessions the table pairs…
maxEntriesinteger–Max entries per kind per page. The per-call cap is 50: a larger value (up to 1000) reads a page of 50 per kind and is reported in cappedInputs. Well-studied drugs have a long tail of interactions; us…
offsetinteger–Zero-based start position within each requested kind, counted in records (molecular targets, for target) rather than returned entries. The same offset applies to every kind in the call, and the kinds…
NameTypeReqDescription
cappedInputsarray–Inputs that asked for more than their per-call cap, with the value requested and the value served. An ID batch lists the IDs past the cap in unprocessed. Omitted when every input was within its cap.
cidnumber–PubChem Compound ID.
entriesarray–Interaction entries across the requested kinds.
errorobject–Present when the call failed. Absent on success.
failedKindsstring–Interaction kinds that could not be retrieved (comma-separated). The returned entries cover the kinds that succeeded. The notice says, per failed kind, whether a retry can help: a timeout, rate limit…
nextOffsetnumber–Offset to pass on the next call, reported when exactly one requested kind has records remaining. Omitted when none do, and when several do — those advance to different positions, so read paging[].nex…
noticestring–Guidance when a kind failed, when no interaction data was found, when the offset runs past every requested kind, when target names could not be retrieved, or when further pages remain. Absent when th…
offsetnumber–Zero-based start position read within each requested kind.
pagingarray–Per-kind page position, one entry per requested kind that was retrieved. A kind listed in failedKinds is absent — its position is unknown, not exhausted.
requestedKindsstring–Interaction kinds requested (comma-separated).
returnedCountnumber–Total interaction entries returned across all kinds.
truncatedboolean–True when at least one requested kind has source records remaining past this page. Which kinds, and how many records each holds, is in paging[].truncated / paging[].totalRecords.

No examples provided.

pubchem_get_compound_safety ~188

Get GHS (Globally Harmonized System) hazard classification and safety data for one or more compounds by CID. Returns signal word, pictograms, hazard statements (H-codes), and precautionary statements (P-codes) per compound, merged across sources, plus each source's own classification — its signal word, pictograms, H-codes with ECHA notifier agreement percentages, and notification counts — since sources often disagree. Reports ECHA "Not Classified" verdicts as their own status.

NameTypeReqDescription
cidsarrayyesPubChem Compound IDs to fetch safety data for. The per-call cap is 25: the first 25 are looked up, and any past that (up to 1000 in all) are returned in unprocessed, in input order, and reported in c…
NameTypeReqDescription
cappedInputsarray–Inputs that asked for more than their per-call cap, with the value requested and the value served. An ID batch lists the IDs past the cap in unprocessed. Omitted when every input was within its cap.
errorobject–Present when the call failed. Absent on success.
noticestring–Guidance when one or more CIDs returned no hazard classification, listing the unrecognized CIDs to verify, the CIDs that exist but carry no deposited classification, and the CIDs whose only classific…
requestedCountnumber–CIDs requested, including any past the per-call cap left in unprocessed.
resultsarray–Safety results, one per CID looked up (input order preserved). CIDs past the per-call cap are in unprocessed instead.
unprocessedarray–CIDs past the per-call cap of 25, in input order, not looked up. Pass them in a follow-up call. Omitted when every CID was looked up.
withDataCountnumber–CIDs with a GHS classification on file (status "ok" or "not_classified").

No examples provided.

pubchem_get_compound_xrefs ~491

Get external database cross-references for a compound: PubMed citations, patent IDs, gene associations, CAS and EC numbers with the number of source records that deposited each, other registry numbers, and taxonomy IDs. Results are paged per type — capped at maxPerType with the total count reported; reach the IDs past a page with offset. PubMed IDs come highest (most recently assigned) first and the other numeric types in ascending order; CAS and EC come most-attested first; the other string IDs keep PubChem's order. A type that fails to load is named in failedTypes while the others still return; the call fails only when a type fails and no type other than ProteinGI (which PubChem no longer serves) loads.

NameTypeReqDescription
cidintegeryesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
maxPerTypeinteger–Max IDs to return per xref type per page. The per-call cap is 500: a larger value (up to 1000) returns 500 per type and is reported in cappedInputs. A compound may have thousands of PubMed references…
offsetinteger–Zero-based index of the first ID to return within each xref type. The same offset is applied to every requested type. Pass the nextOffset from a previous call to read the following page. Default: 0.
xrefTypesarrayyesCross-reference types to retrieve. String IDs: CAS (the CAS Registry Numbers deposited for this compound, most-attested first, each with the number of source records that deposited it — the first is…
NameTypeReqDescription
cappedInputsarray–Inputs that asked for more than their per-call cap, with the value requested and the value served. An ID batch lists the IDs past the cap in unprocessed. Omitted when every input was within its cap.
cidnumber–PubChem Compound ID.
errorobject–Present when the call failed. Absent on success.
failedTypesstring–Requested xref types that could not be retrieved (comma-separated). The returned groups cover the types that loaded. A retry can recover a type that failed transiently (a timeout, network error, rate…
nextOffsetnumber–Offset to pass on the next call to continue past this page. Omitted when no requested type has further IDs.
noticestring–Guidance when a type failed to load, when every requested xref type returned zero IDs, when the offset runs past every type, when further pages remain, or when ProteinGI came back empty (PubChem serv…
offsetnumber–Zero-based index of the first ID returned within each type.
truncatedboolean–True when at least one requested type has IDs remaining past this page. Which types, and how many IDs each holds in total, is in xrefs[].truncated / xrefs[].totalAvailable.
xrefsarray–Cross-references grouped by type, one group per requested type that loaded. A type listed in failedTypes is absent — its IDs are unknown, not empty.

No examples provided.

pubchem_get_summary ~270

Get descriptive summaries for PubChem entities by ID. Supports assays (AID), genes (Gene ID), proteins (UniProt accession), and taxonomy (Tax ID). Up to 10 per call; identifiers past that are returned in unprocessed for a follow-up call.

NameTypeReqDescription
entityTypestringyesEntity type. Determines ID format and returned fields.
identifiersarrayyesEntity identifiers. A comma-joined string is split into one identifier per piece, with whitespace trimmed. The per-call cap is 10 pieces: the first 10 are looked up, and any past that are returned in…
NameTypeReqDescription
cappedInputsarray–Inputs that asked for more than their per-call cap, with the value requested and the value served. An ID batch lists the IDs past the cap in unprocessed. Omitted when every input was within its cap.
entityTypestring–Entity type queried.
errorobject–Present when the call failed. Absent on success.
foundCountnumber–Identifiers resolved to a summary.
noticestring–Recovery guidance when identifiers were invalid or not found.
requestedCountnumber–Identifier pieces requested, counted after comma splitting.
summariesarray–Summary results, one per identifier piece looked up, in input order.
unprocessedarray–Identifier pieces past the per-call cap of 10, in input order, not looked up. Pass them in a follow-up call. Omitted when every piece was served.

No examples provided.

pubchem_search_assays ~390

Find PubChem bioassays associated with a biological target. Search by gene symbol (e.g. "EGFR"), protein name, NCBI Gene ID, or UniProt accession. Returns a page of assay IDs (AIDs) — page past maxResults with offset — which can be explored further with pubchem_get_summary.

NameTypeReqDescription
maxResultsinteger–Max AIDs to return per page. The per-call cap is 200: a larger value (up to 1000) returns a page of 200 and is reported in cappedInputs. Popular targets may have thousands of assays; use offset to re…
offsetinteger–Zero-based index of the first AID to return. Pass the nextOffset from a previous call to read the following page. Default: 0.
targetQuerystringyesTarget identifier. Examples: "EGFR" (genesymbol), "Epidermal growth factor receptor" (proteinname), "1956" (geneid), "P00533" (proteinaccession; uppercased before lookup, except a PDB chain ID such a…
targetTypestringyesTarget identifier type. "genesymbol" and "proteinname" accept text names; a genesymbol matches the symbol case-insensitively across species, so a human symbol also returns assays on other species' or…
NameTypeReqDescription
aidsarray–PubChem Assay IDs.
capnumber–The page size applied: maxResults, or the per-call cap when maxResults exceeds it.
cappedInputsarray–Inputs that asked for more than their per-call cap, with the value requested and the value served. An ID batch lists the IDs past the cap in unprocessed. Omitted when every input was within its cap.
errorobject–Present when the call failed. Absent on success.
nextOffsetnumber–Offset to pass on the next call to continue past this page. Omitted when no further AIDs match.
noticestring–Recovery guidance when no assays matched, when the offset runs past the result set, or when further pages remain. Absent when this page is complete and non-empty.
offsetnumber–Zero-based index of the first AID returned.
shownnumber–AIDs returned on this page.
targetQuerystring–Target identifier searched.
targetTypestring–Target identifier type used: genesymbol, proteinname, geneid, or proteinaccession.
totalFoundnumber–Total AIDs found for this target, across all pages.
truncatedboolean–True when matching AIDs remain past this page.

No examples provided.

pubchem_search_compounds ~992

Search PubChem for chemical compounds by identifier (name, SMILES, InChI, or InChIKey, up to 25 per call), molecular formula in Hill notation, substructure or superstructure containment, 2D Tanimoto similarity, or the compounds a bioassay (AID) found active or tested. Returns a page of CIDs — reach matches past maxResults with offset. Optionally hydrate results with properties to avoid a follow-up pubchem_get_compound_details call.

NameTypeReqDescription
activeOnlyboolean–Assay search only. When true (default), lists only the compounds the assay marked active; false lists every compound it tested.
aidinteger–Required for assay search. PubChem Assay ID (AID) whose compounds to list, from 1 to 2147483647, e.g. 1000. Find AIDs for a biological target with pubchem_search_assays.
allowOtherElementsboolean–Formula search only. When true, includes compounds with additional elements beyond the formula.
formulastring–Required for formula search. Molecular formula in Hill notation (e.g. "C6H12O6", "CaH2O2").
identifierTypestring–Required for identifier search. Type of chemical identifier: "name", "smiles", "inchi" (a full InChI string, case-sensitive), or "inchikey".
identifiersarray–Required for identifier search. Array of identifiers to resolve. The per-call cap is 25: the first 25 are looked up, and any past that (up to 1000 in all) are returned in unprocessed, in input order,…
maxResultsinteger–Maximum CIDs to return per page. The per-call cap is 200: a larger value (up to 1000) returns a page of 200 and is reported in cappedInputs. Use offset to reach matches past this page. Default: 20.
offsetinteger–Zero-based index of the first CID to return. Pass the nextOffset from a previous call to read the following page. Identifier lookups resolve every match up front, so paging them is free, and assay se…
propertiesarray–Optional: fetch these properties for each result, avoiding a follow-up details call. E.g. ["MolecularFormula", "MolecularWeight", "CanonicalSMILES"].
querystring–Required for substructure/superstructure/similarity searches. A SMILES string (e.g. "CC(=O)O") or PubChem CID as a string from 1 to 2147483647 (e.g. "2244").
queryTypestring–Required for structure/similarity searches. Format of the query: "smiles" or "cid".
searchTypestringyesSearch strategy; each mode needs its own fields. "identifier": name/SMILES/InChI/InChIKey lookup — requires identifierType and identifiers. "formula": molecular formula — requires formula. "substruct…
thresholdnumber–Similarity search only. Minimum Tanimoto similarity (70-100). 90+ for close analogs, 70-80 for scaffold hops. Default: 90.
NameTypeReqDescription
activeOnlyboolean–Assay search only: true when the list holds only the compounds the assay marked active, false when it holds every compound tested.
capnumber–The page size applied: maxResults, or the per-call cap when maxResults exceeds it.
cappedInputsarray–Inputs that asked for more than their per-call cap, with the value requested and the value served. An ID batch lists the IDs past the cap in unprocessed. Omitted when every input was within its cap.
errorobject–Present when the call failed. Absent on success.
nextOffsetnumber–Offset to pass on the next call to continue past this page. Omitted when no further matches remain, and when a formula, substructure, superstructure, or similarity page would continue past the 10000…
noticestring–Recovery guidance when no compounds matched (for an assay search, when the assay recorded none of the requested kind), when the offset runs past the matches observed, when identifiers had no match or…
offsetnumber–Zero-based index of the first CID returned.
resultsarray–Matching compounds.
searchTypestring–Search strategy used: identifier, formula, substructure, superstructure, similarity, or assay.
shownnumber–CIDs returned on this page.
totalFoundnumber–Exact number of matching CIDs across all pages. Omitted when a formula, substructure, superstructure, or similarity search saturated the records it requested — PubChem returns no match count for thos…
totalFoundAtLeastnumber–Lower bound on matching CIDs, reported in place of totalFound when the exact count is unavailable. At least this many match, and the true total may be higher; page further with offset to observe more.
truncatedboolean–True when matching CIDs remain past this page.
unprocessedarray–Identifier-mode only: identifiers past the per-call cap of 25, in input order, not looked up. Pass them in a follow-up call. Omitted when every identifier was looked up.
unresolvedIdentifiersarray–Identifier-mode only: input identifiers that resolved to no CID — PubChem had no match, or could not interpret the input as identifierType (the notice says which). Omitted when every identifier resol…

No examples provided.

Install

How do I install the io.github.cyanheads/pubchem-mcp-server server?

io.github.cyanheads/pubchem-mcp-server is a hosted endpoint at https://pubchem.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · pubchem.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-pubchem-mcp-server 'https://pubchem.caseyjhand.com/mcp'
Common questions

What is the io.github.cyanheads/pubchem-mcp-server server?

io.github.cyanheads/pubchem-mcp-server is listed in the public MCP registry as io.github.cyanheads/pubchem-mcp-server. Search PubChem compounds, properties, safety data, bioactivity, and cross-references. This page covers its hosted endpoint (https://pubchem.caseyjhand.com/mcp).

Is the io.github.cyanheads/pubchem-mcp-server server safe to use?

io.github.cyanheads/pubchem-mcp-server scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.cyanheads/pubchem-mcp-server server expose?

io.github.cyanheads/pubchem-mcp-server exposes 10 tools: pubchem_search_compounds, pubchem_get_compound_details, pubchem_get_compound_image, pubchem_get_compound_3d_structure, pubchem_get_compound_xrefs, and 5 more. Their descriptions and schemas cost roughly 4,746 tokens of context every time the server is loaded.

Does the io.github.cyanheads/pubchem-mcp-server server require authentication?

No. We connected to io.github.cyanheads/pubchem-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.cyanheads/pubchem-mcp-server server still maintained?

io.github.cyanheads/pubchem-mcp-server is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.