Skip to main content
Glama

Unofficial FDA MCP Server

A comprehensive Model Context Protocol (MCP) server that provides advanced pharmaceutical intelligence through the FDA's openFDA database, Orange Book, and Purple Book. This server combines real-time data access with locally-cached patent, exclusivity, and biosimilar data to deliver actionable insights for:

  • Drug Safety & Adverse Events: Real-time FAERS data and safety alerts

  • Patent Intelligence: Patent cliffs, loss of exclusivity (LOE) analysis, generic entry forecasting

  • Therapeutic Equivalents: AB-rated generic alternatives and substitutability

  • Biosimilar Intelligence: Biosimilar approvals and interchangeability designations

  • Regulatory Intelligence: FDA approvals, recalls, and drug shortages

  • Competitive Analysis: Market exclusivity periods and competitive landscape

Key Features:

  • Fast Queries: <10ms response time for Orange/Purple Book data after initial setup

  • Auto-Updates: Automatic monthly data downloads and caching

  • Comprehensive Coverage: 47,000+ drug products, 21,000+ patents, 2,000+ biologics

  • Zero Configuration: Works out of the box with automatic data downloads

Usage

{
  "mcpServers": {
    "fda-mcp-server": {
      "command": "node",
      "args": ["/path/to/fda-mcp-server/build/index.js"],
      "env": {}
    }
  }
}

What's New: Orange Book & Purple Book Integration

This server now includes comprehensive FDA Orange Book and Purple Book data for pharmaceutical intelligence:

Orange Book (Drug Patents & Generic Equivalents)

  • 47,486 drug products with approval dates and marketing status

  • 21,126 patents with expiration dates and use codes

  • 2,444 exclusivity periods (orphan, pediatric, new clinical studies, etc.)

  • Therapeutic Equivalence (TE) Codes: Identify AB-rated generics pharmacists can substitute

  • Patent Cliff Analysis: Forecast generic entry dates and loss of exclusivity

Purple Book (Biologics & Biosimilars)

  • 2,168 biological products including reference products and biosimilars

  • Interchangeability designations: Know which biosimilars can be substituted by pharmacists

  • Licensing dates and applicants for all biologics

  • Reference product mapping: Links biosimilars to their reference products

  • Market exclusivity tracking including orphan drug exclusivity

API Reference

Tool: fda_info

Unified tool for FDA drug information lookup, safety data, and pharmaceutical intelligence.

Parameters

Parameter

Type

Required

Default

Description

method

string

Yes

-

Operation type: lookup_drug, search_orange_book, get_therapeutic_equivalents, get_patent_exclusivity, analyze_patent_cliff, search_purple_book, get_biosimilar_interchangeability

search_term

string

Conditional

-

Search term or complex query (supports AND/OR, wildcards, ranges, field combinations)

drug_name

string

Conditional

-

Drug name for Orange/Purple Book searches

nda_number

string

Conditional

-

NDA number for patent/exclusivity lookup

reference_product

string

Conditional

-

Reference product name for biosimilar interchangeability

include_generics

boolean

No

true

Include generic products in Orange Book searches

years_ahead

integer

No

5

Years ahead for patent cliff analysis

search_type

string

No

general

Type of search: general, label, adverse_events, recalls, shortages

fields_for_general

string

No

-

Specific field for general drug data searches (34 available fields)

fields_for_adverse_events

string

No

-

Specific field for adverse events searches (66 available fields)

fields_for_label

string

No

-

Specific field for label searches (167 available fields)

fields_for_recalls

string

No

-

Specific field for recalls and enforcement searches (39 available fields)

fields_for_shortages

string

No

-

Specific field for drug shortages searches (44 available fields)

limit

integer

No

10

Maximum results to return (1-100)

Methods

OpenFDA API Methods
Unified Drug Lookup (lookup_drug)

Search for comprehensive drug information with different search types and optional field targeting:

Comprehensive Search (All Fields):

{
  "method": "lookup_drug",
  "search_term": "aspirin",
  "search_type": "general"
}

Field-Specific Search:

{
  "method": "lookup_drug",
  "search_term": "Discontinued",
  "search_type": "general",
  "fields_for_general": "products.marketing_status"
}

