tooluniverse-adverse-event-detection

Adverse Drug Event Signal Detection & Analysis

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "tooluniverse-adverse-event-detection" with this command: npx skills add wu-yc/labclaw/wu-yc-labclaw-tooluniverse-adverse-event-detection

Adverse Drug Event Signal Detection & Analysis

Automated pipeline for detecting, quantifying, and contextualizing adverse drug event signals using FAERS disproportionality analysis, FDA label mining, mechanism-based prediction, and literature evidence. Produces a quantitative Safety Signal Score (0-100) for regulatory and clinical decision-making.

KEY PRINCIPLES:

  • Signal quantification first - Every adverse event must have PRR/ROR/IC with confidence intervals

  • Serious events priority - Deaths, hospitalizations, life-threatening events always analyzed first

  • Multi-source triangulation - FAERS + FDA labels + OpenTargets + DrugBank + literature

  • Context-aware assessment - Distinguish drug-specific vs class-wide vs confounding signals

  • Report-first approach - Create report file FIRST, update progressively

  • Evidence grading mandatory - T1 (regulatory/boxed warning) through T4 (computational)

  • English-first queries - Always use English drug names in tool calls, respond in user's language

When to Use

Apply when user asks:

  • "What are the safety signals for [drug]?"

  • "Detect adverse events for [drug]"

  • "Is [drug] associated with [adverse event]?"

  • "What are the FAERS signals for [drug]?"

  • "Compare safety of [drug A] vs [drug B] for [adverse event]"

  • "What are the serious adverse events for [drug]?"

  • "Are there emerging safety signals for [drug]?"

  • "Post-market surveillance report for [drug]"

  • "Pharmacovigilance signal detection for [drug]"

  • "What is the disproportionality analysis for [drug] and [event]?"

Differentiation from tooluniverse-pharmacovigilance: This skill focuses specifically on signal detection and quantification using disproportionality analysis (PRR, ROR, IC) with statistical rigor, produces a quantitative Safety Signal Score (0-100), and performs comparative safety analysis across drug classes. The pharmacovigilance skill provides broader safety profiling without the same depth of signal detection metrics.

Workflow Overview

Phase 0: Input Parsing & Drug Disambiguation Parse drug name, resolve to ChEMBL ID, DrugBank ID Identify drug class, mechanism, and approved indications | Phase 1: FAERS Adverse Event Profiling Top adverse events by frequency Seriousness and outcome distributions Demographics (age, sex, country) | Phase 2: Disproportionality Analysis (Signal Detection) Calculate PRR, ROR, IC with 95% CI for each AE Apply signal detection criteria Classify signal strength (Strong/Moderate/Weak/None) | Phase 3: FDA Label Safety Information Boxed warnings, contraindications Warnings and precautions, adverse reactions Drug interactions, special populations | Phase 4: Mechanism-Based Adverse Event Context Target-based AE prediction (OpenTargets safety) Off-target effects, ADMET predictions Drug class effects comparison | Phase 5: Comparative Safety Analysis Compare to drugs in same class Identify unique vs class-wide signals Head-to-head disproportionality comparison | Phase 6: Drug-Drug Interactions & Risk Factors Known DDIs causing AEs Pharmacogenomic risk factors (PharmGKB) FDA PGx biomarkers | Phase 7: Literature Evidence PubMed safety studies, case reports OpenAlex citation analysis Preprint emerging signals (EuropePMC) | Phase 8: Risk Assessment & Safety Signal Score Calculate Safety Signal Score (0-100) Evidence grading (T1-T4) for each signal Clinical significance assessment | Phase 9: Report Synthesis & Recommendations Monitoring recommendations Risk mitigation strategies Completeness checklist

Phase 0: Input Parsing & Drug Disambiguation

0.1 Resolve Drug Identity

Step 1: Get ChEMBL ID from drug name

chembl_result = tu.tools.OpenTargets_get_drug_chembId_by_generic_name(drugName="atorvastatin")

Response: {data: {search: {hits: [{id: "CHEMBL1487", name: "ATORVASTATIN", description: "..."}]}}}

chembl_id = chembl_result['data']['search']['hits'][0]['id'] # "CHEMBL1487"

Step 2: Get drug mechanism of action

moa = tu.tools.OpenTargets_get_drug_mechanisms_of_action_by_chemblId(chemblId=chembl_id)

Response: {data: {drug: {mechanismsOfAction: {rows: [{mechanismOfAction: "HMG-CoA reductase inhibitor", actionType: "INHIBITOR", targetName: "...", targets: [{id: "ENSG00000113161", approvedSymbol: "HMGCR"}]}]}}}}

Step 3: Get blackbox warning status

blackbox = tu.tools.OpenTargets_get_drug_blackbox_status_by_chembl_ID(chemblId=chembl_id)

Response: {data: {drug: {name: "ATORVASTATIN", hasBeenWithdrawn: false, blackBoxWarning: false}}}

Step 4: Get DrugBank info (safety, toxicity)

drugbank = tu.tools.drugbank_get_safety_by_drug_name_or_drugbank_id( query="atorvastatin", case_sensitive=False, exact_match=False, limit=3 )

Response: {results: [{drug_name: "Atorvastatin", drugbank_id: "DB01076", toxicity: "...", food_interactions: "..."}]}

Step 5: Get DrugBank targets

targets = tu.tools.drugbank_get_targets_by_drug_name_or_drugbank_id( query="atorvastatin", case_sensitive=False, exact_match=False, limit=3 )

Response: {results: [{drug_name: "...", targets: [{name: "HMG-CoA reductase", ...}]}]}

