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.
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 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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。