tooluniverse-drug-mechanism-research

$npx mdskill add mims-harvard/ToolUniverse/tooluniverse-drug-mechanism-research

Traces drug mechanism from target to clinical outcome.

  • Understand how a drug works and identify off-target effects.
  • Uses DrugBank, ChEMBL, KEGG, Reactome, STRING databases.
  • Follows target to downstream signaling to pathway to organ effect.
  • Outputs structured mechanism data for reports and combination design.

SKILL.md

.github/skills/tooluniverse-drug-mechanism-researchView on GitHub ↗
---
name: tooluniverse-drug-mechanism-research
description: 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.
triggers:
  - keywords: [mechanism of action, drug target, pharmacology, pathway, pharmacogenomics, drug interaction, DailyMed, CPIC, MOA, off-target]
  - patterns: ["how does .* work", "mechanism of action", "drug target", "pathway context", "clinical pharmacology", "drug-drug interaction", "pharmacogenomic", "off-target effect"]
disable-model-invocation: true
---

# Drug Mechanism of Action Investigation

## Investigation Philosophy

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.

## When to Use

- "What is the mechanism of action of [drug]?"
- "What are the molecular targets of [drug]?"
- "Which pathways are affected by [drug]?"
- "What pharmacogenomic interactions exist for [drug]?"
- "What are the off-targets of [drug]?"
- "Compare mechanisms of [drug A] vs [drug B]"

## NOT for (use other skills)

- Drug safety/adverse events profiling -> `tooluniverse-adverse-event-detection`
- Drug repurposing/new indications -> `tooluniverse-drug-repurposing`
- Target druggability assessment -> `tooluniverse-drug-target-validation`
- Network pharmacology/polypharmacology -> `tooluniverse-network-pharmacology`
- CPIC dosing guidelines specifically -> `tooluniverse-pharmacogenomics`

---

## Step 1: Resolve the Drug

Before investigating mechanism, resolve the drug name to a canonical identifier. You need a ChEMBL ID for most downstream queries.

```python
# 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.

---

## Step 2: Identify the Primary Target

The first question: what does this drug bind to, and what does it do to that target?

Two complementary sources give you this:

```python
# 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.

---

## Step 3: Assess Off-Target Effects

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.

```python
# 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.

---

## Step 4: Map to Pathway Context

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)?

```python
# 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:

```python
# 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.

---

## Step 5: Get the Regulatory View (DailyMed)

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.

```python
# 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.

---

## Step 6: Check Pharmacogenomics

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.

```python
# 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.

---

## Step 7: Gather Literature Evidence

Literature describes WHY the mechanism works. Combine with labels (what) for a complete picture.

```python
# 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.

---

## Step 8: Integrate and Report

### Evidence Hierarchy

- **Tier 1 (Regulatory)**: FDA label (DailyMed), CPIC Level A, FDA PGx biomarker
- **Tier 2 (Experimental)**: ChEMBL mechanisms with literature refs, binding data
- **Tier 3 (Database)**: OpenTargets MOA, pathway databases (KEGG/Reactome/WikiPathways)
- **Tier 4 (Literature)**: PubMed/EuropePMC articles

### Report Structure

```
## 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 |
```

---

## Comparing Two Drugs

When comparing mechanisms, run Steps 2-4 for both drugs, then align:

1. **Same target, different action?** (e.g., agonist vs antagonist at the same receptor)
2. **Different targets, same pathway?** (e.g., both affect insulin signaling but at different nodes)
3. **Different pathways entirely?** (e.g., metformin on AMPK vs pioglitazone on PPAR-gamma)

```python
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])
```

---

## Fallback Strategies

| 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.

More from mims-harvard/ToolUniverse

SkillDescription
create-tooluniverse-skillCreate high-quality ToolUniverse skills following test-driven, implementation-agnostic methodology.
devtu-auto-discover-apisAutomatically discover life science APIs online, create ToolUniverse tools, validate them, and prepare integration PRs. Performs gap analysis to identify missing tool categories, web searches for APIs, automated tool creation using devtu-create-tool patterns, validation with devtu-fix-tool, and git workflow management. Use when expanding ToolUniverse coverage, adding new API integrations, or systematically discovering scientific resources.
devtu-benchmark-harnessContinuous improvement system for ToolUniverse tools, skills, and plugin. Run benchmarks, diagnose failures, route fixes to devtu skills, retest. Use after skill optimization, tool additions, or as regression check.
devtu-code-optimization>
devtu-create-toolCreate new scientific tools for ToolUniverse framework with proper structure, validation, and testing. Use when users need to add tools to ToolUniverse, implement new API integrations, create tool wrappers for scientific databases/services, expand ToolUniverse capabilities, or follow ToolUniverse contribution guidelines. Supports creating tool classes, JSON configurations, validation, error handling, and test examples.
devtu-docs-qualityTOP PRIORITY skill — find and immediately fix or remove every piece of wrong, outdated, or redundant information in ToolUniverse docs. Wrong code, broken links, incorrect counts, and overlapping instructions must be fixed or removed — never left in place. Runs five phases: (D) static method scan, (C) live code execution, (A) automated validation, (B) ToolUniverse audit, (E) less-is-more simplification. Core philosophy: each concept appears exactly once; remove don't add; no emojis; single setup entry point. Use when reviewing docs, before releases, after API changes, or when asked to audit, fix, or simplify documentation.
devtu-fix-toolFix failing ToolUniverse tools by diagnosing test failures, identifying root causes, implementing fixes, and validating solutions. Use when ToolUniverse tools fail tests, return errors, have schema validation issues, or when asked to debug or fix tools in the ToolUniverse framework.
devtu-githubGitHub workflow for ToolUniverse - push code safely by moving temp files, activating pre-commit hooks, running tests, and cleaning staged files. Use when pushing to GitHub, fixing CI failures, or cleaning up before commits.
devtu-optimize-descriptionsOptimize tool descriptions in ToolUniverse JSON configs for clarity and usability. Reviews descriptions for missing prerequisites, unexpanded abbreviations, unclear parameters, and missing usage guidance. Use when reviewing tool descriptions, improving API documentation, or when user asks to check if tools are easy to understand.
devtu-optimize-skillsOptimize ToolUniverse skills for better report quality, evidence handling, and user experience. Apply patterns like tool verification, foundation data layers, disambiguation-first, evidence grading, quantified completeness, and report-only output. Use when reviewing skills, improving existing skills, or creating new ToolUniverse research skills.