Complex Boolean Query:

{
  "method": "lookup_drug",
  "search_term": "openfda.generic_name:aspirin+AND+products.dosage_form:TABLET",
  "search_type": "general"
}

Drug Labels and Prescribing Information:

{
  "method": "lookup_drug",
  "search_term": "Lipitor",
  "search_type": "label"
}

Label Field-Specific Search:

{
  "method": "lookup_drug",
  "search_term": "pregnancy",
  "search_type": "label",
  "fields_for_label": "warnings"
}

Adverse Events and Safety Data:

{
  "method": "lookup_drug",
  "search_term": "metformin",
  "search_type": "adverse_events",
  "limit": 25
}

Drug Recalls and Safety Alerts:

{
  "method": "lookup_drug",
  "search_term": "insulin",
  "search_type": "recalls",
  "limit": 20
}

Drug Shortages:

{
  "method": "lookup_drug",
  "search_term": "bupivacaine",
  "search_type": "shortages",
  "limit": 10
}
Orange Book Methods (Patents & Generic Equivalents)

The Orange Book provides information on drug patents, exclusivity, and therapeutic equivalence. Data is automatically downloaded and cached locally for fast queries (<10ms after initial setup).

Search Orange Book (search_orange_book)

Search for brand and generic drug products by name:

{
  "method": "search_orange_book",
  "drug_name": "Lipitor",
  "include_generics": true
}

Returns brand products and generic alternatives with approval dates, applicants, TE codes, and marketing status.

Get Therapeutic Equivalents (get_therapeutic_equivalents)

Find AB-rated generic equivalents that are therapeutically equivalent to the reference listed drug:

{
  "method": "get_therapeutic_equivalents",
  "drug_name": "fluoxetine"
}

Returns the Reference Listed Drug (RLD) plus all AB-rated and non-AB generics. AB-rated generics can be substituted by pharmacists.

Get Patent & Exclusivity Data (get_patent_exclusivity)

Look up all patents and exclusivity periods for a drug by NDA number:

{
  "method": "get_patent_exclusivity",
  "nda_number": "020702"
}

Returns active patents with expiration dates, patent use codes, and FDA exclusivity periods.

Analyze Patent Cliff (analyze_patent_cliff)

Analyze when a drug will lose patent/exclusivity protection and face generic competition:

{
  "method": "analyze_patent_cliff",
  "drug_name": "Trikafta",
  "years_ahead": 10
}

Returns patent timeline, next expiration dates, estimated generic entry date, and years until loss of exclusivity (LOE).

Purple Book Methods (Biologics & Biosimilars)

The Purple Book provides information on licensed biological products and biosimilar/interchangeable products. Data is automatically downloaded monthly and cached locally.

Search Purple Book (search_purple_book)

Search for biological products and their biosimilars:

{
  "method": "search_purple_book",
  "drug_name": "adalimumab"
}

Returns the reference biological product and all approved biosimilars with licensing dates, applicants, and interchangeability status.

Get Biosimilar Interchangeability (get_biosimilar_interchangeability)

Check which biosimilars are designated as interchangeable (can be substituted by pharmacists):

{
  "method": "get_biosimilar_interchangeability",
  "reference_product": "Humira"
}

Returns interchangeable biosimilars (pharmacy can substitute without prescriber) and similar but non-interchangeable biosimilars (requires new prescription).

Complex Query Syntax

The FDA MCP Server supports powerful openFDA query syntax for advanced searches:

Boolean Operators

AND Queries - Find results matching multiple criteria:

{
  "method": "lookup_drug",
  "search_term": "openfda.generic_name:ibuprofen+AND+products.dosage_form:TABLET",
  "search_type": "general"
}

OR Queries - Find results matching any criteria:

{
  "method": "lookup_drug",
  "search_term": "openfda.generic_name:ibuprofen+OR+openfda.brand_name:advil",
  "search_type": "general"
}

Wildcard Patterns

Prefix wildcards - Find names starting with a pattern:

{
  "method": "lookup_drug",
  "search_term": "child*",
  "search_type": "general",
  "fields_for_general": "openfda.brand_name"
}

General wildcards - Find any field containing a pattern:

{
  "method": "lookup_drug",
  "search_term": "*5*",
  "search_type": "general"
}