Step 6: Get approved indications

indications = tu.tools.OpenTargets_get_drug_indications_by_chemblId(chemblId=chembl_id)

Response: {data: {drug: {indications: {rows: [{disease: {name: "hypercholesterolemia"}, maxPhaseForIndication: 4}]}}}}

0.2 Output for Report

1. Drug Identification

PropertyValue
Generic NameAtorvastatin
ChEMBL IDCHEMBL1487
DrugBank IDDB01076
Drug ClassHMG-CoA reductase inhibitor (Statin)
MechanismHMG-CoA reductase inhibitor (target: HMGCR)
Primary TargetHMGCR (ENSG00000113161)
Black Box WarningNo
WithdrawnNo

Source: OpenTargets, DrugBank

Phase 1: FAERS Adverse Event Profiling

1.1 Query FAERS for Adverse Events

Get top adverse event reactions (returns list of {term, count})

reactions = tu.tools.FAERS_count_reactions_by_drug_event(medicinalproduct="ATORVASTATIN")

Response: [{term: "FATIGUE", count: 19171}, {term: "DIARRHOEA", count: 17127}, ...]

Get seriousness classification

seriousness = tu.tools.FAERS_count_seriousness_by_drug_event(medicinalproduct="ATORVASTATIN")

Response: [{term: "Serious", count: 242757}, {term: "Non-serious", count: 83504}]

Get outcome distribution

outcomes = tu.tools.FAERS_count_outcomes_by_drug_event(medicinalproduct="ATORVASTATIN")

Response: [{term: "Unknown", count: 162310}, {term: "Fatal", count: 22128}, ...]

Get age distribution

age_dist = tu.tools.FAERS_count_patient_age_distribution(medicinalproduct="ATORVASTATIN")

Response: [{term: "Elderly", count: 38510}, {term: "Adult", count: 24302}, ...]

Get death-related events

deaths = tu.tools.FAERS_count_death_related_by_drug(medicinalproduct="ATORVASTATIN")

Response: [{term: "alive", count: 113157}, {term: "death", count: 26909}]

Get reporter country distribution

countries = tu.tools.FAERS_count_reportercountry_by_drug_event(medicinalproduct="ATORVASTATIN")

Response: [{term: "US", count: 170963}, {term: "GB", count: 40079}, ...]

1.2 Get Serious Events Breakdown

Filter serious events - all types

serious_all = tu.tools.FAERS_filter_serious_events( operation="filter_serious_events", drug_name="ATORVASTATIN", seriousness_type="all" )

Response: {status: "success", drug_name: "ATORVASTATIN", seriousness_type: "all",

total_serious_events: N, top_serious_reactions: [{reaction: "...", count: N}, ...]}

Death-related serious events

serious_death = tu.tools.FAERS_filter_serious_events( operation="filter_serious_events", drug_name="ATORVASTATIN", seriousness_type="death" )

Response: {status: "success", total_serious_events: 18720,

top_serious_reactions: [{reaction: "DEATH", count: 7541}, {reaction: "MYOCARDIAL INFARCTION", count: 1286}, ...]}

Hospitalization-related

serious_hosp = tu.tools.FAERS_filter_serious_events( operation="filter_serious_events", drug_name="ATORVASTATIN", seriousness_type="hospitalization" )

Life-threatening

serious_lt = tu.tools.FAERS_filter_serious_events( operation="filter_serious_events", drug_name="ATORVASTATIN", seriousness_type="life_threatening" )

1.3 MedDRA Hierarchy Rollup

Get MedDRA preferred term rollup (top 50)

meddra = tu.tools.FAERS_rollup_meddra_hierarchy( operation="rollup_meddra_hierarchy", drug_name="ATORVASTATIN" )

Response: {status: "success", drug_name: "ATORVASTATIN",

meddra_hierarchy: {PT_level: [{preferred_term: "FATIGUE", count: 13957}, ...]}}

1.4 Output for Report

2. FAERS Adverse Event Profile

2.1 Overview

  • Total reports: 326,261 (Serious: 242,757 | Non-serious: 83,504)
  • Fatal outcomes: 22,128
  • Primary reporter countries: US (170,963), GB (40,079), CA (16,492)

2.2 Top 10 Adverse Events by Frequency

RankAdverse EventReports% of Total
1Fatigue19,1715.9%
2Diarrhoea17,1275.2%
3Dyspnoea15,9924.9%
............

2.3 Outcome Distribution

OutcomeCountPercentage
Unknown162,31039.6%
Recovered/resolved94,73723.1%
Not recovered77,72118.9%
Recovering49,36712.0%
Fatal22,1285.4%
Recovered with sequelae4,9301.2%

2.4 Age Distribution

Age GroupReportsPercentage
Elderly38,51061.3%
Adult24,30238.7%
Other152<1%

Source: FAERS via FAERS_count_reactions_by_drug_event, FAERS_count_seriousness_by_drug_event

Phase 2: Disproportionality Analysis (Signal Detection)

2.1 Calculate Signal Metrics

CRITICAL: This is the core of the skill. For each top adverse event (at least top 15-20), calculate PRR, ROR, and IC with 95% confidence intervals.

For each significant adverse event, calculate disproportionality

top_events = ["Rhabdomyolysis", "Myalgia", "Hepatotoxicity", "Diabetes mellitus", "Acute kidney injury", "Myopathy", "Pancreatitis"]

