Skip to main content
Glama

Fda Drug Events

fda_drug_events
Read-onlyIdempotent

Search FAERS adverse event reports by drug name, MedDRA reaction term, or date range. Returns report counts, reaction types, seriousness levels, and dates. Natural multi-word reaction phrasing is retried against MedDRA preferred-term word order before an empty result is reported. FAERS reports do not establish incidence or causality.

Input Schema

NameRequiredDescriptionDefault
skipNoOffset for pagination (default 0)
limitNoNumber of results (1-100, default 10)
queryYesOpenFDA search query. FAERS stores a drug under FOUR different fields and no single one is complete: patient.drug.openfda.generic_name / .brand_name / .substance_name are enrichment (missing for some newer or compounded drugs, but when present they fold every brand variant under the ingredient), and patient.drug.medicinalproduct is the reporter's own free-text drug name (always present, but literal — a generic-name filter there misses every report filed under a brand). A query that names exactly ONE of these four fields for a drug is automatically expanded to an OR across all four with the same value, so you get every report regardless of which field openFDA happened to index it under — the response names which fields were searched in drug_name_fields_searched. Write whichever single field is natural; do not hand-write the OR yourself. Examples: 'patient.drug.medicinalproduct:"OZEMPIC"', 'patient.drug.openfda.generic_name:"semaglutide"+AND+serious:1', 'receivedate:[20240101+TO+20241231]'

Output Schema

NameRequiredDescriptionDefault
skipYesOffset used in pagination
limitYesNumber of results returned
totalYesTotal count of matching adverse event reports
resultsYesArray of adverse event report objects
reaction_resolvedNoThe MedDRA preferred term actually used for the filter
reaction_requestedNoThe reaction term as the caller supplied it, uppercased
reaction_resolutionNoHow the supplied reaction term mapped onto a MedDRA preferred term. not_a_meddra_preferred_term means the filter matched nothing — counts are zero because the term missed, not because no reports exist
reaction_resolution_hintNoPresent when the term matched nothing; names a working way to discover the real preferred terms
reaction_resolution_noteNoPresent when word order was corrected; states the substitution made

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"OpenFDA search query. Filter drugs on patient.drug.medicinalproduct — the report's own drug-name field, present on every record and matching brand or generic. The patient.drug.openfda.* fields are enrichment that is missing for many newer drugs (semaglutide/OZEMPIC among them) and silently match nothing; this tool retries them against medicinalproduct, but naming it directly costs one call instead of two. Examples: 'patient.drug.medicinalproduct:\"OZEMPIC\"', 'patient.drug.medicinalproduct:\"semaglutide\"+AND+serious:1', 'receivedate:[20240101+TO+20241231]'"New value: +"OpenFDA search query. FAERS stores a drug under FOUR different fields and no single one is complete: patient.drug.openfda.generic_name / .brand_name / .substance_name are enrichment (missing for some newer or compounded drugs, but when present they fold every brand variant under the ingredient), and patient.drug.medicinalproduct is the reporter's own free-text drug name (always present, but literal — a generic-name filter there misses every report filed under a brand). A query that names exactly ONE of these four fields for a drug is automatically expanded to an OR across all four with the same value, so you get every report regardless of which field openFDA happened to index it under — the response names which fields were searched in drug_name_fields_searched. Write whichever single field is natural; do not hand-write the OR yourself. Examples: 'patient.drug.medicinalproduct:\"OZEMPIC\"', 'patient.drug.openfda.generic_name:\"semaglutide\"+AND+serious:1', 'receivedate:[20240101+TO+20241231]'"
  2. Changed2 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "query": "patient.drug.openfda.brand_name:\"OZEMPIC\""
      -  },
      -  {
      -    "limit": 50,
      -    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+serious:1"
      -  },
      -  {
      -    "limit": 10,
      -    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+patient.reaction.reactionmeddrapt.exact:\"ISCHAEMIC OPTIC NEUROPATHY\""
      -  }
      -]New value: +[
      +  {
      +    "query": "patient.drug.medicinalproduct:\"OZEMPIC\""
      +  },
      +  {
      +    "limit": 50,
      +    "query": "patient.drug.medicinalproduct:\"semaglutide\"+AND+serious:1"
      +  },
      +  {
      +    "limit": 10,
      +    "query": "patient.drug.medicinalproduct:\"semaglutide\"+AND+patient.reaction.reactionmeddrapt.exact:\"OPTIC ISCHAEMIC NEUROPATHY\""
      +  }
      +]
    • changedInput schema / properties / query / description
      Previous value: -"OpenFDA search query. Examples: 'patient.drug.openfda.brand_name:\"OZEMPIC\"', 'patient.drug.openfda.generic_name:\"semaglutide\"+AND+serious:1', 'receivedate:[20240101+TO+20241231]'"New value: +"OpenFDA search query. Filter drugs on patient.drug.medicinalproduct — the report's own drug-name field, present on every record and matching brand or generic. The patient.drug.openfda.* fields are enrichment that is missing for many newer drugs (semaglutide/OZEMPIC among them) and silently match nothing; this tool retries them against medicinalproduct, but naming it directly costs one call instead of two. Examples: 'patient.drug.medicinalproduct:\"OZEMPIC\"', 'patient.drug.medicinalproduct:\"semaglutide\"+AND+serious:1', 'receivedate:[20240101+TO+20241231]'"
  3. Changed6 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "query": "patient.drug.openfda.brand_name:\"OZEMPIC\""
      -  },
      -  {
      -    "limit": 50,
      -    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+serious:1"
      -  },
      -  {
      -    "limit": 10,
      -    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+patient.reaction.reactionmeddrapt.exact:\"OPTIC ISCHAEMIC NEUROPATHY\""
      -  }
      -]New value: +[
      +  {
      +    "query": "patient.drug.openfda.brand_name:\"OZEMPIC\""
      +  },
      +  {
      +    "limit": 50,
      +    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+serious:1"
      +  },
      +  {
      +    "limit": 10,
      +    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+patient.reaction.reactionmeddrapt.exact:\"ISCHAEMIC OPTIC NEUROPATHY\""
      +  }
      +]
    • addedOutput schema / properties / reaction_requested
      Added value: +{
      +  "description": "The reaction term as the caller supplied it, uppercased",
      +  "type": "string"
      +}
    • addedOutput schema / properties / reaction_resolution
      Added value: +{
      +  "description": "How the supplied reaction term mapped onto a MedDRA preferred term. not_a_meddra_preferred_term means the filter matched nothing — counts are zero because the term missed, not because no reports exist",
      +  "enum": [
      +    "exact_match",
      +    "word_order_corrected",
      +    "not_a_meddra_preferred_term"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / reaction_resolution_hint
      Added value: +{
      +  "description": "Present when the term matched nothing; names a working way to discover the real preferred terms",
      +  "type": "string"
      +}
    • addedOutput schema / properties / reaction_resolution_note
      Added value: +{
      +  "description": "Present when word order was corrected; states the substitution made",
      +  "type": "string"
      +}
    • addedOutput schema / properties / reaction_resolved
      Added value: +{
      +  "description": "The MedDRA preferred term actually used for the filter",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "query": "patient.drug.openfda.brand_name:\"OZEMPIC\""
      -  },
      -  {
      -    "limit": 50,
      -    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+serious:1"
      -  }
      -]New value: +[
      +  {
      +    "query": "patient.drug.openfda.brand_name:\"OZEMPIC\""
      +  },
      +  {
      +    "limit": 50,
      +    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+serious:1"
      +  },
      +  {
      +    "limit": 10,
      +    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+patient.reaction.reactionmeddrapt.exact:\"OPTIC ISCHAEMIC NEUROPATHY\""
      +  }
      +]
  5. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "limit": {
      +      "description": "Number of results returned",
      +      "type": "number"
      +    },
      +    "results": {
      +      "description": "Array of adverse event report objects",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "skip": {
      +      "description": "Offset used in pagination",
      +      "type": "number"
      +    },
      +    "total": {
      +      "description": "Total count of matching adverse event reports",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "total",
      +    "skip",
      +    "limit",
      +    "results"
      +  ],
      +  "type": "object"
      +}
  6. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "query": "patient.drug.openfda.brand_name:\"OZEMPIC\""
      +  },
      +  {
      +    "limit": 50,
      +    "query": "patient.drug.openfda.generic_name:\"semaglutide\"+AND+serious:1"
      +  }
      +]
  7. First observed