Range Queries

Age ranges - Find adverse events for specific age groups:

{
  "method": "lookup_drug",
  "search_term": "patient.patientonsetage:[65+TO+*]",
  "search_type": "adverse_events"
}

Date ranges - Find events within date ranges:

{
  "method": "lookup_drug",
  "search_term": "receiptdate:[2023-01-01+TO+2023-12-31]",
  "search_type": "adverse_events"
}

Special Modifiers

Field exists - Find records where a field has any value:

{
  "method": "lookup_drug",
  "search_term": "_exists_:serious",
  "search_type": "adverse_events"
}

Field missing - Find records where a field is empty:

{
  "method": "lookup_drug",
  "search_term": "_missing_:companynumb",
  "search_type": "adverse_events"
}

Complex Multi-Field Examples

Advanced adverse events - Serious events in elderly patients:

{
  "method": "lookup_drug",
  "search_term": "patient.drug.medicinalproduct:acetaminophen+AND+serious:1+AND+patient.patientonsetage:[65+TO+*]",
  "search_type": "adverse_events"
}

Grouped conditions - Multiple drug names with conditions:

{
  "method": "lookup_drug",
  "search_term": "(patient.drug.medicinalproduct:(cetirizine+OR+loratadine))+AND+serious:2",
  "search_type": "adverse_events"
}

Geographic filtering - Events by country with drug and severity:

{
  "method": "lookup_drug",
  "search_term": "occurcountry:US+AND+patient.drug.medicinalproduct:lipitor+AND+serious:1",
  "search_type": "adverse_events"
}

Usage Examples

Comprehensive Drug Search (All Fields)

// Search across all FDA database fields (267 total fields)
{
  "method": "lookup_drug",
  "search_term": "aspirin",
  "search_type": "general"
}

Field-Specific Searches

General Search Fields (34 available):

// Find all discontinued drugs
{
  "method": "lookup_drug",
  "search_term": "Discontinued",
  "search_type": "general",
  "fields_for_general": "products.marketing_status"
}

// Search by manufacturer
{
  "method": "lookup_drug",
  "search_term": "Pfizer",
  "search_type": "general",
  "fields_for_general": "openfda.manufacturer_name"
}

// Find drugs by dosage form
{
  "method": "lookup_drug",
  "search_term": "TABLET",
  "search_type": "general",
  "fields_for_general": "products.dosage_form"
}

Adverse Events Fields (66 available):

// Find headache reactions
{
  "method": "lookup_drug",
  "search_term": "headache",
  "search_type": "adverse_events",
  "fields_for_adverse_events": "patient.reaction.reactionmeddrapt"
}

// Find serious adverse events
{
  "method": "lookup_drug",
  "search_term": "1",
  "search_type": "adverse_events",
  "fields_for_adverse_events": "serious"
}

// Find events by patient gender (1=male, 2=female)
{
  "method": "lookup_drug",
  "search_term": "1",
  "search_type": "adverse_events",
  "fields_for_adverse_events": "patient.patientsex"
}

Label Search Fields (167 available):

// Find labels with specific warnings
{
  "method": "lookup_drug",
  "search_term": "pregnancy",
  "search_type": "label",
  "fields_for_label": "warnings"
}

// Search for drug interactions
{
  "method": "lookup_drug",
  "search_term": "warfarin",
  "search_type": "label",
  "fields_for_label": "drug_interactions"
}

// Find dosage information for specific conditions
{
  "method": "lookup_drug",
  "search_term": "pediatric",
  "search_type": "label",
  "fields_for_label": "dosage_and_administration"
}

Recalls Fields (39 available):

// Find recalls by recalling firm
{
  "method": "lookup_drug",
  "search_term": "Pfizer",
  "search_type": "recalls",
  "fields_for_recalls": "recalling_firm"
}

// Find Class I recalls (most serious)
{
  "method": "lookup_drug",
  "search_term": "I",
  "search_type": "recalls",
  "fields_for_recalls": "classification"
}

// Search recalls by product description
{
  "method": "lookup_drug",
  "search_term": "tablet",
  "search_type": "recalls",
  "fields_for_recalls": "product_description"
}

Shortages Fields (44 available):

