Skip to main content
Glama

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

Public Hosted Server: https://pubchem.caseyjhand.com/mcp


Overview

Chemical compounds and bioassays from PubChem. Search compounds by name, formula, or structure; fetch properties, safety data, bioactivity, drug-food interactions, molecular targets, and 3D structures; and find bioassays by biological target.

Tools

Tool

Description

pubchem_search_compounds

Search for compounds by name, SMILES, InChI, InChIKey, formula, substructure, superstructure, or 2D similarity, or list the compounds a bioassay found active.

pubchem_get_compound_details

Get physicochemical properties, descriptions, synonyms, drug-likeness, and classification for compounds by CID.

pubchem_get_compound_image

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

pubchem_get_compound_3d_structure

Fetch a 3D conformer (atomic coordinates and bonds) for a compound by CID, as parsed JSON or raw SDF.

pubchem_get_compound_xrefs

Get external database cross-references (PubMed, patents, genes, CAS and EC numbers, etc.).

pubchem_get_compound_safety

Get GHS hazard classification and safety data for one or more compounds by CID (batch).

pubchem_get_bioactivity

Get a compound's bioactivity profile: assay results, targets, activity values, assay types, and cited PubMed IDs; filter by outcome, molecular target, or assay type.

pubchem_get_compound_interactions

Get a compound's drug-food interactions and the molecular targets its assays name, each with assay counts and the most potent active value.

pubchem_search_assays

Find bioassays by biological target (gene symbol, protein, Gene ID, UniProt accession).

pubchem_get_summary

Get summaries for PubChem entities: assays, genes, proteins, taxonomy.

Resources

Compound and assay records are also exposed as URI-templated resources, backed by the same client methods as the tools; many MCP clients are tool-only and never surface resources.

Resource

Description

pubchem://compound/{cid}

Core physicochemical properties (JSON).

pubchem://compound/{cid}/safety

GHS hazard classification (JSON).

pubchem://compound/{cid}/image

2D structure diagram (PNG).

pubchem://compound/{cid}/xrefs

External cross-references (JSON).

pubchem://compound/{cid}/bioactivity

Bioassay activity profile (JSON).

pubchem://assay/{aid}

BioAssay summary (JSON).

Skills

The server publishes an agent skill, pubchem-guide, covering gates and identifier chains the tool descriptions don't carry: salt vs parent CIDs, where Gene IDs and accessions come from, why gene-symbol, Gene ID, and accession searches disagree, and how to read activity labels, potency values, and GHS data. Plugin installs (Claude Code, Codex) and the .mcpb bundle pick it up from skills/, and the server also serves it over MCP as skill://pubchem-guide/SKILL.md.

Related MCP server: Chemspace MCP Server

Capability reference

pubchem_search_compounds tool

  • Six search strategies: identifier (identifierType + identifiers; name/SMILES/InChI/InChIKey, 25 per call, the rest returned in unprocessed), formula (formula, Hill notation, optional allowOtherElements), substructure/superstructure and 2D similarity (query + queryType; similarity threshold 70-100, default 90), or assay (aid; compounds the bioassay marked active, or every compound tested with activeOnly: false)

  • Up to 200 CIDs per page (default 20; a larger maxResults is served at 200 and reported in cappedInputs); offset pages identifier and assay searches to the end of their matches, and formula, substructure, superstructure, and similarity searches to 10,000 (deeper fails with offset_ceiling_exceeded). Optional properties saves a follow-up pubchem_get_compound_details call

  • Reports totalFound, or a totalFoundAtLeast floor when an upstream search saturated, and unresolvedIdentifiers for inputs with no CID. Fails with aid_not_found for an unknown AID and search_query_rejected (with a hint) for a query PubChem cannot search


pubchem_get_compound_details tool

  • Up to 100 CIDs per call (the rest returned in unprocessed); 27 available properties, defaulting to a core set of 14

  • Optional descriptions (descriptionOffset/maxDescriptions, default 3, max 20) and classification (FDA, MeSH, ATC) cover the first 10 CIDs only, the rest listed in skippedCids. Optional synonyms (synonymOffset/maxSynonyms, default 20, max 100) and a Lipinski/Veber drug-likeness check cover every found CID

  • Per-CID found: false separates a nonexistent CID from a compound with no data


pubchem_get_compound_image tool

  • Single CID; size is "small" (100x100) or "large" (300x300, default)

  • Returns base64-encoded PNG plus width/height

  • Typed cid_not_found error when PubChem has no record for the CID


pubchem_get_compound_3d_structure tool

  • Single CID; format="json" (default) returns parsed atoms (element + x/y/z) and bonds, format="sdf" returns the raw V2000 SDF text

  • maxAtoms/maxBonds cap the JSON preview (default 200 each); atomCount/bondCount always report the full totals, with any capping disclosed via enrichment

  • includeRawSdf bypasses the default 500-line cap on the raw SDF text

  • Optional includeAlternateConformerIds lists conformer IDs beyond the default

  • Typed no_3d_structure error when PubChem has no computed 3D coordinates (large molecules, mixtures, some salts)


pubchem_get_compound_xrefs tool

  • Single CID; one or more xrefTypes: CAS, EC, RN, RegistryID, PatentID, PubMedID, GeneID, ProteinGI, TaxonomyID

  • CAS and EC are the numbers deposited for the compound, every distinct value ordered by how many source records deposited it, with those counts in sourceCounts. RN is PubChem's unranked registry-number list: the CAS number sits beside deprecated and related CAS RNs and EC numbers

  • ProteinGI currently returns no data from PubChem; use GeneID for gene/protein associations

  • maxPerType up to 500 (default 50), with one offset applied to every type; each type reports totalAvailable and truncated. PubMedID comes newest first

  • A type that fails to load is named in failedTypes and the others still return; the call fails only when a type fails and no type other than ProteinGI (which PubChem no longer serves) loads. An empty result says whether the compound has none of the requested types or the CID may be mistyped


pubchem_get_compound_safety tool

  • Up to 25 CIDs per call (the rest returned in unprocessed)

  • Returns the GHS signal word, pictograms, H-codes, and P-codes merged across sources, plus classifications[] with each source's own label; precautionary statements carry a decoded flag

  • Per-CID status: ok, not_classified (notifiers found no GHS hazard), no_ghs_data (no deposited classification), or cid_not_found, so a bad CID never reads as "no hazards on file"


pubchem_get_bioactivity tool

  • Single CID; filter by outcomeFilter (active/inactive/all, default all), targetGeneId/targetAccession, and assayType (any of confirmatory/screening/summary/other); an assay must pass every filter set

  • A target filter matches any identifier tied to the same target, so Gene ID 5742, UniProt P23219, and RefSeq NP_542158 all reach the same COX-1 assays

  • Each result carries the assay's assayType and the PubMed IDs it cites (pmids, newest first)

  • Up to 100 results per page (default 20); offset reaches the rest. A multi-target assay reports the matched target and lists the others under otherTargets

  • Reports totalAssays/activeCount/inactiveCount for the whole compound and filteredCount/returnedCount for the page; notices say whether there is no data, the filter excluded everything, or offset is past the end


pubchem_get_compound_interactions tool

  • Single CID; one or more kinds — drug-food (PUG View), target, drug-drug (DrugBank); default ["drug-food"], and an empty drug-food page points at target

  • target gives one entry per target the compound's assay summary names: a Gene ID with the accessions the table pairs with it, or an identifier it never pairs. A Gene ID and an accession that no row pairs are separate entries even when they name the same protein (erlotinib's ERBB2 appears as accession:P04626 and as GeneID:2064). Each entry names the target from a batched gene or protein summary lookup, plus the GeneID: or accession: value pubchem_get_bioactivity filters on, and states the assay counts by outcome and the most potent Active value with its AID. Active targets come first, most potent first. If a name lookup fails or does not answer within a few seconds, the entries keep their identifier and the notice says so

  • maxEntries per kind per page (max 50, default 10); offset counts records (targets, for target), up to 2,147,483,646. Each kind pages independently, reported in paging[] (totalRecords/nextOffset/truncated)

  • A kind that fails is named in failedKinds and the others still return. The notice offers a retry only for a failure a retry can clear (timeout, rate limit, network error, unreadable response, 5xx other than 501); an HTTP 400, 403, or 501, or a response in a shape the server does not expect, fails the same way on every call. drug-drug comes from PubChem's SDQ service, which refuses automated requests, so it lands in failedKinds and a retry will not help


pubchem_search_assays tool

  • Search by targetType: genesymbol/proteinname (text), geneid (NCBI Gene ID), proteinaccession (UniProt)

  • A genesymbol matches across species. geneid and proteinaccession each pin one protein but return overlapping, different assay sets for it; union both for a complete list

  • Up to 200 AIDs per page (default 50); offset pages through the results

  • Rejects a blank targetQuery and a non-numeric geneid; a targetQuery PubChem refuses with HTTP 400 (one carrying a line break, another C0 control character other than tab and NUL, or DEL) fails as target_query_rejected

  • Reports totalFound and distinguishes "no match" from "offset past the end"


pubchem_get_summary tool

  • entityType: assay (AID), gene (NCBI Gene ID), protein (UniProt accession), or taxonomy (Tax ID); up to 10 identifiers per call

  • A comma-joined string is split into identifiers; any past the first 10 are returned in unprocessed, and more than 1000 fails as too_many_identifiers

  • AIDs, Gene IDs, and Tax IDs must be positive integers up to 2147483647; other pieces get an invalid: true row, and the call fails as invalid_identifier only when none is usable

  • Per-identifier found flag; fields depend on entityType (taxonomy: ordered lineage; gene: symbol/taxonomy; assay: method, the first 25 targets with targetCount, tested/active compound counts, lastDataChange)


pubchem://compound/{cid} resource

  • Core physicochemical properties (the same default 14-property set as pubchem_get_compound_details), as application/json

  • Throws a typed not-found when the CID doesn't exist in PubChem

  • Use pubchem_get_compound_details to select specific properties or add descriptions, synonyms, drug-likeness, and classification


pubchem://compound/{cid}/safety resource

  • GHS hazard classification as application/json, including the per-source ghs.classifications and the contributor source list

  • status (ok/not_classified/no_ghs_data/cid_not_found) is the only signal distinguishing a bad CID from a compound with no deposited classification — a resource read has no notice surface


pubchem://compound/{cid}/image resource

  • 2D structure diagram, 300x300 PNG, returned as a base64 blob

  • Use pubchem_get_compound_image for the 100x100 size option


pubchem://compound/{cid}/xrefs resource

  • Focused default set — RN, RegistryID, PubMedID, CAS (with sourceCounts) — up to 25 IDs per type, as application/json; the PubMed IDs are the 25 highest (most recently assigned), highest first. A type that fails to load is named in failedTypes

  • Use pubchem_get_compound_xrefs for the full set of xref types, a higher per-type cap, and offset paging


pubchem://compound/{cid}/bioactivity resource

  • Up to 25 assays as application/json, each with its assayType and pmids, plus totalAssays/activeCount for the whole compound; a multi-target assay lists its further targets under otherTargets

  • Use pubchem_get_bioactivity to filter by outcome, target, or assay type, raise the cap, or page with offset


pubchem://assay/{aid} resource

  • BioAssay summary as application/json — name, description, source, protocol, substance counts

  • Throws a typed not-found when the AID doesn't exist

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

PubChem-specific:

  • Covers PUG REST and PUG View endpoints, plus SDQ for drug-drug interactions

  • Rate-limited client (5 req/s) with request queuing and one retry on transient failures

  • A 50 s budget per call fails a slow upstream as Timeout, and a cancelled call fails with RequestCancelled

  • Built-in V2000 SDF parser for 3D conformers; drug-likeness computed from already-fetched properties

  • All tools are read-only and idempotent, with no API keys required

Agent-friendly output:

  • Per-CID status and found flags let callers branch on data instead of matching error strings

  • Batch tools return per-item results alongside unresolvedIdentifiers, skippedCids, failedKinds, and failedTypes rather than failing the whole call

  • Capped lists disclose truncated, shown/cap, and nextOffset; oversized batches are served up to the cap, with cappedInputs and unprocessed reporting the rest

  • Failures carry a typed reason (e.g. cid_not_found, missing_identifier_args, invalid_cid_query) with recovery text

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 the following to your MCP client configuration file.

{
  "mcpServers": {
    "pubchem-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/pubchem-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio"
      }
    }
  }
}

Or with npx (no Bun required):

{
  "mcpServers": {
    "pubchem-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/pubchem-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio"
      }
    }
  }
}

Or with Docker:

{
  "mcpServers": {
    "pubchem-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/pubchem-mcp-server:latest"]
    }
  }
}

For Streamable HTTP, set the transport and start the server:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp

Prerequisites

  • Bun v1.4.0 or higher (or Node.js v24+).

  • No API keys required — PubChem's API is freely accessible.

Installation

  1. Clone the repository:

git clone https://github.com/cyanheads/pubchem-mcp-server.git
  1. Navigate into the directory:

cd pubchem-mcp-server
  1. Install dependencies:

bun install
  1. Configure environment (optional):

cp .env.example .env
# edit .env to override transport, session mode, storage, or logging defaults

Configuration

Variable

Description

Default

MCP_TRANSPORT_TYPE

Transport: stdio or http.

stdio

MCP_HTTP_PORT

Port for HTTP server.

3010

MCP_HTTP_HOST

Host for HTTP server.

127.0.0.1

MCP_SESSION_MODE

stateless, stateful, or auto.

stateless

MCP_AUTH_MODE

Auth mode: none, jwt, or oauth.

none

MCP_LOG_LEVEL

Log level (RFC 5424).

info

STORAGE_PROVIDER_TYPE

Storage backend.

in-memory

OTEL_ENABLED

Enable OpenTelemetry.

false

See .env.example for the full list of optional overrides.

Running the server

Local development

  • Build and run:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
  • Run checks and tests:

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec

Docker

docker build -t pubchem-mcp-server .
docker run --rm -p 3010:3010 pubchem-mcp-server

The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/pubchem-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Project structure

Directory

Purpose

src/index.ts

createApp() entry point — registers tools/resources and inits the PubChem client.

src/mcp-server/tools/definitions/

Tool definitions (*.tool.ts).

src/mcp-server/resources/definitions/

Resource definitions (*.resource.ts).

src/services/pubchem/

PubChem API client — rate limiting, retry, and response/SDF parsing.

scripts/

Build, clean, devcheck, and tree generation scripts.

tests/

Unit and integration tests.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic

  • Use ctx.log for request-scoped logging

  • Wrap external API calls: validate the raw PubChem response → normalize to a domain type → return the output schema; never fabricate missing fields

  • Register new tools and resources in the index.ts barrel files

Contributing

Issues are welcome. Run checks before submitting:

bun run devcheck
bun run test

License

Apache-2.0 — see LICENSE for details.

Available Tools

10 tools
pubchem_get_bioactivityGet BioactivityA
Read-onlyIdempotent
Inspect

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?".

NameRequiredDescriptionDefault
cidYesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
offsetNoZero-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.
assayTypeNoKeep 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". Matched against PubChem's Assay Type regardless of case; an assay with no recorded type matches none. Combines with outcomeFilter and the target filters — an assay must pass all of them. Omit to keep every type.
maxResultsNoMax 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 offset to reach the ones past this page. Default: 20.
targetGeneIdNoFilter 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 carrying only P23219 when another row pairs the two). Obtain Gene IDs from the GeneID:N in a pubchem_get_compound_interactions target entry's partner (kinds: ["target"]) or the targetGeneId field of a result here without a target filter (rows from untargeted screens carry none). Combine with outcomeFilter="active" to answer "is this compound active against target T?".
outcomeFilterNoFilter 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 targets (in otherTargets) do not count. "active" keeps assays where that outcome is Active — most useful for understanding biological profile. Default: "all".all
targetAccessionNoFilter 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 table pairs with it. Uppercased before matching; a PDB chain ID (the "A" in "1ZHH_A") is kept as given. With targetGeneId, both must name the same target — when the table ties them to different targets, nothing matches. Obtain accessions from an assay's targets in pubchem_get_summary (entityType "assay"), the accession:X in a pubchem_get_compound_interactions target entry's partner, or the targetAccession field of a result here without a target filter.

Output Schema

NameRequiredDescription
capNoThe page size applied: maxResults, or the per-call cap when maxResults exceeds it.
cidNoPubChem Compound ID.
errorNoPresent when the call failed. Absent on success.
shownNoAssays returned on this page.
noticeNoRecovery guidance when the filter yields no results or the compound has no bioactivity data.
offsetNoZero-based index of the first assay returned.
resultsNoAssay results matching the filter.
truncatedNoTrue when matching assays remain past this page.
nextOffsetNoOffset to pass on the next call to continue past this page. Omitted when no further assays match.
activeCountNoAssays 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.
totalAssaysNoTotal unique assays for this compound.
cappedInputsNoInputs 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.
targetFilterNoTarget 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 two inputs.
filteredCountNoExact number of assays matching the outcome, target, and assay-type filters, across all pages.
inactiveCountNoAssays 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.
outcomeFilterNoOutcome filter applied: active, inactive, or all.
returnedCountNoAssays returned on this page.
assayTypeFilterNoAssay types kept, comma-separated (e.g. "confirmatory, summary"), when assayType is set.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and openWorld, so the safety profile is covered. The description adds the notion that the result is a filterable 'profile' but omits operational behavior the caller cares about — pagination, the per-call cap and how capped requests are reported — all of which live only in the schema text. Non-contradictory but not richly additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the resource and its return shape, then a second sentence on filtering with a concrete example question. Dense but every clause maps to a real capability; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description needn't explain returns, and it does adequately signal what kind of record set is produced plus how to narrow it. The main residual gap is pagination/capping behavior for well-studied compounds, which an agent must discover from the parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already explains cid, offset, assayType, maxResults, targetGeneId, targetAccession and outcomeFilter in depth. The description only restates the filter axes in prose ('filter by outcome, a specific molecular target, and/or assay type') and adds no syntax, precedence or edge-case detail beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a compound's bioactivity profile') and then enumerates the returned content: assays, activity outcomes, target identifiers, quantitative values (IC50/EC50/Ki), assay types and PubMed IDs. Among siblings like get_compound_details, get_compound_interactions and search_assays, this clearly occupies the 'bioactivity records for one compound' slot without overlap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers a concrete usage framing ('is this compound active against target T in confirmatory assays?') and names the three filter axes that narrow the profile. It does not, however, explicitly exclude scenarios or route to a sibling (e.g. when to prefer pubchem_get_compound_interactions or pubchem_search_assays instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubchem_get_compound_3d_structureGet Compound 3D StructureA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault
cidYesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
formatNoOutput format. "json" (default) returns parsed atoms and bonds. "sdf" returns the raw V2000 SDF text for passthrough to other tools.json
maxAtomsNoCap 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.
maxBondsNoCap 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.
includeRawSdfNoFor 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".
includeAlternateConformerIdsNoList the IDs of additional computed conformers beyond the default. Slower than the default response. Default: false.

