skills/tooluniverse-drug-mechanism-research/SKILL.md
Trace drug mechanism of action — primary target → downstream signaling → pathway perturbation → tissue/organ effect → clinical outcome. Uses DrugBank, ChEMBL, KEGG, Reactome, STRING. Use for understanding how a drug works, identifying off-target effects, mechanism-based combination therapy design, and writing mechanism sections of reports.
npx skillsauth add mims-harvard/tooluniverse tooluniverse-drug-mechanism-researchInstall 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.
Drug mechanism research follows one core question chain:
Target -> Downstream Effect -> Pathway -> Organ Effect -> Clinical Outcome
Start with the drug's primary target. What receptor, enzyme, or transporter does it bind? Then trace forward: what does inhibiting/activating that target do immediately? What pathway is disrupted? What organ-level change results? What does the patient experience?
The LLM already knows drug pharmacology. This skill teaches HOW TO INVESTIGATE using available tools, not what mechanisms exist.
tooluniverse-adverse-event-detectiontooluniverse-drug-repurposingtooluniverse-drug-target-validationtooluniverse-network-pharmacologytooluniverse-pharmacogenomicsBefore investigating mechanism, resolve the drug name to a canonical identifier. You need a ChEMBL ID for most downstream queries.
# Resolve drug name to ChEMBL ID
result = tu.tools.OpenTargets_get_drug_id_description_by_name(drugName="metformin")
# Alternative: OpenTargets_get_drug_chembId_by_generic_name(drugName="metformin")
# Get PharmGKB ID (needed for PGx queries)
result = tu.tools.PharmGKB_search_drugs(query="metformin")
Fallback: If OpenTargets returns no hits, try PharmGKB_search_drugs or ChEMBL_get_drug with a known ChEMBL ID.
The first question: what does this drug bind to, and what does it do to that target?
Two complementary sources give you this:
# OpenTargets: quick summary of MOA with target gene symbols
moa = tu.tools.OpenTargets_get_drug_mechanisms_of_action_by_chemblId(chemblId="CHEMBL1431")
for row in moa["data"]["drug"]["mechanismsOfAction"]["rows"]:
print(f"{row['mechanismOfAction']} ({row['actionType']}) -> {row['targetName']}")
for t in row.get("targets", []):
print(f" Target gene: {t['approvedSymbol']} ({t['id']})")
# ChEMBL: detailed MOA with literature references and direct_interaction flag
mechs = tu.tools.ChEMBL_get_drug_mechanisms(drug_chembl_id__exact="CHEMBL1431")
for m in mechs["data"]["mechanisms"]:
print(f"MOA: {m['mechanism_of_action']}, Direct: {m['direct_interaction']}")
print(f" Refs: {[r['ref_id'] for r in m.get('mechanism_refs', [])]}")
Key fields to extract: action_type (INHIBITOR, AGONIST, ANTAGONIST, etc.), target gene symbol, direct_interaction (boolean), and literature references.
Known issue: OpenTargets_get_associated_targets_by_drug_chemblId may fail (GraphQL schema change). Extract targets from the MOA results instead.
Most drugs bind more than one target at clinical concentrations. After identifying the primary target, ask: what other proteins does this drug interact with? Off-target binding explains many side effects and drug interactions.
# ChEMBL bioactivity data shows binding affinity across targets
activities = tu.tools.ChEMBL_get_target_activities(target_chembl_id__exact="CHEMBL2364")
# STRING interaction partners reveal the target's protein network
partners = tu.tools.STRING_get_interaction_partners(identifiers="PRKAA1", species=9606)
Reasoning strategy: If ChEMBL MOA lists multiple targets, compare their action types. Same action type across related targets suggests on-pathway polypharmacology. Different action types suggest true off-target effects. The binding affinity (IC50/Ki from bioactivity data) tells you which targets matter at clinical doses -- nanomolar affinity is primary, micromolar is likely off-target.
A drug target does not work in isolation. Map it to its pathway to understand the breadth of effect.
Key question: Is the target upstream (affects many downstream genes, broader effects, more side effects) or downstream (narrow, specific effect)?
# KEGG: find gene ID, then get pathways
genes = tu.tools.kegg_find_genes(keyword="PRKAA1", organism="hsa")
pathways = tu.tools.KEGG_get_gene_pathways(gene_id="hsa:5562")
# Reactome: map protein to pathways (needs UniProt ID)
reactome = tu.tools.Reactome_map_uniprot_to_pathways(uniprot_id="Q13131")
# WikiPathways: search by gene symbol
wp = tu.tools.WikiPathways_find_pathways_by_gene(gene="PRKAA1")
# STRING: functional annotations (GO terms, pathway memberships)
annot = tu.tools.STRING_get_functional_annotations(identifiers="PRKAA1", species=9606)
For multi-target drugs, run pathway enrichment to find convergent pathways:
# Reactome enrichment (space-separated gene list, NOT array)
enrichment = tu.tools.ReactomeAnalysis_pathway_enrichment(identifiers="PRKAA1 PRKAA2 PRKAB1")
# STRING enrichment
enrichment = tu.tools.STRING_functional_enrichment(identifiers="PRKAA1 PRKAA2", species=9606)
Reasoning strategy: If multiple drug targets converge on the same pathway, that pathway is the drug's true mechanism. If targets are in different pathways, the drug has genuinely multi-pathway effects -- report each separately.
Drug labels describe WHAT the drug does. This is the FDA-approved mechanism narrative.
DailyMed requires a two-step process: search for the drug to get a setid, then parse specific label sections.
# Step 1: Get setid
spls = tu.tools.DailyMed_search_spls(drug_name="metformin")
setid = spls["data"][0]["setid"]
# Step 2: Parse the clinical pharmacology section (MOA, PK/PD, metabolism)
pharmacology = tu.tools.DailyMed_parse_clinical_pharmacology(
operation="parse_clinical_pharmacology", setid=setid)
# Drug interactions from the label
interactions = tu.tools.DailyMed_parse_drug_interactions(
operation="parse_drug_interactions", setid=setid)
# Contraindications
contra = tu.tools.DailyMed_parse_contraindications(
operation="parse_contraindications", setid=setid)
Other DailyMed parse tools: DailyMed_parse_adverse_reactions, DailyMed_parse_dosing.
Reasoning strategy: The label's clinical pharmacology section often describes the mechanism differently from database entries. The label emphasizes clinically relevant effects; databases emphasize molecular detail. Both perspectives are needed.
Pharmacogenomic variants affect how a patient responds to the drug. This matters for mechanism because PGx genes are often the drug's metabolizing enzymes or targets.
# CPIC gene-drug pairs (gold standard for PGx)
pairs = tu.tools.CPIC_search_gene_drug_pairs(gene_symbol="CYP2C19", cpiclevel="A", limit=20)
# Or search by drug
drug_info = tu.tools.CPIC_get_drug_info(name="clopidogrel")
# FDA PGx biomarkers (what's on the label)
fda_pgx = tu.tools.fda_pharmacogenomic_biomarkers(drug_name="clopidogrel", limit=100)
# Or find all drugs affected by a gene
fda_pgx = tu.tools.fda_pharmacogenomic_biomarkers(biomarker="CYP2D6", limit=100)
# PharmGKB gene details
gene_info = tu.tools.PharmGKB_search_genes(query="CYP2C19")
Reasoning strategy: CPIC Level A/B pairs have strong evidence and actionable guidelines. If a drug has CPIC Level A interactions, those genes are critical to its mechanism (usually metabolizing enzymes or direct targets). FDA PGx biomarkers tell you what's on the approved label.
Literature describes WHY the mechanism works. Combine with labels (what) for a complete picture.
# PubMed: returns a plain list of article dicts
articles = tu.tools.PubMed_search_articles(
query="metformin mechanism of action AMPK mitochondrial", limit=10)
# EuropePMC: returns {status, data, metadata}
articles = tu.tools.EuropePMC_search_articles(
query="metformin mechanism action mitochondrial", limit=10)
# Follow citation chains for seminal papers
citations = tu.tools.EuropePMC_get_citations(source="MED", identifier="12345678")
Search strategy: Start with "[drug] mechanism of action [primary target]". If the mechanism is debated, add the competing hypotheses as separate queries. Recent reviews (add "review" to query) give the current consensus.
## Drug Mechanism Report: [Drug Name]
### Drug Identity
- ChEMBL ID, PharmGKB ID, approval status
### Primary Mechanism
- Target: [gene symbol], Action: [INHIBITOR/AGONIST/etc.]
- Mechanism narrative (from DailyMed + databases)
- Direct interaction: yes/no
### Off-Target Effects
- Additional targets with action types and binding affinities
- Which off-targets explain known side effects
### Pathway Context
- Key pathways (from KEGG/Reactome/WikiPathways)
- Upstream vs downstream position of target
- Convergent pathways for multi-target drugs
### Pharmacogenomics
- CPIC gene-drug pairs with levels
- FDA PGx biomarkers
### Drug Interactions
- Mechanism-based interactions (enzyme inhibition/induction)
- Key interactions from DailyMed
### Evidence Summary
| Finding | Source | Tier |
|---------|--------|------|
| Primary MOA | ChEMBL + DailyMed | T1/T2 |
| Off-targets | ChEMBL bioactivity | T2 |
| Pathways | KEGG/Reactome | T3 |
| PGx | CPIC/FDA | T1 |
When comparing mechanisms, run Steps 2-4 for both drugs, then align:
for drug in [("metformin", "CHEMBL1431"), ("pioglitazone", "CHEMBL595")]:
moa = tu.tools.OpenTargets_get_drug_mechanisms_of_action_by_chemblId(chemblId=drug[1])
clin = tu.tools.DailyMed_parse_clinical_pharmacology(drug_name=drug[0])
| Step | Primary Tool | Fallback | |------|-------------|----------| | Drug ID | OpenTargets_get_drug_id_description_by_name | PharmGKB_search_drugs | | MOA | OpenTargets_get_drug_mechanisms_of_action_by_chemblId | ChEMBL_get_drug_mechanisms | | Pathways | KEGG_get_gene_pathways | WikiPathways_find_pathways_by_gene, Reactome_map_uniprot_to_pathways | | PGx | CPIC_search_gene_drug_pairs | fda_pharmacogenomic_biomarkers | | Clinical info | DailyMed_parse_clinical_pharmacology | OpenTargets_get_drug_description_by_chemblId | | DDI | DailyMed_parse_drug_interactions | PubMed_search_articles (DDI query) | | Literature | PubMed_search_articles | EuropePMC_search_articles |
MetaCyc note: MetaCyc requires a paid account and is not available. Use KEGG, Reactome, or WikiPathways instead.
tools
Generate the success criteria for a task or question, then review work against them. Given a task, goal, or open-ended question, decompose it into scenarios, evaluation perspectives, and fine-grained weighted YES/NO criteria using the Recursive Expansion Tree (RET) method; if work is supplied, score it criterion-by-criterion and surface what is missing or could be better. Use when asked to self-review or check your own work, judge whether a task is done well or completely, build a definition-of-done or completeness checklist, create an evaluation rubric or grading criteria, score or grade answers to a question, set up an LLM-as-judge rubric, or when the user mentions self-review, completeness check, success criteria, evaluation criteria, scoring rubric, Qworld, or the RET algorithm.
tools
Find the real protein target(s) of a peptide from its sequence — peptide target deorphanization / off-target identification, for ANY target class (GPCR, ion channel, protease, cytokine/growth-factor receptor, enzyme, integrin), not only GPCRs. Use when a peptide has a phenotype but does not bind its hypothesized target, when a peptide binds a target in one species or assay but not another, or to screen candidate targets for an orphan peptide. A target-class router steers a multi-route keyless pipeline (PROSITE/ELM motif, BLAST homology, HGNC/InterPro/GPCRdb/GtoPdb target-family enumeration, OpenTargets phenotype anchor, EnsemblCompara/Alliance cross-species reconciliation) plus optional NVIDIA-NIM co-folding (Boltz2, AlphaFold2-Multimer, OpenFold3) for structural confirmation.
tools
Install or update ToolUniverse in Claude Science — create the conda env, install the tooluniverse pip package, and (re)build the tooluniverse-research skill by fetching the current workflow library from GitHub. Use for first-time setup, upgrading the ToolUniverse version, refreshing the bundled workflows after an upstream release, or reinstalling on a new machine.
tools
Install, set up, verify, update, pin, uninstall, or troubleshoot the ToolUniverse plugin on OpenAI Codex. ALWAYS consult this skill for any of those — don't answer from memory, because the exact marketplace name (mims-harvard/ToolUniverse), the "codex plugin marketplace add" then "codex plugin add -m tooluniverse" flow, Codex's startup auto-upgrade behavior, the uvx tooluniverse MCP server, and the API-key env vars are easy to get wrong. Use it whenever someone wants to get ToolUniverse (or "the 1000+ scientific tools" / "the harvard tools") working on Codex, says the Codex plugin or its tools/skills won't load, hits a uvx or MCP-server startup error, asks how Codex updates it, wants to pin or remove it, or finds it running an old tool version — even if they never say the word "plugin". Not for the Claude Code plugin (use tooluniverse-claude-code-plugin), for running research with the tools, or for authoring new tools or skills.