Unofficial FDA MCP Server

Unofficial FDA MCP Server

Provides comprehensive pharmaceutical intelligence by integrating real-time openFDA data with locally-cached Orange Book and Purple Book databases. It enables users to analyze drug safety, patents, generic equivalents, biosimilars, and regulatory information through natural language queries.

Category
Visit Server

README

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

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured