skills/tooluniverse-product-safety-surveillance/SKILL.md
Post-market safety surveillance and recall/adverse-event RETRIEVAL across the full spectrum of FDA-regulated products that are NOT covered by the drug-AE signal skills: medical devices, food / dietary supplements / cosmetics, veterinary drugs, and drug supply (shortages). Orchestrates openFDA endpoints (MAUDE device adverse events + device recalls + 510(k), CAERS food/supplement/ cosmetic adverse events, veterinary adverse events, drug shortages, and cross-product enforcement/recall reports). USE WHEN the user asks: "are there adverse events for [device / pacemaker / infusion pump / insulin pump]", "device recalls for [firm/product]", "supplement / vitamin / cosmetic adverse reactions", "is [drug] in shortage", "what injectables are on shortage", "veterinary / animal adverse events for [drug] in [dog/cat/horse]", "food recall for listeria", "MAUDE report for [device]", "CAERS reactions for [brand]". DO NOT USE for drug adverse-event SIGNAL detection or disproportionality (PRR / ROR / IC) or drug-AE association scoring — that is `tooluniverse-pharmacovigilance` / `tooluniverse-adverse-event-detection`. This skill is multi-product surveillance and retrieval, not drug-AE statistical signal mining.
npx skillsauth add mims-harvard/tooluniverse tooluniverse-product-safety-surveillanceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Retrieve and interpret post-market safety records across every FDA-regulated product class except drug-AE signal mining: medical devices, food / dietary supplements / cosmetics, veterinary drugs, and drug supply (shortages), plus cross-product enforcement/recall reports.
KEY PRINCIPLES
field:value terms; combine with a space-separated AND. Phrases and special characters need care (see Query Grammar).total hit count from meta.results.total.tooluniverse-pharmacovigilance / tooluniverse-adverse-event-detection.USE for:
DO NOT USE for (point elsewhere):
tooluniverse-pharmacovigilance or tooluniverse-adverse-event-detectionThis skill retrieves and interprets multi-product safety records. It does not compute drug-AE signal statistics.
| Product class | Question | Tool | openFDA endpoint |
|---|---|---|---|
| Device | Adverse events / malfunctions / deaths (MAUDE) | OpenFDA_search_device_adverse_events | /device/event.json |
| Device | Recalls | OpenFDA_search_device_recalls | /device/recall.json |
| Device | Enforcement / recall reports | OpenFDA_search_device_enforcement | /device/enforcement.json |
| Device | 510(k) clearances (context) | OpenFDA_search_device_510k | /device/510k.json |
| Food/supplement/cosmetic | Adverse events (CAERS) | OpenFDA_search_food_adverse_events | /food/event.json |
| Food | Enforcement / recall reports | OpenFDA_search_food_enforcement | /food/enforcement.json |
| Veterinary | Animal drug adverse events | OpenFDA_search_animalvet_adverse_events | /animalandveterinary/event.json |
| Drug supply | Shortages | OpenFDA_search_drug_shortages | /drug/shortages.json |
| Drug | Enforcement / recall reports | OpenFDA_search_drug_enforcement | /drug/enforcement.json |
| Drug | Adverse events (raw FAERS records) | OpenFDA_search_drug_events | /drug/event.json |
| Drug | Labels | OpenFDA_search_drug_labels | /drug/label.json |
All tools take a Lucene search string plus optional limit and skip. All are keyless and verified live.
field:value (e.g. event_type:Death, status:Current).device.generic_name:pacemaker, products.industry_name:Cosmetics, animal.species:Dog, reaction.veddra_term_name:Vomiting, drug.active_ingredients.name:carprofen.AND (verified working): device.generic_name:pacemaker AND event_type:Death.
+AND+ — the +-joined boolean form errors through these tools. Use a literal space around AND.+ only for adjacency within a single field value (e.g. device.generic_name:infusion+pump). This is matched as tokens, not an exact phrase.(, ), /, leading +) inside values — they break the query. Pick a simpler token (e.g. products.industry_name:Dietary instead of the full Dietary Conventional Foods/Meal Replacements).YYYYMMDD (e.g. date_received); recalls/enforcement use YYYY-MM-DD (e.g. event_date_initiated, recall_initiation_date).{status:"success", data:{meta:{results:{total, skip, limit}}, results:[...]}}. Read the hit count from data.meta.results.total.&count=<field>; these TU wrappers center on search. To rank terms, retrieve a batch (e.g. limit:100) and tally the field yourself in Python./device/event.json)| Field | Meaning |
|---|---|
| event_type | Death, Injury, Malfunction, or No answer provided. Death/Injury = patient harm; Malfunction = device failure without (reported) harm. |
| device[].generic_name / device[].brand_name | Device category / trade name. |
| device[].manufacturer_d_name | Device manufacturer. |
| patient[] | Patient-level outcome data (may be sparse). |
| mdr_text[].text | Narrative; text_type_code distinguishes event description vs manufacturer narrative. |
| report_number | MAUDE report id. Duplicate / follow-up reports of the same event are common — do not count reports as distinct events. |
| date_received | YYYYMMDD FDA received date. |
/device/recall.json)| Field | Meaning |
|---|---|
| product_description | What was recalled. |
| recalling_firm | Firm issuing the recall. |
| recall_status | e.g. Open, Terminated. Terminated = FDA closed the action. |
| product_code | FDA device product code. |
| k_numbers[] | Associated 510(k) clearance numbers. |
| root_cause_description | FDA root-cause category (e.g. Labeling design). |
| event_date_initiated | YYYY-MM-DD recall start. |
/.../enforcement.json)| Field | Meaning |
|---|---|
| classification | Recall severity: Class I (serious/fatal hazard), Class II (temporary/reversible), Class III (unlikely to cause harm). |
| status | Ongoing / Terminated / Completed. |
| reason_for_recall | Why recalled. |
| product_description | Recalled product. |
| recalling_firm | Firm. |
/food/event.json)| Field | Meaning |
|---|---|
| reactions[] | MedDRA reaction terms (British spelling, e.g. Diarrhoea, Nausea). |
| outcomes[] | e.g. Hospitalization, Life Threatening, Disability, Death, Other Serious or Important Medical Event, Visited an ER. |
| products[].industry_name | Product category (Cosmetics, Dietary Conventional Foods/Meal Replacements, Milk/Butter/Dried Milk Prod, …). |
| products[].role | SUSPECT (implicated) vs CONCOMITANT (also consumed). |
| products[].name_brand | Brand name. |
| consumer | age, gender of the consumer (often sparse). |
/animalandveterinary/event.json)| Field | Meaning |
|---|---|
| animal.species | Dog, Cat, Horse, … |
| animal.gender | Animal sex. |
| number_of_animals_affected | Count in the report. |
| reaction[].veddra_term_name | VeDDRA clinical sign (e.g. Vomiting, Diarrhoea). |
| drug[].brand_name / drug[].active_ingredients[].name | Implicated product / active. |
| drug[].used_according_to_label / off_label_use | Label vs off-label use. |
/drug/shortages.json)| Field | Meaning |
|---|---|
| status | Current or Resolved. |
| availability | e.g. Unavailable, Limited. |
| generic_name | Drug in shortage. |
| shortage_reason | e.g. Delay in shipping of the drug, Demand increase for the drug. |
| dosage_form | e.g. Injection, Tablet. |
| therapeutic_category[] | Clinical category. |
| company_name | Manufacturer. |
| update_type / initial_posting_date / update_date | Posting metadata. |
AND for combinations). Keep values simple; avoid special characters.data.meta.results.total and data.results[].event_type:Death; enforcement classification:Class I; CAERS outcomes:Death/Hospitalization; shortage status:Current.limit:100 and tally in Python (no count aggregation in these wrappers)."Are there any reported deaths in adverse-event reports for pacemakers?"
OpenFDA_search_device_adverse_events {"search":"device.generic_name:pacemaker AND event_type:Death","limit":1}
Real output (abbrev): status:success, meta.results.total = 16619; first record event_type = Death, device.generic_name = DEFIBRILLATOR/PACEMAKER.
Interpretation: 16,619 MAUDE reports match a pacemaker device with a Death event type. These are spontaneous reports — duplicates likely, and "Death" means a death was reported in temporal association, not that the device caused it.
"What device recalls has Medtronic Navigation issued?"
OpenFDA_search_device_recalls {"search":"recalling_firm:Medtronic","limit":1}
Real output (abbrev): total = 1896; first record recall_status = Terminated, product_code = HAW, root_cause_description = Labeling design, k_numbers = ["K990214"], event_date_initiated = 2011-01-20, product_description = a tactile probe for spine surgery.
Interpretation: 1,896 recall records match firms containing "Medtronic". recall_status: Terminated means FDA has closed this action; the root cause was a labeling-design issue.
"Is ketorolac injection in shortage right now?"
OpenFDA_search_drug_shortages {"search":"dosage_form:Injection AND status:Current","limit":1}
Real output (abbrev): total = 799; first record generic_name = Ketorolac Tromethamine Injection, status = Current, shortage_reason = Delay in shipping of the drug, availability = Unavailable, company_name = Fresenius Kabi USA, LLC.
Interpretation: 799 current shortage records are injectables; ketorolac tromethamine injection is currently in shortage (status Current, availability Unavailable) due to a shipping delay.
"Are there CAERS adverse-event reports implicating cosmetics?"
OpenFDA_search_food_adverse_events {"search":"products.industry_name:Cosmetics","limit":1}
Real output (abbrev): total = 52214; first record products[].industry_name = Cosmetics, products[].role = SUSPECT, outcomes = ["Hospitalization","Other Serious or Important Medical Event"].
Interpretation: 52,214 CAERS reports name a cosmetic product as SUSPECT. CAERS is voluntary; a SUSPECT role reflects the reporter's attribution, not a verified causal link.
"What adverse events are reported for carprofen in dogs?"
OpenFDA_search_animalvet_adverse_events {"search":"drug.active_ingredients.name:carprofen AND animal.species:Dog","limit":1}
Real output (abbrev): total = 46469; first record animal.species = Dog, reaction[].veddra_term_name includes Leucocytosis NOS, Neutrophilia, Depression, Elevated alanine aminotransferase (ALT).
Interpretation: 46,469 veterinary reports match carprofen-containing products in dogs. VeDDRA terms describe reported clinical signs; counts reflect reporting, not incidence.
meta.results.total) are report counts, not incidence or rates. There is no exposure denominator, so you cannot compute risk.SUSPECT role is reporter attribution.tooluniverse-pharmacovigilance / tooluniverse-adverse-event-detection.meta.last_updated date; openFDA lags real-world events.See references/openfda_fields.md for the full per-endpoint field reference and additional query examples.
tools
--- name: tooluniverse-phewas description: Cross-ancestry / cross-biobank phenome-wide association (PheWAS) and replication. Given ONE variant (rsID) or ONE gene, look up every phenotype it associates with across European/UK (UKB-TOPMed), Finnish (FinnGen), Japanese (BioBank Japan), and Taiwanese (TPMI) biobanks, plus exome-wide gene-burden PheWAS (Genebass), then judge whether an association replicates across ancestries or is population-specific. Use whenever the user asks "what else is this va
tools
Dereplicate a putative natural product and assign its chemical taxonomy. Use to answer "is [compound] a known natural product", "what microbe/organism produces [compound]", "what chemical class is [compound]", "dereplicate this metabolite (by formula/exact mass/InChIKey/SMILES)", or "classify this molecule into ChemOnt". Searches NPAtlas for known microbial natural products (producing organism + literature reference), assigns the ChemOnt kingdom→superclass→class→subclass hierarchy via ClassyFire, resolves systematic IUPAC names to structure via OPSIN, and cross-references identity in PubChem. NOT for general drug/compound identity or ADMET (use tooluniverse-chemical-compound-retrieval / tooluniverse-small-molecule-discovery) and NOT for metabolomics pathway/enrichment analysis (use tooluniverse-metabolomics skills).
tools
Genome-ASSEMBLY discovery, QC, and replicon mapping for any organism (bacteria, archaea, fungi, and beyond) using NCBI Datasets. Resolves an organism name or taxid to assemblies, picks the reference/representative or best-quality assembly, pulls assembly QC metrics (total length, contig/scaffold N50, contig count, GC%, assembly level, RefSeq category), enumerates chromosomes and plasmids via per-replicon sequence reports, and compares candidate assemblies on quality. Use for "what genomes are available for [organism]", "assembly stats / N50 / GC content for [GCF_/GCA_ accession]", "how many plasmids does [strain] have", "compare assemblies for [species]", "find the reference genome for [taxon]", "is this assembly Complete Genome or just contigs". NOT for gene-level orthology/synteny (use tooluniverse-comparative-genomics), plant gene structure (use tooluniverse-plant-genomics), de novo assembly from raw reads (no tool exists), or taxonomy-only name/lineage lookups.
tools
--- name: tooluniverse-fastq-qc description: FASTQ quality control and adapter/quality-trimming decisions with local NGS tools — run FastQC on raw reads, summarize a project with MultiQC, interpret per-base sequence quality, per-base N content, adapter content, overrepresented sequences, sequence duplication and GC content, and decide whether (and how) to trim with fastp / Cutadapt before downstream analysis. seqkit for read counts/stats/subsampling. Use when someone asks "run QC on my FASTQs",