Output Schema

NameRequiredDescription
cidNoPubChem Compound ID.
sdfNoRaw V2000 SDF text. Populated when format="sdf".
atomsNoParsed atoms. Populated when format="json".
bondsNoParsed bonds. Populated when format="json".
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance naming which lists were capped and how to widen them.
atomCapNoThe atom cap applied (explicit maxAtoms or the safe default), when the atom list was capped.
bondCapNoThe bond cap applied (explicit maxBonds or the safe default), when the bond list was capped.
atomCountNoNumber of atoms in the conformer.
bondCountNoNumber of bonds in the conformer.
truncatedNoTrue when the atom list, bond list, or raw SDF was capped below its total. atomCount/bondCount always report the full totals.
shownAtomsNoAtoms returned after the cap, when fewer than atomCount. Raise maxAtoms for more.
shownBondsNoBonds returned after the cap, when fewer than bondCount. Raise maxBonds for more.
conformerIdNoDefault (primary) conformer ID. Present when includeAlternateConformerIds is set.
shownSdfLinesNoSDF lines returned when format="sdf" and the raw text was line-capped. Set includeRawSdf for the full record.
alternateConformerIdsNoConformer IDs beyond the default. Present when includeAlternateConformerIds is set and alternates exist.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, openWorld), and the description adds substantial behavior beyond them: the 200-atom/bond default truncation, the 500-line SDF cap, the disclosure enrichment on truncation, and that listing alternate conformers is noticeably slower. It also discloses the negative case where no conformer exists at all.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences that put the core purpose first and the caveats last. Some format explanation duplicates the schema description verbatim, which is mild redundancy, but nothing is wasted or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return-shape explanation is unnecessary; the description instead covers the things an agent needs that structured fields don't convey — truncation defaults, the raw-SDF escape hatch, and the possibility that a valid CID simply has no 3D conformer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above-baseline credit by explaining the semantic split between format=json and format=sdf and by noting that alternate conformer IDs can be listed. It largely mirrors schema text for maxAtoms/maxBonds/includeRawSdf rather than adding new meaning, so it does not reach 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a compound's default 3D conformer — atomic coordinates and bonds — for one CID') and distinguishes itself from siblings like pubchem_get_compound_image, _details, and _xrefs by naming exactly what data is returned. An agent can identify this as the coordinate-retrieval tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear selection guidance between the two modes — json for parsed atoms/bonds, sdf 'for passthrough to docking, rendering, or conformer tools' — and flags the failure case ('Not every compound has computed 3D coordinates (large molecules, mixtures, and some salts do not)'). It stops short of explicitly routing to sibling tools when 3D data is unavailable or when the CID must first be resolved.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubchem_get_compound_detailsGet Compound DetailsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
cidsYesPubChem 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. Resolve from names/SMILES with pubchem_search_compounds.
propertiesNoProperties to retrieve. Defaults to a core set: MolecularFormula, MolecularWeight, IUPACName, CanonicalSMILES, IsomericSMILES, InChIKey, XLogP, TPSA, HBondDonorCount, HBondAcceptorCount, RotatableBondCount, HeavyAtomCount, Charge, Complexity.
maxSynonymsNoMax 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; use synonymOffset to reach the ones past this page. Default: 20.
synonymOffsetNoZero-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 the following page. Default: 0.
includeSynonymsNoFetch 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.
maxDescriptionsNoMax 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-duplicate summaries from many depositors; duplicates are collapsed before this cap applies. Default: 3.
descriptionOffsetNoZero-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 call to read the following page. Default: 0.
includeDescriptionNoInclude textual descriptions (pharmacology, mechanism, therapeutic use) attributed by source. Well-studied compounds have many overlapping summaries — paged via descriptionOffset/maxDescriptions. Fetched only for the first 10 CIDs in the batch; remaining CIDs return without descriptions and are listed in the response's skippedCids.
includeDrugLikenessNoCompute 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.
includeClassificationNoInclude 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 return without classification and are listed in the response's skippedCids.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoRecovery guidance covering the skipped CIDs, an offset that runs past every compound, and pages that remain. Absent when nothing was skipped or truncated.
compoundsNoCompound detail records, one per CID fetched, in input order. CIDs past the per-call cap are in unprocessed instead.
truncatedNoTrue 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 left unfetched. Per-compound totals are in compounds[].synonymsTotal / compounds[].descriptionsTotal; the skipped CIDs are in skippedCids, the unfetched ones in unprocessed.
skippedCidsNoCIDs 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 none" — re-request these CIDs in a follow-up call. Present only when CIDs were skipped.
unprocessedNoCIDs 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.
cappedInputsNoInputs 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.
enrichedCidsNoCIDs whose descriptions and classification were fetched. Present only when the batch exceeded the per-call fan-out limit and other CIDs were skipped.
synonymOffsetNoZero-based index of the first synonym returned within each compound's list. Present when includeSynonyms is true.
descriptionOffsetNoZero-based index of the first description returned within each compound's list. Present when includeDescription is true.
nextSynonymOffsetNosynonymOffset to pass on the next call to continue past this page. Omitted when no compound in the batch has further synonyms.
nextDescriptionOffsetNodescriptionOffset to pass on the next call to continue past this page. Omitted when no compound in the batch has further descriptions.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world behavior, so the bar is lower. The description adds valuable non-obvious constraints: the 100-CID fetch cap with overflow in 'unprocessed', and the description/classification fetch limited to the first 10 CIDs with the rest in skippedCids.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the CID-based purpose, then condenses the optional payloads and the cap behavior. Dense but every clause carries information; the only mild bloat is the trailing cap sentence which partially duplicates the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, payloads, and cap/pagination behavior, and an output schema exists so return values need not be described. For a 10-parameter tool with rich schema, this is largely complete, though explicit sibling routing is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents parameters and baseline is 3. The description restates the core option groups but adds no syntax or meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get detailed compound information by CID') and enumerates the returned data categories (physicochemical properties, descriptions, synonyms, drug-likeness, classification), clearly distinguishing it from siblings like pubchem_get_compound_safety or pubchem_get_compound_xrefs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies when to use it by listing the payload categories, and the schema points agents to pubchem_search_compounds for name/SMILES resolution. However, the description itself never explicitly states when to prefer this over siblings such as pubchem_get_summary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubchem_get_compound_imageGet Compound ImageA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
cidYesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
sizeNoImage size: "small" (100x100) or "large" (300x300). Default: "large".large

Output Schema

NameRequiredDescription
cidNoPubChem Compound ID.
errorNoPresent when the call failed. Absent on success.
widthNoImage width in pixels.
heightNoImage height in pixels.
mimeTypeNoMIME type — always "image/png".
imageBase64NoBase64-encoded PNG image data.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds the output format (PNG image), which is genuinely useful context, but says nothing about image availability failures, rate limits, or what happens for compounds lacking a depiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero filler; the resource, format, and lookup key are all front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter image fetch with an output schema and full safety annotations, the description covers what the tool returns well enough to call correctly. The only real gap is the absence of usage guidance relative to sibling compound tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both cid and size are fully documented in the schema, including the size enum values and the default. The description adds no parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb plus resource ('Fetch a 2D structure diagram') and pins down output format (PNG) and lookup key (CID). The '2D' qualifier implicitly distinguishes it from the sibling pubchem_get_compound_3d_structure, so an agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no when-to-use guidance, no exclusions, and never names an alternative tool. The one routing hint that exists ('Resolve from name/SMILES with pubchem_search_compounds') is present only in the schema's cid description, not in the tool description itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubchem_get_compound_interactionsGet Compound InteractionsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
cidYesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
kindsNoInteraction 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 with it, and one per identifier it never pairs, so a Gene ID and an accession that no row pairs are separate entries even when they name the same protein), "drug-drug" (interactions with other drugs, from PubChem's SDQ service, which refuses automated requests, so it is reported in failedKinds). Default: ["drug-food"].
offsetNoZero-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 advance at different rates — when paging past the first page, request one kind per call and pass that kind's nextOffset. Default: 0.
maxEntriesNoMax 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; use offset to reach the ones past this page. Default: 10.

Output Schema

NameRequiredDescription
cidNoPubChem Compound ID.
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance 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 this page is complete and every kind resolved.
offsetNoZero-based start position read within each requested kind.
pagingNoPer-kind page position, one entry per requested kind that was retrieved. A kind listed in failedKinds is absent — its position is unknown, not exhausted.
entriesNoInteraction entries across the requested kinds.
truncatedNoTrue 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.
nextOffsetNoOffset 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[].nextOffset instead.
failedKindsNoInteraction 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, network error, unreadable response, or upstream 5xx other than 501 can clear, while an HTTP 400, 403, or 501, a response in a shape the server does not expect, or a refusal from PubChem's SDQ service (drug-drug) does not.
cappedInputsNoInputs 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.
returnedCountNoTotal interaction entries returned across all kinds.
requestedKindsNoInteraction kinds requested (comma-separated).

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, openWorld), and the description adds substantial behavior beyond them: per-kind paging with record totals and next offsets, ordering guarantees, per-entry source attribution, and the failedKinds path when SDQ refuses drug-drug requests. It stops short of describing response shape (left to the output schema) or rate limiting, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and ordering, then paging behavior, then the sibling route, then the drug-drug caveat — a sensible information hierarchy. It is a single dense paragraph with long em-dash clauses, so it is efficient but slightly harder to scan than a structured list would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paged, multi-kind read tool with an output schema, the description covers everything an agent needs to call it correctly: which kinds exist, their differing coverage, ordering, paging semantics, and the degradation path for the unavailable kind. Return value structure is correctly delegated to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description still adds real semantic value beyond it — that offset is counted in records rather than returned entries, that one offset applies to every kind, and that kinds advance at different rates so paging past page one should request a single kind. The 'long tail' note on maxEntries also motivates the offset. Remaining overlap with the schema caps it at 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Get a compound's interaction data') and immediately enumerates the kinds returned, the ordering ('Active targets first, most potent first'), and per-entry contents. It differentiates itself from pubchem_get_bioactivity by name and scope, so an agent can pick between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use pubchem_get_bioactivity when you already have a GeneID/accession for one target's assays, and this tool otherwise. It also states coverage expectations ('drug-food coverage is richest for approved drugs') and the paging strategy (one kind per call past the first page), plus what happens on an explicit drug-drug request.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubchem_get_compound_safetyGet Compound SafetyA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
cidsYesPubChem 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 cappedInputs. Resolve from names/SMILES with pubchem_search_compounds.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance 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 classifications are "Not Classified" verdicts, each separately.
resultsNoSafety results, one per CID looked up (input order preserved). CIDs past the per-call cap are in unprocessed instead.
unprocessedNoCIDs 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.
cappedInputsNoInputs 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.
withDataCountNoCIDs with a GHS classification on file (status "ok" or "not_classified").
requestedCountNoCIDs requested, including any past the per-call cap left in unprocessed.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the read-only/idempotent safety profile, but the description goes well beyond them: data is merged across sources, per-source classifications are returned alongside the merge because sources often disagree, ECHA notifier agreement percentages and notification counts are included, and ECHA "Not Classified" verdicts are surfaced as a distinct status. This is unusually rich behavioral disclosure for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then layered with return-shape and source-disagreement detail; every clause carries information. The second sentence is dense and runs long, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be explained, yet the description still characterizes the return shape and the cross-source merge semantics that an agent must anticipate. Combined with annotations covering safety and the fully-documented parameter, nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single cids parameter is fully documented there, including the 25-per-call cap and cappedInputs reporting. The description only adds the 'one or more compounds' batch framing, so it neither adds much nor leaves gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — retrieve GHS hazard classification and safety data for compounds by CID — and enumerates the payload (signal word, pictograms, H-codes, P-codes). This clearly separates it from sibling tools like get_compound_details, get_compound_xrefs, or get_compound_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for invocation: compounds are keyed by CID, and names/SMILES must first be resolved with pubchem_search_compounds. It does not, however, state when to prefer this over pubchem_get_compound_details or what it excludes, so it stops short of explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubchem_get_compound_xrefsGet Compound Cross-ReferencesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
cidYesPubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.
offsetNoZero-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.
xrefTypesYesCross-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 the value most source records agree on), EC (European Community numbers, ordered and counted the same way), RN (every registry number PubChem associates with the record, unranked: the CAS number alongside deprecated and related CAS RNs, CAS RNs of other substances mapped to the structure, and EC numbers), RegistryID (DSSTox/EPA registry numbers), PatentID. Numeric IDs: PubMedID, GeneID (NCBI Gene — use it for gene/protein associations), ProteinGI (legacy NCBI Protein GI; PubChem currently returns no data for it, so use GeneID instead), TaxonomyID.
maxPerTypeNoMax 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; use offset to reach the ones past this page. Total count always reported. Default: 50.

Output Schema

NameRequiredDescription
cidNoPubChem Compound ID.
errorNoPresent when the call failed. Absent on success.
xrefsNoCross-references grouped by type, one group per requested type that loaded. A type listed in failedTypes is absent — its IDs are unknown, not empty.
noticeNoGuidance 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 serves no ProteinGI data). Absent when this page is complete and non-empty.
offsetNoZero-based index of the first ID returned within each type.
truncatedNoTrue 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.
nextOffsetNoOffset to pass on the next call to continue past this page. Omitted when no requested type has further IDs.
failedTypesNoRequested 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 limit, or 5xx), and the notice names those; a type PubChem rejected fails the same way again.
cappedInputsNoInputs 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.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses rich behavior: per-type paging capped at maxPerType with total count reported, offset semantics, type-specific ordering (PubMed newest-first, CAS/EC most-attested-first), and partial-failure handling via failedTypes. This is exactly the behavioral context an agent needs to invoke and interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the core purpose before moving into paging, ordering, and failure semantics. It is long but every sentence carries operational information; slight tightening around ordering could improve it, but it remains well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 xref types, paging, partial failures) and the presence of an output schema, the description covers all decision-critical behavior. An agent knows what it returns, how paging works, and how failures are surfaced without needing to inspect the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents cid, offset, maxPerType, and xrefTypes in detail. The description reinforces paging and failure behavior but adds no new syntax or format details beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get external database cross-references for a compound,' then enumerates the exact types returned (PubMed, patent IDs, gene associations, CAS/EC numbers, registry numbers, taxonomy IDs). This clearly distinguishes the tool from siblings like compound details, bioactivity, safety, or image retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes clear context for when to use the tool by listing the xref categories it retrieves. It does not explicitly name alternative sibling tools or state when not to use it, but the scope is sufficiently concrete that an agent can infer it is the right call for cross-reference data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubchem_get_summaryGet Entity SummaryA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
entityTypeYesEntity type. Determines ID format and returned fields.
identifiersYesEntity 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 unprocessed, in input order, and reported in cappedInputs. More than 1000 pieces in all fails the call. ID form depends on entityType: - assay: AID, a positive integer, e.g. ["1000"] - gene: NCBI Gene ID, a positive integer, e.g. ["1956"] - protein: UniProt accession, e.g. ["P00533"] - taxonomy: NCBI Taxonomy ID, a positive integer, e.g. ["9606"] For assay, gene, and taxonomy, a piece that is not a positive integer up to 2147483647 written in digits is marked invalid and not looked up.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoRecovery guidance when identifiers were invalid or not found.
summariesNoSummary results, one per identifier piece looked up, in input order.
entityTypeNoEntity type queried.
foundCountNoIdentifiers resolved to a summary.
unprocessedNoIdentifier 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.
cappedInputsNoInputs 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.
requestedCountNoIdentifier pieces requested, counted after comma splitting.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and open-world semantics, so the description's contribution is the truncation behavior: lookups beyond 10 are not dropped but surfaced in 'unprocessed' for a follow-up call. That is genuinely useful partial-result disclosure an agent could not infer from the annotations, though return shape and error behavior are left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose and then the entity-type scope before the operational cap. Slightly awkward phrasing ('returned in unprocessed for a follow-up call') costs a point but nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations and a full output schema present, the description only needs to convey scope and the batching gotcha, and it does. The gap is that it never says why one would pick this summary tool over the compound-focused siblings, which given nine sibling tools is a meaningful omission rather than a fatal one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already spells out the per-call cap, the comma-splitting rule, the 1000-piece limit, and the per-entityType ID formats. The description restates the 10-item cap and the 'unprocessed' passthrough without adding format or validation detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get descriptive summaries for PubChem entities by ID') and enumerates the entity types plus their ID forms, which distinguishes it from the compound-centric siblings. It does not explicitly contrast itself with sibling tools such as pubchem_search_assays or pubchem_get_bioactivity, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The batching rule ('Up to 10 per call; identifiers past that are returned in unprocessed for a follow-up call') implies a paginate-by-repeating-call workflow, but there is no explicit statement of when to choose this tool over the search or detail siblings. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubchem_search_assaysSearch AssaysA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
offsetNoZero-based index of the first AID to return. Pass the nextOffset from a previous call to read the following page. Default: 0.
maxResultsNoMax 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 reach the ones past this page. Default: 50.
targetTypeYesTarget 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' orthologs. "geneid" accepts NCBI Gene IDs. "proteinaccession" accepts UniProt accessions. "geneid" and "proteinaccession" each pin one protein, but return overlapping, different assay sets for it, since PubChem records some assays under only one of the two identifiers; for a complete list for one protein, union both.
targetQueryYesTarget identifier. Examples: "EGFR" (genesymbol), "Epidermal growth factor receptor" (proteinname), "1956" (geneid), "P00533" (proteinaccession; uppercased before lookup, except a PDB chain ID such as the "A" in "1ZHH_A", which is kept as given).

Output Schema