for event in top_events: result = tu.tools.FAERS_calculate_disproportionality( operation="calculate_disproportionality", drug_name="ATORVASTATIN", adverse_event=event ) # Response structure: # { # status: "success", # drug_name: "ATORVASTATIN", # adverse_event: "Rhabdomyolysis", # contingency_table: { # a_drug_and_event: 2226, # b_drug_no_event: 241655, # c_no_drug_event: 37658, # d_no_drug_no_event: 19725450 # }, # metrics: { # ROR: {value: 4.825, ci_95_lower: 4.622, ci_95_upper: 5.037}, # PRR: {value: 4.79, ci_95_lower: 4.59, ci_95_upper: 4.998}, # IC: {value: 2.194, ci_95_lower: 2.136, ci_95_upper: 2.252} # }, # signal_detection: { # signal_detected: true, # signal_strength: "Strong signal", # criteria: "ROR lower CI > 1.0 and case count >= 3" # } # }

2.2 Signal Detection Criteria

Proportional Reporting Ratio (PRR):

  • PRR = (a/(a+b)) / (c/(c+d))

  • Signal: PRR >= 2.0 AND lower 95% CI > 1.0 AND case count >= 3

Reporting Odds Ratio (ROR):

  • ROR = (ad) / (bc)

  • Signal: Lower 95% CI > 1.0

Information Component (IC):

  • IC = log2(observed/expected)

  • Signal: Lower 95% CI > 0

2.3 Signal Strength Classification

Strength PRR ROR Lower CI IC Lower CI Clinical Action

Strong

= 5.0 = 3.0 = 2.0 Immediate investigation required

Moderate 3.0-4.9 2.0-2.9 1.0-1.9 Active monitoring recommended

Weak 2.0-2.9 1.0-1.9 0-0.9 Routine monitoring, watch for trends

No signal < 2.0 < 1.0 < 0 Standard pharmacovigilance

2.4 Demographic Stratification of Key Signals

For strong/moderate signals, stratify by demographics

