Skip to main content
Glama

chembl-get-drug-info

chembl_get_drug_info
Read-onlyIdempotent

Pharmacology for a drug (molecule): mechanism(s) of action, the molecular target(s) it acts on, action type (inhibitor / agonist / …), first-approval year, and clinical indications with the max phase reached for each. Supply molecule_chembl_id (from chembl_search_molecules). Distinct from the openfda server's label/adverse-event view — this is the curated mechanism-and-indication record. A mechanism's target_chembl_id chains into chembl_get_bioactivities for compounds hitting the same target. Each list carries its own retrieval state: an empty mechanisms or indications array means the molecule has none recorded only when the matching mechanisms_status / indications_status is "complete" — "failed" means the upstream request was rejected and the array says nothing about the molecule, and "truncated" means the page cap bounded the list at fewer rows than the matching *_total_count.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
molecule_chembl_idYesChEMBL molecule ID (from chembl_search_molecules), e.g. "CHEMBL939" for gefitinib.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoDisclosure of anything the two lists do not say for themselves: a list whose upstream fetch failed (so its emptiness means nothing), a list the page cap bounded, or — only when both lists came back complete and empty — that the molecule may be a research compound rather than a drug.
max_phaseNoMax clinical phase across indications: 4 = marketed. Null when unknown.
pref_nameNoPreferred drug name, e.g. "GEFITINIB". Null when unnamed.
mechanismsNoMechanisms of action. Empty is authoritative only when mechanisms_status is "complete".
indicationsNoClinical indications. Empty is authoritative only when indications_status is "complete".
first_approvalNoYear of first approval, e.g. 2003. Null when unapproved or unknown.
mechanisms_statusNoRetrieval state of the mechanism list. "complete" = every row ChEMBL records is present, so an empty array is a fact about the molecule. "truncated" = the single-request page cap bounded the list, so the array is a prefix of mechanisms_total_count rows. "failed" = the upstream request was rejected, so the empty array is unknown data, NOT evidence that none exist — re-call chembl_get_drug_info to retry.
indications_statusNoRetrieval state of the indication list. "complete" = every row ChEMBL records is present, so an empty array is a fact about the molecule. "truncated" = the single-request page cap bounded the list, so the array is a prefix of indications_total_count rows. "failed" = the upstream request was rejected, so the empty array is unknown data, NOT evidence that none exist — re-call chembl_get_drug_info to retry.
molecule_chembl_idNoThe ChEMBL molecule ID queried.
mechanisms_total_countNoTotal mechanism rows ChEMBL holds for this molecule (upstream page_meta.total_count). Exceeds the returned array length exactly when the status is "truncated". Null when the fetch failed — the count is unknown, never 0.
indications_total_countNoTotal indication rows ChEMBL holds for this molecule (upstream page_meta.total_count). Exceeds the returned array length exactly when the status is "truncated". Null when the fetch failed — the count is unknown, never 0.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed22 schema fields changed
    • removedOutput schema / properties / first_approval / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / first_approval / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / indications / items / properties / efo_term / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / indications / items / properties / efo_term / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / indications / items / properties / max_phase_for_ind / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / indications / items / properties / max_phase_for_ind / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / indications / items / properties / mesh_heading / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / indications / items / properties / mesh_heading / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / indications_total_count / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / indications_total_count / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / max_phase / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / max_phase / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / mechanisms / items / properties / action_type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / mechanisms / items / properties / action_type / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / mechanisms / items / properties / mechanism_of_action / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / mechanisms / items / properties / mechanism_of_action / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / mechanisms / items / properties / target_chembl_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / mechanisms / items / properties / target_chembl_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / mechanisms_total_count / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / mechanisms_total_count / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / pref_name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pref_name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. Changed6 schema 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": [
      +      "molecule_chembl_id",
      +      "pref_name",
      +      "max_phase",
      +      "first_approval",
      +      "mechanisms",
      +      "mechanisms_total_count",
      +      "mechanisms_status",
      +      "indications",
      +      "indications_total_count",
      +      "indications_status"
      +    ]
      +  },
      +  {
      +    "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: -[
      -  "molecule_chembl_id",
      -  "pref_name",
      -  "max_phase",
      -  "first_approval",
      -  "mechanisms",
      -  "mechanisms_total_count",
      -  "mechanisms_status",
      -  "indications",
      -  "indications_total_count",
      -  "indications_status"
      -]
  3. Changed8 schema fields changed
    • changedOutput schema / properties / indications / description
      Previous value: -"Clinical indications. Empty when none are recorded."New value: +"Clinical indications. Empty is authoritative only when indications_status is \"complete\"."
    • addedOutput schema / properties / indications_status
      Added value: +{
      +  "description": "Retrieval state of the indication list. \"complete\" = every row ChEMBL records is present, so an empty array is a fact about the molecule. \"truncated\" = the single-request page cap bounded the list, so the array is a prefix of indications_total_count rows. \"failed\" = the upstream request was rejected, so the empty array is unknown data, NOT evidence that none exist — re-call chembl_get_drug_info to retry.",
      +  "enum": [
      +    "complete",
      +    "truncated",
      +    "failed"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / indications_total_count
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Total indication rows ChEMBL holds for this molecule (upstream page_meta.total_count). Exceeds the returned array length exactly when the status is \"truncated\". Null when the fetch failed — the count is unknown, never 0."
      +}
    • changedOutput schema / properties / mechanisms / description
      Previous value: -"Mechanisms of action. Empty when none are recorded."New value: +"Mechanisms of action. Empty is authoritative only when mechanisms_status is \"complete\"."
    • addedOutput schema / properties / mechanisms_status
      Added value: +{
      +  "description": "Retrieval state of the mechanism list. \"complete\" = every row ChEMBL records is present, so an empty array is a fact about the molecule. \"truncated\" = the single-request page cap bounded the list, so the array is a prefix of mechanisms_total_count rows. \"failed\" = the upstream request was rejected, so the empty array is unknown data, NOT evidence that none exist — re-call chembl_get_drug_info to retry.",
      +  "enum": [
      +    "complete",
      +    "truncated",
      +    "failed"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / mechanisms_total_count
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Total mechanism rows ChEMBL holds for this molecule (upstream page_meta.total_count). Exceeds the returned array length exactly when the status is \"truncated\". Null when the fetch failed — the count is unknown, never 0."
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when no pharmacology was found — the molecule may be a research compound, not a drug."New value: +"Disclosure of anything the two lists do not say for themselves: a list whose upstream fetch failed (so its emptiness means nothing), a list the page cap bounded, or — only when both lists came back complete and empty — that the molecule may be a research compound rather than a drug."
    • changedOutput schema / required
      Previous value: -[
      -  "molecule_chembl_id",
      -  "pref_name",
      -  "max_phase",
      -  "first_approval",
      -  "mechanisms",
      -  "indications"
      -]New value: +[
      +  "molecule_chembl_id",
      +  "pref_name",
      +  "max_phase",
      +  "first_approval",
      +  "mechanisms",
      +  "mechanisms_total_count",
      +  "mechanisms_status",
      +  "indications",
      +  "indications_total_count",
      +  "indications_status"
      +]
  4. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark the operation read-only, open-world, and idempotent, so the description adds meaningful behavioral context beyond them: it explains retrieval states (complete, failed, truncated) and warns that empty arrays are only meaningful when the matching status is 'complete'. This is exactly the kind of non-obvious behavior an agent needs.

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 front-loaded with the return payload, then gives provenance, sibling distinction, chaining, and retrieval-state semantics. It is longer than minimal, but each sentence adds necessary operational detail; the final status sentence is dense but earns its place.

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 single-parameter pharmacology lookup, the description covers input source, output content, alternative views, onward chaining to bioactivities, and failure/truncation semantics. With annotations and an output schema present, nothing essential is missing for correct invocation and interpretation.

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?

The single parameter is fully documented in the schema with an example (CHEMBL939), and the description repeats the provenance ('from chembl_search_molecules') without adding new parameter-level semantics. With 100% schema coverage, 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?

The description names the exact resource (a drug/molecule's pharmacology) and lists the concrete fields returned: mechanism(s) of action, molecular targets, action type, first-approval year, and clinical indications with max phase. It also distinguishes itself from the openfda label/adverse-event view and from chembl_get_bioactivities, so an agent can tell it apart from siblings.

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?

It explicitly instructs the agent to supply molecule_chembl_id from chembl_search_molecules, tells when to prefer this tool over the openfda label/adverse-event view, and explains how a target_chembl_id chains into chembl_get_bioactivities for further exploration. This gives clear when-to-use and when-not-to-use guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.