NameRequiredDescription
capNoThe page size applied: maxResults, or the per-call cap when maxResults exceeds it.
aidsNoPubChem Assay IDs.
errorNoPresent when the call failed. Absent on success.
shownNoAIDs returned on this page.
noticeNoRecovery 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.
offsetNoZero-based index of the first AID returned.
truncatedNoTrue when matching AIDs remain past this page.
nextOffsetNoOffset to pass on the next call to continue past this page. Omitted when no further AIDs match.
targetTypeNoTarget identifier type used: genesymbol, proteinname, geneid, or proteinaccession.
totalFoundNoTotal AIDs found for this target, across all pages.
targetQueryNoTarget identifier searched.
cappedInputsNoInputs 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.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, open-world, so the bar is lower; the description adds real value by disclosing pagination mechanics ("page past maxResults with offset") and the shape of the return (a page of AIDs). It does not mention the 200-result cap, but that quirk is documented in the schema, so the remaining gap is small.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose, accepted inputs, return/pagination plus follow-up. Front-loaded with the verb and no redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter, annotated, output-schema-backed search tool, the description covers purpose, input forms, result shape, and the pagination/follow-up path. Nothing an agent needs before calling it is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents targetType semantics, the cross-identifier overlap, and the 200 cap in detail. The description restates the four accepted identifier forms with an EGFR example but adds no syntax or behavior beyond what the schema supplies, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — "Find PubChem bioassays associated with a biological target" — and immediately constrains the identifier space (gene symbol, protein name, Gene ID, UniProt). An agent can tell this apart from pubchem_get_bioactivity and pubchem_search_compounds from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear entry conditions (search by one of four target identifier forms) and names the logical next step ("explored further with pubchem_get_summary"). It stops short of explicitly excluding alternatives, e.g. when to prefer this over fetching bioactivity for a known AID, but the intended flow is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubchem_search_compoundsSearch CompoundsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
aidNoRequired 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.
queryNoRequired 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").
offsetNoZero-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 searches fetch only the requested page, so both page to the end of their matches. Formula, substructure, superstructure, and similarity searches have to ask PubChem for offset + maxResults records to reach a page, so deep pages cost progressively more upstream: those four accept an offset up to 10000. Default: 0.
formulaNoRequired for formula search. Molecular formula in Hill notation (e.g. "C6H12O6", "CaH2O2").
queryTypeNoRequired for structure/similarity searches. Format of the query: "smiles" or "cid".
thresholdNoSimilarity search only. Minimum Tanimoto similarity (70-100). 90+ for close analogs, 70-80 for scaffold hops. Default: 90.
activeOnlyNoAssay search only. When true (default), lists only the compounds the assay marked active; false lists every compound it tested.
maxResultsNoMaximum 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.
propertiesNoOptional: fetch these properties for each result, avoiding a follow-up details call. E.g. ["MolecularFormula", "MolecularWeight", "CanonicalSMILES"].
searchTypeYesSearch strategy; each mode needs its own fields. "identifier": name/SMILES/InChI/InChIKey lookup — requires identifierType and identifiers. "formula": molecular formula — requires formula. "substructure": find compounds containing the query as a substructure. "superstructure": find compounds that are themselves substructures of the query. "similarity": 2D Tanimoto similarity to the query. substructure, superstructure, and similarity require query and queryType. "assay": compounds tested in a PubChem bioassay — requires aid; activeOnly (default true) keeps only the compounds the assay marked active.
identifiersNoRequired 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, and reported in cappedInputs. Examples: ["aspirin", "ibuprofen"] for name, ["CC(=O)OC1=CC=CC=C1C(=O)O"] for SMILES, ["InChI=1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2-5H,1H3,(H,11,12)"] for inchi (sent exactly as written, case kept), ["BSYNRYMUTXBXSQ-UHFFFAOYSA-N"] for inchikey (27-char block format; uppercased before lookup, any case accepted).
identifierTypeNoRequired for identifier search. Type of chemical identifier: "name", "smiles", "inchi" (a full InChI string, case-sensitive), or "inchikey".
allowOtherElementsNoFormula search only. When true, includes compounds with additional elements beyond the formula.

Output Schema

