Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Openfda

NPM · @PIPEWORX/MCP-OPENFDA · 2 COMPONENTS

FDA drug data via openFDA: adverse-event reports and safety-signal tools (FAERS search, event…

+3 this week 81 Trust /100

Last scanned (9 hours ago)

Scores higher than 68% of npm servers

Category Health and Science

Trust breakdown (7 categories)

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
Changelog

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.

Diagnostics

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 →

MCP tools · 18 exposed · ~4,228 tokens

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 →

Tool Tokens
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.

NameTypeReqDescription
application_numberstringyesNDA, 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.

NameTypeReqDescription
cik_or_tickerstringyesSEC CIK (e.g. "59478"), stock ticker (e.g. "LLY"), or exact SEC-listed company name (e.g. "Eli Lilly and Co").
limitnumber–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.

NameTypeReqDescription
application_numberstring–NDA/BLA application number.
companystring–Sponsor/company name.
from_datestring–Optional start date, YYYY-MM-DD.
include_other_letter_typesboolean–Include tentative approvals, rescissions, refusal-to-file letters, and other non-CRL records (default false).
limitnumber–Number of letters (1-100, default 20).
querystring–Optional full-text term or raw openFDA CRL search expression.
skipnumber–Pagination offset (default 0).
to_datestring–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.

NameTypeReqDescription
application_numberstringyesRequired NDA/BLA application number.
letter_datestring–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).

NameTypeReqDescription
limitnumber–Number of results (1-100, default 10)
querystringyesOpenFDA 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…
skipnumber–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.
sortstring–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.

NameTypeReqDescription
limitnumber–Number of results (1-100, default 10)
querystringyesOpenFDA 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…
skipnumber–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.

NameTypeReqDescription
limitnumber–Number of results (1-100, default 5)
querystringyesOpenFDA search query. Examples: 'openfda.brand_name:"HUMIRA"', 'openfda.generic_name:"adalimumab"'
skipnumber–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.

NameTypeReqDescription
limitnumber–Number of results (1-100, default 10)
querystringyesOpenFDA search query. Examples: 'openfda.brand_name:"VALSARTAN"', 'classification:"Class I"', 'reason_for_recall:"contamination"'
skipnumber–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.

NameTypeReqDescription
drugstring–Generic or proprietary drug name, e.g. "lisdexamfetamine".
limitnumber–Number of records (1-100, default 20).
manufacturerstring–Company/manufacturer name.
querystring–Optional raw openFDA shortage query for advanced filters. Combined with the structured filters using AND.
skipnumber–Pagination offset (default 0).
statusstring–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.

NameTypeReqDescription
count_fieldstringyesField to count/aggregate by. Examples: "patient.reaction.reactionmeddrapt.exact" (top reactions), "receivedate" (timeline), "serious" (severity breakdown), "patient.drug.openfda.brand_name.exact" (co…
querystringyesOpenFDA 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.

NameTypeReqDescription
drugstringyes–
from_datestring–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…
limitnumber––
to_datestring–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.

NameTypeReqDescription
drugstringyesBrand or generic drug name.
from_datestring–Optional YYYY-MM-DD.
reactionstringyesMedDRA 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_datestring–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.

NameTypeReqDescription
drugstringyes–
from_datestringyes–
reactionstring––
to_datestringyes–

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).

NameTypeReqDescription
limitnumber–Number of results (1-100, default 10)
querystring–OpenFDA search query (optional — omit for most recent recalls). Examples: 'reason_for_recall:"Listeria"', 'state:"CA"', 'classification:"Class I"'.
skipnumber–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).

NameTypeReqDescription
daysnumber–Look-back window in days (1-365, default 90)
include_genericsboolean–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…
limitnumber–Max approvals to return (1-50, default 10)
skipnumber–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.

NameTypeReqDescription
drugstringyes–
from_datestring––
reaction_limitnumber––
recall_limitnumber––
to_datestring––

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.

NameTypeReqDescription
daysnumber–Look-back window in days (1-365, default 30).
limitnumber–Maximum records to return (1-100, default 25).
skipnumber–Pagination offset into the filtered, windowed result set (default 0).
statusstring–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.

NameTypeReqDescription
limitnumber–Max letters to return, 1–50 (default 10). Newest first.
matchstring–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…
searchstring–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.

Install

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

# add to Claude Code
claude mcp add pipeworx-io-openfda -- npx -y @pipeworx/mcp-openfda
Common questions

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.