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

io.github.cyanheads/openfda-mcp-server

REMOTE · OPENFDA.CASEYJHAND.COM · 2 COMPONENTS · SCANNED AUG 3

Query FDA data on drugs, food, devices, and recalls via openFDA. STDIO or Streamable HTTP.

+5 this week 66 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security66
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation not fully verified: no authorisation is required to call this server, and 14 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
Schema Quality & AI Usability54
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 4497 tokens (~321/item across 14 items; 14 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 Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · openfda.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-openfda-mcp-server https://openfda.caseyjhand.com/mcp
# ~/.codex/config.toml
[mcp_servers.cyanheads-openfda-mcp-server]
url = "https://openfda.caseyjhand.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-openfda-mcp-server": {
      "type": "remote",
      "url": "https://openfda.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add cyanheads-openfda-mcp-server --url https://openfda.caseyjhand.com/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  cyanheads-openfda-mcp-server:
    url: "https://openfda.caseyjhand.com/mcp"
// mcp.json
{
  "mcpServers": {
    "cyanheads-openfda-mcp-server": {
      "type": "http",
      "url": "https://openfda.caseyjhand.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

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.

  • 2 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +2
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Jul 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.

  • 27 Jul 26 −1
    • Schema quality: 245 → 321 functional
    • Stability: unverified → 0.03 functional
    • Schema quality: excellent → good functional
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
    • Server version: 0.6.0 → 0.7.1 functional
  • 26 Jul 26 62

    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 3 Aug 2026 · Probed https://openfda.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 7 Jul 2026 5 Oct 2026 ECDSA 256 ECDSA-SHA256 5aad900eb2055a0b0ea55912ec19680c
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b
DNSSEC secure

Validation of openfda.caseyjhand.com. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
caseyjhand.com. present 2371 13 Verified
openfda.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://openfda.caseyjhand.com/mcp Verified 200
http (plaintext) http://openfda.caseyjhand.com/mcp HTTPS enforced 301 https://openfda.caseyjhand.com/mcp
MCP tools — 14 exposed · ~4,395 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.

Tool Tokens
openfda_count_values ~252

Aggregate and tally unique values for any field across any openFDA endpoint. Returns ranked term-count pairs sorted by count descending. Pair with openfda_search_adverse_events, openfda_search_drug_approvals, openfda_search_device_clearances, openfda_search_recalls, openfda_get_drug_label, or openfda_lookup_ndc when sample records help interpret the aggregates.

NameTypeReqDescription
countstringyesField to count. Append .exact for whole-phrase counting of free-text fields (e.g. "patient.reaction.reactionmeddrapt.exact"). Identifier fields openFDA already indexes as keywords (product_ndc, appli…
endpointstringyesFull openFDA endpoint path (e.g. "drug/event", "device/classification")
limitnumberNumber of top terms to return (default 100, max 1000)
searchstringFilter query to scope the count (e.g. patient.drug.medicinalproduct:"metformin"). Omit to count across every record in the endpoint.
NameTypeReqDescription
capnumberThe limit applied to the term list.
metaobjectyesResponse metadata
noticestringGuidance when no terms matched — how to verify the field name or adjust the count expression. Absent when terms are returned.
resultsarrayyesTerm-count pairs sorted by count descending
shownnumberNumber of terms returned in this response.
termCountnumberyesNumber of distinct terms returned
truncatedbooleanTrue when the term list was capped at the limit — more distinct terms may exist.
truncationCeilingnumberCount of the lowest-ranked term returned — omitted terms fall at or below it.

No examples provided.

openfda_dataframe_describe ~116

List the tables and column schemas on a DataCanvas staged by an openFDA search tool. Call before openfda_dataframe_query to discover the exact table name, column names, and DuckDB types needed for valid SQL. row_count is the full staged result set, not the inline preview count. Columns typed JSON hold nested openFDA objects/arrays — query them with DuckDB json functions.

NameTypeReqDescription
canvas_idstringyesCanvas ID from an openFDA search tool response (present when the search ran with stage=true).
NameTypeReqDescription
canvas_idstringyesCanvas ID that was described — pass to openfda_dataframe_query.
tablesarrayyesAll tables and views available on this canvas.

No examples provided.

openfda_dataframe_query ~260

Run a read-only SQL SELECT against a DataCanvas table staged by an openFDA search tool (call one with stage=true; its response carries canvas_id + canvas_table). Enables GROUP BY, COUNT/SUM/AVG, time-series, and joins across the staged result set without re-paging the API. Call openfda_dataframe_describe first to get the exact table and column names. Results are capped at the canvas row limit — when truncated is true, page the rest with ORDER BY plus LIMIT/OFFSET. Scalar fields are stored as text (CAST for numeric math); nested objects/arrays are JSON columns — read them with DuckDB json functions, e.g. json_extract_string(openfda, '$.brand_name[0]'). Only SELECT is allowed — DDL, DML, COPY, and file-reading functions are blocked.

NameTypeReqDescription
canvas_idstringyesCanvas ID from an openFDA search tool response (the canvas_id field, present when the search ran with stage=true).
querystringyesSQL SELECT against the staged table. Use the table name from openfda_dataframe_describe. Example: "SELECT classification, COUNT(*) AS n FROM spilled_ab12cd34 GROUP BY classification ORDER BY n DESC".
NameTypeReqDescription
canvas_idstringyesCanvas ID that was queried — reuse for follow-up queries.
row_countnumberyesNumber of rows in this response. Equals the canvas row limit when truncated is true.
rowsarrayyesRows returned by the query (capped at the canvas row limit).
truncatedbooleanyesTrue when the result hit the canvas row limit and rows beyond it were dropped. Page the rest with ORDER BY plus LIMIT/OFFSET.

No examples provided.

openfda_describe_fields ~101

Return the searchable field paths for an openFDA endpoint, grouped by category with type and description. Use before constructing a search query to find the correct dotted field path — field names differ per endpoint and are not discoverable from the tool schema alone.

NameTypeReqDescription
endpointstringyesopenFDA endpoint to describe (e.g. "drug/event", "drug/shortages", "device/510k"). Must be one of the cataloged endpoints.
NameTypeReqDescription
endpointstringyesThe endpoint these fields apply to
groupsarrayyesField groups for this endpoint
queryTipsstringyesopenFDA query syntax reminders relevant to this endpoint

No examples provided.

openfda_drug_profile ~200

Resolve one drug name to its FDA identity, then fan out in parallel across the bounded per-drug openFDA endpoints and merge into one profile: identity, label highlights, adverse-event summary, recall history, Drugs@FDA approval, and shortage status. Replaces chaining openfda_get_drug_label, openfda_search_adverse_events, openfda_search_recalls, openfda_search_drug_approvals, and openfda_search_drug_shortages — and reconciles the identifier drift between endpoints that makes that chaining error-prone. Each section is best-effort: a miss returns null rather than failing the call. For deep dives into any one area, use the dedicated tool.

NameTypeReqDescription
drugstringyesDrug name to profile — brand or generic (e.g. "metformin", "Humira", "Glucophage"). Resolved once to canonical FDA identifiers, which then key every sub-query.
NameTypeReqDescription
adverse_eventsyesAdverse-event summary aggregated over drug/event, or null when unavailable.
approvalyesDrugs@FDA approval summary, or null when no application matched.
degradedarrayyesSub-queries that failed upstream, empty when every section resolved. A section listed here is unknown, not absent — a null section with no entry here genuinely has no FDA record.
identityobjectyesIdentity resolved once and reused across every sub-query to avoid identifier drift.
labelyesLabel highlights from drug/label, or null when no label matched.
metaobjectyesRequest metadata.
noticestringGuidance when the drug could not be resolved or upstream errors degraded the profile. Absent on a fully populated profile.
recallsarrayyesRecent drug/enforcement recall actions (may be empty).
sectionsFoundnumberyesHow many profile sections (label, adverse_events, recalls, approval, shortage) returned data.
shortageyesCurrent or most-recent drug shortage status, or null when none on record.

No examples provided.

openfda_get_drug_label ~330

Look up FDA drug labeling (package inserts / SPL documents). Check indications, warnings, dosage, contraindications, active ingredients, or any structured label section. A label runs to tens of thousands of tokens, so a page that exceeds the inline budget returns the list of available sections instead; re-call with sections to pull the ones you need.

NameTypeReqDescription
limitnumberMaximum number of results to return (1-1000). Default 5. Labels are large.
searchstringyesQuery targeting label fields. Examples: openfda.brand_name:"aspirin", openfda.generic_name:"metformin", openfda.manufacturer_name:"pfizer". For a specific revision, pass set_id with the SPL UUID retu…
sectionsarrayLabel sections to return, e.g. ["boxed_warning","indications_and_usage"]. Names come from the outline an oversized page returns, or from openfda_describe_fields. Omit for the whole label — which retu…
skipnumberNumber of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error.
sortstringSort expression (field:asc or field:desc). Example: effective_time:desc. Invalid or non-sortable fields cause a query error — use a documented field name.
NameTypeReqDescription
capnumberThe limit applied to this page.
effectiveQuerystringyesSearch filter applied to the drug label query, as submitted to openFDA
kindstringyesWhether this response carries label records ("full") or only the section outline of a page too large to inline ("outline").
metaobjectyesPagination and freshness metadata.
noticestringGuidance when results are empty or paging overshot — how to broaden filters or correct field names. Absent when results are returned.
outlinearraySection names available across the matched page and their serialized size, largest first. Present when kind is "outline" — pass names back in sections to retrieve them.
resultsarrayDrug label records, present when kind is "full". Each carries an openfda block (brand_name, generic_name, manufacturer_name, route) plus optional SPL sections like indications_and_usage, warnings, do…
shownnumberNumber of labels returned in this response.
totalResultsnumberyesTotal matching label records in the dataset
truncatedbooleanTrue when more labels matched than this page returned — page with skip for the rest.

No examples provided.

openfda_lookup_ndc ~379

Look up drugs in the NDC (National Drug Code) Directory. Identify drug products by NDC code, find active ingredients, packaging details, or manufacturer info. Pair with openfda_get_drug_label using the returned brand_name or set_id to read the package insert.

NameTypeReqDescription
canvas_idstringDataCanvas session id from a prior call. Passing one stages this lookup onto that canvas (same effect as stage=true) so result sets accumulate for cross-table joins. Omit to stage onto a fresh canvas.
limitnumberMaximum number of records to return (1-1000, default 10)
searchstringyesopenFDA search query. Examples: product_ndc:"0363-0218", brand_name:"aspirin", generic_name:"metformin", openfda.manufacturer_name:"walgreen", active_ingredients.name:"ASPIRIN"
skipnumberNumber of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error.
sortstringSort expression (field:asc or field:desc). Example: listing_expiration_date:desc. Invalid or non-sortable fields cause a query error — use a documented field name.
stagebooleanStage the matched set on a DataCanvas for SQL analysis with openfda_dataframe_query. Default false — the call returns one page for one upstream request. When true, records are also drained onto a can…
NameTypeReqDescription
canvas_idstringDataCanvas session id for the staged result set. Present when this call staged. Pass to openfda_dataframe_query / openfda_dataframe_describe, or back into this tool to accumulate more tables on the s…
canvas_tablestringCanvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses.
effectiveQuerystringyesSearch filter applied to the NDC lookup, as submitted to openFDA
metaobjectyesResponse metadata
noticestringCanvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names.
resultsarrayyesNDC directory records — product_ndc, brand_name, generic_name, labeler_name, dosage_form, route, marketing_category, active_ingredients[], packaging[], listing_expiration_date.
spilledbooleanTrue when this call staged its matched set on the canvas — use canvas_id with openfda_dataframe_query for SQL. Absent when staging was not requested.
staged_rowsnumberRows written to the canvas table. Compare with meta.total: a smaller value means staging stopped at its size budget and the table holds only the first staged_rows records.
totalResultsnumberyesTotal matching NDC records in the dataset
truncatedbooleanTrue when fewer rows reached the canvas than matched upstream — staging stopped at its size budget or openFDA's 25000-row pagination ceiling. Narrow the query (filters, date range) for a complete set.

No examples provided.

openfda_search_adverse_events ~412

Search adverse event reports across drugs, food, and devices. Use to investigate safety signals, find reports for a specific product, or explore reactions by demographics.

NameTypeReqDescription
canvas_idstringDataCanvas session id from a prior call. Passing one stages this search onto that canvas (same effect as stage=true) so result sets accumulate for cross-table joins. Omit to stage onto a fresh canvas.
categorystringyesProduct category — each has different field schemas in the response
limitnumberMaximum number of records to return (1-1000, default 10)
searchstringopenFDA search query. Examples: patient.drug.medicinalproduct:"aspirin", patient.reaction.reactionmeddrapt:"nausea" AND serious:"1". Omit to browse recent.
skipnumberNumber of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error.
sortstringSort expression (field:asc or field:desc). Sortable date fields are category-specific: drug → receivedate:desc (or receiptdate), food → date_created:desc (or date_started), device → date_received:des…
stagebooleanStage the matched set on a DataCanvas for SQL analysis with openfda_dataframe_query. Default false — the call returns one page for one upstream request. When true, records are also drained onto a can…
NameTypeReqDescription
canvas_idstringDataCanvas session id for the staged result set. Present when this call staged. Pass to openfda_dataframe_query / openfda_dataframe_describe, or back into this tool to accumulate more tables on the s…
canvas_tablestringCanvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses.
effectiveQuerystringSearch filter applied to the query, as submitted to openFDA
metaobjectyesResponse metadata
noticestringCanvas staging disclosure when the call staged, and guidance when results are empty or paging overshot — how to broaden filters or adjust the query.
resultsarrayyesAdverse event records — fields vary by category (drug: patient/reactions/drugs, device: device details/event type, food: products/outcomes)
spilledbooleanTrue when this call staged its matched set on the canvas — use canvas_id with openfda_dataframe_query for SQL. Absent when staging was not requested.
staged_rowsnumberRows written to the canvas table. Compare with meta.total: a smaller value means staging stopped at its size budget and the table holds only the first staged_rows records.
totalResultsnumberyesTotal matching adverse event records in the dataset
truncatedbooleanTrue when fewer rows reached the canvas than matched upstream — staging stopped at its size budget or openFDA's 25000-row pagination ceiling. Narrow the query (filters, date range) for a complete set.

No examples provided.

openfda_search_animal_events ~391

Search adverse event reports for veterinary drugs and devices submitted to the FDA Center for Veterinary Medicine. Records include animal species, breed, age, weight, drug name and route, adverse reactions (using VeDDRA terminology), and outcome. Use to investigate safety signals for veterinary products, find reports by animal species or drug, or explore reaction patterns.

NameTypeReqDescription
canvas_idstringDataCanvas session id from a prior call. Passing one stages this search onto that canvas (same effect as stage=true) so result sets accumulate for cross-table joins. Omit to stage onto a fresh canvas.
limitnumberMaximum number of records to return (1-1000, default 10)
searchstringopenFDA search query using field:value syntax. Examples: animal.species:"Dog", drug.brand_name:"Bravecto", reaction.veddra_term_name:"Vomiting", serious_ae:"true". Omit to browse recent reports.
skipnumberNumber of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error.
sortstringSort expression (field:asc or field:desc). Example: original_receive_date:desc. Invalid or non-sortable fields cause a query error — use a documented field name.
stagebooleanStage the matched set on a DataCanvas for SQL analysis with openfda_dataframe_query. Default false — the call returns one page for one upstream request. When true, records are also drained onto a can…
NameTypeReqDescription
canvas_idstringDataCanvas session id for the staged result set. Present when this call staged. Pass to openfda_dataframe_query / openfda_dataframe_describe, or back into this tool to accumulate more tables on the s…
canvas_tablestringCanvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses.
effectiveQuerystringSearch filter applied to the query, as submitted to openFDA
metaobjectyesResponse metadata
noticestringCanvas staging disclosure when the call staged, and guidance when results are empty or paging overshot — how to broaden filters or adjust the query.
resultsarrayyesAnimal adverse event records. Key fields: unique_aer_id_number, original_receive_date, serious_ae, animal (species, gender, breed, age, weight), drug[] (brand_name, active_ingredients, route, dose, a…
spilledbooleanTrue when this call staged its matched set on the canvas — use canvas_id with openfda_dataframe_query for SQL. Absent when staging was not requested.
staged_rowsnumberRows written to the canvas table. Compare with meta.total: a smaller value means staging stopped at its size budget and the table holds only the first staged_rows records.
totalResultsnumberyesTotal matching animal adverse event records in the dataset
truncatedbooleanTrue when fewer rows reached the canvas than matched upstream — staging stopped at its size budget or openFDA's 25000-row pagination ceiling. Narrow the query (filters, date range) for a complete set.

No examples provided.

openfda_search_device_clearances ~358

Search FDA device premarket notifications — 510(k) clearances and PMA approvals.

NameTypeReqDescription
canvas_idstringDataCanvas session id from a prior call. Passing one stages this search onto that canvas (same effect as stage=true) so result sets accumulate for cross-table joins. Omit to stage onto a fresh canvas.
limitnumberMaximum number of records to return (1-1000).
pathwaystringyesPremarket pathway. 510(k) is the most common; PMA is for higher-risk devices.
searchstringopenFDA search query. Examples: applicant:"medtronic", advisory_committee_description:"cardiovascular", product_code:"DXN", openfda.device_name:"catheter". Omit to browse recent.
skipnumberNumber of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error.
sortstringSort expression (field:asc or field:desc). Example: decision_date:desc. Invalid or non-sortable fields cause a query error — use a documented field name.
stagebooleanStage the matched set on a DataCanvas for SQL analysis with openfda_dataframe_query. Default false — the call returns one page for one upstream request. When true, records are also drained onto a can…
NameTypeReqDescription
canvas_idstringDataCanvas session id for the staged result set. Present when this call staged. Pass to openfda_dataframe_query / openfda_dataframe_describe, or back into this tool to accumulate more tables on the s…
canvas_tablestringCanvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses.
effectiveQuerystringSearch filter applied to the device clearance query, as submitted to openFDA
metaobjectyesResponse metadata
noticestringCanvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names.
resultsarrayyes510(k) or PMA records — 510(k) carries k_number, device_name, applicant, product_code, decision_date, decision_description, advisory_committee_description; PMA carries pma_number, trade_name, generic…
spilledbooleanTrue when this call staged its matched set on the canvas — use canvas_id with openfda_dataframe_query for SQL. Absent when staging was not requested.
staged_rowsnumberRows written to the canvas table. Compare with meta.total: a smaller value means staging stopped at its size budget and the table holds only the first staged_rows records.
totalResultsnumberyesTotal matching device clearance records in the dataset
truncatedbooleanTrue when fewer rows reached the canvas than matched upstream — staging stopped at its size budget or openFDA's 25000-row pagination ceiling. Narrow the query (filters, date range) for a complete set.

No examples provided.

openfda_search_drug_approvals ~420

Search the Drugs@FDA database for drug application approvals (NDAs and ANDAs). Returns application details, sponsor info, and full submission history. Pair with openfda_get_drug_label to read the approved label, or openfda_count_values to aggregate by sponsor_name, product_type, or route.

NameTypeReqDescription
canvas_idstringDataCanvas session id from a prior call. Passing one stages this search onto that canvas (same effect as stage=true) so result sets accumulate for cross-table joins. Omit to stage onto a fresh canvas.
limitnumberMaximum number of records to return (1-1000, default 10)
searchstringopenFDA search query. Examples: openfda.brand_name:"humira", sponsor_name:"PFIZER", submissions.submission_type:"ORIG" AND submissions.review_priority:"PRIORITY". Exact quoted values can be case-sens…
skipnumberNumber of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error.
sortstringSort expression (field:asc or field:desc). Example: submissions.submission_status_date:desc. Invalid or non-sortable fields cause a query error — use a documented field name.
stagebooleanStage the matched set on a DataCanvas for SQL analysis with openfda_dataframe_query. Default false — the call returns one page for one upstream request. When true, records are also drained onto a can…
NameTypeReqDescription
canvas_idstringDataCanvas session id for the staged result set. Present when this call staged. Pass to openfda_dataframe_query / openfda_dataframe_describe, or back into this tool to accumulate more tables on the s…
canvas_tablestringCanvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses.
effectiveQuerystringSearch filter applied to the Drugs@FDA query, as submitted to openFDA
metaobjectyesResponse metadata
noticestringCanvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names.
resultsarrayyesDrug application records — application_number, sponsor_name, openfda block (brand_name, generic_name, route, product_type, substance_name), products[] (active_ingredients, dosage_form, marketing_stat…
spilledbooleanTrue when this call staged its matched set on the canvas — use canvas_id with openfda_dataframe_query for SQL. Absent when staging was not requested.
staged_rowsnumberRows written to the canvas table. Compare with meta.total: a smaller value means staging stopped at its size budget and the table holds only the first staged_rows records.
totalResultsnumberyesTotal matching drug approval records in the dataset
truncatedbooleanTrue when fewer rows reached the canvas than matched upstream — staging stopped at its size budget or openFDA's 25000-row pagination ceiling. Narrow the query (filters, date range) for a complete set.

No examples provided.

openfda_search_drug_shortages ~421

Search FDA drug shortage records. Returns per-product shortage status, availability, therapeutic category, dosage form, manufacturer, and dates. Use to check whether a drug is currently in shortage, find all oncology drugs with supply issues, or retrieve the openfda block (brand_name, product_ndc, rxcui) to chain into openfda_get_drug_label or openfda_lookup_ndc.

NameTypeReqDescription
canvas_idstringDataCanvas session id from a prior call. Passing one stages this search onto that canvas (same effect as stage=true) so result sets accumulate for cross-table joins. Omit to stage onto a fresh canvas.
limitnumberMaximum number of records to return (1-1000, default 10)
searchstringopenFDA search query using field:value syntax. Examples: status:"Current", therapeutic_category:"Oncology", generic_name:"carboplatin", company_name:"pfizer". Omit to browse all records. Call openfda…
skipnumberNumber of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error.
sortstringSort expression (field:asc or field:desc). Example: update_date:desc. Invalid or non-sortable fields cause a query error — use a documented field name.
stagebooleanStage the matched set on a DataCanvas for SQL analysis with openfda_dataframe_query. Default false — the call returns one page for one upstream request. When true, records are also drained onto a can…
NameTypeReqDescription
canvas_idstringDataCanvas session id for the staged result set. Present when this call staged. Pass to openfda_dataframe_query / openfda_dataframe_describe, or back into this tool to accumulate more tables on the s…
canvas_tablestringCanvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses.
effectiveQuerystringSearch filter applied to the drug/shortages query, as submitted to openFDA
metaobjectyesResponse metadata
noticestringCanvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names.
resultsarrayyesDrug shortage records. Key fields: generic_name, status ("Current"/"Resolved"), availability, therapeutic_category, dosage_form, presentation, package_ndc, company_name, contact_info, initial_posting…
spilledbooleanTrue when this call staged its matched set on the canvas — use canvas_id with openfda_dataframe_query for SQL. Absent when staging was not requested.
staged_rowsnumberRows written to the canvas table. Compare with meta.total: a smaller value means staging stopped at its size budget and the table holds only the first staged_rows records.
totalResultsnumberyesTotal matching drug shortage records in the dataset
truncatedbooleanTrue when fewer rows reached the canvas than matched upstream — staging stopped at its size budget or openFDA's 25000-row pagination ceiling. Narrow the query (filters, date range) for a complete set.

No examples provided.

openfda_search_recalls ~359

Search enforcement reports and recall actions across drugs, food, and devices.

NameTypeReqDescription
canvas_idstringDataCanvas session id from a prior call. Passing one stages this search onto that canvas (same effect as stage=true) so result sets accumulate for cross-table joins. Omit to stage onto a fresh canvas.
categorystringyesProduct category
endpointstringReport type. Default enforcement. The recall endpoint is only available for devices.
limitnumberMaximum number of records to return (1-1000).
searchstringopenFDA search query. Examples: classification:"Class I" (also "Class II" or "Class III"), recalling_firm:"pfizer", reason_for_recall:"undeclared allergen". Omit to browse recent.
skipnumberNumber of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error.
sortstringSort expression (field:asc or field:desc). Example: report_date:desc. Invalid or non-sortable fields cause a query error — use a documented field name.
stagebooleanStage the matched set on a DataCanvas for SQL analysis with openfda_dataframe_query. Default false — the call returns one page for one upstream request. When true, records are also drained onto a can…
NameTypeReqDescription
canvas_idstringDataCanvas session id for the staged result set. Present when this call staged. Pass to openfda_dataframe_query / openfda_dataframe_describe, or back into this tool to accumulate more tables on the s…
canvas_tablestringCanvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses.
effectiveQuerystringSearch filter applied to the recall query, as submitted to openFDA
metaobjectyesResponse metadata
noticestringCanvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names.
resultsarrayyesEnforcement or recall records — recall_number, classification, recalling_firm, product_description, reason_for_recall, status, voluntary_mandated, distribution_pattern, report_date. Field set varies…
spilledbooleanTrue when this call staged its matched set on the canvas — use canvas_id with openfda_dataframe_query for SQL. Absent when staging was not requested.
staged_rowsnumberRows written to the canvas table. Compare with meta.total: a smaller value means staging stopped at its size budget and the table holds only the first staged_rows records.
totalResultsnumberyesTotal matching recall/enforcement records in the dataset
truncatedbooleanTrue when fewer rows reached the canvas than matched upstream — staging stopped at its size budget or openFDA's 25000-row pagination ceiling. Narrow the query (filters, date range) for a complete set.

No examples provided.

openfda_search_tobacco_reports ~396

Search problem reports submitted to the FDA for tobacco products, including e-cigarettes, vaping products, cigarettes, and smokeless tobacco. Reports capture product type, reported health problems (e.g. seizure, chest pain), product problems (e.g. exploding battery), whether a non-user was affected, and submission date. Use to investigate safety signals, find reports by product type, or analyze health effects.

NameTypeReqDescription
canvas_idstringDataCanvas session id from a prior call. Passing one stages this search onto that canvas (same effect as stage=true) so result sets accumulate for cross-table joins. Omit to stage onto a fresh canvas.
limitnumberMaximum number of records to return (1-1000, default 10)
searchstringopenFDA search query using field:value syntax. Examples: tobacco_products:"Electronic cigarette", reported_health_problems:"Seizure", nonuser_affected:"Yes". Omit to browse recent reports.
skipnumberNumber of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error.
sortstringSort expression (field:asc or field:desc). Example: date_submitted:desc. Invalid or non-sortable fields cause a query error — use a documented field name.
stagebooleanStage the matched set on a DataCanvas for SQL analysis with openfda_dataframe_query. Default false — the call returns one page for one upstream request. When true, records are also drained onto a can…
NameTypeReqDescription
canvas_idstringDataCanvas session id for the staged result set. Present when this call staged. Pass to openfda_dataframe_query / openfda_dataframe_describe, or back into this tool to accumulate more tables on the s…
canvas_tablestringCanvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses.
effectiveQuerystringSearch filter applied to the query, as submitted to openFDA
metaobjectyesResponse metadata
noticestringCanvas staging disclosure when the call staged, and guidance when results are empty or paging overshot — how to broaden filters or adjust the query.
resultsarrayyesTobacco problem report records. Key fields: report_id, date_submitted, tobacco_products[] (product type description), reported_health_problems[] (health effects), reported_product_problems[] (device/…
spilledbooleanTrue when this call staged its matched set on the canvas — use canvas_id with openfda_dataframe_query for SQL. Absent when staging was not requested.
staged_rowsnumberRows written to the canvas table. Compare with meta.total: a smaller value means staging stopped at its size budget and the table holds only the first staged_rows records.
totalResultsnumberyesTotal matching tobacco problem reports in the dataset
truncatedbooleanTrue when fewer rows reached the canvas than matched upstream — staging stopped at its size budget or openFDA's 25000-row pagination ceiling. Narrow the query (filters, date range) for a complete set.

No examples provided.