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.
Available components
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
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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
claude mcp add --transport http cyanheads-openfda-mcp-server https://openfda.caseyjhand.com/mcp
[mcp_servers.cyanheads-openfda-mcp-server] url = "https://openfda.caseyjhand.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cyanheads-openfda-mcp-server": {
"type": "remote",
"url": "https://openfda.caseyjhand.com/mcp",
"enabled": true
}
}
} openclaw mcp add cyanheads-openfda-mcp-server --url https://openfda.caseyjhand.com/mcp --transport streamable-http
mcp_servers:
cyanheads-openfda-mcp-server:
url: "https://openfda.caseyjhand.com/mcp" {
"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.
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.
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 |
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.
openfda_count_values 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.
| Name | Type | Req | Description |
|---|---|---|---|
| count | string | yes | Field 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… |
| endpoint | string | yes | Full openFDA endpoint path (e.g. "drug/event", "device/classification") |
| limit | number | — | Number of top terms to return (default 100, max 1000) |
| search | string | — | Filter query to scope the count (e.g. patient.drug.medicinalproduct:"metformin"). Omit to count across every record in the endpoint. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The limit applied to the term list. |
| meta | object | yes | Response metadata |
| notice | string | — | Guidance when no terms matched — how to verify the field name or adjust the count expression. Absent when terms are returned. |
| results | array | yes | Term-count pairs sorted by count descending |
| shown | number | — | Number of terms returned in this response. |
| termCount | number | yes | Number of distinct terms returned |
| truncated | boolean | — | True when the term list was capped at the limit — more distinct terms may exist. |
| truncationCeiling | number | — | Count of the lowest-ranked term returned — omitted terms fall at or below it. |
No examples provided.
openfda_dataframe_describe 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.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | yes | Canvas ID from an openFDA search tool response (present when the search ran with stage=true). |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | yes | Canvas ID that was described — pass to openfda_dataframe_query. |
| tables | array | yes | All tables and views available on this canvas. |
No examples provided.
openfda_dataframe_query 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.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | yes | Canvas ID from an openFDA search tool response (the canvas_id field, present when the search ran with stage=true). |
| query | string | yes | SQL 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". |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | yes | Canvas ID that was queried — reuse for follow-up queries. |
| row_count | number | yes | Number of rows in this response. Equals the canvas row limit when truncated is true. |
| rows | array | yes | Rows returned by the query (capped at the canvas row limit). |
| truncated | boolean | yes | True 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| endpoint | string | yes | openFDA endpoint to describe (e.g. "drug/event", "drug/shortages", "device/510k"). Must be one of the cataloged endpoints. |
| Name | Type | Req | Description |
|---|---|---|---|
| endpoint | string | yes | The endpoint these fields apply to |
| groups | array | yes | Field groups for this endpoint |
| queryTips | string | yes | openFDA query syntax reminders relevant to this endpoint |
No examples provided.
openfda_drug_profile 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.
| Name | Type | Req | Description |
|---|---|---|---|
| drug | string | yes | Drug name to profile — brand or generic (e.g. "metformin", "Humira", "Glucophage"). Resolved once to canonical FDA identifiers, which then key every sub-query. |
| Name | Type | Req | Description |
|---|---|---|---|
| adverse_events | — | yes | Adverse-event summary aggregated over drug/event, or null when unavailable. |
| approval | — | yes | Drugs@FDA approval summary, or null when no application matched. |
| degraded | array | yes | Sub-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. |
| identity | object | yes | Identity resolved once and reused across every sub-query to avoid identifier drift. |
| label | — | yes | Label highlights from drug/label, or null when no label matched. |
| meta | object | yes | Request metadata. |
| notice | string | — | Guidance when the drug could not be resolved or upstream errors degraded the profile. Absent on a fully populated profile. |
| recalls | array | yes | Recent drug/enforcement recall actions (may be empty). |
| sectionsFound | number | yes | How many profile sections (label, adverse_events, recalls, approval, shortage) returned data. |
| shortage | — | yes | Current or most-recent drug shortage status, or null when none on record. |
No examples provided.
openfda_get_drug_label 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | — | Maximum number of results to return (1-1000). Default 5. Labels are large. |
| search | string | yes | Query 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… |
| sections | array | — | Label 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… |
| skip | number | — | Number of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error. |
| sort | string | — | Sort expression (field:asc or field:desc). Example: effective_time:desc. Invalid or non-sortable fields cause a query error — use a documented field name. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The limit applied to this page. |
| effectiveQuery | string | yes | Search filter applied to the drug label query, as submitted to openFDA |
| kind | string | yes | Whether this response carries label records ("full") or only the section outline of a page too large to inline ("outline"). |
| meta | object | yes | Pagination and freshness metadata. |
| notice | string | — | Guidance when results are empty or paging overshot — how to broaden filters or correct field names. Absent when results are returned. |
| outline | array | — | Section 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. |
| results | array | — | Drug 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… |
| shown | number | — | Number of labels returned in this response. |
| totalResults | number | yes | Total matching label records in the dataset |
| truncated | boolean | — | True when more labels matched than this page returned — page with skip for the rest. |
No examples provided.
openfda_lookup_ndc 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.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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. |
| limit | number | — | Maximum number of records to return (1-1000, default 10) |
| search | string | yes | openFDA search query. Examples: product_ndc:"0363-0218", brand_name:"aspirin", generic_name:"metformin", openfda.manufacturer_name:"walgreen", active_ingredients.name:"ASPIRIN" |
| skip | number | — | Number of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error. |
| sort | string | — | Sort 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. |
| stage | boolean | — | Stage 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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_table | string | — | Canvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses. |
| effectiveQuery | string | yes | Search filter applied to the NDC lookup, as submitted to openFDA |
| meta | object | yes | Response metadata |
| notice | string | — | Canvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names. |
| results | array | yes | NDC directory records — product_ndc, brand_name, generic_name, labeler_name, dosage_form, route, marketing_category, active_ingredients[], packaging[], listing_expiration_date. |
| spilled | boolean | — | True 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_rows | number | — | Rows 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. |
| totalResults | number | yes | Total matching NDC records in the dataset |
| truncated | boolean | — | True 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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. |
| category | string | yes | Product category — each has different field schemas in the response |
| limit | number | — | Maximum number of records to return (1-1000, default 10) |
| search | string | — | openFDA search query. Examples: patient.drug.medicinalproduct:"aspirin", patient.reaction.reactionmeddrapt:"nausea" AND serious:"1". Omit to browse recent. |
| skip | number | — | Number of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error. |
| sort | string | — | Sort 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… |
| stage | boolean | — | Stage 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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_table | string | — | Canvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses. |
| effectiveQuery | string | — | Search filter applied to the query, as submitted to openFDA |
| meta | object | yes | Response metadata |
| notice | string | — | Canvas staging disclosure when the call staged, and guidance when results are empty or paging overshot — how to broaden filters or adjust the query. |
| results | array | yes | Adverse event records — fields vary by category (drug: patient/reactions/drugs, device: device details/event type, food: products/outcomes) |
| spilled | boolean | — | True 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_rows | number | — | Rows 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. |
| totalResults | number | yes | Total matching adverse event records in the dataset |
| truncated | boolean | — | True 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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. |
| limit | number | — | Maximum number of records to return (1-1000, default 10) |
| search | string | — | openFDA 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. |
| skip | number | — | Number of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error. |
| sort | string | — | Sort 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. |
| stage | boolean | — | Stage 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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_table | string | — | Canvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses. |
| effectiveQuery | string | — | Search filter applied to the query, as submitted to openFDA |
| meta | object | yes | Response metadata |
| notice | string | — | Canvas staging disclosure when the call staged, and guidance when results are empty or paging overshot — how to broaden filters or adjust the query. |
| results | array | yes | Animal 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… |
| spilled | boolean | — | True 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_rows | number | — | Rows 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. |
| totalResults | number | yes | Total matching animal adverse event records in the dataset |
| truncated | boolean | — | True 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 Openfda Search Device Clearances ~358
Search FDA device premarket notifications — 510(k) clearances and PMA approvals.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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. |
| limit | number | — | Maximum number of records to return (1-1000). |
| pathway | string | yes | Premarket pathway. 510(k) is the most common; PMA is for higher-risk devices. |
| search | string | — | openFDA search query. Examples: applicant:"medtronic", advisory_committee_description:"cardiovascular", product_code:"DXN", openfda.device_name:"catheter". Omit to browse recent. |
| skip | number | — | Number of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error. |
| sort | string | — | Sort expression (field:asc or field:desc). Example: decision_date:desc. Invalid or non-sortable fields cause a query error — use a documented field name. |
| stage | boolean | — | Stage 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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_table | string | — | Canvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses. |
| effectiveQuery | string | — | Search filter applied to the device clearance query, as submitted to openFDA |
| meta | object | yes | Response metadata |
| notice | string | — | Canvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names. |
| results | array | yes | 510(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… |
| spilled | boolean | — | True 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_rows | number | — | Rows 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. |
| totalResults | number | yes | Total matching device clearance records in the dataset |
| truncated | boolean | — | True 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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. |
| limit | number | — | Maximum number of records to return (1-1000, default 10) |
| search | string | — | openFDA 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… |
| skip | number | — | Number of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error. |
| sort | string | — | Sort 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. |
| stage | boolean | — | Stage 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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_table | string | — | Canvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses. |
| effectiveQuery | string | — | Search filter applied to the Drugs@FDA query, as submitted to openFDA |
| meta | object | yes | Response metadata |
| notice | string | — | Canvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names. |
| results | array | yes | Drug application records — application_number, sponsor_name, openfda block (brand_name, generic_name, route, product_type, substance_name), products[] (active_ingredients, dosage_form, marketing_stat… |
| spilled | boolean | — | True 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_rows | number | — | Rows 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. |
| totalResults | number | yes | Total matching drug approval records in the dataset |
| truncated | boolean | — | True 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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. |
| limit | number | — | Maximum number of records to return (1-1000, default 10) |
| search | string | — | openFDA 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… |
| skip | number | — | Number of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error. |
| sort | string | — | Sort expression (field:asc or field:desc). Example: update_date:desc. Invalid or non-sortable fields cause a query error — use a documented field name. |
| stage | boolean | — | Stage 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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_table | string | — | Canvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses. |
| effectiveQuery | string | — | Search filter applied to the drug/shortages query, as submitted to openFDA |
| meta | object | yes | Response metadata |
| notice | string | — | Canvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names. |
| results | array | yes | Drug shortage records. Key fields: generic_name, status ("Current"/"Resolved"), availability, therapeutic_category, dosage_form, presentation, package_ndc, company_name, contact_info, initial_posting… |
| spilled | boolean | — | True 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_rows | number | — | Rows 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. |
| totalResults | number | yes | Total matching drug shortage records in the dataset |
| truncated | boolean | — | True 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 Openfda Search Recalls ~359
Search enforcement reports and recall actions across drugs, food, and devices.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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. |
| category | string | yes | Product category |
| endpoint | string | — | Report type. Default enforcement. The recall endpoint is only available for devices. |
| limit | number | — | Maximum number of records to return (1-1000). |
| search | string | — | openFDA search query. Examples: classification:"Class I" (also "Class II" or "Class III"), recalling_firm:"pfizer", reason_for_recall:"undeclared allergen". Omit to browse recent. |
| skip | number | — | Number of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error. |
| sort | string | — | Sort expression (field:asc or field:desc). Example: report_date:desc. Invalid or non-sortable fields cause a query error — use a documented field name. |
| stage | boolean | — | Stage 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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_table | string | — | Canvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses. |
| effectiveQuery | string | — | Search filter applied to the recall query, as submitted to openFDA |
| meta | object | yes | Response metadata |
| notice | string | — | Canvas staging disclosure when the call staged, and guidance when results are empty — how to broaden filters or correct field names. |
| results | array | yes | Enforcement or recall records — recall_number, classification, recalling_firm, product_description, reason_for_recall, status, voluntary_mandated, distribution_pattern, report_date. Field set varies… |
| spilled | boolean | — | True 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_rows | number | — | Rows 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. |
| totalResults | number | yes | Total matching recall/enforcement records in the dataset |
| truncated | boolean | — | True 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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. |
| limit | number | — | Maximum number of records to return (1-1000, default 10) |
| search | string | — | openFDA search query using field:value syntax. Examples: tobacco_products:"Electronic cigarette", reported_health_problems:"Seizure", nonuser_affected:"Yes". Omit to browse recent reports. |
| skip | number | — | Number of records to skip for pagination (default 0). openFDA caps pagination at 25000 records; a higher value returns a pagination_limit_reached error. |
| sort | string | — | Sort expression (field:asc or field:desc). Example: date_submitted:desc. Invalid or non-sortable fields cause a query error — use a documented field name. |
| stage | boolean | — | Stage 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | — | DataCanvas 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_table | string | — | Canvas table holding the staged rows. Present when rows were staged; reference it in SQL FROM clauses. |
| effectiveQuery | string | — | Search filter applied to the query, as submitted to openFDA |
| meta | object | yes | Response metadata |
| notice | string | — | Canvas staging disclosure when the call staged, and guidance when results are empty or paging overshot — how to broaden filters or adjust the query. |
| results | array | yes | Tobacco problem report records. Key fields: report_id, date_submitted, tobacco_products[] (product type description), reported_health_problems[] (health effects), reported_product_problems[] (device/… |
| spilled | boolean | — | True 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_rows | number | — | Rows 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. |
| totalResults | number | yes | Total matching tobacco problem reports in the dataset |
| truncated | boolean | — | True 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.