openpharma-org/fda-mcp
If you are the rightful owner of fda-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The FDA MCP Server is a comprehensive Model Context Protocol server that provides advanced pharmaceutical intelligence through the FDA's openFDA database.
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
MCP Client Configuration
{
"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 searchesfields_for_adverse_events: 66 fields for adverse events searchesfields_for_label: 167 fields for drug label searchesfields_for_recalls: 39 fields for recalls and enforcement searchesfields_for_shortages: 44 fields for drug shortages searches
OpenFDA Section (16 fields)
openfda.application_number- FDA application numberopenfda.brand_name- Brand/trade name of the drugopenfda.generic_name- Generic name of the drugopenfda.manufacturer_name- Name of the manufactureropenfda.nui- Numeric identifier for ingredientsopenfda.package_ndc- Package-level National Drug Codeopenfda.pharm_class_cs- Chemical structure pharmacologic classopenfda.pharm_class_epc- Established pharmacologic classopenfda.pharm_class_pe- Physiologic effect pharmacologic classopenfda.pharm_class_moa- Mechanism of action pharmacologic classopenfda.product_ndc- Product-level National Drug Codeopenfda.route- Route of administrationopenfda.rxcui- RxNorm concept unique identifieropenfda.spl_id- Structured Product Labeling identifieropenfda.spl_set_id- SPL document set identifieropenfda.substance_name- Name of the active substanceopenfda.unii- Unique Ingredient Identifier
Products Section (9 fields)
products.active_ingredients.name- Name of active ingredientproducts.active_ingredients.strength- Strength of active ingredientproducts.dosage_form- Dosage form (e.g., "TABLET", "CAPSULE")products.marketing_status- Marketing status (e.g., "Discontinued", "Prescription")products.product_number- Product number within applicationproducts.reference_drug- Reference drug designationproducts.reference_standard- Reference standard designationproducts.route- Route of administrationproducts.te_code- Therapeutic equivalence evaluation code
Submissions Section (10+ fields)
submissions.application_docs- Application documentationsubmissions.review_priority- Review priority designationsubmissions.submission_class_code- Submission classification codesubmissions.submission_class_code_description- Description of submission classsubmissions.submission_number- Sequential submission numbersubmissions.submission_property_type.code- Property type codesubmissions.submission_public_notes- Public notes about submissionsubmissions.submission_status- Current status of submissionsubmissions.submission_status_date- Date of status changesubmissions.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/ORoperators - Field Targeting: Use
openfda.field_name:valuesyntax 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_:fieldor_missing_:fieldfor data completeness
Field-Specific Searching
- Use
fields_for_generalfor general drug data (34 options) - Use
fields_for_adverse_eventsfor adverse events (66 options) - Use
fields_for_labelfor drug label searches (167 options) - Use
fields_for_recallsfor recalls and enforcement (39 options) - Use
fields_for_shortagesfor 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:1for US serious events - Time-based:
receiptdate:[2023-01-01+TO+2023-12-31]for 2023 data