// Find current shortages by status
{
  "method": "lookup_drug",
  "search_term": "Currently+in+Shortage",
  "search_type": "shortages",
  "fields_for_shortages": "status"
}

// Search shortages by therapeutic category
{
  "method": "lookup_drug",
  "search_term": "CEPHALOSPORIN",
  "search_type": "shortages",
  "fields_for_shortages": "therapeutic_category"
}

// Find shortages by company name
{
  "method": "lookup_drug",
  "search_term": "Pfizer",
  "search_type": "shortages",
  "fields_for_shortages": "company_name"
}

Detailed Drug Label

// Get FDA-approved prescribing information for Tylenol
{
  "method": "lookup_drug",
  "search_term": "Tylenol",
  "search_type": "label"
}

Safety and Adverse Events

// Check adverse events for ibuprofen
{
  "method": "lookup_drug",
  "search_term": "ibuprofen",
  "search_type": "adverse_events"
}

Drug Recalls

// Search for recalls related to blood pressure medications
{
  "method": "lookup_drug",
  "search_term": "lisinopril",
  "search_type": "recalls",
  "limit": 10
}

Drug Shortages

// Monitor current drug supply shortages
{
  "method": "lookup_drug",
  "search_term": "bupivacaine",
  "search_type": "shortages",
  "limit": 10
}

Orange Book - Patents and Generic Equivalents

// Search for Prozac and its generic equivalents
{
  "method": "search_orange_book",
  "drug_name": "Prozac",
  "include_generics": true
}

// Find AB-rated therapeutically equivalent generics for fluoxetine
{
  "method": "get_therapeutic_equivalents",
  "drug_name": "fluoxetine"
}

// Get patent and exclusivity data for Lipitor (NDA 020702)
{
  "method": "get_patent_exclusivity",
  "nda_number": "020702"
}

// Analyze patent cliff for Ozempic - when will generics enter?
{
  "method": "analyze_patent_cliff",
  "drug_name": "semaglutide",
  "years_ahead": 10
}

Purple Book - Biologics and Biosimilars

// Search for Humira and all adalimumab biosimilars
{
  "method": "search_purple_book",
  "drug_name": "adalimumab"
}

// Check which biosimilars are interchangeable with Humira
{
  "method": "get_biosimilar_interchangeability",
  "reference_product": "Humira"
}

// Find all Dupixent (dupilumab) biosimilars
{
  "method": "search_purple_book",
  "drug_name": "dupilumab"
}

Real-World Example Results:

  • Ozempic (semaglutide): 72 active patents, first patent expires Aug 2025, but generic entry estimated Jan 2028 (2.1 years away)

  • Humira (adalimumab): 10 biosimilars approved, only Hyrimoz is interchangeable (since April 2025)

  • Prozac (fluoxetine): All patents expired, 46 AB-rated generic equivalents available

  • Trikafta: 109 active patents, orphan exclusivity until 2031, extensive patent protection

Available Search Fields

The API supports searching across FDA database fields total. Use field-specific parameters for targeted searches:

  • fields_for_general: 34 fields for general drug data searches

  • fields_for_adverse_events: 66 fields for adverse events searches

  • fields_for_label: 167 fields for drug label searches

  • fields_for_recalls: 39 fields for recalls and enforcement searches

  • fields_for_shortages: 44 fields for drug shortages searches

OpenFDA Section (16 fields)

  • openfda.application_number - FDA application number

  • openfda.brand_name - Brand/trade name of the drug

  • openfda.generic_name - Generic name of the drug

  • openfda.manufacturer_name - Name of the manufacturer

  • openfda.nui - Numeric identifier for ingredients

  • openfda.package_ndc - Package-level National Drug Code

  • openfda.pharm_class_cs - Chemical structure pharmacologic class

  • openfda.pharm_class_epc - Established pharmacologic class

  • openfda.pharm_class_pe - Physiologic effect pharmacologic class

  • openfda.pharm_class_moa - Mechanism of action pharmacologic class

  • openfda.product_ndc - Product-level National Drug Code

  • openfda.route - Route of administration

  • openfda.rxcui - RxNorm concept unique identifier

  • openfda.spl_id - Structured Product Labeling identifier

  • openfda.spl_set_id - SPL document set identifier

  • openfda.substance_name - Name of the active substance

  • openfda.unii - Unique Ingredient Identifier