NameRequiredDescription
capNoThe page size applied: maxResults, or the per-call cap when maxResults exceeds it.
errorNoPresent when the call failed. Absent on success.
shownNoCIDs returned on this page.
noticeNoRecovery 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 could not be interpreted, when identifiers collided on one CID, when further pages remain, or when a bounded search reached the offset ceiling. Absent when this page is complete and every identifier resolved to its own CID.
offsetNoZero-based index of the first CID returned.
resultsNoMatching compounds.
truncatedNoTrue when matching CIDs remain past this page.
activeOnlyNoAssay search only: true when the list holds only the compounds the assay marked active, false when it holds every compound tested.
nextOffsetNoOffset 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 offset ceiling (truncated stays true, and the notice says how to narrow the search and names the page at offset 10000 when it still reaches further matches).
searchTypeNoSearch strategy used: identifier, formula, substructure, superstructure, similarity, or assay.
totalFoundNoExact 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 those, so totalFoundAtLeast reports a floor instead.
unprocessedNoIdentifier-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.
cappedInputsNoInputs 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.
totalFoundAtLeastNoLower 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.
unresolvedIdentifiersNoIdentifier-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 resolved and for non-identifier searches.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint, idempotentHint, openWorldHint), so the description's added value is in paging and cost behavior: "reach matches past maxResults with offset" and the warning that deep pages cost progressively more upstream. The per-call caps (25 identifiers, 200 results) live in the schema rather than the description, so it adds context but not everything.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the capability surface, then return/paging behavior, then the hydration tip. No filler. The first sentence is long because it enumerates six modes, but every clause carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, six-mode tool with a full output schema and complete annotation coverage, the description supplies exactly what structured fields cannot: the mental model linking modes, the paging model, and the hydration optimization. Nothing an agent needs in order to select a mode and page correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every one of the 13 parameters in detail, including per-mode requirements and cap behavior. The description restates the high-level semantics ("up to 25 per call", "Hill notation", "2D Tanimoto similarity") but adds no syntax or format detail beyond what the schema provides. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ("Search PubChem for chemical compounds") and then enumerates every supported search strategy: identifier, formula, substructure/superstructure, similarity, and assay. It also states the return shape ("a page of CIDs") and names the sibling it can substitute for (pubchem_get_compound_details), so an agent can distinguish it from the ten sibling tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for each mode and explicitly frames one alternative route: hydrating with `properties` "to avoid a follow-up pubchem_get_compound_details call." That is real routing guidance. It stops short of explicit when-not-to-use guidance (e.g. when to call pubchem_search_assays instead of searchType=assay), so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.8.0
    • Changedpubchem_get_bioactivity2 fields changed
      • changedInput schema / properties / targetAccession / description
        Previous value: -"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 table pairs with it. Uppercased before matching; a PDB chain ID (the \"A\" in \"1ZHH_A\") is kept as given. With targetGeneId, both must name the same target — when the table ties them to different targets, nothing matches. Obtain accessions from pubchem_search_assays or the targetAccession field of an unfiltered result here."New value: +"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 table pairs with it. Uppercased before matching; a PDB chain ID (the \"A\" in \"1ZHH_A\") is kept as given. With targetGeneId, both must name the same target — when the table ties them to different targets, nothing matches. Obtain accessions from an assay's targets in pubchem_get_summary (entityType \"assay\"), the accession:X in a pubchem_get_compound_interactions target entry's partner, or the targetAccession field of a result here without a target filter."
      • changedInput schema / properties / targetGeneId / description
        Previous value: -"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 carrying only P23219 when another row pairs the two). Obtain Gene IDs from pubchem_search_assays or the targetGeneId field of an unfiltered result here. Combine with outcomeFilter=\"active\" to answer \"is this compound active against target T?\"."New value: +"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 carrying only P23219 when another row pairs the two). Obtain Gene IDs from the GeneID:N in a pubchem_get_compound_interactions target entry's partner (kinds: [\"target\"]) or the targetGeneId field of a result here without a target filter (rows from untargeted screens carry none). Combine with outcomeFilter=\"active\" to answer \"is this compound active against target T?\"."
    • Changedpubchem_get_compound_interactions1 field changed
      • changedOutput schema / properties / failedKinds / description
        Previous value: -"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 or upstream error can clear, while a refusal from PubChem's SDQ service (drug-drug) does not."New value: +"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, network error, unreadable response, or upstream 5xx other than 501 can clear, while an HTTP 400, 403, or 501, a response in a shape the server does not expect, or a refusal from PubChem's SDQ service (drug-drug) does not."
    • Changedpubchem_search_assays3 fields changed
      • changedInput schema / properties / targetType / description
        Previous value: -"Target identifier type. \"genesymbol\" and \"proteinname\" accept text names. \"geneid\" accepts NCBI Gene IDs. \"proteinaccession\" accepts UniProt accessions."New value: +"Target 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' orthologs. \"geneid\" accepts NCBI Gene IDs. \"proteinaccession\" accepts UniProt accessions. \"geneid\" and \"proteinaccession\" each pin one protein, but return overlapping, different assay sets for it, since PubChem records some assays under only one of the two identifiers; for a complete list for one protein, union both."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `blank_target_query`: targetQuery is empty or whitespace-only. `invalid_geneid_query`: targetType is \"geneid\" but targetQuery contains characters other than digits. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `blank_target_query`: targetQuery is empty or whitespace-only. `invalid_geneid_query`: targetType is \"geneid\" but targetQuery contains characters other than digits. `target_query_rejected`: PubChem refused the target lookup with HTTP 400 — its answer for a targetQuery carrying a line break, another C0 control character other than tab and NUL, or DEL. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "blank_target_query",
        -  "invalid_geneid_query"
        -]New value: +[
        +  "blank_target_query",
        +  "invalid_geneid_query",
        +  "target_query_rejected"
        +]
    • Changedpubchem_search_compounds1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted. `missing_formula`: searchType is \"formula\" but the formula field was omitted or blank. `missing_structure_args`: substructure/superstructure/similarity search with query or queryType omitted, or a blank query. `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not an integer CID from 1 to 2147483647. `offset_ceiling_exceeded`: formula, substructure, superstructure, or similarity search with offset above 10000. `missing_aid`: searchType is \"assay\" but aid was omitted. `aid_not_found`: assay search where PubChem has no live assay with the given AID. `identifier_rejected`: identifier search where PubChem rejected every identifier in the batch as unreadable (HTTP 400) — for SMILES or InChI, a string it could not standardize into a structure. A batch with any other outcome lists rejected inputs in unresolvedIdentifiers instead. `search_query_rejected`: PubChem failed a formula, substructure, superstructure, or similarity search with HTTP 500 \"Search status indicates failure\" — its answer for a malformed SMILES or formula, a SMILES with a \"*\" wildcard atom, or a CID with no record. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted. `missing_formula`: searchType is \"formula\" but the formula field was omitted or blank. `missing_structure_args`: substructure/superstructure/similarity search with query or queryType omitted, or a blank query. `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not an integer CID from 1 to 2147483647. `offset_ceiling_exceeded`: formula, substructure, superstructure, or similarity search with offset above 10000. `missing_aid`: searchType is \"assay\" but aid was omitted. `aid_not_found`: assay search where PubChem has no live assay with the given AID. `identifier_rejected`: identifier search where PubChem rejected every identifier in the batch as unreadable (HTTP 400) — for SMILES or InChI, a string it could not standardize into a structure. A batch with any other outcome lists rejected inputs in unresolvedIdentifiers instead. `search_query_rejected`: PubChem failed a formula, substructure, superstructure, or similarity search with HTTP 500 \"Search status indicates failure\" — its answer for a malformed SMILES or formula, a SMILES with a \"*\" wildcard atom, or a CID with no record — or refused any of these searches with HTTP 400, as it does a formula carrying a line break, another C0 control character other than tab and NUL, or DEL. Other values are possible when a failure originates below the handler."
  2. 5 tool updatesv0.7.1
    • Changedpubchem_get_bioactivity5 fields changed
      • addedInput schema / properties / assayType
        Added value: +{
        +  "description": "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\". Matched against PubChem's Assay Type regardless of case; an assay with no recorded type matches none. Combines with outcomeFilter and the target filters — an assay must pass all of them. Omit to keep every type.",
        +  "items": {
        +    "enum": [
        +      "confirmatory",
        +      "screening",
        +      "summary",
        +      "other"
        +    ],
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / assayTypeFilter
        Added value: +{
        +  "description": "Assay types kept, comma-separated (e.g. \"confirmatory, summary\"), when assayType is set.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / filteredCount / description
        Previous value: -"Exact number of assays matching the outcome and target filters, across all pages."New value: +"Exact number of assays matching the outcome, target, and assay-type filters, across all pages."
      • addedOutput schema / properties / results / items / properties / assayType
        Added value: +{
        +  "description": "PubChem's assay type as written: Confirmatory, Screening, Summary, or Other. Omitted when PubChem records none.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / pmids
        Added value: +{
        +  "description": "PubMed IDs of the publications the assay cites, highest (most recently assigned) first. Omitted when it cites none.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
    • Changedpubchem_get_compound_interactions9 fields changed
      • changedInput schema / properties / kinds / default
        Previous value: -[
        -  "drug-drug"
        -]New value: +[
        +  "drug-food"
        +]
      • changedInput schema / properties / kinds / description
        Previous value: -"Interaction kinds to fetch. \"drug-drug\" (interactions with other drugs), \"drug-food\" (dietary interactions), \"target\" (binding/activity against molecular targets). \"drug-drug\" and \"target\" come from PubChem's SDQ service, which can refuse automated requests; \"drug-food\" comes from PUG View. Per-target activity is also available from pubchem_get_bioactivity. Default: [\"drug-drug\"]."New value: +"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 with it, and one per identifier it never pairs, so a Gene ID and an accession that no row pairs are separate entries even when they name the same protein), \"drug-drug\" (interactions with other drugs, from PubChem's SDQ service, which refuses automated requests, so it is reported in failedKinds). Default: [\"drug-food\"]."
      • changedInput schema / properties / offset / description
        Previous value: -"Zero-based start position within each requested kind, counted in source records rather than returned entries. The same offset applies to every kind in the call, and the kinds advance at different rates — when paging past the first page, request one kind per call and pass that kind's nextOffset. Default: 0."New value: +"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 advance at different rates — when paging past the first page, request one kind per call and pass that kind's nextOffset. Default: 0."
      • changedOutput schema / properties / entries / items / properties / partner / description
        Previous value: -"Interacting compound, food, or target name as the source reports it."New value: +"Interacting compound as the source reports it. For a target: its gene or protein name and organism, then the identifier pubchem_get_bioactivity filters on (GeneID:N → targetGeneId, accession:X → targetAccession); the identifier alone when no name resolves. A target whose identifiers join several Gene IDs is named by the accession they share and says \"group of N Gene IDs\"."
      • changedOutput schema / properties / entries / items / properties / source / description
        Previous value: -"Originating source (e.g. \"DrugBank\", \"BindingDB\")."New value: +"Originating source (e.g. \"DrugBank\", \"PubChem BioAssay\")."
      • changedOutput schema / properties / entries / items / properties / text / description
        Previous value: -"The interaction statement."New value: +"The interaction statement. For a target: the assays naming it by outcome and its most potent Active value with that AID, in µM."
      • changedOutput schema / properties / failedKinds / description
        Previous value: -"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 or upstream error can clear, while a refusal from PubChem's SDQ service (drug-drug, target) does not."New value: +"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 or upstream error can clear, while a refusal from PubChem's SDQ service (drug-drug) does not."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when a kind failed, when no interaction data was found, when the offset runs past every requested kind, or when further pages remain. Absent when this page is complete and every kind resolved."New value: +"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 this page is complete and every kind resolved."
      • changedOutput schema / properties / paging / items / properties / totalRecords / description
        Previous value: -"Source records available for this kind, across all pages. Entries are derived from these records and can be fewer: a \"target\" record naming no molecular target and a \"drug-drug\" record carrying no statement both yield nothing, and duplicate measurements collapse within a page. Pages divide the records, not the entries, so a duplicate split across two pages is reported on both."New value: +"Records available for this kind, across all pages: interaction records for drug-drug and drug-food, molecular targets for target. Entries are derived from these records and can be fewer: a drug-drug record carrying no statement yields nothing. Pages divide the records, not the entries."
    • Changedpubchem_get_compound_xrefs8 fields changed
      • changedInput schema / properties / xrefTypes / description
        Previous value: -"Cross-reference types to retrieve. String IDs: RegistryID (DSSTox/EPA registry numbers), RN (CAS numbers), PatentID. Numeric IDs: PubMedID, GeneID (NCBI Gene), ProteinGI (legacy NCBI Protein GI), TaxonomyID."New value: +"Cross-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 the value most source records agree on), EC (European Community numbers, ordered and counted the same way), RN (every registry number PubChem associates with the record, unranked: the CAS number alongside deprecated and related CAS RNs, CAS RNs of other substances mapped to the structure, and EC numbers), RegistryID (DSSTox/EPA registry numbers), PatentID. Numeric IDs: PubMedID, GeneID (NCBI Gene — use it for gene/protein associations), ProteinGI (legacy NCBI Protein GI; PubChem currently returns no data for it, so use GeneID instead), TaxonomyID."
      • changedInput schema / properties / xrefTypes / items / enum
        Previous value: -[
        -  "RegistryID",
        -  "RN",
        -  "PubMedID",
        -  "PatentID",
        -  "GeneID",
        -  "ProteinGI",
        -  "TaxonomyID"
        -]New value: +[
        +  "RegistryID",
        +  "RN",
        +  "PubMedID",
        +  "PatentID",
        +  "GeneID",
        +  "ProteinGI",
        +  "TaxonomyID",
        +  "CAS",
        +  "EC"
        +]
      • addedOutput schema / properties / failedTypes
        Added value: +{
        +  "description": "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 limit, or 5xx), and the notice names those; a type PubChem rejected fails the same way again.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery guidance when every requested xref type returned zero IDs, when the offset runs past every type, or when further pages remain. Absent when this page is complete and non-empty."New value: +"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 serves no ProteinGI data). Absent when this page is complete and non-empty."
      • changedOutput schema / properties / xrefs / description
        Previous value: -"Cross-references grouped by type."New value: +"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."
      • changedOutput schema / properties / xrefs / items / properties / ids / description
        Previous value: -"Cross-reference IDs on this page (window of offset + maxPerType). PubMedID is sorted numerically descending, so page one holds the highest, most recently assigned PMIDs; GeneID, ProteinGI and TaxonomyID numerically ascending; RegistryID, RN and PatentID keep PubChem's order."New value: +"Cross-reference IDs on this page (window of offset + maxPerType). PubMedID is sorted numerically descending, so page one holds the highest, most recently assigned PMIDs; GeneID, ProteinGI and TaxonomyID numerically ascending; CAS and EC by the number of source records that deposited each, most first (ties in PubChem's order), so ids[0] is the value most source records agree on; RegistryID, RN and PatentID keep PubChem's order."
      • addedOutput schema / properties / xrefs / items / properties / sourceCounts
        Added value: +{
        +  "description": "CAS and EC only: how many source records deposited each ID on this page, aligned with ids — sourceCounts[i] is the count for ids[i]. One source can deposit several records, so this counts records, not distinct source names. More than one ID means the source records disagree; the counts show by how much.",
        +  "items": {
        +    "description": "Number of source records that deposited the ID at this index.",
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / xrefs / items / properties / type / description
        Previous value: -"Cross-reference type: RegistryID, RN, PubMedID, PatentID, GeneID, ProteinGI, or TaxonomyID."New value: +"Cross-reference type: CAS, EC, RN, RegistryID, PubMedID, PatentID, GeneID, ProteinGI, or TaxonomyID. PubChem currently returns no data for ProteinGI; GeneID carries gene/protein associations."
    • Changedpubchem_get_summary3 fields changed
      • changedInput schema / properties / identifiers / description
        Previous value: -"Entity 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 unprocessed, in input order, and reported in cappedInputs. More than 1000 pieces in all fails the call. ID form depends on entityType:\n- assay: AID, a positive integer, e.g. [\"1000\"]\n- gene: NCBI Gene ID, a positive integer, e.g. [\"1956\"]\n- protein: UniProt accession, e.g. [\"P00533\"]\n- taxonomy: NCBI Taxonomy ID, a positive integer, e.g. [\"9606\"]\nFor assay, gene, and taxonomy, a piece that is not a positive integer written in digits is marked invalid and not looked up."New value: +"Entity 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 unprocessed, in input order, and reported in cappedInputs. More than 1000 pieces in all fails the call. ID form depends on entityType:\n- assay: AID, a positive integer, e.g. [\"1000\"]\n- gene: NCBI Gene ID, a positive integer, e.g. [\"1956\"]\n- protein: UniProt accession, e.g. [\"P00533\"]\n- taxonomy: NCBI Taxonomy ID, a positive integer, e.g. [\"9606\"]\nFor assay, gene, and taxonomy, a piece that is not a positive integer up to 2147483647 written in digits is marked invalid and not looked up."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `too_many_identifiers`: Comma splitting yields more than 1000 identifier pieces. `invalid_identifier`: No identifier piece is usable: every piece is blank, or, for assay, gene, or taxonomy, not a positive integer. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `too_many_identifiers`: Comma splitting yields more than 1000 identifier pieces. `invalid_identifier`: No identifier piece is usable: every piece is blank, or, for assay, gene, or taxonomy, not a positive integer up to 2147483647. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / summaries / items / properties / data / properties / method / description
        Previous value: -"Assay method as PubChem labels it, e.g. \"confirmatory\" (dose-response) or \"screening\" (assay summaries). Omitted when PubChem records none."New value: +"Assay method as PubChem labels it (assay summaries): \"confirmatory\" (dose-response), \"screening\" (primary screen), \"summary\", or \"other\". Omitted when PubChem records none."
    • Changedpubchem_search_compounds10 fields changed
      • changedInput schema / properties / identifierType / description
        Previous value: -"Required for identifier search. Type of chemical identifier: \"name\", \"smiles\", or \"inchikey\"."New value: +"Required for identifier search. Type of chemical identifier: \"name\", \"smiles\", \"inchi\" (a full InChI string, case-sensitive), or \"inchikey\"."
      • changedInput schema / properties / identifierType / enum
        Previous value: -[
        -  "name",
        -  "smiles",
        -  "inchikey"
        -]New value: +[
        +  "name",
        +  "smiles",
        +  "inchi",
        +  "inchikey"
        +]
      • changedInput schema / properties / identifiers / description
        Previous value: -"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, and reported in cappedInputs. Examples: [\"aspirin\", \"ibuprofen\"] for name, [\"CC(=O)OC1=CC=CC=C1C(=O)O\"] for SMILES, [\"BSYNRYMUTXBXSQ-UHFFFAOYSA-N\"] for inchikey (27-char block format; uppercased before lookup, any case accepted)."New value: +"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, and reported in cappedInputs. Examples: [\"aspirin\", \"ibuprofen\"] for name, [\"CC(=O)OC1=CC=CC=C1C(=O)O\"] for SMILES, [\"InChI=1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2-5H,1H3,(H,11,12)\"] for inchi (sent exactly as written, case kept), [\"BSYNRYMUTXBXSQ-UHFFFAOYSA-N\"] for inchikey (27-char block format; uppercased before lookup, any case accepted)."
      • changedInput schema / properties / offset / description
        Previous value: -"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 searches fetch only the requested page; formula, substructure, superstructure, and similarity searches have to ask PubChem for offset + maxResults records to reach a page, so deep pages cost progressively more upstream — hence the 10000 ceiling. Default: 0."New value: +"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 searches fetch only the requested page, so both page to the end of their matches. Formula, substructure, superstructure, and similarity searches have to ask PubChem for offset + maxResults records to reach a page, so deep pages cost progressively more upstream: those four accept an offset up to 10000. Default: 0."
      • changedInput schema / properties / offset / maximum
        Previous value: -10000New value: +9007199254740991
      • changedInput schema / properties / searchType / description
        Previous value: -"Search strategy; each mode needs its own fields. \"identifier\": name/SMILES/InChIKey lookup — requires identifierType and identifiers. \"formula\": molecular formula — requires formula. \"substructure\": find compounds containing the query as a substructure. \"superstructure\": find compounds that are themselves substructures of the query. \"similarity\": 2D Tanimoto similarity to the query. substructure, superstructure, and similarity require query and queryType. \"assay\": compounds tested in a PubChem bioassay — requires aid; activeOnly (default true) keeps only the compounds the assay marked active."New value: +"Search strategy; each mode needs its own fields. \"identifier\": name/SMILES/InChI/InChIKey lookup — requires identifierType and identifiers. \"formula\": molecular formula — requires formula. \"substructure\": find compounds containing the query as a substructure. \"superstructure\": find compounds that are themselves substructures of the query. \"similarity\": 2D Tanimoto similarity to the query. substructure, superstructure, and similarity require query and queryType. \"assay\": compounds tested in a PubChem bioassay — requires aid; activeOnly (default true) keeps only the compounds the assay marked active."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted. `missing_formula`: searchType is \"formula\" but the formula field was omitted or blank. `missing_structure_args`: substructure/superstructure/similarity search with query or queryType omitted, or a blank query. `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not an integer CID from 1 to 2147483647. `missing_aid`: searchType is \"assay\" but aid was omitted. `aid_not_found`: assay search where PubChem has no live assay with the given AID. `identifier_rejected`: identifier search where PubChem rejected every identifier in the batch as unreadable (HTTP 400) — for SMILES, a string it could not standardize into a structure. A batch with any other outcome lists rejected inputs in unresolvedIdentifiers instead. `search_query_rejected`: PubChem failed a formula, substructure, superstructure, or similarity search with HTTP 500 \"Search status indicates failure\" — its answer for a malformed SMILES or formula, a SMILES with a \"*\" wildcard atom, or a CID with no record. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted. `missing_formula`: searchType is \"formula\" but the formula field was omitted or blank. `missing_structure_args`: substructure/superstructure/similarity search with query or queryType omitted, or a blank query. `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not an integer CID from 1 to 2147483647. `offset_ceiling_exceeded`: formula, substructure, superstructure, or similarity search with offset above 10000. `missing_aid`: searchType is \"assay\" but aid was omitted. `aid_not_found`: assay search where PubChem has no live assay with the given AID. `identifier_rejected`: identifier search where PubChem rejected every identifier in the batch as unreadable (HTTP 400) — for SMILES or InChI, a string it could not standardize into a structure. A batch with any other outcome lists rejected inputs in unresolvedIdentifiers instead. `search_query_rejected`: PubChem failed a formula, substructure, superstructure, or similarity search with HTTP 500 \"Search status indicates failure\" — its answer for a malformed SMILES or formula, a SMILES with a \"*\" wildcard atom, or a CID with no record. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "missing_identifier_args",
        -  "missing_formula",
        -  "missing_structure_args",
        -  "invalid_cid_query",
        -  "missing_aid",
        -  "aid_not_found",
        -  "identifier_rejected",
        -  "search_query_rejected"
        -]New value: +[
        +  "missing_identifier_args",
        +  "missing_formula",
        +  "missing_structure_args",
        +  "invalid_cid_query",
        +  "offset_ceiling_exceeded",
        +  "missing_aid",
        +  "aid_not_found",
        +  "identifier_rejected",
        +  "search_query_rejected"
        +]
      • changedOutput schema / properties / nextOffset / description
        Previous value: -"Offset to pass on the next call to continue past this page. Omitted when no further matches remain."New value: +"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 offset ceiling (truncated stays true, and the notice says how to narrow the search and names the page at offset 10000 when it still reaches further matches)."
      • changedOutput schema / properties / notice / description
        Previous value: -"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 could not be interpreted, when identifiers collided on one CID, or when further pages remain. Absent when this page is complete and every identifier resolved to its own CID."New value: +"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 could not be interpreted, when identifiers collided on one CID, when further pages remain, or when a bounded search reached the offset ceiling. Absent when this page is complete and every identifier resolved to its own CID."
  3. 10 tool updatesv0.7.0
    • Changedpubchem_get_bioactivity17 fields changed
      • changedInput schema / properties / cid / maximum
        Previous value: -9007199254740991New value: +2147483647
      • changedInput schema / properties / maxResults / description
        Previous value: -"Max assay results to return per page (1-100). Well-studied compounds have thousands of records; use offset to reach the ones past this page. Default: 20."New value: +"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 offset to reach the ones past this page. Default: 20."
      • changedInput schema / properties / maxResults / maximum
        Previous value: -100New value: +1000
      • changedInput schema / properties / outcomeFilter / description
        Previous value: -"Filter by activity outcome. \"active\" shows only assays where the compound showed activity — most useful for understanding biological profile. Default: \"all\"."New value: +"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 targets (in otherTargets) do not count. \"active\" keeps assays where that outcome is Active — most useful for understanding biological profile. Default: \"all\"."
      • changedInput schema / properties / targetAccession / description
        Previous value: -"Filter to assays against this target protein accession (UniProt/GenBank), e.g. \"P35354\". Obtain accessions from pubchem_search_assays or the targetAccession field of an unfiltered result here."New value: +"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 table pairs with it. Uppercased before matching; a PDB chain ID (the \"A\" in \"1ZHH_A\") is kept as given. With targetGeneId, both must name the same target — when the table ties them to different targets, nothing matches. Obtain accessions from pubchem_search_assays or the targetAccession field of an unfiltered result here."
      • changedInput schema / properties / targetGeneId / description
        Previous value: -"Filter to assays against this NCBI Gene ID. Obtain Gene IDs from pubchem_search_assays or the targetGeneId field of an unfiltered result here. Combine with outcomeFilter=\"active\" to answer \"is this compound active against target T?\"."New value: +"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 carrying only P23219 when another row pairs the two). Obtain Gene IDs from pubchem_search_assays or the targetGeneId field of an unfiltered result here. Combine with outcomeFilter=\"active\" to answer \"is this compound active against target T?\"."
      • changedInput schema / properties / targetGeneId / maximum
        Previous value: -9007199254740991New value: +2147483647
      • changedOutput schema / properties / activeCount / description
        Previous value: -"Assays with \"Active\" outcome."New value: +"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."
      • changedOutput schema / properties / cap / description
        Previous value: -"The maxResults cap that was applied."New value: +"The page size applied: maxResults, or the per-call cap when maxResults exceeds it."
      • addedOutput schema / properties / cappedInputs
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One input served at its per-call cap.",
        +    "properties": {
        +      "input": {
        +        "description": "Input name, e.g. \"maxResults\" or \"cids\".",
        +        "type": "string"
        +      },
        +      "requested": {
        +        "description": "Value requested: the page size, or the number of IDs in the batch.",
        +        "type": "number"
        +      },
        +      "served": {
        +        "description": "Value served: the per-call cap.",
        +        "type": "number"
        +      },
        +      "unprocessed": {
        +        "description": "ID batches only: IDs past the cap, listed in unprocessed in input order.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "input",
        +      "requested",
        +      "served"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / inactiveCount / description
        Previous value: -"Assays with \"Inactive\" outcome."New value: +"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."
      • changedOutput schema / properties / results / items / properties / activityValues / description
        Previous value: -"Quantitative activity measurements."New value: +"Quantitative activity measurements against the reported target."
      • addedOutput schema / properties / results / items / properties / otherTargets
        Added value: +{
        +  "description": "The assay's other targets, each with its own outcome and measurements. Present only for an assay whose rows name more than one target.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Another target of the assay, with its own outcome and values.",
        +    "properties": {
        +      "accession": {
        +        "description": "Protein accession. Omitted when the row names none.",
        +        "type": "string"
        +      },
        +      "activityValues": {
        +        "description": "Quantitative activity measurements against this target.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "Quantitative activity measurement entry.",
        +          "properties": {
        +            "name": {
        +              "description": "Measurement name (e.g. IC50, EC50, Ki). Omitted when not reported.",
        +              "type": "string"
        +            },
        +            "unit": {
        +              "description": "Unit of measurement (e.g. uM, nM). Omitted when not reported.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "Measured value.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "geneId": {
        +        "description": "NCBI Gene ID. Omitted when the row names none.",
        +        "type": "number"
        +      },
        +      "outcome": {
        +        "description": "Activity outcome against this target.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "outcome",
        +      "activityValues"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / results / items / properties / outcome / description
        Previous value: -"Activity outcome: Active, Inactive, Inconclusive, Unspecified."New value: +"Activity outcome against the reported target — the one a target filter matched, else the assay's first: Active, Inactive, Inconclusive, Unspecified."
      • changedOutput schema / properties / results / items / properties / targetAccession / description
        Previous value: -"Target protein accession (UniProt/GenBank)."New value: +"Reported target's protein accession (UniProt/RefSeq/GenBank/PDB chain)."
      • changedOutput schema / properties / results / items / properties / targetGeneId / description
        Previous value: -"Target NCBI Gene ID."New value: +"Reported target's NCBI Gene ID."
      • changedOutput schema / properties / targetFilter / description
        Previous value: -"Target filter applied (gene ID and/or protein accession), when set."New value: +"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 two inputs."
    • Changedpubchem_get_compound_3d_structure2 fields changed
      • changedInput schema / properties / cid / maximum
        Previous value: -9007199254740991New value: +2147483647
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_3d_structure`: PubChem has no computed 3D conformer for the requested CID. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_3d_structure`: PubChem returned 404 for the CID's 3D record, its answer both when the compound has no computed 3D conformer (common for very large molecules, mixtures, and undefined salts) and when no compound has the CID. Other values are possible when a failure originates below the handler."
    • Changedpubchem_get_compound_details17 fields changed
      • changedInput schema / properties / cids / description
        Previous value: -"PubChem Compound IDs to fetch (1-100). Resolve from names/SMILES with pubchem_search_compounds."New value: +"PubChem 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. Resolve from names/SMILES with pubchem_search_compounds."
      • changedInput schema / properties / cids / items / maximum
        Previous value: -9007199254740991New value: +2147483647
      • changedInput schema / properties / cids / maxItems
        Previous value: -100New value: +1000
      • changedInput schema / properties / maxDescriptions / description
        Previous value: -"Max number of distinct description entries per compound per page (1-20). PubChem returns near-duplicate summaries from many depositors; duplicates are collapsed before this cap applies. Default: 3."New value: +"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-duplicate summaries from many depositors; duplicates are collapsed before this cap applies. Default: 3."
      • changedInput schema / properties / maxDescriptions / maximum
        Previous value: -20New value: +1000
      • changedInput schema / properties / maxSynonyms / description
        Previous value: -"Max synonyms returned per compound per page (1-100). PubChem lists hundreds for common drugs; use synonymOffset to reach the ones past this page. Default: 20."New value: +"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; use synonymOffset to reach the ones past this page. Default: 20."
      • changedInput schema / properties / maxSynonyms / maximum
        Previous value: -100New value: +1000
      • addedOutput schema / properties / cappedInputs
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One input served at its per-call cap.",
        +    "properties": {
        +      "input": {
        +        "description": "Input name, e.g. \"maxResults\" or \"cids\".",
        +        "type": "string"
        +      },
        +      "requested": {
        +        "description": "Value requested: the page size, or the number of IDs in the batch.",
        +        "type": "number"
        +      },
        +      "served": {
        +        "description": "Value served: the per-call cap.",
        +        "type": "number"
        +      },
        +      "unprocessed": {
        +        "description": "ID batches only: IDs past the cap, listed in unprocessed in input order.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "input",
        +      "requested",
        +      "served"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / compounds / description
        Previous value: -"Compound detail records."New value: +"Compound detail records, one per CID fetched, in input order. CIDs past the per-call cap are in unprocessed instead."
      • changedOutput schema / properties / compounds / items / properties / classification / properties / atcCodes / description
        Previous value: -"ATC codes with hierarchical descriptions."New value: +"Human ATC codes in the order PubChem lists them. ATCvet codes and codes named only by a WHO Essential Medicines list are excluded."
      • changedOutput schema / properties / compounds / items / properties / classification / properties / atcCodes / items / description
        Previous value: -"ATC code entry with hierarchical description."New value: +"One human ATC code with its WHO hierarchy."
      • changedOutput schema / properties / compounds / items / properties / classification / properties / atcCodes / items / properties / code / description
        Previous value: -"ATC code."New value: +"ATC level-5 (substance) code, e.g. \"N02BA01\"."
      • changedOutput schema / properties / compounds / items / properties / classification / properties / atcCodes / items / properties / description / description
        Previous value: -"ATC code description."New value: +"WHO ATC name for the code, e.g. \"Acetylsalicylic acid\". Empty when PubChem lists the code without a WHO ATC hierarchy entry."
      • addedOutput schema / properties / compounds / items / properties / classification / properties / atcCodes / items / properties / levels
        Added value: +{
        +  "description": "Levels 1-4 of the code, top-down: anatomical main group, therapeutic subgroup, pharmacological subgroup, chemical subgroup. Empty when PubChem lists the code without a WHO ATC hierarchy entry.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One ancestor level of the code.",
        +    "properties": {
        +      "code": {
        +        "description": "ATC code at this level, e.g. \"N02\".",
        +        "type": "string"
        +      },
        +      "description": {
        +        "description": "WHO ATC name at this level, e.g. \"Analgesics\".",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "description"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / compounds / items / properties / classification / properties / atcCodes / items / required
        Previous value: -[
        -  "code",
        -  "description"
        -]New value: +[
        +  "code",
        +  "description",
        +  "levels"
        +]
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when this response is not the whole picture: a compound has further synonyms or descriptions past this page, or CIDs were skipped by the per-call fan-out limit. Per-compound totals are in compounds[].synonymsTotal / compounds[].descriptionsTotal; the skipped CIDs are in skippedCids."New value: +"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 left unfetched. Per-compound totals are in compounds[].synonymsTotal / compounds[].descriptionsTotal; the skipped CIDs are in skippedCids, the unfetched ones in unprocessed."
      • addedOutput schema / properties / unprocessed
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
    • Changedpubchem_get_compound_image1 field changed
      • changedInput schema / properties / cid / maximum
        Previous value: -9007199254740991New value: +2147483647
    • Changedpubchem_get_compound_interactions6 fields changed
      • changedInput schema / properties / cid / maximum
        Previous value: -9007199254740991New value: +2147483647
      • changedInput schema / properties / kinds / description
        Previous value: -"Interaction kinds to fetch. \"drug-drug\" (interactions with other drugs), \"drug-food\" (dietary interactions), \"target\" (binding/activity against molecular targets). Default: [\"drug-drug\"]."New value: +"Interaction kinds to fetch. \"drug-drug\" (interactions with other drugs), \"drug-food\" (dietary interactions), \"target\" (binding/activity against molecular targets). \"drug-drug\" and \"target\" come from PubChem's SDQ service, which can refuse automated requests; \"drug-food\" comes from PUG View. Per-target activity is also available from pubchem_get_bioactivity. Default: [\"drug-drug\"]."
      • changedInput schema / properties / maxEntries / description
        Previous value: -"Max entries per kind per page (1-50). Well-studied drugs have a long tail of interactions; use offset to reach the ones past this page. Default: 10."New value: +"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; use offset to reach the ones past this page. Default: 10."
      • changedInput schema / properties / maxEntries / maximum
        Previous value: -50New value: +1000
      • addedOutput schema / properties / cappedInputs
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One input served at its per-call cap.",
        +    "properties": {
        +      "input": {
        +        "description": "Input name, e.g. \"maxResults\" or \"cids\".",
        +        "type": "string"
        +      },
        +      "requested": {
        +        "description": "Value requested: the page size, or the number of IDs in the batch.",
        +        "type": "number"
        +      },
        +      "served": {
        +        "description": "Value served: the per-call cap.",
        +        "type": "number"
        +      },
        +      "unprocessed": {
        +        "description": "ID batches only: IDs past the cap, listed in unprocessed in input order.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "input",
        +      "requested",
        +      "served"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / failedKinds / description
        Previous value: -"Interaction kinds that could not be retrieved (comma-separated). The returned entries cover the kinds that succeeded; retry to re-attempt the failed ones."New value: +"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 or upstream error can clear, while a refusal from PubChem's SDQ service (drug-drug, target) does not."
    • Changedpubchem_get_compound_safety19 fields changed
      • changedInput schema / properties / cids / description
        Previous value: -"PubChem Compound IDs to fetch safety data for (1-25). Resolve from names/SMILES with pubchem_search_compounds."New value: +"PubChem 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 cappedInputs. Resolve from names/SMILES with pubchem_search_compounds."
      • changedInput schema / properties / cids / items / maximum
        Previous value: -9007199254740991New value: +2147483647
      • changedInput schema / properties / cids / maxItems
        Previous value: -25New value: +1000
      • addedOutput schema / properties / cappedInputs
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One input served at its per-call cap.",
        +    "properties": {
        +      "input": {
        +        "description": "Input name, e.g. \"maxResults\" or \"cids\".",
        +        "type": "string"
        +      },
        +      "requested": {
        +        "description": "Value requested: the page size, or the number of IDs in the batch.",
        +        "type": "number"
        +      },
        +      "served": {
        +        "description": "Value served: the per-call cap.",
        +        "type": "number"
        +      },
        +      "unprocessed": {
        +        "description": "ID batches only: IDs past the cap, listed in unprocessed in input order.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "input",
        +      "requested",
        +      "served"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery guidance when one or more CIDs returned no GHS data, listing the unrecognized CIDs to verify separately from the CIDs that exist but carry no deposited classification."New value: +"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 classifications are \"Not Classified\" verdicts, each separately."
      • changedOutput schema / properties / requestedCount / description
        Previous value: -"CIDs requested."New value: +"CIDs requested, including any past the per-call cap left in unprocessed."
      • changedOutput schema / properties / results / description
        Previous value: -"Safety results, one per requested CID (input order preserved)."New value: +"Safety results, one per CID looked up (input order preserved). CIDs past the per-call cap are in unprocessed instead."
      • addedOutput schema / properties / results / items / properties / ghs / properties / classifications
        Added value: +{
        +  "description": "Each source's classification in PubChem's order — EU harmonised, the ECHA C&L aggregate, single-company ECHA notifications, NITE-CMC revisions, and others. Sources can disagree; the top-level fields merge them.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One source's GHS classification, kept whole.",
        +    "properties": {
        +      "hazardCodes": {
        +        "description": "Hazard codes this classification assigns. Empty for a \"Not Classified\" verdict.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "Hazard code assigned by this classification.",
        +          "properties": {
        +            "agreement": {
        +              "description": "Share of notifying companies that assigned this code, exactly as PubChem prints it (e.g. \"37.7%\", \"> 99.9%\"). Present only where PubChem prints one beside the code, which is ECHA C&L classifications; read it against \"notifications\" — a single-company notification reports 100%.",
        +              "type": "string"
        +            },
        +            "code": {
        +              "description": "H-code (e.g. \"H319\"). Statement text is in the top-level hazardStatements.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "code"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "notClassified": {
        +        "description": "True when this classification is ECHA's \"Not Classified\" verdict: notifiers assessed the compound and found it meets no GHS hazard criteria. Omitted otherwise.",
        +        "type": "boolean"
        +      },
        +      "notifications": {
        +        "description": "Notifier counts behind an ECHA classification: the first line of ECHA's C&L notifications summary (e.g. \"Aggregated GHS information provided per 13886 reports by companies from 79 notifications…\"), or for a \"Not Classified\" verdict the verdict line (e.g. \"Reported as not meeting GHS hazard criteria by 188 of 203 companies…\"). Omitted for sources that deposit no counts.",
        +        "type": "string"
        +      },
        +      "pictograms": {
        +        "description": "This classification's pictogram labels.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "signalWord": {
        +        "description": "This classification's signal word. Omitted when the source assigns none.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Depositing source (e.g. \"European Chemicals Agency (ECHA)\", \"NITE-CMC\"). Omitted when PubChem names no reference for the classification.",
        +        "type": "string"
        +      },
        +      "sourceRecord": {
        +        "description": "The source's own record title (e.g. \"Ethanol - FY2013 (Revised classification)\", \"Ethanol (EC: 200-578-6)\"). Tells revisions of one source, and the ECHA C&L aggregate from single-company ECHA notifications, apart.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "pictograms",
        +      "hazardCodes"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / results / items / properties / ghs / properties / hazardStatements / description
        Previous value: -"GHS hazard statements."New value: +"GHS hazard statements, union across classifications. A code here may come from a single source — see classifications for which source assigned it and with what notifier agreement."
      • changedOutput schema / properties / results / items / properties / ghs / properties / pictograms / description
        Previous value: -"GHS pictogram labels (e.g. \"Flammable\", \"Toxic\")."New value: +"GHS pictogram labels (e.g. \"Flammable\", \"Acute Toxic\"), union across classifications."
      • changedOutput schema / properties / results / items / properties / ghs / properties / precautionaryStatements / description
        Previous value: -"GHS precautionary statements."New value: +"GHS precautionary statements, union across classifications."
      • changedOutput schema / properties / results / items / properties / ghs / properties / signalWord / description
        Previous value: -"GHS signal word: \"Danger\" or \"Warning\"."New value: +"GHS signal word, \"Danger\" or \"Warning\": the most severe any classification assigns. Omitted when none assigns one."
      • changedOutput schema / properties / results / items / properties / ghs / required
        Previous value: -[
        -  "pictograms",
        -  "hazardStatements",
        -  "precautionaryStatements"
        -]New value: +[
        +  "pictograms",
        +  "hazardStatements",
        +  "precautionaryStatements",
        +  "classifications"
        +]
      • changedOutput schema / properties / results / items / properties / hasData / description
        Previous value: -"Whether GHS safety data is available for this compound."New value: +"Whether a GHS classification is on file for this compound (status \"ok\" or \"not_classified\"); \"ghs\" is present exactly when this is true."
      • changedOutput schema / properties / results / items / properties / source / description
        Previous value: -"Data source attribution."New value: +"Sources that deposited a GHS classification, in PubChem's order, joined with \"; \"."
      • changedOutput schema / properties / results / items / properties / status / description
        Previous value: -"Outcome for this CID. \"ok\": GHS data returned. \"no_ghs_data\": the compound exists in PubChem but has no deposited GHS classification. \"cid_not_found\": PubChem has no record for this CID at all — the identifier is wrong, so verify it with pubchem_search_compounds rather than concluding the compound is unclassified."New value: +"Outcome for this CID. \"ok\": GHS hazard classification returned. \"not_classified\": every deposited classification is an ECHA \"Not Classified\" verdict — notifiers assessed the compound and found it meets no GHS hazard criteria; the verdicts and their notifier counts are in ghs.classifications. \"no_ghs_data\": the compound exists in PubChem but has no deposited GHS classification. \"cid_not_found\": PubChem has no record for this CID at all — the identifier is wrong, so verify it with pubchem_search_compounds rather than concluding the compound is unclassified."
      • changedOutput schema / properties / results / items / properties / status / enum
        Previous value: -[
        -  "ok",
        -  "no_ghs_data",
        -  "cid_not_found"
        -]New value: +[
        +  "ok",
        +  "not_classified",
        +  "no_ghs_data",
        +  "cid_not_found"
        +]
      • addedOutput schema / properties / unprocessed
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / withDataCount / description
        Previous value: -"CIDs with GHS safety data available."New value: +"CIDs with a GHS classification on file (status \"ok\" or \"not_classified\")."
    • Changedpubchem_get_compound_xrefs5 fields changed
      • changedInput schema / properties / cid / maximum
        Previous value: -9007199254740991New value: +2147483647
      • changedInput schema / properties / maxPerType / description
        Previous value: -"Max IDs to return per xref type per page (1-500). A compound may have thousands of PubMed references; use offset to reach the ones past this page. Total count always reported. Default: 50."New value: +"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; use offset to reach the ones past this page. Total count always reported. Default: 50."
      • changedInput schema / properties / maxPerType / maximum
        Previous value: -500New value: +1000
      • addedOutput schema / properties / cappedInputs
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One input served at its per-call cap.",
        +    "properties": {
        +      "input": {
        +        "description": "Input name, e.g. \"maxResults\" or \"cids\".",
        +        "type": "string"
        +      },
        +      "requested": {
        +        "description": "Value requested: the page size, or the number of IDs in the batch.",
        +        "type": "number"
        +      },
        +      "served": {
        +        "description": "Value served: the per-call cap.",
        +        "type": "number"
        +      },
        +      "unprocessed": {
        +        "description": "ID batches only: IDs past the cap, listed in unprocessed in input order.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "input",
        +      "requested",
        +      "served"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / xrefs / items / properties / ids / description
        Previous value: -"Cross-reference IDs on this page (window of offset + maxPerType)."New value: +"Cross-reference IDs on this page (window of offset + maxPerType). PubMedID is sorted numerically descending, so page one holds the highest, most recently assigned PMIDs; GeneID, ProteinGI and TaxonomyID numerically ascending; RegistryID, RN and PatentID keep PubChem's order."
    • Changedpubchem_get_summary20 fields changed
      • changedInput schema / properties / identifiers / description
        Previous value: -"Entity identifiers (1-10). Type depends on entityType:\n- assay: AID (number), e.g. [1000]\n- gene: Gene ID (number), e.g. [1956]\n- protein: UniProt accession (string), e.g. [\"P00533\"]\n- taxonomy: Tax ID (number), e.g. [9606]"New value: +"Entity 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 unprocessed, in input order, and reported in cappedInputs. More than 1000 pieces in all fails the call. ID form depends on entityType:\n- assay: AID, a positive integer, e.g. [\"1000\"]\n- gene: NCBI Gene ID, a positive integer, e.g. [\"1956\"]\n- protein: UniProt accession, e.g. [\"P00533\"]\n- taxonomy: NCBI Taxonomy ID, a positive integer, e.g. [\"9606\"]\nFor assay, gene, and taxonomy, a piece that is not a positive integer written in digits is marked invalid and not looked up."
      • removedInput schema / properties / identifiers / items / anyOf
        Removed value: -[
        -  {
        -    "description": "String identifier (e.g. UniProt accession).",
        -    "type": "string"
        -  },
        -  {
        -    "description": "Numeric identifier (e.g. AID, Gene ID, Tax ID).",
        -    "type": "number"
        -  }
        -]
      • changedInput schema / properties / identifiers / items / description
        Previous value: -"Entity identifier — string or number depending on entityType."New value: +"Entity identifier, or several joined with commas."
      • addedInput schema / properties / identifiers / items / type
        Added value: +"string"
      • changedInput schema / properties / identifiers / maxItems
        Previous value: -10New value: +1000
      • addedOutput schema / properties / cappedInputs
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One input served at its per-call cap.",
        +    "properties": {
        +      "input": {
        +        "description": "Input name, e.g. \"maxResults\" or \"cids\".",
        +        "type": "string"
        +      },
        +      "requested": {
        +        "description": "Value requested: the page size, or the number of IDs in the batch.",
        +        "type": "number"
        +      },
        +      "served": {
        +        "description": "Value served: the per-call cap.",
        +        "type": "number"
        +      },
        +      "unprocessed": {
        +        "description": "ID batches only: IDs past the cap, listed in unprocessed in input order.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "input",
        +      "requested",
        +      "served"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `too_many_identifiers`: Comma splitting yields more than 1000 identifier pieces. `invalid_identifier`: No identifier piece is usable: every piece is blank, or, for assay, gene, or taxonomy, not a positive integer. Other values are possible when a failure originates below the handler."
      • addedOutput schema / properties / error / properties / data / properties / reason / examples
        Added value: +[
        +  "too_many_identifiers",
        +  "invalid_identifier"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery guidance when one or more identifiers were not found."New value: +"Recovery guidance when identifiers were invalid or not found."
      • changedOutput schema / properties / requestedCount / description
        Previous value: -"Identifiers requested."New value: +"Identifier pieces requested, counted after comma splitting."
      • changedOutput schema / properties / summaries / description
        Previous value: -"Summary results."New value: +"Summary results, one per identifier piece looked up, in input order."
      • addedOutput schema / properties / summaries / items / properties / data / properties / lastDataChange
        Added value: +{
        +  "description": "Date the assay's data last changed, YYYY-MM-DD (assay summaries).",
        +  "type": "string"
        +}
      • addedOutput schema / properties / summaries / items / properties / data / properties / method
        Added value: +{
        +  "description": "Assay method as PubChem labels it, e.g. \"confirmatory\" (dose-response) or \"screening\" (assay summaries). Omitted when PubChem records none.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / summaries / items / properties / data / properties / numActiveCompounds
        Added value: +{
        +  "description": "Compounds (CIDs) the assay marked active (assay summaries).",
        +  "type": "number"
        +}
      • addedOutput schema / properties / summaries / items / properties / data / properties / numCompounds
        Added value: +{
        +  "description": "Compounds (CIDs) tested (assay summaries). List them with pubchem_search_compounds searchType \"assay\" and activeOnly: false — its default lists only the actives.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / summaries / items / properties / data / properties / targetCount
        Added value: +{
        +  "description": "Number of targets PubChem lists for the assay (assay summaries).",
        +  "type": "number"
        +}
      • addedOutput schema / properties / summaries / items / properties / data / properties / targets
        Added value: +{
        +  "description": "Assay targets, the first 25 PubChem lists (assay summaries); targetCount gives the full number.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Assay target.",
        +    "properties": {
        +      "accession": {
        +        "description": "Target protein or gene accession.",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Target name.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / summaries / items / properties / identifier / description
        Previous value: -"Queried identifier."New value: +"Queried identifier: a number for assay, gene, and taxonomy; the accession for protein; the piece as sent when invalid."
      • addedOutput schema / properties / summaries / items / properties / invalid
        Added value: +{
        +  "description": "True when the identifier is not in the form entityType expects; it was not looked up. Omitted otherwise.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unprocessed
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedpubchem_search_assays6 fields changed
      • changedInput schema / properties / maxResults / description
        Previous value: -"Max AIDs to return per page (1-200). Popular targets may have thousands of assays; use offset to reach the ones past this page. Default: 50."New value: +"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 reach the ones past this page. Default: 50."
      • changedInput schema / properties / maxResults / maximum
        Previous value: -200New value: +1000
      • changedInput schema / properties / targetQuery / description
        Previous value: -"Target identifier. Examples: \"EGFR\" (genesymbol), \"Epidermal growth factor receptor\" (proteinname), \"1956\" (geneid), \"P00533\" (proteinaccession)."New value: +"Target identifier. Examples: \"EGFR\" (genesymbol), \"Epidermal growth factor receptor\" (proteinname), \"1956\" (geneid), \"P00533\" (proteinaccession; uppercased before lookup, except a PDB chain ID such as the \"A\" in \"1ZHH_A\", which is kept as given)."
      • changedOutput schema / properties / cap / description
        Previous value: -"The maxResults cap that was applied."New value: +"The page size applied: maxResults, or the per-call cap when maxResults exceeds it."
      • addedOutput schema / properties / cappedInputs
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One input served at its per-call cap.",
        +    "properties": {
        +      "input": {
        +        "description": "Input name, e.g. \"maxResults\" or \"cids\".",
        +        "type": "string"
        +      },
        +      "requested": {
        +        "description": "Value requested: the page size, or the number of IDs in the batch.",
        +        "type": "number"
        +      },
        +      "served": {
        +        "description": "Value served: the per-call cap.",
        +        "type": "number"
        +      },
        +      "unprocessed": {
        +        "description": "ID batches only: IDs past the cap, listed in unprocessed in input order.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "input",
        +      "requested",
        +      "served"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `blank_target_query`: targetQuery is empty or whitespace-only. `invalid_geneid_query`: targetType is \"geneid\" but targetQuery is not a positive integer. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `blank_target_query`: targetQuery is empty or whitespace-only. `invalid_geneid_query`: targetType is \"geneid\" but targetQuery contains characters other than digits. Other values are possible when a failure originates below the handler."
    • Changedpubchem_search_compounds18 fields changed
      • addedInput schema / properties / activeOnly
        Added value: +{
        +  "default": true,
        +  "description": "Assay search only. When true (default), lists only the compounds the assay marked active; false lists every compound it tested.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / aid
        Added value: +{
        +  "description": "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.",
        +  "maximum": 2147483647,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / identifiers / description
        Previous value: -"Required for identifier search. Array of identifiers to resolve (1-25). Examples: [\"aspirin\", \"ibuprofen\"] for name, [\"CC(=O)OC1=CC=CC=C1C(=O)O\"] for SMILES, [\"BSYNRYMUTXBXSQ-UHFFFAOYSA-N\"] for inchikey (27-char block format)."New value: +"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, and reported in cappedInputs. Examples: [\"aspirin\", \"ibuprofen\"] for name, [\"CC(=O)OC1=CC=CC=C1C(=O)O\"] for SMILES, [\"BSYNRYMUTXBXSQ-UHFFFAOYSA-N\"] for inchikey (27-char block format; uppercased before lookup, any case accepted)."
      • changedInput schema / properties / identifiers / maxItems
        Previous value: -25New value: +1000
      • changedInput schema / properties / maxResults / description
        Previous value: -"Maximum CIDs to return per page (1-200). Use offset to reach matches past this page. Default: 20."New value: +"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."
      • changedInput schema / properties / maxResults / maximum
        Previous value: -200New value: +1000
      • changedInput schema / properties / offset / description
        Previous value: -"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; formula, substructure, superstructure, and similarity searches have to ask PubChem for offset + maxResults records to reach a page, so deep pages cost progressively more upstream — hence the 10000 ceiling. Default: 0."New value: +"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 searches fetch only the requested page; formula, substructure, superstructure, and similarity searches have to ask PubChem for offset + maxResults records to reach a page, so deep pages cost progressively more upstream — hence the 10000 ceiling. Default: 0."
      • changedInput schema / properties / query / description
        Previous value: -"Required for substructure/superstructure/similarity searches. A SMILES string (e.g. \"CC(=O)O\") or PubChem CID as a string (e.g. \"2244\")."New value: +"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\")."
      • changedInput schema / properties / searchType / description
        Previous value: -"Search strategy; each mode needs its own fields. \"identifier\": name/SMILES/InChIKey lookup — requires identifierType and identifiers. \"formula\": molecular formula — requires formula. \"substructure\": find compounds containing the query as a substructure. \"superstructure\": find compounds that are themselves substructures of the query. \"similarity\": 2D Tanimoto similarity to the query. substructure, superstructure, and similarity require query and queryType."New value: +"Search strategy; each mode needs its own fields. \"identifier\": name/SMILES/InChIKey lookup — requires identifierType and identifiers. \"formula\": molecular formula — requires formula. \"substructure\": find compounds containing the query as a substructure. \"superstructure\": find compounds that are themselves substructures of the query. \"similarity\": 2D Tanimoto similarity to the query. substructure, superstructure, and similarity require query and queryType. \"assay\": compounds tested in a PubChem bioassay — requires aid; activeOnly (default true) keeps only the compounds the assay marked active."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "identifier",
        -  "formula",
        -  "substructure",
        -  "superstructure",
        -  "similarity"
        -]New value: +[
        +  "identifier",
        +  "formula",
        +  "substructure",
        +  "superstructure",
        +  "similarity",
        +  "assay"
        +]
      • addedOutput schema / properties / activeOnly
        Added value: +{
        +  "description": "Assay search only: true when the list holds only the compounds the assay marked active, false when it holds every compound tested.",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / cap / description
        Previous value: -"The maxResults cap that was applied."New value: +"The page size applied: maxResults, or the per-call cap when maxResults exceeds it."
      • addedOutput schema / properties / cappedInputs
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One input served at its per-call cap.",
        +    "properties": {
        +      "input": {
        +        "description": "Input name, e.g. \"maxResults\" or \"cids\".",
        +        "type": "string"
        +      },
        +      "requested": {
        +        "description": "Value requested: the page size, or the number of IDs in the batch.",
        +        "type": "number"
        +      },
        +      "served": {
        +        "description": "Value served: the per-call cap.",
        +        "type": "number"
        +      },
        +      "unprocessed": {
        +        "description": "ID batches only: IDs past the cap, listed in unprocessed in input order.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "input",
        +      "requested",
        +      "served"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted. `missing_formula`: searchType is \"formula\" but the formula field was omitted or blank. `missing_structure_args`: substructure/superstructure/similarity search with query or queryType omitted, or a blank query. `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not a positive integer CID. `identifier_rejected`: identifier search where PubChem rejected every identifier in the batch as unreadable (HTTP 400) — for SMILES, a string it could not standardize into a structure. A batch with any other outcome lists rejected inputs in unresolvedIdentifiers instead. `search_query_rejected`: PubChem failed a formula, substructure, superstructure, or similarity search with HTTP 500 \"Search status indicates failure\" — its answer for a malformed SMILES or formula, a SMILES with a \"*\" wildcard atom, or a CID with no record. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted. `missing_formula`: searchType is \"formula\" but the formula field was omitted or blank. `missing_structure_args`: substructure/superstructure/similarity search with query or queryType omitted, or a blank query. `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not an integer CID from 1 to 2147483647. `missing_aid`: searchType is \"assay\" but aid was omitted. `aid_not_found`: assay search where PubChem has no live assay with the given AID. `identifier_rejected`: identifier search where PubChem rejected every identifier in the batch as unreadable (HTTP 400) — for SMILES, a string it could not standardize into a structure. A batch with any other outcome lists rejected inputs in unresolvedIdentifiers instead. `search_query_rejected`: PubChem failed a formula, substructure, superstructure, or similarity search with HTTP 500 \"Search status indicates failure\" — its answer for a malformed SMILES or formula, a SMILES with a \"*\" wildcard atom, or a CID with no record. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "missing_identifier_args",
        -  "missing_formula",
        -  "missing_structure_args",
        -  "invalid_cid_query",
        -  "identifier_rejected",
        -  "search_query_rejected"
        -]New value: +[
        +  "missing_identifier_args",
        +  "missing_formula",
        +  "missing_structure_args",
        +  "invalid_cid_query",
        +  "missing_aid",
        +  "aid_not_found",
        +  "identifier_rejected",
        +  "search_query_rejected"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery guidance when no compounds matched, when the offset runs past the matches observed, when identifiers had no match or could not be interpreted, when identifiers collided on one CID, or when further pages remain. Absent when this page is complete and every identifier resolved to its own CID."New value: +"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 could not be interpreted, when identifiers collided on one CID, or when further pages remain. Absent when this page is complete and every identifier resolved to its own CID."
      • changedOutput schema / properties / searchType / description
        Previous value: -"Search strategy used: identifier, formula, substructure, superstructure, or similarity."New value: +"Search strategy used: identifier, formula, substructure, superstructure, similarity, or assay."
      • addedOutput schema / properties / unprocessed
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  4. 8 tool updatesv0.6.5
    • Changedpubchem_get_bioactivity4 fields changed
      • removedInput schema / properties / cid / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / cid / minimum
        Added value: +1
      • removedInput schema / properties / targetGeneId / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / targetGeneId / minimum
        Added value: +1
    • Changedpubchem_get_compound_3d_structure6 fields changed
      • removedInput schema / properties / cid / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / cid / minimum
        Added value: +1
      • removedInput schema / properties / maxAtoms / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / maxAtoms / minimum
        Added value: +1
      • removedInput schema / properties / maxBonds / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / maxBonds / minimum
        Added value: +1
    • Changedpubchem_get_compound_details2 fields changed
      • removedInput schema / properties / cids / items / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / cids / items / minimum
        Added value: +1
    • Changedpubchem_get_compound_image2 fields changed
      • removedInput schema / properties / cid / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / cid / minimum
        Added value: +1
    • Changedpubchem_get_compound_interactions2 fields changed
      • removedInput schema / properties / cid / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / cid / minimum
        Added value: +1
    • Changedpubchem_get_compound_safety2 fields changed
      • removedInput schema / properties / cids / items / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / cids / items / minimum
        Added value: +1
    • Changedpubchem_get_compound_xrefs2 fields changed
      • removedInput schema / properties / cid / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / cid / minimum
        Added value: +1
    • Changedpubchem_search_compounds5 fields changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search strategy. \"identifier\": name/SMILES/InChIKey lookup. \"formula\": molecular formula. \"substructure\": find compounds containing the query as a substructure. \"superstructure\": find compounds that are themselves substructures of the query. \"similarity\": 2D Tanimoto similarity to the query."New value: +"Search strategy; each mode needs its own fields. \"identifier\": name/SMILES/InChIKey lookup — requires identifierType and identifiers. \"formula\": molecular formula — requires formula. \"substructure\": find compounds containing the query as a substructure. \"superstructure\": find compounds that are themselves substructures of the query. \"similarity\": 2D Tanimoto similarity to the query. substructure, superstructure, and similarity require query and queryType."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted. `missing_formula`: searchType is \"formula\" but the formula field was omitted. `missing_structure_args`: substructure/superstructure/similarity search missing query or queryType. `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not a positive integer CID. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted. `missing_formula`: searchType is \"formula\" but the formula field was omitted or blank. `missing_structure_args`: substructure/superstructure/similarity search with query or queryType omitted, or a blank query. `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not a positive integer CID. `identifier_rejected`: identifier search where PubChem rejected every identifier in the batch as unreadable (HTTP 400) — for SMILES, a string it could not standardize into a structure. A batch with any other outcome lists rejected inputs in unresolvedIdentifiers instead. `search_query_rejected`: PubChem failed a formula, substructure, superstructure, or similarity search with HTTP 500 \"Search status indicates failure\" — its answer for a malformed SMILES or formula, a SMILES with a \"*\" wildcard atom, or a CID with no record. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "missing_identifier_args",
        -  "missing_formula",
        -  "missing_structure_args",
        -  "invalid_cid_query"
        -]New value: +[
        +  "missing_identifier_args",
        +  "missing_formula",
        +  "missing_structure_args",
        +  "invalid_cid_query",
        +  "identifier_rejected",
        +  "search_query_rejected"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery guidance when no compounds matched, when the offset runs past the matches observed, when identifiers failed to resolve, or when further pages remain. Absent when this page is complete and every identifier resolved."New value: +"Recovery guidance when no compounds matched, when the offset runs past the matches observed, when identifiers had no match or could not be interpreted, when identifiers collided on one CID, or when further pages remain. Absent when this page is complete and every identifier resolved to its own CID."
      • changedOutput schema / properties / unresolvedIdentifiers / description
        Previous value: -"Identifier-mode only: input identifiers that resolved to no CID. Omitted when every identifier resolved and for non-identifier searches."New value: +"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 resolved and for non-identifier searches."
  5. 4 tool updatesv0.6.3
    • Changedpubchem_get_compound_3d_structure1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_3d_structure`: PubChem has no computed 3D conformer for the requested CID Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_3d_structure`: PubChem has no computed 3D conformer for the requested CID. Other values are possible when a failure originates below the handler."
    • Changedpubchem_get_compound_image1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `cid_not_found`: PubChem returned 404 for the requested CID Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `cid_not_found`: PubChem returned 404 for the requested CID. Other values are possible when a failure originates below the handler."
    • Changedpubchem_search_assays1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `blank_target_query`: targetQuery is empty or whitespace-only `invalid_geneid_query`: targetType is \"geneid\" but targetQuery is not a positive integer Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `blank_target_query`: targetQuery is empty or whitespace-only. `invalid_geneid_query`: targetType is \"geneid\" but targetQuery is not a positive integer. Other values are possible when a failure originates below the handler."
    • Changedpubchem_search_compounds1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted `missing_formula`: searchType is \"formula\" but the formula field was omitted `missing_structure_args`: substructure/superstructure/similarity search missing query or queryType `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not a positive integer CID Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted. `missing_formula`: searchType is \"formula\" but the formula field was omitted. `missing_structure_args`: substructure/superstructure/similarity search missing query or queryType. `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not a positive integer CID. Other values are possible when a failure originates below the handler."
  6. 1 tool updatev0.6.2
    • Changedpubchem_get_compound_details26 fields changed
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / hba / properties / pass / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / hba / properties / pass / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / hba / properties / value / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / hba / properties / value / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / hbd / properties / pass / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / hbd / properties / pass / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / hbd / properties / value / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / hbd / properties / value / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / mw / properties / pass / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / mw / properties / pass / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / mw / properties / value / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / mw / properties / value / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / xLogP / properties / pass / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / xLogP / properties / pass / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / xLogP / properties / value / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / xLogP / properties / value / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / pass / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / pass / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / veber / properties / rotatableBonds / properties / pass / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / veber / properties / rotatableBonds / properties / pass / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / veber / properties / rotatableBonds / properties / value / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / veber / properties / rotatableBonds / properties / value / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / veber / properties / tpsa / properties / pass / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / veber / properties / tpsa / properties / pass / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / veber / properties / tpsa / properties / value / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / veber / properties / tpsa / properties / value / type
        Added value: +[
        +  "number",
        +  "null"
        +]
  7. 10 tool updatesv0.6.1
    • Changedpubchem_get_bioactivity6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "cid",
        +      "totalAssays",
        +      "activeCount",
        +      "inactiveCount",
        +      "results",
        +      "outcomeFilter",
        +      "filteredCount",
        +      "returnedCount",
        +      "offset"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "cid",
        -  "totalAssays",
        -  "activeCount",
        -  "inactiveCount",
        -  "results",
        -  "outcomeFilter",
        -  "filteredCount",
        -  "returnedCount",
        -  "offset"
        -]
    • Changedpubchem_get_compound_3d_structure6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "cid",
        +      "atomCount",
        +      "bondCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_3d_structure`: PubChem has no computed 3D conformer for the requested CID Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_3d_structure"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "cid",
        -  "atomCount",
        -  "bondCount"
        -]
    • Changedpubchem_get_compound_details7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "compounds",
        +      "truncated"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when this response is not the whole picture: a compound has further synonyms or descriptions past this page, or CIDs were skipped by the per-call fan-out limit. Per-compound totals are in compounds[].synonymsTotal / compounds[].descriptionsTotal; the skipped CIDs are in skippedCids.",
        +  "type": "boolean"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "compounds"
        -]
    • Changedpubchem_get_compound_image6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "cid",
        +      "imageBase64",
        +      "mimeType",
        +      "width",
        +      "height"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `cid_not_found`: PubChem returned 404 for the requested CID Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "cid_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "cid",
        -  "imageBase64",
        -  "mimeType",
        -  "width",
        -  "height"
        -]
    • Changedpubchem_get_compound_interactions7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "cid",
        +      "entries",
        +      "paging",
        +      "requestedKinds",
        +      "returnedCount",
        +      "truncated",
        +      "offset"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "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.",
        +  "type": "boolean"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "cid",
        -  "entries",
        -  "paging",
        -  "requestedKinds",
        -  "returnedCount",
        -  "offset"
        -]
    • Changedpubchem_get_compound_safety6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "requestedCount",
        +      "withDataCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "requestedCount",
        -  "withDataCount"
        -]
    • Changedpubchem_get_compound_xrefs7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "cid",
        +      "xrefs",
        +      "offset",
        +      "truncated"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "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.",
        +  "type": "boolean"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "cid",
        -  "xrefs",
        -  "offset"
        -]
    • Changedpubchem_get_summary6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "entityType",
        +      "summaries",
        +      "requestedCount",
        +      "foundCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "entityType",
        -  "summaries",
        -  "requestedCount",
        -  "foundCount"
        -]
    • Changedpubchem_search_assays6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "aids",
        +      "targetType",
        +      "targetQuery",
        +      "totalFound",
        +      "offset"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `blank_target_query`: targetQuery is empty or whitespace-only `invalid_geneid_query`: targetType is \"geneid\" but targetQuery is not a positive integer Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "blank_target_query",
        +            "invalid_geneid_query"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "aids",
        -  "targetType",
        -  "targetQuery",
        -  "totalFound",
        -  "offset"
        -]
    • Changedpubchem_search_compounds6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "searchType",
        +      "offset"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `missing_identifier_args`: searchType is \"identifier\" but identifierType or identifiers were omitted `missing_formula`: searchType is \"formula\" but the formula field was omitted `missing_structure_args`: substructure/superstructure/similarity search missing query or queryType `invalid_cid_query`: structure/similarity search with queryType \"cid\" but query is not a positive integer CID Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "missing_identifier_args",
        +            "missing_formula",
        +            "missing_structure_args",
        +            "invalid_cid_query"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "searchType",
        -  "offset"
        -]
  8. 9 tool updatesv0.6.0
    • Changedpubchem_get_bioactivity10 fields changed
      • changedInput schema / properties / maxResults / description
        Previous value: -"Max assay results to return (1-100). Well-studied compounds have thousands of records. Default: 20."New value: +"Max assay results to return per page (1-100). Well-studied compounds have thousands of records; use offset to reach the ones past this page. Default: 20."
      • changedInput schema / properties / maxResults / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "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.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / properties / filteredCount / description
        Previous value: -"Assays matching the outcome and target filters, before the maxResults cap."New value: +"Exact number of assays matching the outcome and target filters, across all pages."
      • addedOutput schema / properties / nextOffset
        Added value: +{
        +  "description": "Offset to pass on the next call to continue past this page. Omitted when no further assays match.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Zero-based index of the first assay returned.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / returnedCount / description
        Previous value: -"Assays returned after the maxResults cap."New value: +"Assays returned on this page."
      • changedOutput schema / properties / shown / description
        Previous value: -"Assays returned after the maxResults cap."New value: +"Assays returned on this page."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when results were capped at maxResults — more matching assays exist."New value: +"True when matching assays remain past this page."
      • changedOutput schema / required
        Previous value: -[
        -  "cid",
        -  "totalAssays",
        -  "activeCount",
        -  "inactiveCount",
        -  "results",
        -  "outcomeFilter",
        -  "filteredCount",
        -  "returnedCount"
        -]New value: +[
        +  "cid",
        +  "totalAssays",
        +  "activeCount",
        +  "inactiveCount",
        +  "results",
        +  "outcomeFilter",
        +  "filteredCount",
        +  "returnedCount",
        +  "offset"
        +]
    • Changedpubchem_get_compound_3d_structure1 field changed
      • changedInput schema / properties / includeAlternateConformerIds / description
        Previous value: -"List the IDs of additional computed conformers beyond the default. Adds one extra API call. Default: false."New value: +"List the IDs of additional computed conformers beyond the default. Slower than the default response. Default: false."
    • Changedpubchem_get_compound_details20 fields changed
      • changedInput schema / properties / cids / description
        Previous value: -"PubChem Compound IDs to fetch (1-100). Batched efficiently. Resolve from names/SMILES with pubchem_search_compounds."New value: +"PubChem Compound IDs to fetch (1-100). Resolve from names/SMILES with pubchem_search_compounds."
      • addedInput schema / properties / descriptionOffset
        Added value: +{
        +  "default": 0,
        +  "description": "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 call to read the following page. Default: 0.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / includeClassification / description
        Previous value: -"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 return without classification."New value: +"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 return without classification and are listed in the response's skippedCids."
      • changedInput schema / properties / includeDescription / description
        Previous value: -"Include textual descriptions (pharmacology, mechanism, therapeutic use) attributed by source. Well-studied compounds have many overlapping summaries — capped via maxDescriptions. Fetched only for the first 10 CIDs in the batch; remaining CIDs return without descriptions."New value: +"Include textual descriptions (pharmacology, mechanism, therapeutic use) attributed by source. Well-studied compounds have many overlapping summaries — paged via descriptionOffset/maxDescriptions. Fetched only for the first 10 CIDs in the batch; remaining CIDs return without descriptions and are listed in the response's skippedCids."
      • changedInput schema / properties / includeDrugLikeness / description
        Previous value: -"Compute drug-likeness assessment: Lipinski Rule of Five (MW, XLogP, HBD, HBA) and Veber rules (TPSA, rotatable bonds). No extra API calls — computed from properties."New value: +"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."
      • changedInput schema / properties / includeSynonyms / description
        Previous value: -"Fetch all known names and synonyms (trade names, systematic names, registry numbers). One API call per CID — slower than the property batch for large CID lists."New value: +"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."
      • changedInput schema / properties / maxDescriptions / description
        Previous value: -"Max number of distinct description entries per compound (1-20). PubChem returns near-duplicate summaries from many depositors; we dedup and cap to keep responses focused. Default: 3."New value: +"Max number of distinct description entries per compound per page (1-20). PubChem returns near-duplicate summaries from many depositors; duplicates are collapsed before this cap applies. Default: 3."
      • changedInput schema / properties / maxSynonyms / description
        Previous value: -"Max synonyms returned per compound (1-100). PubChem lists hundreds for common drugs; capped to keep the response focused. Default: 20."New value: +"Max synonyms returned per compound per page (1-100). PubChem lists hundreds for common drugs; use synonymOffset to reach the ones past this page. Default: 20."
      • addedInput schema / properties / synonymOffset
        Added value: +{
        +  "default": 0,
        +  "description": "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 the following page. Default: 0.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / properties / compounds / items / properties / descriptions / description
        Previous value: -"Textual descriptions, deduplicated and capped at maxDescriptions. Each entry carries optional source attribution."New value: +"Textual descriptions on this page, deduplicated then windowed by descriptionOffset/maxDescriptions. Each entry carries optional source attribution. Empty when descriptionOffset runs past descriptionsTotal."
      • changedOutput schema / properties / compounds / items / properties / descriptionsTotal / description
        Previous value: -"Total distinct descriptions available before truncation. Larger than descriptions.length when more sources exist — increase maxDescriptions to see them."New value: +"Total distinct descriptions available for this compound, across all pages. Larger than descriptions.length when more sources exist — raise maxDescriptions or page with descriptionOffset to see them."
      • changedOutput schema / properties / compounds / items / properties / synonyms / description
        Previous value: -"Known names and synonyms."New value: +"Known names and synonyms on this page, windowed by synonymOffset/maxSynonyms. Empty when synonymOffset runs past synonymsTotal."
      • changedOutput schema / properties / compounds / items / properties / synonymsTotal / description
        Previous value: -"Total synonyms available before truncation. Larger than synonyms.length when more exist — increase maxSynonyms to see them."New value: +"Total synonyms available for this compound, across all pages. Larger than synonyms.length when more exist — raise maxSynonyms or page with synonymOffset to see them."
      • addedOutput schema / properties / descriptionOffset
        Added value: +{
        +  "description": "Zero-based index of the first description returned within each compound's list. Present when includeDescription is true.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / enrichedCids
        Added value: +{
        +  "description": "CIDs whose descriptions and classification were fetched. Present only when the batch exceeded the per-call fan-out limit and other CIDs were skipped.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / nextDescriptionOffset
        Added value: +{
        +  "description": "descriptionOffset to pass on the next call to continue past this page. Omitted when no compound in the batch has further descriptions.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / nextSynonymOffset
        Added value: +{
        +  "description": "synonymOffset to pass on the next call to continue past this page. Omitted when no compound in the batch has further synonyms.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery guidance covering the skipped CIDs, an offset that runs past every compound, and pages that remain. Absent when nothing was skipped or truncated.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / skippedCids
        Added value: +{
        +  "description": "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 none\" — re-request these CIDs in a follow-up call. Present only when CIDs were skipped.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / synonymOffset
        Added value: +{
        +  "description": "Zero-based index of the first synonym returned within each compound's list. Present when includeSynonyms is true.",
        +  "type": "number"
        +}
    • Changedpubchem_get_compound_interactions8 fields changed
      • changedInput schema / properties / maxEntries / description
        Previous value: -"Max entries per kind (1-50). Well-studied drugs have a long tail of interactions. Default: 10."New value: +"Max entries per kind per page (1-50). Well-studied drugs have a long tail of interactions; use offset to reach the ones past this page. Default: 10."
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Zero-based start position within each requested kind, counted in source records rather than returned entries. The same offset applies to every kind in the call, and the kinds advance at different rates — when paging past the first page, request one kind per call and pass that kind's nextOffset. Default: 0.",
        +  "maximum": 2147483646,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • removedOutput schema / properties / entries / items / properties / severity
        Removed value: -{
        -  "description": "Raw severity as the source reports it — not normalized across sources, and frequently unset (most sources embed severity in the statement text).",
        -  "type": "string"
        -}
      • addedOutput schema / properties / nextOffset
        Added value: +{
        +  "description": "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[].nextOffset instead.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when no interaction data was found for the requested kinds."New value: +"Guidance when a kind failed, when no interaction data was found, when the offset runs past every requested kind, or when further pages remain. Absent when this page is complete and every kind resolved."
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Zero-based start position read within each requested kind.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / paging
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Page position for one interaction kind.",
        +    "properties": {
        +      "kind": {
        +        "description": "Interaction category this page covers.",
        +        "enum": [
        +          "drug-drug",
        +          "drug-food",
        +          "target"
        +        ],
        +        "type": "string"
        +      },
        +      "nextOffset": {
        +        "description": "Offset to pass on the next call to continue this kind past the current page. Omitted when no records remain.",
        +        "type": "number"
        +      },
        +      "returnedCount": {
        +        "description": "Interaction entries returned for this kind.",
        +        "type": "number"
        +      },
        +      "totalRecords": {
        +        "description": "Source records available for this kind, across all pages. Entries are derived from these records and can be fewer: a \"target\" record naming no molecular target and a \"drug-drug\" record carrying no statement both yield nothing, and duplicate measurements collapse within a page. Pages divide the records, not the entries, so a duplicate split across two pages is reported on both.",
        +        "type": "number"
        +      },
        +      "truncated": {
        +        "description": "True when source records remain for this kind past the current page.",
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "returnedCount",
        +      "totalRecords",
        +      "truncated"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "cid",
        -  "entries",
        -  "requestedKinds",
        -  "returnedCount"
        -]New value: +[
        +  "cid",
        +  "entries",
        +  "paging",
        +  "requestedKinds",
        +  "returnedCount",
        +  "offset"
        +]
    • Changedpubchem_get_compound_safety6 fields changed
      • changedOutput schema / properties / notice / description
        Previous value: -"Cross-tool guidance when one or more CIDs have no GHS data, pointing to an alternative source."New value: +"Recovery guidance when one or more CIDs returned no GHS data, listing the unrecognized CIDs to verify separately from the CIDs that exist but carry no deposited classification."
      • addedOutput schema / properties / results / items / properties / ghs / properties / precautionaryStatements / items / properties / decoded
        Added value: +{
        +  "description": "Whether \"statement\" carries the standard text. False for codes needing label-specific fill text the depositor must supply (disposal method, firefighting agent, first-aid reference) and for codes outside the decoder table; the code itself is still authoritative.",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / results / items / properties / ghs / properties / precautionaryStatements / items / properties / statement / description
        Previous value: -"Precautionary statement text."New value: +"Standard precautionary statement text for the code. Empty string when \"decoded\" is false — PubChem deposits P-codes without text, so a blank statement means the code was not decoded, never that the depositor supplied an empty statement."
      • changedOutput schema / properties / results / items / properties / ghs / properties / precautionaryStatements / items / required
        Previous value: -[
        -  "code",
        -  "statement"
        -]New value: +[
        +  "code",
        +  "statement",
        +  "decoded"
        +]
      • addedOutput schema / properties / results / items / properties / status
        Added value: +{
        +  "description": "Outcome for this CID. \"ok\": GHS data returned. \"no_ghs_data\": the compound exists in PubChem but has no deposited GHS classification. \"cid_not_found\": PubChem has no record for this CID at all — the identifier is wrong, so verify it with pubchem_search_compounds rather than concluding the compound is unclassified.",
        +  "enum": [
        +    "ok",
        +    "no_ghs_data",
        +    "cid_not_found"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "cid",
        -  "hasData"
        -]New value: +[
        +  "cid",
        +  "hasData",
        +  "status"
        +]
    • Changedpubchem_get_compound_xrefs10 fields changed
      • changedInput schema / properties / maxPerType / description
        Previous value: -"Max IDs to return per xref type (1-500). A compound may have thousands of PubMed references. Total count always reported. Default: 50."New value: +"Max IDs to return per xref type per page (1-500). A compound may have thousands of PubMed references; use offset to reach the ones past this page. Total count always reported. Default: 50."
      • changedInput schema / properties / maxPerType / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "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.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / nextOffset
        Added value: +{
        +  "description": "Offset to pass on the next call to continue past this page. Omitted when no requested type has further IDs.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery guidance when every requested xref type returned zero IDs — hints to verify the CID. Absent when any cross-references were found."New value: +"Recovery guidance when every requested xref type returned zero IDs, when the offset runs past every type, or when further pages remain. Absent when this page is complete and non-empty."
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Zero-based index of the first ID returned within each type.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / xrefs / items / properties / ids / description
        Previous value: -"Cross-reference IDs (capped by maxPerType)."New value: +"Cross-reference IDs on this page (window of offset + maxPerType)."
      • changedOutput schema / properties / xrefs / items / properties / totalAvailable / description
        Previous value: -"Total IDs available before truncation."New value: +"Total IDs available for this type, across all pages."
      • changedOutput schema / properties / xrefs / items / properties / truncated / description
        Previous value: -"Whether results were truncated."New value: +"True when IDs for this type remain past the current page."
      • changedOutput schema / required
        Previous value: -[
        -  "cid",
        -  "xrefs"
        -]New value: +[
        +  "cid",
        +  "xrefs",
        +  "offset"
        +]
    • Changedpubchem_get_summary1 field changed
      • changedOutput schema / properties / summaries / items / properties / data / properties / lineage / description
        Previous value: -"Parent taxonomy lineage (taxonomy summaries)."New value: +"Taxonomic lineage ordered from the most inclusive rank to the most specific, e.g. [\"Eukaryota\", \"Metazoa\", \"Chordata\"] (taxonomy summaries). Ranks that do not apply to the entity are omitted."
    • Changedpubchem_search_assays10 fields changed
      • changedInput schema / properties / maxResults / description
        Previous value: -"Max AIDs to return (1-200). Popular targets may have thousands of assays. Default: 50."New value: +"Max AIDs to return per page (1-200). Popular targets may have thousands of assays; use offset to reach the ones past this page. Default: 50."
      • changedInput schema / properties / maxResults / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Zero-based index of the first AID to return. Pass the nextOffset from a previous call to read the following page. Default: 0.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / nextOffset
        Added value: +{
        +  "description": "Offset to pass on the next call to continue past this page. Omitted when no further AIDs match.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery guidance when no assays matched — echoes the target and suggests alternative search types. Absent when assays were returned."New value: +"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."
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Zero-based index of the first AID returned.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / shown / description
        Previous value: -"AIDs returned after the maxResults cap."New value: +"AIDs returned on this page."
      • changedOutput schema / properties / totalFound / description
        Previous value: -"Total AIDs found before the maxResults cap."New value: +"Total AIDs found for this target, across all pages."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when AIDs were capped at maxResults — more assays exist than returned."New value: +"True when matching AIDs remain past this page."
      • changedOutput schema / required
        Previous value: -[
        -  "aids",
        -  "targetType",
        -  "targetQuery",
        -  "totalFound"
        -]New value: +[
        +  "aids",
        +  "targetType",
        +  "targetQuery",
        +  "totalFound",
        +  "offset"
        +]
    • Changedpubchem_search_compounds11 fields changed
      • changedInput schema / properties / maxResults / description
        Previous value: -"Maximum CIDs to return (1-200). Default: 20."New value: +"Maximum CIDs to return per page (1-200). Use offset to reach matches past this page. Default: 20."
      • changedInput schema / properties / maxResults / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "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; formula, substructure, superstructure, and similarity searches have to ask PubChem for offset + maxResults records to reach a page, so deep pages cost progressively more upstream — hence the 10000 ceiling. Default: 0.",
        +  "maximum": 10000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / nextOffset
        Added value: +{
        +  "description": "Offset to pass on the next call to continue past this page. Omitted when no further matches remain.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery guidance when no compounds matched — echoes search strategy and suggests how to broaden. Absent when results were returned."New value: +"Recovery guidance when no compounds matched, when the offset runs past the matches observed, when identifiers failed to resolve, or when further pages remain. Absent when this page is complete and every identifier resolved."
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Zero-based index of the first CID returned.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / shown / description
        Previous value: -"CIDs returned after the maxResults cap."New value: +"CIDs returned on this page."
      • changedOutput schema / properties / totalFound / description
        Previous value: -"Total CIDs found before the maxResults cap."New value: +"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 those, so totalFoundAtLeast reports a floor instead."
      • addedOutput schema / properties / totalFoundAtLeast
        Added value: +{
        +  "description": "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.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when CIDs were capped at maxResults — more matches exist than returned."New value: +"True when matching CIDs remain past this page."
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "searchType",
        -  "totalFound"
        -]New value: +[
        +  "results",
        +  "searchType",
        +  "offset"
        +]
  9. 4 tool updatesv0.2.5
    • Changedpubchem_get_compound_3d_structure10 fields changed
      • addedInput schema / properties / includeRawSdf
        Added value: +{
        +  "default": false,
        +  "description": "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\".",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / maxAtoms
        Added value: +{
        +  "description": "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.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / maxBonds
        Added value: +{
        +  "description": "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.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / atomCap
        Added value: +{
        +  "description": "The atom cap applied (explicit maxAtoms or the safe default), when the atom list was capped.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / bondCap
        Added value: +{
        +  "description": "The bond cap applied (explicit maxBonds or the safe default), when the bond list was capped.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance naming which lists were capped and how to widen them.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / shownAtoms
        Added value: +{
        +  "description": "Atoms returned after the cap, when fewer than atomCount. Raise maxAtoms for more.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shownBonds
        Added value: +{
        +  "description": "Bonds returned after the cap, when fewer than bondCount. Raise maxBonds for more.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shownSdfLines
        Added value: +{
        +  "description": "SDF lines returned when format=\"sdf\" and the raw text was line-capped. Set includeRawSdf for the full record.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when the atom list, bond list, or raw SDF was capped below its total. atomCount/bondCount always report the full totals.",
        +  "type": "boolean"
        +}
    • Changedpubchem_get_compound_details2 fields changed
      • addedInput schema / properties / maxSynonyms
        Added value: +{
        +  "default": 20,
        +  "description": "Max synonyms returned per compound (1-100). PubChem lists hundreds for common drugs; capped to keep the response focused. Default: 20.",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / compounds / items / properties / synonymsTotal
        Added value: +{
        +  "description": "Total synonyms available before truncation. Larger than synonyms.length when more exist — increase maxSynonyms to see them.",
        +  "type": "number"
        +}
    • Changedpubchem_get_compound_xrefs1 field changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery guidance when every requested xref type returned zero IDs — hints to verify the CID. Absent when any cross-references were found.",
        +  "type": "string"
        +}
    • Changedpubchem_search_compounds1 field changed
      • addedOutput schema / properties / unresolvedIdentifiers
        Added value: +{
        +  "description": "Identifier-mode only: input identifiers that resolved to no CID. Omitted when every identifier resolved and for non-identifier searches.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  10. 3 tool updatesv0.2.4
    • Changedpubchem_get_bioactivity3 fields changed
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The maxResults cap that was applied.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Assays returned after the maxResults cap.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when results were capped at maxResults — more matching assays exist.",
        +  "type": "boolean"
        +}
    • Changedpubchem_search_assays3 fields changed
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The maxResults cap that was applied.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "AIDs returned after the maxResults cap.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when AIDs were capped at maxResults — more assays exist than returned.",
        +  "type": "boolean"
        +}
    • Changedpubchem_search_compounds3 fields changed
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The maxResults cap that was applied.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "CIDs returned after the maxResults cap.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when CIDs were capped at maxResults — more matches exist than returned.",
        +  "type": "boolean"
        +}
  11. 5 tool updatesv0.2.2
    • Changedpubchem_get_bioactivity8 fields changed
      • addedInput schema / properties / targetAccession
        Added value: +{
        +  "description": "Filter to assays against this target protein accession (UniProt/GenBank), e.g. \"P35354\". Obtain accessions from pubchem_search_assays or the targetAccession field of an unfiltered result here.",
        +  "type": "string"
        +}
      • addedInput schema / properties / targetGeneId
        Added value: +{
        +  "description": "Filter to assays against this NCBI Gene ID. Obtain Gene IDs from pubchem_search_assays or the targetGeneId field of an unfiltered result here. Combine with outcomeFilter=\"active\" to answer \"is this compound active against target T?\".",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / filteredCount
        Added value: +{
        +  "description": "Assays matching the outcome and target filters, before the maxResults cap.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery guidance when the filter yields no results or the compound has no bioactivity data.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / outcomeFilter
        Added value: +{
        +  "description": "Outcome filter applied: active, inactive, or all.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / returnedCount
        Added value: +{
        +  "description": "Assays returned after the maxResults cap.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / targetFilter
        Added value: +{
        +  "description": "Target filter applied (gene ID and/or protein accession), when set.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "cid",
        -  "totalAssays",
        -  "activeCount",
        -  "inactiveCount",
        -  "results"
        -]New value: +[
        +  "cid",
        +  "totalAssays",
        +  "activeCount",
        +  "inactiveCount",
        +  "results",
        +  "outcomeFilter",
        +  "filteredCount",
        +  "returnedCount"
        +]
    • Addedpubchem_get_compound_3d_structure
    • Addedpubchem_get_compound_interactions
    • Changedpubchem_get_compound_safety12 fields changed
      • removedInput schema / properties / cid
        Removed value: -{
        -  "description": "PubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds.",
        -  "exclusiveMinimum": 0,
        -  "maximum": 9007199254740991,
        -  "type": "integer"
        -}
      • addedInput schema / properties / cids
        Added value: +{
        +  "description": "PubChem Compound IDs to fetch safety data for (1-25). Resolve from names/SMILES with pubchem_search_compounds.",
        +  "items": {
        +    "exclusiveMinimum": 0,
        +    "maximum": 9007199254740991,
        +    "type": "integer"
        +  },
        +  "maxItems": 25,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "cid"
        -]New value: +[
        +  "cids"
        +]
      • removedOutput schema / properties / cid
        Removed value: -{
        -  "description": "PubChem Compound ID.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / ghs
        Removed value: -{
        -  "additionalProperties": false,
        -  "description": "GHS classification data.",
        -  "properties": {
        -    "hazardStatements": {
        -      "description": "GHS hazard statements.",
        -      "items": {
        -        "additionalProperties": false,
        -        "description": "GHS hazard statement entry.",
        -        "properties": {
        -          "code": {
        -            "description": "H-code (e.g. \"H225\").",
        -            "type": "string"
        -          },
        -          "statement": {
        -            "description": "Hazard statement text.",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "code",
        -          "statement"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "pictograms": {
        -      "description": "GHS pictogram labels (e.g. \"Flammable\", \"Toxic\").",
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "precautionaryStatements": {
        -      "description": "GHS precautionary statements.",
        -      "items": {
        -        "additionalProperties": false,
        -        "description": "GHS precautionary statement entry.",
        -        "properties": {
        -          "code": {
        -            "description": "P-code (e.g. \"P210\").",
        -            "type": "string"
        -          },
        -          "statement": {
        -            "description": "Precautionary statement text.",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "code",
        -          "statement"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "signalWord": {
        -      "description": "GHS signal word: \"Danger\" or \"Warning\".",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "pictograms",
        -    "hazardStatements",
        -    "precautionaryStatements"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / hasData
        Removed value: -{
        -  "description": "Whether GHS safety data is available for this compound.",
        -  "type": "boolean"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Cross-tool guidance when one or more CIDs have no GHS data, pointing to an alternative source.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / requestedCount
        Added value: +{
        +  "description": "CIDs requested.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / results
        Added value: +{
        +  "description": "Safety results, one per requested CID (input order preserved).",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Per-CID safety result.",
        +    "properties": {
        +      "cid": {
        +        "description": "PubChem Compound ID.",
        +        "type": "number"
        +      },
        +      "ghs": {
        +        "additionalProperties": false,
        +        "description": "GHS classification data.",
        +        "properties": {
        +          "hazardStatements": {
        +            "description": "GHS hazard statements.",
        +            "items": {
        +              "additionalProperties": false,
        +              "description": "GHS hazard statement entry.",
        +              "properties": {
        +                "code": {
        +                  "description": "H-code (e.g. \"H225\").",
        +                  "type": "string"
        +                },
        +                "statement": {
        +                  "description": "Hazard statement text.",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "code",
        +                "statement"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "pictograms": {
        +            "description": "GHS pictogram labels (e.g. \"Flammable\", \"Toxic\").",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "precautionaryStatements": {
        +            "description": "GHS precautionary statements.",
        +            "items": {
        +              "additionalProperties": false,
        +              "description": "GHS precautionary statement entry.",
        +              "properties": {
        +                "code": {
        +                  "description": "P-code (e.g. \"P210\").",
        +                  "type": "string"
        +                },
        +                "statement": {
        +                  "description": "Precautionary statement text.",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "code",
        +                "statement"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "signalWord": {
        +            "description": "GHS signal word: \"Danger\" or \"Warning\".",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "pictograms",
        +          "hazardStatements",
        +          "precautionaryStatements"
        +        ],
        +        "type": "object"
        +      },
        +      "hasData": {
        +        "description": "Whether GHS safety data is available for this compound.",
        +        "type": "boolean"
        +      },
        +      "source": {
        +        "description": "Data source attribution.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "cid",
        +      "hasData"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / source
        Removed value: -{
        -  "description": "Data source attribution.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / withDataCount
        Added value: +{
        +  "description": "CIDs with GHS safety data available.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "cid",
        -  "hasData"
        -]New value: +[
        +  "results",
        +  "requestedCount",
        +  "withDataCount"
        +]
    • Changedpubchem_get_summary4 fields changed
      • addedOutput schema / properties / foundCount
        Added value: +{
        +  "description": "Identifiers resolved to a summary.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery guidance when one or more identifiers were not found.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / requestedCount
        Added value: +{
        +  "description": "Identifiers requested.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "entityType",
        -  "summaries"
        -]New value: +[
        +  "entityType",
        +  "summaries",
        +  "requestedCount",
        +  "foundCount"
        +]
  12. 8 tool updatesv0.1.22
    • Changedpubchem_get_bioactivity6 fields changed
      • changedInput schema / properties / cid / description
        Previous value: -"PubChem Compound ID."New value: +"PubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds."
      • addedOutput schema / properties / results / items / description
        Added value: +"Assay result entry."
      • addedOutput schema / properties / results / items / properties / activityValues / items / description
        Added value: +"Quantitative activity measurement entry."
      • changedOutput schema / properties / results / items / properties / activityValues / items / properties / name / description
        Previous value: -"Measurement name (e.g. IC50, EC50, Ki)."New value: +"Measurement name (e.g. IC50, EC50, Ki). Omitted when not reported."
      • changedOutput schema / properties / results / items / properties / activityValues / items / properties / unit / description
        Previous value: -"Unit of measurement (e.g. uM, nM)."New value: +"Unit of measurement (e.g. uM, nM). Omitted when not reported."
      • changedOutput schema / properties / results / items / properties / activityValues / items / required
        Previous value: -[
        -  "name",
        -  "value",
        -  "unit"
        -]New value: +[
        +  "value"
        +]
    • Changedpubchem_get_compound_details19 fields changed
      • changedInput schema / properties / cids / description
        Previous value: -"PubChem Compound IDs to fetch (1-100). Batched efficiently."New value: +"PubChem Compound IDs to fetch (1-100). Batched efficiently. Resolve from names/SMILES with pubchem_search_compounds."
      • changedInput schema / properties / includeClassification / description
        Previous value: -"Fetch pharmacological classification from PUG View: FDA Established Pharmacologic Classes, mechanisms of action, MeSH classes, and ATC codes. Adds one API call per CID — consider limiting CID count when enabled."New value: +"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 return without classification."
      • changedInput schema / properties / includeDescription / description
        Previous value: -"Fetch textual description from PUG View (pharmacology, mechanism, therapeutic use). Adds one API call per CID — consider limiting CID count when enabled."New value: +"Include textual descriptions (pharmacology, mechanism, therapeutic use) attributed by source. Well-studied compounds have many overlapping summaries — capped via maxDescriptions. Fetched only for the first 10 CIDs in the batch; remaining CIDs return without descriptions."
      • changedInput schema / properties / includeSynonyms / description
        Previous value: -"Fetch all known names and synonyms (trade names, systematic names, registry numbers)."New value: +"Fetch all known names and synonyms (trade names, systematic names, registry numbers). One API call per CID — slower than the property batch for large CID lists."
      • addedInput schema / properties / maxDescriptions
        Added value: +{
        +  "default": 3,
        +  "description": "Max number of distinct description entries per compound (1-20). PubChem returns near-duplicate summaries from many depositors; we dedup and cap to keep responses focused. Default: 3.",
        +  "maximum": 20,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / compounds / items / description
        Added value: +"Per-CID compound detail record."
      • addedOutput schema / properties / compounds / items / properties / classification / properties / atcCodes / items / description
        Added value: +"ATC code entry with hierarchical description."
      • removedOutput schema / properties / compounds / items / properties / description
        Removed value: -{
        -  "description": "Textual description from PUG View.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / compounds / items / properties / descriptions
        Added value: +{
        +  "description": "Textual descriptions, deduplicated and capped at maxDescriptions. Each entry carries optional source attribution.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Description entry with optional source attribution.",
        +    "properties": {
        +      "source": {
        +        "description": "Depositor source (e.g. \"DrugBank\", \"Wikipedia\", \"ChEBI\").",
        +        "type": "string"
        +      },
        +      "text": {
        +        "description": "Description text.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / compounds / items / properties / descriptionsTotal
        Added value: +{
        +  "description": "Total distinct descriptions available before truncation. Larger than descriptions.length when more sources exist — increase maxDescriptions to see them.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / mw / description
        Previous value: -"Molecular weight rule (≤500)."New value: +"Molecular weight rule (≤500 g/mol)."
      • changedOutput schema / properties / compounds / items / properties / drugLikeness / properties / lipinski / properties / xLogP / description
        Previous value: -"XLogP rule (≤5)."New value: +"XLogP rule (≤5; calculated logP)."
      • addedOutput schema / properties / compounds / items / properties / drugLikeness / properties / pass / anyOf
        Added value: +[
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / compounds / items / properties / drugLikeness / properties / pass / description
        Previous value: -"Overall drug-likeness pass."New value: +"Overall drug-likeness pass. Null when insufficient properties were available."
      • removedOutput schema / properties / compounds / items / properties / drugLikeness / properties / pass / type
        Removed value: -"boolean"
      • changedOutput schema / properties / compounds / items / properties / drugLikeness / properties / veber / properties / tpsa / description
        Previous value: -"TPSA rule (≤140)."New value: +"Topological polar surface area rule (≤140 Ų)."
      • addedOutput schema / properties / compounds / items / properties / found
        Added value: +{
        +  "description": "False when the CID does not exist in PubChem (properties, description, etc. are empty).",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / compounds / items / properties / properties / description
        Previous value: -"Requested physicochemical properties."New value: +"Physicochemical properties keyed by name (echoes input.properties or the default core set; drug-likeness inputs are appended automatically when includeDrugLikeness is true)."
      • changedOutput schema / properties / compounds / items / required
        Previous value: -[
        -  "cid",
        -  "properties"
        -]New value: +[
        +  "cid",
        +  "found",
        +  "properties"
        +]
    • Changedpubchem_get_compound_image2 fields changed
      • changedInput schema / properties / cid / description
        Previous value: -"PubChem Compound ID."New value: +"PubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds."
      • changedOutput schema / properties / mimeType / description
        Previous value: -"Image MIME type."New value: +"MIME type — always \"image/png\"."
    • Changedpubchem_get_compound_safety3 fields changed
      • changedInput schema / properties / cid / description
        Previous value: -"PubChem Compound ID."New value: +"PubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds."
      • addedOutput schema / properties / ghs / properties / hazardStatements / items / description
        Added value: +"GHS hazard statement entry."
      • addedOutput schema / properties / ghs / properties / precautionaryStatements / items / description
        Added value: +"GHS precautionary statement entry."
    • Changedpubchem_get_compound_xrefs7 fields changed
      • changedInput schema / properties / cid / description
        Previous value: -"PubChem Compound ID."New value: +"PubChem Compound ID. Resolve from name/SMILES with pubchem_search_compounds."
      • changedInput schema / properties / maxPerType / description
        Previous value: -"Max IDs to return per xref type (1-500). A compound may have thousands of PubMed references — this cap prevents bloat. Total count always reported. Default: 50."New value: +"Max IDs to return per xref type (1-500). A compound may have thousands of PubMed references. Total count always reported. Default: 50."
      • changedInput schema / properties / xrefTypes / description
        Previous value: -"Cross-reference types to retrieve. Options: RegistryID, RN (CAS numbers), PubMedID, PatentID, GeneID, ProteinGI, TaxonomyID."New value: +"Cross-reference types to retrieve. String IDs: RegistryID (DSSTox/EPA registry numbers), RN (CAS numbers), PatentID. Numeric IDs: PubMedID, GeneID (NCBI Gene), ProteinGI (legacy NCBI Protein GI), TaxonomyID."
      • addedOutput schema / properties / xrefs / items / description
        Added value: +"Cross-reference group for one type."
      • changedOutput schema / properties / xrefs / items / properties / ids / items / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]New value: +[
        +  {
        +    "description": "String-form cross-reference ID (e.g. CAS number, patent).",
        +    "type": "string"
        +  },
        +  {
        +    "description": "Numeric cross-reference ID (e.g. PubMed ID, Gene ID).",
        +    "type": "number"
        +  }
        +]
      • addedOutput schema / properties / xrefs / items / properties / ids / items / description
        Added value: +"Cross-reference identifier — string or number depending on type."
      • changedOutput schema / properties / xrefs / items / properties / type / description
        Previous value: -"Cross-reference type."New value: +"Cross-reference type: RegistryID, RN, PubMedID, PatentID, GeneID, ProteinGI, or TaxonomyID."
    • Changedpubchem_get_summary8 fields changed
      • changedInput schema / properties / identifiers / items / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]New value: +[
        +  {
        +    "description": "String identifier (e.g. UniProt accession).",
        +    "type": "string"
        +  },
        +  {
        +    "description": "Numeric identifier (e.g. AID, Gene ID, Tax ID).",
        +    "type": "number"
        +  }
        +]
      • addedInput schema / properties / identifiers / items / description
        Added value: +"Entity identifier — string or number depending on entityType."
      • addedOutput schema / properties / summaries / items / description
        Added value: +"Per-identifier summary result."
      • changedOutput schema / properties / summaries / items / properties / data / additionalProperties
        Previous value: -{}New value: +false
      • changedOutput schema / properties / summaries / items / properties / data / description
        Previous value: -"Entity summary data (shape varies by type)."New value: +"Entity summary data. Populated fields depend on entityType."
      • addedOutput schema / properties / summaries / items / properties / data / properties
        Added value: +{
        +  "aid": {
        +    "description": "Assay ID — present on assay summaries.",
        +    "type": "number"
        +  },
        +  "commonName": {
        +    "description": "Common name (taxonomy summaries).",
        +    "type": "string"
        +  },
        +  "description": {
        +    "description": "Descriptive text when available.",
        +    "type": "string"
        +  },
        +  "geneId": {
        +    "description": "NCBI Gene ID (gene summaries).",
        +    "type": "number"
        +  },
        +  "lineage": {
        +    "description": "Parent taxonomy lineage (taxonomy summaries).",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "name": {
        +    "description": "Primary display name.",
        +    "type": "string"
        +  },
        +  "numActive": {
        +    "description": "Substances marked active (assay summaries).",
        +    "type": "number"
        +  },
        +  "numSubstances": {
        +    "description": "Substances tested (assay summaries).",
        +    "type": "number"
        +  },
        +  "proteinAccession": {
        +    "description": "Protein accession (protein summaries).",
        +    "type": "string"
        +  },
        +  "rank": {
        +    "description": "Taxonomic rank (taxonomy summaries).",
        +    "type": "string"
        +  },
        +  "scientificName": {
        +    "description": "Scientific name (taxonomy summaries).",
        +    "type": "string"
        +  },
        +  "sourceName": {
        +    "description": "Data source attribution (assay summaries).",
        +    "type": "string"
        +  },
        +  "symbol": {
        +    "description": "Gene symbol (gene summaries).",
        +    "type": "string"
        +  },
        +  "synonyms": {
        +    "description": "Known synonyms / other names.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "taxonomy": {
        +    "description": "Taxonomy scientific name (gene/protein summaries).",
        +    "type": "string"
        +  },
        +  "taxonomyId": {
        +    "description": "NCBI Taxonomy ID (gene/protein/taxonomy summaries).",
        +    "type": "number"
        +  }
        +}
      • removedOutput schema / properties / summaries / items / properties / data / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • changedOutput schema / properties / summaries / items / properties / identifier / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]New value: +[
        +  {
        +    "description": "String identifier (e.g. UniProt accession).",
        +    "type": "string"
        +  },
        +  {
        +    "description": "Numeric identifier (e.g. AID, Gene ID, Tax ID).",
        +    "type": "number"
        +  }
        +]
    • Changedpubchem_search_assays4 fields changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery guidance when no assays matched — echoes the target and suggests alternative search types. Absent when assays were returned.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / targetType / description
        Previous value: -"Target identifier type used."New value: +"Target identifier type used: genesymbol, proteinname, geneid, or proteinaccession."
      • changedOutput schema / properties / totalFound / description
        Previous value: -"Total AIDs found."New value: +"Total AIDs found before the maxResults cap."
      • changedOutput schema / required
        Previous value: -[
        -  "targetType",
        -  "targetQuery",
        -  "totalFound",
        -  "aids"
        -]New value: +[
        +  "aids",
        +  "targetType",
        +  "targetQuery",
        +  "totalFound"
        +]
    • Changedpubchem_search_compounds9 fields changed
      • changedInput schema / properties / identifiers / description
        Previous value: -"Required for identifier search. Array of identifiers to resolve (1-25). Examples: [\"aspirin\", \"ibuprofen\"] for name, [\"CC(=O)OC1=CC=CC=C1C(=O)O\"] for SMILES."New value: +"Required for identifier search. Array of identifiers to resolve (1-25). Examples: [\"aspirin\", \"ibuprofen\"] for name, [\"CC(=O)OC1=CC=CC=C1C(=O)O\"] for SMILES, [\"BSYNRYMUTXBXSQ-UHFFFAOYSA-N\"] for inchikey (27-char block format)."
      • changedInput schema / properties / query / description
        Previous value: -"Required for substructure/superstructure/similarity searches. A SMILES string or PubChem CID (as string) for the query structure."New value: +"Required for substructure/superstructure/similarity searches. A SMILES string (e.g. \"CC(=O)O\") or PubChem CID as a string (e.g. \"2244\")."
      • changedInput schema / properties / searchType / description
        Previous value: -"Search strategy: \"identifier\" (name/SMILES/InChIKey lookup), \"formula\", \"substructure\", \"superstructure\", or \"similarity\"."New value: +"Search strategy. \"identifier\": name/SMILES/InChIKey lookup. \"formula\": molecular formula. \"substructure\": find compounds containing the query as a substructure. \"superstructure\": find compounds that are themselves substructures of the query. \"similarity\": 2D Tanimoto similarity to the query."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery guidance when no compounds matched — echoes search strategy and suggests how to broaden. Absent when results were returned.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / description
        Added value: +"Matching compound entry."
      • changedOutput schema / properties / results / items / properties / properties / description
        Previous value: -"Compound properties when requested."New value: +"Compound properties keyed by name (echoes input.properties; only present when requested)."
      • changedOutput schema / properties / searchType / description
        Previous value: -"The search strategy used."New value: +"Search strategy used: identifier, formula, substructure, superstructure, or similarity."
      • changedOutput schema / properties / totalFound / description
        Previous value: -"Total CIDs found (before maxResults cap)."New value: +"Total CIDs found before the maxResults cap."
      • changedOutput schema / required
        Previous value: -[
        -  "searchType",
        -  "totalFound",
        -  "results"
        -]New value: +[
        +  "results",
        +  "searchType",
        +  "totalFound"
        +]
  13. 8 tool updatesv0.1.11
    • First observedpubchem_get_bioactivity
    • First observedpubchem_get_compound_details
    • First observedpubchem_get_compound_image
    • First observedpubchem_get_compound_safety
    • First observedpubchem_get_compound_xrefs
    • First observedpubchem_get_summary
    • First observedpubchem_search_assays
    • First observedpubchem_search_compounds

TDQS

A4.1/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target clearly distinct PubChem resources or actions: compound search, details, image, 3D structure, safety, xrefs, bioactivity, interactions, assays, and summaries. There is some overlap between bioactivity, interactions, search_assays, and get_summary around assay/target information, but the descriptions provide enough guidance to distinguish their intended use.

Naming Consistency5/5

All tools use snake_case with a consistent pubchem_ prefix and predictable get/search verb patterns. Compound-specific tools follow pubchem_get_compound_* or pubchem_search_compounds, with only minor natural variation for broader tools like get_summary and get_bioactivity.

Tool Count5/5

Ten tools is well-scoped for a PubChem server and each tool appears to earn its place by covering a distinct retrieval need. There is no obvious redundancy or filler in the tool set.

Completeness4/5

The surface covers the major PubChem workflows: compound search, properties/details, bioactivity, interactions, assay discovery, 3D structures, images, safety data, cross-references, and entity summaries. Minor gaps remain, such as no dedicated full assay-detail tool beyond pubchem_get_summary and limited direct gene/protein/taxonomy search outside assay lookup, but agents can work around these.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables comprehensive access to PubChem's chemical database with over 110 million compounds. Supports chemical searches, structure analysis, bioactivity data, safety information, and molecular property calculations through 30 specialized tools.
    30
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to search and retrieve chemical compound information, structures, and physical properties from the PubChem database. It supports querying via compound names, SMILES notation, or CIDs to provide detailed molecular data for chemical analysis.
    5
    -
  • F
    license
    B
    quality
    D
    maintenance
    Extracts basic chemical information and drug data from the PubChem API. It enables users to retrieve molecular details such as SMILES, IUPAC names, molecular formulas, and synonyms for specific compounds.
    3
    11
    -