result = tu.tools.FAERS_stratify_by_demographics( operation="stratify_by_demographics", drug_name="ATORVASTATIN", adverse_event="Rhabdomyolysis", stratify_by="sex" # Options: sex, age, country )

Response: {status: "success", total_reports: 1996,

stratification: [{group: 1, count: 1190, percentage: 59.62}, # 1=Male

{group: 2, count: 781, percentage: 39.13}]} # 2=Female

Note on sex codes: group 0 = Unknown, group 1 = Male, group 2 = Female.

2.5 Output for Report

3. Disproportionality Analysis (Signal Detection)

3.1 Signal Detection Summary

Adverse EventCases (a)PRRPRR 95% CIRORROR 95% CIICSignal
Rhabdomyolysis2,2264.794.59-5.004.834.62-5.042.19STRONG
Myopathy1,2346.125.72-6.556.185.77-6.622.54STRONG
Myalgia9,1892.312.26-2.372.332.28-2.391.18Moderate
Hepatotoxicity4563.453.10-3.843.483.13-3.871.72Moderate
Diabetes mellitus3,0211.891.82-1.961.901.83-1.970.91Weak
Pancreatitis6782.151.97-2.342.161.98-2.351.08Weak

3.2 Demographics of Key Signals

Rhabdomyolysis (n=1,996):

  • Male: 59.6%, Female: 39.1%, Unknown: 1.3%
  • Predominantly elderly (>65 years)

Source: FAERS via FAERS_calculate_disproportionality, FAERS_stratify_by_demographics

Phase 3: FDA Label Safety Information

3.1 Extract Label Sections

Boxed warnings

boxed = tu.tools.FDA_get_boxed_warning_info_by_drug_name(drug_name="atorvastatin")

Response: {meta: {total: N}, results: [{boxed_warning: ["...text..."]}]}

NOTE: Returns {error: {code: "NOT_FOUND"}} if no boxed warning exists

Contraindications

contras = tu.tools.FDA_get_contraindications_by_drug_name(drug_name="atorvastatin")

Response: {meta: {total: N}, results: [{openfda.generic_name: [...], contraindications: ["...text..."]}]}

Warnings and precautions

warnings = tu.tools.FDA_get_warnings_by_drug_name(drug_name="atorvastatin")

Response: {meta: {total: N}, results: [{warnings: ["...text..."], boxed_warning: [...]}]}

Adverse reactions from label

adverse_rxns = tu.tools.FDA_get_adverse_reactions_by_drug_name(drug_name="atorvastatin")

Response: {meta: {total: N}, results: [{adverse_reactions: ["...text..."]}]}

Drug interactions from label

interactions = tu.tools.FDA_get_drug_interactions_by_drug_name(drug_name="atorvastatin")

Response: {meta: {total: N}, results: [{drug_interactions: ["...text..."]}]}

Pregnancy/breastfeeding

pregnancy = tu.tools.FDA_get_pregnancy_or_breastfeeding_info_by_drug_name(drug_name="atorvastatin")

Geriatric use

geriatric = tu.tools.FDA_get_geriatric_use_info_by_drug_name(drug_name="atorvastatin")

Pediatric use

pediatric = tu.tools.FDA_get_pediatric_use_info_by_drug_name(drug_name="atorvastatin")

Pharmacogenomics from label

pgx_label = tu.tools.FDA_get_pharmacogenomics_info_by_drug_name(drug_name="atorvastatin")

3.2 Handling No Results

IMPORTANT: FDA label tools return {error: {code: "NOT_FOUND"}} when a section does not exist. This is NORMAL for many drugs - for example, most drugs do NOT have boxed warnings. Always check for this pattern:

Check if boxed warning exists

if isinstance(boxed, dict) and 'error' in boxed: boxed_warning_text = "None (no boxed warning for this drug)" else: boxed_warning_text = boxed['results'][0].get('boxed_warning', ['None'])[0]

3.3 Output for Report

4. FDA Label Safety Information

4.1 Boxed Warning

None

4.2 Contraindications

  • Acute liver failure or decompensated cirrhosis
  • Hypersensitivity to atorvastatin (includes anaphylaxis, angioedema, SJS, TEN)

4.3 Warnings and Precautions

WarningClinical Relevance
Myopathy/RhabdomyolysisRisk with CYP3A4 inhibitors, high doses
Immune-Mediated Necrotizing MyopathyRare autoimmune myopathy
Hepatic DysfunctionMonitor LFTs
Increased HbA1c/GlucoseDiabetes risk

4.4 Drug Interactions (from label)

Interacting DrugMechanismClinical Action
CyclosporineIncreased exposureAvoid combination
CYP3A4 inhibitorsIncreased atorvastatin levelsUse lowest dose
GemfibrozilIncreased myopathy riskAvoid

4.5 Special Populations

  • Pregnancy: Contraindicated
  • Geriatric: No dose adjustment needed
  • Pediatric: Approved for heterozygous FH ages 10+

Source: FDA drug labels via FDA_get_contraindications_by_drug_name, FDA_get_warnings_by_drug_name

Phase 4: Mechanism-Based Adverse Event Context

4.1 Target Safety Profile

Get target safety data from OpenTargets

First get target ensembl ID from MOA result

target_id = "ENSG00000113161" # HMGCR from Phase 0

safety = tu.tools.OpenTargets_get_target_safety_profile_by_ensemblID(ensemblId=target_id)

Response: {data: {target: {id: "...", approvedSymbol: "HMGCR",

safetyLiabilities: [{event: "Decrease, Fertility", eventId: "...",

effects: [{direction: "Inhibition/Decrease/Downregulation"}],

studies: [{type: "cell-based"}], datasource: "AOP-Wiki"}]}}}

Get OpenTargets adverse events (uses FAERS data)

ot_aes = tu.tools.OpenTargets_get_drug_adverse_events_by_chemblId(chemblId="CHEMBL1487")

Response: {data: {drug: {adverseEvents: {count: 13, criticalValue: 513.67,

rows: [{name: "myalgia", meddraCode: "10028411", count: 4126, logLR: 6067.33}, ...]}}}}

4.2 ADMET Predictions (if SMILES available)

Get SMILES from DrugBank/PharmGKB

smiles = "CC(C)C1=C(C(=C(N1CCC@HO)C2=CC=C(C=C2)F)C3=CC=CC=C3)C(=O)NC4=CC=CC=C4"

Toxicity predictions

toxicity = tu.tools.ADMETAI_predict_toxicity(smiles=[smiles])

Response: predictions for hepatotoxicity, cardiotoxicity, etc.

CYP interaction predictions

cyp = tu.tools.ADMETAI_predict_CYP_interactions(smiles=[smiles])

Response: CYP inhibition/substrate predictions

4.3 Drug Warnings from OpenTargets

Drug warnings (withdrawals, safety warnings)

warnings = tu.tools.OpenTargets_get_drug_warnings_by_chemblId(chemblId="CHEMBL1487")

Response: {data: {drug: {id: "CHEMBL1487", name: "ATORVASTATIN"}}}

Note: Empty if no warnings exist

4.4 Output for Report

5. Mechanism-Based Adverse Event Context

5.1 Target Safety Profile (HMGCR)

Safety LiabilityDirectionEvidenceSource
Decreased fertilityInhibitionCell-basedAOP-Wiki

5.2 OpenTargets Significant Adverse Events

Adverse EventFAERS Countlog(LR)MedDRA Code
Myalgia4,1266,06710028411
Rhabdomyolysis2,5464,78810039020
CPK increased1,7092,90910005470

5.3 ADMET Predictions

PropertyPredictionConfidence
HepatotoxicityModerate risk0.65
Cardiotoxicity (hERG)Low risk0.23
CYP3A4 substrateYes0.92

Source: OpenTargets, ADMETAI

Phase 5: Comparative Safety Analysis

5.1 Compare to Drug Class

Head-to-head comparison with class member

comparison = tu.tools.FAERS_compare_drugs( operation="compare_drugs", drug1="ATORVASTATIN", drug2="SIMVASTATIN", adverse_event="Rhabdomyolysis" )

Response: {status: "success", adverse_event: "Rhabdomyolysis",

drug1: {name: "ATORVASTATIN", metrics: {PRR: {value: 4.79, ...}, ROR: {...}, IC: {...}},

signal_detection: {signal_detected: true, signal_strength: "Strong signal"}},

drug2: {name: "SIMVASTATIN", metrics: {PRR: {value: 12.78, ...}, ...}},

comparison: "SIMVASTATIN shows stronger signal than ATORVASTATIN"}

Compare multiple events across class members

class_drugs = ["ATORVASTATIN", "SIMVASTATIN", "ROSUVASTATIN", "PRAVASTATIN"] key_events = ["Rhabdomyolysis", "Myalgia", "Hepatotoxicity", "Diabetes mellitus"]

Run FAERS_compare_drugs for each pair and event combination

Aggregate adverse events across drug class

class_aes = tu.tools.FAERS_count_additive_adverse_reactions( medicinalproducts=class_drugs )

Response: [{term: "FATIGUE", count: N}, ...]

Aggregate seriousness across class

class_serious = tu.tools.FAERS_count_additive_seriousness_classification( medicinalproducts=class_drugs )

Response: [{term: "Serious", count: N}, {term: "Non-serious", count: N}]

5.2 Output for Report

6. Comparative Safety Analysis (Statin Class)

6.1 Head-to-Head: Rhabdomyolysis

DrugPRRPRR 95% CIRORCasesSignal
Simvastatin12.7812.43-13.1413.055,234STRONG
Atorvastatin4.794.59-5.004.832,226STRONG
Rosuvastatin3.453.21-3.713.471,102Moderate
Pravastatin5.675.28-6.095.721,876STRONG

6.2 Class-Wide vs Drug-Specific Signals

Signal TypeEvents
Class-wide (all statins)Myalgia, Rhabdomyolysis, CPK elevation, Hepatotoxicity
Drug-specific (atorvastatin)[None identified - all signals are class-wide]

Source: FAERS via FAERS_compare_drugs

Phase 6: Drug-Drug Interactions & Risk Factors

6.1 Drug-Drug Interactions

FDA label DDIs

ddi_label = tu.tools.FDA_get_drug_interactions_by_drug_name(drug_name="atorvastatin")

Response: {results: [{drug_interactions: ["...text..."]}]}

DrugBank interactions

ddi_db = tu.tools.drugbank_get_drug_interactions_by_drug_name_or_id( query="atorvastatin", case_sensitive=False, exact_match=False, limit=3 )

DailyMed DDIs

ddi_dailymed = tu.tools.DailyMed_parse_drug_interactions(drug_name="atorvastatin")

6.2 Pharmacogenomic Risk Factors

PharmGKB drug search

pgx_search = tu.tools.PharmGKB_search_drugs(query="atorvastatin")

Response: {status: "success", data: [{id: "PA448500", name: "atorvastatin", smiles: "..."}]}

Get detailed PGx info

pgx_details = tu.tools.PharmGKB_get_drug_details(drug_id="PA448500")

PharmGKB dosing guidelines

dosing = tu.tools.PharmGKB_get_dosing_guidelines(gene="SLCO1B1")

SLCO1B1 is key pharmacogene for statins

FDA PGx biomarkers

fda_pgx = tu.tools.fda_pharmacogenomic_biomarkers(drug_name="atorvastatin", limit=10)

Response: {count: N, results: [{drug_name: "...", biomarker: "...", ...}]}

Note: May return empty results for some drugs

6.3 Output for Report

7. Drug-Drug Interactions & Pharmacogenomic Risk

7.1 Key Drug-Drug Interactions

Interacting DrugMechanismRiskManagement
CyclosporineCYP3A4 inhibitionRhabdomyolysisAvoid combination
ClarithromycinCYP3A4 inhibitionMyopathyLimit to 20mg/day
GemfibrozilGlucuronidation inhibitionMyopathyAvoid combination
Niacin (>1g/day)Additive myotoxicityMyopathyMonitor closely

7.2 Pharmacogenomic Risk Factors

GeneVariantPhenotypeRecommendationEvidence
SLCO1B1rs4149056 (*5)Reduced transportConsider lower doseLevel 1A
CYP3A4*22 (rs35599367)Poor metabolizerIncreased exposureLevel 3

Source: FDA label, PharmGKB, fda_pharmacogenomic_biomarkers

Phase 7: Literature Evidence

7.1 Search Published Literature

PubMed safety studies

pubmed = tu.tools.PubMed_search_articles( query='atorvastatin adverse events safety rhabdomyolysis', limit=20 )

Response: [{pmid: "...", title: "...", authors: [...], journal: "...",

pub_date: "...", pub_year: "...", doi: "..."}]

Citation analysis via OpenAlex

openalex = tu.tools.openalex_search_works( query="atorvastatin safety adverse events", limit=15 )

Preprints via EuropePMC

preprints = tu.tools.EuropePMC_search_articles( query="atorvastatin safety signal", source="PPR", pageSize=10 )

7.2 Output for Report

8. Literature Evidence

8.1 Key Safety Publications

PMIDTitleYearJournal
41657777Differential musculoskeletal outcome reporting...2026Front Pharmacol
............

8.2 Evidence Summary

Evidence TypeCountKey Findings
Meta-analyses5Statin myopathy 5-10%, rhabdomyolysis rare
RCTs12CV benefit outweighs muscle risk
Case reports23Severe rhabdomyolysis with CYP3A4 inhibitors

Source: PubMed, OpenAlex

Phase 8: Risk Assessment & Safety Signal Score

8.1 Safety Signal Score Calculation (0-100)

The Safety Signal Score quantifies overall drug safety concern on a 0-100 scale (higher = more concern).

Component 1: FAERS Signal Strength (0-35 points)

If any signal has PRR >= 5 AND ROR lower CI >= 3: 35 points If any signal has PRR 3-5 AND ROR lower CI 2-3: 20 points If any signal has PRR 2-3 AND ROR lower CI 1-2: 10 points If no signals detected: 0 points

Component 2: Serious Adverse Events (0-30 points)

Deaths reported with high count (>100): 30 points Deaths reported with low count (1-100): 25 points Life-threatening events: 20 points Hospitalizations only: 15 points Non-serious only: 0 points

Component 3: FDA Label Warnings (0-25 points)

Boxed warning present: 25 points Drug withdrawn or restricted: 25 points Contraindications present: 15 points Warnings and precautions: 10 points Adverse reactions only: 5 points No label warnings: 0 points

Component 4: Literature Evidence (0-10 points)

Meta-analyses confirming safety signals: 10 points Multiple RCTs with safety concerns: 7 points Case reports/case series: 4 points No published safety concerns: 0 points

Total Score Interpretation:

Score Range Interpretation Action

75-100 High concern Serious safety signals; requires immediate regulatory attention

50-74 Moderate concern Significant monitoring needed; consider risk mitigation

25-49 Low-moderate concern Routine enhanced monitoring; standard risk management

0-24 Low concern Standard safety profile; routine pharmacovigilance

8.2 Evidence Grading

Tier Criteria Example

T1 Boxed warning, confirmed by RCTs, PRR > 10 Metformin: Lactic acidosis

T2 Label warning + FAERS signal (PRR 3-10) + published studies Atorvastatin: Rhabdomyolysis

T3 FAERS signal (PRR 2-3) + case reports Atorvastatin: Pancreatitis

T4 Computational prediction only (ADMET) or weak signal ADMETAI hepatotoxicity prediction

8.3 Output for Report

9. Risk Assessment

9.1 Safety Signal Score: 62/100 (MODERATE CONCERN)

ComponentScoreMaxRationale
FAERS Signal Strength3535Strong signals (PRR >= 5 for rhabdomyolysis)
Serious Adverse Events1530Hospitalizations; deaths uncommon for drug itself
FDA Label Warnings1025Warnings/precautions but no boxed warning
Literature Evidence710Multiple RCTs confirm muscle-related risks
TOTAL62100MODERATE CONCERN

9.2 Evidence-Graded Signals

SignalGradePRRSeriousLabelLiteratureOverall
RhabdomyolysisT24.79YesWarningConfirmedModerate
MyopathyT26.12YesWarningConfirmedModerate
HepatotoxicityT33.45RareWarningCase reportsLow-Moderate
Diabetes riskT31.89NoWarningRCT dataLow

Phase 9: Report Synthesis & Recommendations

9.1 Report Template

File: [DRUG]_adverse_event_report.md

Adverse Drug Event Signal Detection Report: [DRUG]

Generated: [Date] | Drug: [Generic Name] | ChEMBL ID: [ID] Safety Signal Score: [XX/100] ([INTERPRETATION])


Executive Summary

[2-3 paragraph summary of key findings]

Key Safety Signals:

  1. [Strongest signal with PRR/ROR]
  2. [Second signal]
  3. [Third signal]

Regulatory Status: [Boxed warning Y/N] | [Withdrawn Y/N] | [Restrictions]


1. Drug Identification

[Phase 0 output]

2. FAERS Adverse Event Profile

[Phase 1 output]

3. Disproportionality Analysis

[Phase 2 output]

4. FDA Label Safety Information

[Phase 3 output]

5. Mechanism-Based Context

[Phase 4 output]

6. Comparative Safety Analysis

[Phase 5 output]

7. Drug-Drug Interactions & PGx Risk

[Phase 6 output]

8. Literature Evidence

[Phase 7 output]

9. Risk Assessment

[Phase 8 output]

10. Clinical Recommendations

10.1 Monitoring Recommendations

ParameterFrequencyRationale
[Lab test][Frequency][Why]

10.2 Risk Mitigation Strategies

RiskMitigationEvidence
[Risk][Strategy][Source]

10.3 Patient Counseling Points

  • [Point 1]
  • [Point 2]

10.4 Populations at Higher Risk

PopulationRisk FactorRecommendation
[Group][Factor][Action]

11. Completeness Checklist

[See below]

12. Data Sources

[All tools and databases used with timestamps]

Completeness Checklist

Phase 0: Drug Disambiguation

  • Generic name resolved

  • ChEMBL ID obtained

  • DrugBank ID obtained

  • Drug class identified

  • Mechanism of action stated

  • Primary target identified

  • Blackbox/withdrawal status checked

Phase 1: FAERS Profiling

  • Top adverse events queried (>=15 events)

  • Seriousness distribution obtained

  • Outcome distribution obtained

  • Age distribution obtained

  • Death-related events counted

  • Reporter country distribution obtained

Phase 2: Disproportionality Analysis

  • PRR calculated for >= 10 adverse events

  • ROR with 95% CI for each event

  • IC with 95% CI for each event

  • Signal strength classified for each

  • Demographics stratified for strong signals

Phase 3: FDA Label

  • Boxed warnings checked (or confirmed none)

  • Contraindications extracted

  • Warnings and precautions extracted

  • Adverse reactions from label

  • Drug interactions from label

  • Special populations (pregnancy, geriatric, pediatric)

Phase 4: Mechanism Context

  • Target safety profile (OpenTargets)

  • OpenTargets adverse events queried

  • ADMET predictions (if SMILES available)

Phase 5: Comparative Analysis

  • At least 1 class comparison performed

  • Class-wide vs drug-specific signals identified

  • Aggregate class AEs computed (if applicable)

Phase 6: DDIs & PGx

  • DDIs from FDA label extracted

  • PharmGKB queried

  • Dosing guidelines checked

  • FDA PGx biomarkers checked

Phase 7: Literature

  • PubMed searched (>=10 articles)

  • OpenAlex citation analysis (if time permits)

  • Key safety publications cited

Phase 8: Risk Assessment

  • Safety Signal Score calculated (0-100)

  • Each signal evidence-graded (T1-T4)

  • Score interpretation provided

Phase 9: Report

  • Report file created and saved

  • Executive summary written

  • Monitoring recommendations provided

  • Risk mitigation strategies listed

  • Patient counseling points included

  • All sources cited

Tool Parameter Reference (Verified)

FAERS Tools (OpenFDA-based)

Tool Key Parameters Notes

FAERS_count_reactions_by_drug_event

medicinalproduct (REQUIRED), patientsex , patientagegroup , occurcountry

Returns [{term, count}]

FAERS_count_seriousness_by_drug_event

medicinalproduct (REQUIRED), patientsex , patientagegroup , occurcountry

Returns [{term: "Serious"/"Non-serious", count}]

FAERS_count_outcomes_by_drug_event

medicinalproduct (REQUIRED), patientsex , patientagegroup , occurcountry

Returns [{term: "Fatal"/"Recovered"/..., count}]

FAERS_count_patient_age_distribution

medicinalproduct (REQUIRED) Returns [{term: "Elderly"/"Adult"/..., count}]

FAERS_count_death_related_by_drug

medicinalproduct (REQUIRED) Returns [{term: "alive"/"death", count}]

FAERS_count_reportercountry_by_drug_event

medicinalproduct (REQUIRED), patientsex , patientagegroup , serious

Returns [{term: "US"/"GB"/..., count}]

FAERS_search_adverse_event_reports

medicinalproduct , limit (max 100), skip

Returns individual case reports with patient/drug/reaction data

FAERS_search_reports_by_drug_and_reaction

medicinalproduct (REQUIRED), reactionmeddrapt (REQUIRED), limit , skip , patientsex , serious

Returns individual reports filtered by specific reaction

FAERS_search_serious_reports_by_drug

medicinalproduct (REQUIRED), seriousnessdeath , seriousnesshospitalization , seriousnesslifethreatening , seriousnessdisabling , limit

Returns serious event reports

FAERS Analytics Tools (operation-based)

Tool Key Parameters Notes

FAERS_calculate_disproportionality

operation ="calculate_disproportionality", drug_name (REQUIRED), adverse_event (REQUIRED) Returns PRR, ROR, IC with 95% CI and signal detection

FAERS_analyze_temporal_trends

operation ="analyze_temporal_trends", drug_name (REQUIRED), adverse_event (optional) Returns yearly counts and trend direction

FAERS_compare_drugs

operation ="compare_drugs", drug1 (REQUIRED), drug2 (REQUIRED), adverse_event (REQUIRED) Returns PRR/ROR/IC for both drugs side-by-side

FAERS_filter_serious_events

operation ="filter_serious_events", drug_name (REQUIRED), seriousness_type (death/hospitalization/disability/life_threatening/all) Returns top serious reactions with counts

FAERS_stratify_by_demographics

operation ="stratify_by_demographics", drug_name (REQUIRED), adverse_event (REQUIRED), stratify_by (sex/age/country) Returns stratified counts and percentages. Sex codes: 0=Unknown, 1=Male, 2=Female

FAERS_rollup_meddra_hierarchy

operation ="rollup_meddra_hierarchy", drug_name (REQUIRED) Returns top 50 preferred terms with counts

FAERS Aggregate Tools (multi-drug)

Tool Key Parameters Notes

FAERS_count_additive_adverse_reactions

medicinalproducts (REQUIRED, array), patientsex , patientagegroup , occurcountry , serious , seriousnessdeath

Aggregates AE counts across multiple drugs

FAERS_count_additive_seriousness_classification

medicinalproducts (REQUIRED, array), patientsex , patientagegroup , occurcountry

Aggregates seriousness across multiple drugs

FAERS_count_additive_reaction_outcomes

medicinalproducts (REQUIRED, array) Aggregates outcomes across multiple drugs

FDA Label Tools

Tool Key Parameters Notes

FDA_get_boxed_warning_info_by_drug_name

drug_name

Returns {error: {code: "NOT_FOUND"}} if no boxed warning

FDA_get_contraindications_by_drug_name

drug_name

Returns {meta: {total: N}, results: [{contraindications: [...]}]}

FDA_get_adverse_reactions_by_drug_name

drug_name

Returns {meta: {total: N}, results: [{adverse_reactions: [...]}]}

FDA_get_warnings_by_drug_name

drug_name

Returns {meta: {total: N}, results: [{warnings: [...]}]}

FDA_get_drug_interactions_by_drug_name

drug_name

Returns {meta: {total: N}, results: [{drug_interactions: [...]}]}

FDA_get_pharmacogenomics_info_by_drug_name

drug_name

Returns PGx info from label

FDA_get_pregnancy_or_breastfeeding_info_by_drug_name

drug_name

Returns pregnancy info

FDA_get_geriatric_use_info_by_drug_name

drug_name

Returns geriatric use info

FDA_get_pediatric_use_info_by_drug_name

drug_name

Returns pediatric info

OpenTargets Tools

Tool Key Parameters Notes

OpenTargets_get_drug_chembId_by_generic_name

drugName

Returns {data: {search: {hits: [{id, name, description}]}}}

OpenTargets_get_drug_adverse_events_by_chemblId

chemblId

Returns {data: {drug: {adverseEvents: {count, rows: [{name, meddraCode, count, logLR}]}}}}

OpenTargets_get_drug_blackbox_status_by_chembl_ID

chemblId

Returns {data: {drug: {hasBeenWithdrawn, blackBoxWarning}}}

OpenTargets_get_drug_warnings_by_chemblId

chemblId

Returns drug warnings (may be empty)

OpenTargets_get_drug_mechanisms_of_action_by_chemblId

chemblId

Returns {data: {drug: {mechanismsOfAction: {rows: [{mechanismOfAction, actionType, targetName, targets}]}}}}

OpenTargets_get_drug_indications_by_chemblId

chemblId

Returns approved and investigational indications

OpenTargets_get_target_safety_profile_by_ensemblID

ensemblId

Returns {data: {target: {safetyLiabilities: [{event, effects, studies, datasource}]}}}

DrugBank Tools

Tool Key Parameters Notes

drugbank_get_safety_by_drug_name_or_drugbank_id

query , case_sensitive (bool), exact_match (bool), limit

Returns toxicity, food interactions

drugbank_get_targets_by_drug_name_or_drugbank_id

query , case_sensitive , exact_match , limit

Returns drug targets

drugbank_get_drug_interactions_by_drug_name_or_id

query , case_sensitive , exact_match , limit

Returns DDIs

drugbank_get_pharmacology_by_drug_name_or_drugbank_id

query , case_sensitive , exact_match , limit

Returns pharmacology

PharmGKB Tools

Tool Key Parameters Notes

PharmGKB_search_drugs

query

Returns {data: [{id, name, smiles}]}

PharmGKB_get_drug_details

drug_id (e.g., "PA448500") Returns detailed drug info

PharmGKB_get_dosing_guidelines

guideline_id , gene (both optional) Returns dosing guidelines

PharmGKB_get_clinical_annotations

annotation_id , gene_id (both optional) Returns clinical annotations

fda_pharmacogenomic_biomarkers

drug_name , biomarker , limit

Returns {count, results: [...]}

ADMETAI Tools

Tool Key Parameters Notes

ADMETAI_predict_toxicity

smiles (REQUIRED, array of strings) Predicts hepatotoxicity, cardiotoxicity, etc.

ADMETAI_predict_CYP_interactions

smiles (REQUIRED, array) Predicts CYP inhibition/substrate

Literature Tools

Tool Key Parameters Notes

PubMed_search_articles

query , limit

Returns list of article dicts

openalex_search_works

query , limit

Returns works with citation counts

EuropePMC_search_articles

query , source ("PPR" for preprints), pageSize

Returns articles including preprints

search_clinical_trials

query_term (REQUIRED), condition , intervention , pageSize

Returns clinical trials

Fallback Chains

Primary Tool Fallback 1 Fallback 2

FAERS_calculate_disproportionality

Manual calculation from FAERS_count_* data Literature PRR values

FAERS_count_reactions_by_drug_event

FAERS_rollup_meddra_hierarchy

OpenTargets adverse events

FDA_get_boxed_warning_info_by_drug_name

OpenTargets_get_drug_blackbox_status_by_chembl_ID

DrugBank safety

FDA_get_contraindications_by_drug_name

FDA_get_warnings_by_drug_name

DrugBank safety

OpenTargets_get_drug_chembId_by_generic_name

ChEMBL_search_drugs

Manual search

PharmGKB_search_drugs

fda_pharmacogenomic_biomarkers

FDA label PGx section

PubMed_search_articles

openalex_search_works

EuropePMC_search_articles

Common Patterns

Pattern 1: Full Safety Signal Profile for a Single Drug

Use all phases (0-9) for comprehensive report. Best for regulatory submissions, safety reviews.

Pattern 2: Specific Adverse Event Investigation

Focus on Phases 0, 2, 3, 7. User asks "Does [drug] cause [event]?" - calculate disproportionality for that specific event, check label, search literature.

Pattern 3: Drug Class Comparison

Focus on Phases 0, 2, 5. Compare 3-5 drugs in same class for a specific adverse event using FAERS_compare_drugs .

Pattern 4: Emerging Signal Detection

Focus on Phases 1, 2, 7. Screen top 20+ FAERS events for signals, identify any not in FDA label (Phase 3), search recent literature for confirmation.

Pattern 5: Pharmacogenomic Risk Assessment

Focus on Phases 0, 6. Identify genetic risk factors for adverse events using PharmGKB and FDA PGx biomarkers.

Pattern 6: Pre-Approval Safety Assessment

Focus on Phases 4, 7. Use ADMET predictions and target safety profiles when FAERS data is limited (new drugs).

Edge Cases

Drug with No FAERS Reports

  • Skip Phases 1-2

  • Rely on FDA label (Phase 3), mechanism predictions (Phase 4), and literature (Phase 7)

  • Safety Signal Score will be lower due to lack of signal detection data

Generic vs Brand Name

  • Always try both names in FAERS queries (FAERS uses brand names sometimes)

  • Use OpenTargets_get_drug_chembId_by_generic_name to resolve to standard identifier

  • Use FDA_get_brand_name_generic_name for name cross-reference

Drug Combinations

  • Use FAERS_search_reports_by_drug_combination for polypharmacy analysis

  • Distinguish combination AEs from individual drug AEs

  • Use FAERS_count_additive_adverse_reactions for aggregate class analysis

Confounding by Indication

  • Compare AE profile to the disease being treated

  • Example: "Death" reports for chemotherapy drugs may reflect disease progression

  • Always note this limitation in the report

Drugs with Boxed Warnings

  • Score component automatically 25/25 for label warnings

  • Prioritize boxed warning events in disproportionality analysis

  • Cross-reference boxed warning with FAERS signal strength

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Research

tooluniverse-target-research

No summary provided by upstream source.

Repository SourceNeeds Review
Research

tooluniverse-drug-research

No summary provided by upstream source.

Repository SourceNeeds Review
General

tooluniverse-drug-repurposing

No summary provided by upstream source.

Repository SourceNeeds Review
General

drugbank-database

No summary provided by upstream source.

Repository SourceNeeds Review