Products Section (9 fields)

  • products.active_ingredients.name - Name of active ingredient

  • products.active_ingredients.strength - Strength of active ingredient

  • products.dosage_form - Dosage form (e.g., "TABLET", "CAPSULE")

  • products.marketing_status - Marketing status (e.g., "Discontinued", "Prescription")

  • products.product_number - Product number within application

  • products.reference_drug - Reference drug designation

  • products.reference_standard - Reference standard designation

  • products.route - Route of administration

  • products.te_code - Therapeutic equivalence evaluation code

Submissions Section (10+ fields)

  • submissions.application_docs - Application documentation

  • submissions.review_priority - Review priority designation

  • submissions.submission_class_code - Submission classification code

  • submissions.submission_class_code_description - Description of submission class

  • submissions.submission_number - Sequential submission number

  • submissions.submission_property_type.code - Property type code

  • submissions.submission_public_notes - Public notes about submission

  • submissions.submission_status - Current status of submission

  • submissions.submission_status_date - Date of status change

  • submissions.submission_type - Type of submission

Usage Examples by Field Type

Search by Marketing Status:

{
  "method": "lookup_drug",
  "search_term": "Discontinued",
  "search_type": "general",
  "fields_for_general": "products.marketing_status"
}

Search by Manufacturer:

{
  "method": "lookup_drug",
  "search_term": "Pfizer",
  "search_type": "general", 
  "fields_for_general": "openfda.manufacturer_name"
}

Search by Dosage Form:

{
  "method": "lookup_drug",
  "search_term": "INJECTION",
  "search_type": "general",
  "fields_for_general": "products.dosage_form"
}

Search by Active Ingredient:

{
  "method": "lookup_drug",
  "search_term": "acetaminophen",
  "search_type": "general",
  "fields_for_general": "products.active_ingredients.name"
}

Response Format

All responses include:

{
  "success": true,
  "query": "aspirin",
  "search_type": "general",
  "total_results": 150,
  "results": [...],
  "metadata": {
    "total": 150,
    "skip": 0,
    "limit": 10
  }
}

Search Tips

Drug Names

  • Use both generic names (e.g., "acetaminophen") and brand names (e.g., "Tylenol")

  • Try different name variations if initial search returns no results

  • Include common spellings and abbreviations

  • Use wildcards for partial matches (e.g., child* for children's medications)

Search Types

  • general: Comprehensive search across all FDA database fields (34 fields available)

  • label: Detailed prescribing information and FDA-approved labels (167 fields available)

  • adverse_events: Safety data and adverse reaction reports (66 fields available)

  • recalls: Drug recalls and safety alerts (39 fields available)

  • shortages: Current drug supply shortages and availability (44 fields available)

Complex Query Strategies

  • Boolean Logic: Combine conditions with AND/OR operators

  • Field Targeting: Use openfda.field_name:value syntax for precise searches

  • Range Queries: Use [min+TO+max] for age, date, or numeric ranges

  • Wildcards: Use * for pattern matching (*5*, MEF*)

  • Special Modifiers: Use _exists_:field or _missing_:field for data completeness

Field-Specific Searching

  • Use fields_for_general for general drug data (34 options)

  • Use fields_for_adverse_events for adverse events (66 options)

  • Use fields_for_label for drug label searches (167 options)

  • Use fields_for_recalls for recalls and enforcement (39 options)

  • Use fields_for_shortages for drug shortages (44 options)

  • Examples: products.marketing_status, patient.reaction.reactionmeddrapt, warnings, recalling_firm, status

  • Enables precise queries like finding discontinued drugs, specific adverse reactions, label warnings, recall classifications, or shortage statuses

Advanced Query Examples

  • Multi-condition: drug:aspirin+AND+form:TABLET+AND+status:active

  • Age-specific: patient.patientonsetage:[18+TO+65] for adults

  • Geographic: occurcountry:US+AND+serious:1 for US serious events

  • Time-based: receiptdate:[2023-01-01+TO+2023-12-31] for 2023 data

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/openpharma-org/fda-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server