Openfda
NPM · @PIPEWORX/MCP-OPENFDA · 2 COMPONENTS
FDA drug data via openFDA: adverse-event reports and safety-signal tools (FAERS search, event…
Available components
Last scanned (9 hours ago)
Scores higher than 68% of npm servers
Category Health and Science
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to pipeworx-io/mcp-openfda). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 1 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability63
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4282 tokens (~237/item across 18 items; 18 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management23
- Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage94
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 83% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 18 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +15
- Malware scan: unverified → pass ▲ security
- 4 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- Package version: 0.2.0 → 0.2.1 functional
- 3 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 0 to 3. That category is still filling its 30-day observation window: 0 days of observed history at the previous scan, 1 at this one. The score rises as the window fills, whether or not the server changes.
- 29 Oct 26 78
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed npm/@pipeworx/mcp-openfda@0.2.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | pipeworx-io/mcp-openfda |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/pipeworx-io/mcp-openfda/.github/workflows/publish.yml@refs/heads/main |
| Rekor log index | 3685091858 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:87a4f641ba1653fc6a0a6cc140f309bfa2d218b701a8d205471357d42ed596d88b8f2accd6f9147a34937e57c5af70b32dc1b9c9a3192cd9f3b0ba75c |
Background: How many MCP packages publish verified provenance →
Dependencies 0 packages
| Packages resolved | 0 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
fda_application_history ~74
Retrieve one Drugs@FDA NDA, ANDA, or BLA application and return its products and chronological submission-action history. Submission codes require regulatory interpretation and do not by themselves establish approval scope, exclusivity, or current marketing.
| Name | Type | Req | Description |
|---|---|---|---|
| application_number | string | yes | NDA, ANDA, or BLA followed by digits. |
No output schema declared.
No examples provided.
fda_applications_by_cik ~365
Find ALL Drugs@FDA applications for a company by SEC CIK, ticker, or company name — without needing to know its FDA sponsor_name spelling. Drugs@FDA has no company-ID field: sponsor_name is free text, and one company routinely files under several forms (e.g. Eli Lilly appears as "LILLY", "ELI LILLY AND CO", "ELI LILLY CO", "LILLY RES LABS" — its own SEC-registered name "ELI LILLY AND COMPANY" matches ZERO of them in fda_drug_approvals). This resolves the company via SEC (same identity as the edgar pack), derives its most distinctive name token, and searches Drugs@FDA for every sponsor_name variant containing it in one call — returning the combined application list plus a `sponsor_name_forms` breakdown showing exactly which spellings were found. Only sponsors containing the company's distinctive name word are returned (industry words like PHARMACEUTICALS never anchor the match, and `excluded_non_word_matches` counts substring-only hits that were dropped). Use this INSTEAD of guessing sponsor_name strings for fda_drug_approvals when you have (or can resolve) the company's CIK/ticker. For a subsidiary or operating name that isn't itself SEC-listed, resolve to the parent first with edgar's sponsor_to_filer, then pass that CIK here.
| Name | Type | Req | Description |
|---|---|---|---|
| cik_or_ticker | string | yes | SEC CIK (e.g. "59478"), stock ticker (e.g. "LLY"), or exact SEC-listed company name (e.g. "Eli Lilly and Co"). |
| limit | number | – | Max applications to return (1-200, default 100). |
No output schema declared.
No examples provided.
fda_complete_response_letters ~199
Search FDA-disclosed Complete Response Letters for drug and biologic applications. Defaults to letter_type "COMPLETE RESPONSE"; optionally include other letter types in the same dataset. Returns the application’s current approval_status, letter metadata, an excerpt, and the official document URL.
| Name | Type | Req | Description |
|---|---|---|---|
| application_number | string | – | NDA/BLA application number. |
| company | string | – | Sponsor/company name. |
| from_date | string | – | Optional start date, YYYY-MM-DD. |
| include_other_letter_types | boolean | – | Include tentative approvals, rescissions, refusal-to-file letters, and other non-CRL records (default false). |
| limit | number | – | Number of letters (1-100, default 20). |
| query | string | – | Optional full-text term or raw openFDA CRL search expression. |
| skip | number | – | Pagination offset (default 0). |
| to_date | string | – | Optional end date, YYYY-MM-DD. |
No output schema declared.
No examples provided.
fda_crl_detail ~87
Retrieve one FDA Complete Response Letter by application number and optionally letter date. Returns the FDA-disclosed letter text and document URL. Confidential commercial and trade-secret material may be redacted by FDA.
| Name | Type | Req | Description |
|---|---|---|---|
| application_number | string | yes | Required NDA/BLA application number. |
| letter_date | string | – | Optional exact letter date, YYYY-MM-DD, when an application has multiple CRLs. |
No output schema declared.
No examples provided.
fda_drug_approvals ~634
Find FDA-approved drugs by brand name, active ingredient, or application number. To find generic versions of a drug, search by active ingredient using products.active_ingredients.name (NOT openfda.generic_name — that field only works in the label endpoint). IMPORTANT: drug names in the FDA database are stored in UPPERCASE — always pass ingredient and brand names in uppercase (e.g. "APIXABAN" not "apixaban") or you will get 0 results. Returns approval status, sponsor, application number (ANDA = generic, NDA = brand), and application details. There is NO queryable "application_type" field — never add application_type:"ANDA" (it returns 0 results). To limit to generics, search by active ingredient and read the ANDA/NDA prefix on application_number in the results. This endpoint has NO indication/disease field — for "drugs approved to treat <condition>" use fda_drug_labels (which searches indications_and_usage); an indication phrase passed here is silently ignored and matches by drug name only. The response `total` can exceed the 100-row cap on a single page — use `skip` to page past it, and `sort` to get genuinely-newest-first ordering ("most recently approved" is not the default order).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Number of results (1-100, default 10) |
| query | string | yes | OpenFDA drugsfda search query. Drug names MUST be UPPERCASE in quotes. To find all generics for a drug: 'products.active_ingredients.name:"APIXABAN"' (returns all ANDA + NDA approvals). By brand: 'op… |
| skip | number | – | Offset for pagination (default 0). The reported `total` is often larger than one page — pass skip=100 to reach the 101st+ result of a large query instead of assuming the first page is everything. |
| sort | string | – | Order results by each drug's original FDA approval date instead of openFDA's default (unordered/relevance) order. approval_date_desc puts the genuinely most-recently-approved drug first — needed for… |
No output schema declared.
No examples provided.
fda_drug_events ~340
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Number of results (1-100, default 10) |
| query | string | yes | 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… |
| skip | number | – | Offset for pagination (default 0) |
No output schema declared.
No examples provided.
fda_drug_labels ~228
Get FDA drug labeling (SPL) by drug name OR by INDICATION. This is the tool for "what drugs are approved to treat <condition>" — it searches the indications_and_usage text, which the drugsfda approvals endpoint does NOT carry. Query by brand/generic name (openfda.brand_name:"HUMIRA"), or by indicated use (indications_and_usage:"rheumatoid arthritis"). Returns indications, boxed/other warnings, dosage, contraindications, and adverse reactions (each text field capped, set_id preserved for out-of-band full-label fetch). Note: FDA label publication trails approval by weeks, so a just-approved drug may not have a label yet.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Number of results (1-100, default 5) |
| query | string | yes | OpenFDA search query. Examples: 'openfda.brand_name:"HUMIRA"', 'openfda.generic_name:"adalimumab"' |
| skip | number | – | Pagination offset (default 0) — the reported total can exceed one page of 100. |
No output schema declared.
No examples provided.
fda_drug_recalls ~201
Search FDA drug recalls and enforcement actions by drug name or reason — returns recall classification, date, reason and enforcement status. A multi-word search is tried as ALL terms first and falls back to ANY term when nothing matches all of them; the response says which happened in match_mode, so a loose match is never mistaken for a precise one. Recall reasons are free narrative text and often name the contaminant rather than the harm ("NDMA impurity", not "cancer"), so search the substance when a symptom finds nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Number of results (1-100, default 10) |
| query | string | yes | OpenFDA search query. Examples: 'openfda.brand_name:"VALSARTAN"', 'classification:"Class I"', 'reason_for_recall:"contamination"' |
| skip | number | – | Pagination offset (default 0) — the reported total can exceed one page of 100. |
No output schema declared.
No examples provided.
fda_drug_shortages ~177
Search the FDA Drug Shortages database by generic or brand name, manufacturer, status, or an advanced openFDA query. Returns national supply records and available FDA dates; reason and other details are sparse in the upstream data. This is not local pharmacy inventory or medical advice.
| Name | Type | Req | Description |
|---|---|---|---|
| drug | string | – | Generic or proprietary drug name, e.g. "lisdexamfetamine". |
| limit | number | – | Number of records (1-100, default 20). |
| manufacturer | string | – | Company/manufacturer name. |
| query | string | – | Optional raw openFDA shortage query for advanced filters. Combined with the structured filters using AND. |
| skip | number | – | Pagination offset (default 0). |
| status | string | – | FDA status filter: "Current", "Resolved", or "To Be Discontinued". |
No output schema declared.
No examples provided.
fda_event_counts ~126
Aggregate adverse events by reaction type, patient age, or outcome. Returns top reactions for a drug and event trends over time.
| Name | Type | Req | Description |
|---|---|---|---|
| count_field | string | yes | Field to count/aggregate by. Examples: "patient.reaction.reactionmeddrapt.exact" (top reactions), "receivedate" (timeline), "serious" (severity breakdown), "patient.drug.openfda.brand_name.exact" (co… |
| query | string | yes | OpenFDA search query to filter events before counting. Same syntax as fda_drug_events. |
No output schema declared.
No examples provided.
fda_faers_reaction_profile ~154
Summarize the most frequently co-reported FAERS reactions plus serious/non-serious report counts for a drug. Counts are spontaneous reports with duplicates, co-medications, and reporting bias—not event rates or proof of causation.
| Name | Type | Req | Description |
|---|---|---|---|
| drug | string | yes | – |
| from_date | string | – | Optional. YYYY-MM-DD. OMIT for all-time counts (the common case). Only specify if the question is about a specific date range — and never set from_date equal to to_date (a zero-width window returns 0… |
| limit | number | – | – |
| to_date | string | – | Optional. YYYY-MM-DD. OMIT unless from_date is also set. Must be after from_date. |
No output schema declared.
No examples provided.
fda_faers_signal_summary ~218
Calculate report-level FAERS disproportionality routing metrics for one drug/reaction pair using a 2×2 reporting table. The reaction argument matches one whole MedDRA preferred term, so a broad word like "neuropathy" counts only reports filed under that exact term and not the specific terms containing it. Natural multi-word phrasing is resolved to MedDRA word order and disclosed; a term matching nothing is reported as unresolved rather than as zero reports. ROR/PRR are screening statistics—not incidence, causality, comparative drug safety, or an FDA safety conclusion.
| Name | Type | Req | Description |
|---|---|---|---|
| drug | string | yes | Brand or generic drug name. |
| from_date | string | – | Optional YYYY-MM-DD. |
| reaction | string | yes | MedDRA preferred term, matched whole rather than as a substring. Natural English word order is accepted and corrected ("ischaemic optic neuropathy" resolves to "OPTIC ISCHAEMIC NEUROPATHY"). |
| to_date | string | – | Optional YYYY-MM-DD. |
No output schema declared.
No examples provided.
fda_faers_trend ~153
Aggregate daily FAERS report counts into calendar months for a drug and optional reaction over a bounded date window. The reaction argument matches one whole MedDRA preferred term, so a broad word like "neuropathy" counts only reports filed under that exact term and not the specific terms containing it. Natural multi-word phrasing is resolved to MedDRA word order and disclosed; a term matching nothing is reported as unresolved rather than as zero reports. Trends reflect reporting activity, publicity, utilization, duplicates, and database updates—not incidence or changing clinical risk.
| Name | Type | Req | Description |
|---|---|---|---|
| drug | string | yes | – |
| from_date | string | yes | – |
| reaction | string | – | – |
| to_date | string | yes | – |
No output schema declared.
No examples provided.
fda_food_recalls ~149
Search FDA FOOD recall / enforcement reports (openFDA /food/enforcement) — product recalls, reasons, classification, recalling firm, distribution, and status. Use for food-safety / recall-history questions (distinct from fda_drug_recalls which covers drugs).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Number of results (1-100, default 10) |
| query | string | – | OpenFDA search query (optional — omit for most recent recalls). Examples: 'reason_for_recall:"Listeria"', 'state:"CA"', 'classification:"Class I"'. |
| skip | number | – | Pagination offset (default 0) — the reported total can exceed one page of 100. |
No output schema declared.
No examples provided.
fda_novel_approvals ~390
Most recent NOVEL drug approvals, in FDA/CDER's own sense of the word: a new drug or biologic never before approved or marketed in the U.S. (read live from FDA's own published Novel Drug Approvals list). Use for "what is the most recent novel drug the FDA approved", "how many novel drugs has CDER approved this year", "latest FDA drug approvals". Excludes generics, reformulations of an already-approved ingredient, and biosimilars — these are NOT on FDA's novel list even though they are "original" NDA/BLA submissions. Returns approval date, drug name, active ingredient, and approved use, sorted newest-first; application numbers/sponsors are not published on FDA's novel-drug page. Pass include_generics:true for a different, broader count (every original NDA/BLA/ANDA approval reconstructed from Drugs@FDA, reformulations/biosimilars included) — that path says so in its own note. Not for label text (fda_drug_labels) or searching a specific known drug (fda_drug_approvals).
| Name | Type | Req | Description |
|---|---|---|---|
| days | number | – | Look-back window in days (1-365, default 90) |
| include_generics | boolean | – | When true, switch from FDA's own novel-drug list to a broader Drugs@FDA reconstruction that also includes original ANDA (generic) approvals, reformulations, and biosimilars (default false — the defau… |
| limit | number | – | Max approvals to return (1-50, default 10) |
| skip | number | – | Offset into the newest-first results (default 0). total_in_window can exceed the 50-result cap on one call — pass skip=50 to page further into the window instead of assuming the window is fully cover… |
No output schema declared.
No examples provided.
fda_postmarket_risk_profile ~96
Combine a drug’s FAERS reporting profile, label warning fields, and FDA recall records for review routing. This is not a validated safety comparison, causal assessment, incidence estimate, or substitute for FDA communications and clinical review.
| Name | Type | Req | Description |
|---|---|---|---|
| drug | string | yes | – |
| from_date | string | – | – |
| reaction_limit | number | – | – |
| recall_limit | number | – | – |
| to_date | string | – | – |
No output schema declared.
No examples provided.
fda_shortage_changes ~259
FDA drug-shortage records ordered by update_date, newest first, then restricted to the requested look-back window. Use for recently updated, discontinued, or resolved national shortages; this does not imply availability at any specific pharmacy or hospital. Most rows in any window are "Reverified" (FDA re-checking a status it already had) — pass update_type to filter to the change kinds that actually matter, e.g. New/Discontinued/To Be Discontinued/Resolved, and exclude Reverified.
| Name | Type | Req | Description |
|---|---|---|---|
| days | number | – | Look-back window in days (1-365, default 30). |
| limit | number | – | Maximum records to return (1-100, default 25). |
| skip | number | – | Pagination offset into the filtered, windowed result set (default 0). |
| status | string | – | Optional FDA status: "Current", "Resolved", or "To Be Discontinued". |
| update_type | – | – | Optional filter on the kind of change, applied before paging (e.g. "New", "Discontinued", "To Be Discontinued", "Resolved", "Updated"; exclude "Reverified" to skip routine re-checks). String or array… |
No output schema declared.
No examples provided.
fda_warning_letters ~378
Search FDA WARNING LETTERS — official enforcement letters FDA sends firms for violations (CGMP, adulterated/misbranded products, unapproved claims). Answers "has <company> received an FDA warning letter", "recent FDA warning letters about supplements/devices". By default `search` matches the RECIPIENT company the letter was issued to, so the answer is about that firm's own enforcement history; set match:"fulltext" to search the whole letter record instead, which also finds letters that merely mention a firm. Every row reports matched_field so a caller can tell "issued to" from "mentions". Covers the 3,680 letters fda.gov publishes from 2021 onward — recipient company, posted and issued dates, issuing FDA office, subject and a link to the full letter text — and, for a firm with nothing in that window, falls back to the FDA compliance-actions archive of older letters back to 2010, which gives the firm, place, product type and issue date but no document. Every row says which of the two it came from. Live, no caller credential needed.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Max letters to return, 1–50 (default 10). Newest first. |
| match | string | – | How `search` is applied. "recipient" (default) keeps only letters whose addressed company matches. "fulltext" returns every record matching anywhere in its indexed text, including letters that only m… |
| search | string | – | Company the letter was issued to (e.g. "Elanco", "Merck Sharp & Dohme") under the default match mode. Under match:"fulltext" this is a free-text query over the whole record — a product ("supplement")… |
No output schema declared.
No examples provided.
How do I install the Openfda MCP server?
Openfda runs locally as an npm package, launched with npx -y @pipeworx/mcp-openfda. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @pipeworx/mcp-openfda
claude mcp add pipeworx-io-openfda -- npx -y @pipeworx/mcp-openfda
What is the Openfda MCP server?
Openfda is an MCP server listed in the public MCP registry as io.github.pipeworx-io/openfda. FDA drug data via openFDA: adverse-event reports and safety-signal tools (FAERS search, event… This page covers its npm package (@pipeworx/mcp-openfda).
Is the Openfda MCP server safe to use?
Openfda scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Openfda MCP server expose?
Openfda exposes 18 tools: fda_drug_events, fda_drug_approvals, fda_applications_by_cik, fda_novel_approvals, fda_drug_labels, and 13 more. Their descriptions and schemas cost roughly 4,228 tokens of context every time the server is loaded.
Is the Openfda MCP server still maintained?
Openfda is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Openfda MCP server under?
Openfda declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.