TDQS

A3.7/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, non-destructive behavior, so the bar is lower. The description still adds real value: the automatic MedDRA preferred-term reordering retry before returning empty, and the explicit caveat that FAERS reports do not establish incidence or causality — both material for interpreting results.

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?

Four sentences, each doing distinct work: scope, return shape, retry behavior, and the causal caveat. Front-loaded with the core purpose and free of filler, though the return-value sentence is partly redundant with the existing output schema.

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?

With an output schema present, return values need not be re-explained, and annotations cover the safety profile. The description still supplies the query-expansion behavior, the MedDRA retry, and the epidemiological caveat, leaving nothing important an agent needs before invoking the tool.

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 description coverage is 100% and the query parameter's schema text already explains the four-field expansion and drug_name_fields_searched. The description complements this by naming the searchable axes and disclosing the MedDRA word-order retry, which affects how a natural-language reaction string is interpreted.

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 ('Search FAERS adverse event reports') plus the three search axes (drug name, MedDRA reaction term, date range), so the agent knows exactly what this tool does. It does not, however, distinguish itself from the several FAERS siblings (fda_event_counts, fda_faers_trend, fda_faers_reaction_profile, fda_faers_signal_summary), which hurts differentiation.

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?

There is no when-to-use guidance and no mention of alternatives, despite six closely related FDA/FAERS siblings that an agent must choose between. Usage must be inferred from the search axes, which is not enough routing information for this tool family.

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.