pubchem-mcp-server
Public Hosted Server: https://pubchem.caseyjhand.com/mcp
Tools
Ten tools for querying PubChem's chemical information database:
Tool Name | Description |
| Search for compounds by name, SMILES, InChIKey, formula, substructure, superstructure, or 2D similarity. |
| Get physicochemical properties, descriptions, synonyms, drug-likeness, and classification for compounds by CID. |
| Fetch a 2D structure diagram (PNG) for a compound by CID. |
| Fetch a 3D conformer (atomic coordinates and bonds) for a compound by CID, as parsed JSON or raw SDF. |
| Get external database cross-references (PubMed, patents, genes, proteins, etc.). |
| Get GHS hazard classification and safety data for one or more compounds by CID (batch). |
| Get a compound's bioactivity profile: assay results, targets, and activity values; filter by outcome or molecular target. |
| Get drug-drug, drug-food, and chemical-target interactions for a compound by CID. |
| Find bioassays by biological target (gene symbol, protein, Gene ID, UniProt accession). |
| Get summaries for PubChem entities: assays, genes, proteins, taxonomy. |
pubchem_search_compounds
Search PubChem for chemical compounds across five search modes.
Identifier lookup — resolve compound names, SMILES, or InChIKeys to CIDs (batch up to 25)
Formula search — find compounds by molecular formula in Hill notation
Substructure/superstructure — find compounds containing or contained within a query structure
2D similarity — find structurally similar compounds by Tanimoto similarity (configurable threshold)
Caps at 200 CIDs per page;
offsetpages further, to a ceiling of 10,000. Identifier lookups page over the set already resolved; formula and structure searches widen their bounded upstream request to reach a page, so deep pages cost more upstreamOptionally hydrate results with properties to avoid a follow-up details call
pubchem_get_compound_details
Get detailed compound information by CID.
Batches up to 100 CIDs in a single request
27 available properties: molecular weight, SMILES, InChIKey, XLogP, TPSA, complexity, stereo counts, and more
Optionally includes textual descriptions (pharmacology, mechanism, therapeutic use) from PUG View — fetched for the first 10 CIDs of a batch, with the skipped CIDs named in the response
Optionally includes known synonyms (trade names, systematic names, registry numbers)
Synonyms and descriptions are paged:
synonymOffsetanddescriptionOffsetwindow every compound in the batch at the same position, reaching the entries past a pageOptionally computes drug-likeness assessment (Lipinski Rule of Five + Veber rules) from fetched properties
Optionally fetches pharmacological classification (FDA classes, mechanisms of action, MeSH classes, ATC codes)
pubchem_get_bioactivity
Get a compound's bioactivity profile from PubChem BioAssay.
Returns assay outcomes (Active/Inactive/Inconclusive), target info (protein accessions, NCBI Gene IDs), and quantitative values (IC50, EC50, Ki)
Filter by outcome and/or a specific molecular target (NCBI Gene ID or protein accession)
Caps at 100 results per page;
offsetreaches the rest (well-studied compounds may have thousands)
pubchem_get_summary
Get descriptive summaries for four PubChem entity types.
Assays (AID), genes (Gene ID), proteins (UniProt accession), taxonomy (Tax ID)
Up to 10 entities per call
Type-specific field extraction for clean, structured output
pubchem_get_compound_interactions
Get a compound's interaction data by CID.
Drug-drug interactions (DrugBank), drug-food interactions, and chemical-target binding/activity (BindingDB, ChEMBL, and others)
Select which interaction kinds to fetch and cap entries per kind
Paged per kind: each reports its source-record total and its own
nextOffset, andoffsetreaches the records past a pageEach entry carries its originating source — coverage is richest for approved drugs
pubchem_get_compound_3d_structure
Get a compound's default 3D conformer by CID.
format="json"returns parsed atoms (element + x/y/z) and bonds for direct reasoning;format="sdf"returns raw V2000 SDF for passthrough to docking or renderingmaxAtoms/maxBondsbound the atom/bond preview andincludeRawSdfopts into a large raw SDF past the safe line cap;atomCount/bondCountalways report the totals and any capping is disclosedOptionally lists alternate conformer IDs
Returns a typed not-found when PubChem has no computed 3D coordinates (large molecules, mixtures, some salts)
Resources
Compound and assay records are also exposed as URI-templated MCP resources, backed by the same client methods as the tools:
URI Template | Returns |
| Core physicochemical properties (JSON). |
| GHS hazard classification (JSON). |
| 2D structure diagram (PNG). |
| External cross-references (JSON). |
| Bioassay activity profile (JSON). |
| BioAssay summary (JSON). |
Features
Built on @cyanheads/mcp-ts-core:
Declarative tool definitions — single file per tool, framework handles registration and validation
Unified error handling across all tools
Pluggable auth (
none,jwt,oauth)Swappable storage backends:
in-memory,filesystem,Supabase,Cloudflare KV/R2/D1Structured logging with optional OpenTelemetry tracing
Runs locally (stdio/HTTP) or containerized via Docker
PubChem-specific:
Rate-limited client for PUG REST and PUG View APIs (5 req/s with automatic queuing)
Retry with exponential backoff on 5xx errors and network failures
All tools are read-only and idempotent — no API keys required
Getting Started
Public Hosted Instance
A public instance is available at https://pubchem.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "streamable-http",
"url": "https://pubchem.caseyjhand.com/mcp"
}
}
}Self-Hosted / Local
Add to your MCP client config (e.g., claude_desktop_config.json):
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/pubchem-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio"
}
}
}
}Prerequisites
Bun v1.3.0 or higher (or Node.js v24+)
Installation
Clone the repository:
git clone https://github.com/cyanheads/pubchem-mcp-server.gitNavigate into the directory:
cd pubchem-mcp-serverInstall dependencies:
bun installConfiguration
No API keys are required — PubChem's API is freely accessible.
Variable | Description | Default |
| Transport: |
|
| Port for HTTP server. |
|
| Host for HTTP server. |
|
| Auth mode: |
|
| Log level (RFC 5424). |
|
| Storage backend. |
|
| Enable OpenTelemetry. |
|
Running the Server
Local Development
Build and run:
bun run rebuild bun run start:stdio # or start:httpRun checks and tests:
bun run devcheck # Lints, formats, type-checks bun run test # Runs test suite
Docker
docker build -t pubchem-mcp-server .
docker run -p 3010:3010 pubchem-mcp-serverProject Structure
Directory | Purpose |
| Tool definitions ( |
| PubChem API client with rate limiting and response parsing. |
| Build, clean, devcheck, and tree generation scripts. |
Development Guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches — no
try/catchin tool logicUse
ctx.logfor domain-specific loggingRegister new tools in the
index.tsbarrel file
Contributing
Issues and pull requests are welcome. Run checks before submitting:
bun run devcheck
bun run testLicense
Apache-2.0 — see LICENSE for details.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cyanheads/pubchem-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server