tooluniverse-drug-repurposing
Drug Repurposing with ToolUniverse
Systematically identify and evaluate drug repurposing candidates using multiple computational strategies.
IMPORTANT: Always use English terms in tool calls (drug names, disease names, target names), even if the user writes in another language. Only try original-language terms as a fallback if English returns no results. Respond in the user's language.
Core Strategies
1. Target-Based Repurposing
Start with disease targets → Find drugs that modulate those targets
2. Compound-Based Repurposing
Start with approved drugs → Find new disease indications
3. Disease-Driven Repurposing
Start with disease → Find targets → Match to existing drugs
Quick Start
from tooluniverse import ToolUniverse
tu = ToolUniverse(use_cache=True)
tu.load_tools()
# Example: Find repurposing candidates for a disease
disease_name = "rheumatoid arthritis"
# Step 1: Get disease information
disease_info = tu.tools.OpenTargets_get_disease_id_description_by_name(
diseaseName=disease_name
)
# Step 2: Get associated targets
disease_id = disease_info['data']['id']
targets = tu.tools.OpenTargets_get_associated_targets_by_disease_efoId(
efoId=disease_id,
limit=10
)
# Step 3: Find drugs for each target
for target in targets['data'][:5]:
drugs = tu.tools.DGIdb_get_drug_gene_interactions(
gene_name=target['gene_symbol']
)
# Evaluate each drug candidate...
Complete Workflow
Phase 1: Disease & Target Analysis
# 1.1 Get disease information
disease_info = tu.tools.OpenTargets_get_disease_id_description_by_name(
diseaseName="[disease_name]"
)
# 1.2 Find associated targets
targets = tu.tools.OpenTargets_get_associated_targets_by_disease_efoId(
efoId=disease_info['data']['id'],
limit=20
)
# 1.3 Get target details for top candidates
target_details = []
for target in targets['data'][:10]:
details = tu.tools.UniProt_get_entry_by_accession(
accession=target['uniprot_id']
)
target_details.append(details)
Phase 2: Drug Discovery
# 2.1 Find drugs targeting disease-associated targets
drug_candidates = []
for target in targets['data'][:10]:
# Search DrugBank
drugbank_results = tu.tools.drugbank_get_drug_name_and_description_by_target_name(
target_name=target['gene_symbol']
)
# Search DGIdb
dgidb_results = tu.tools.DGIdb_get_drug_gene_interactions(
gene_name=target['gene_symbol']
)
# Search ChEMBL
chembl_results = tu.tools.ChEMBL_search_drugs(
query=target['gene_symbol'],
limit=10
)
drug_candidates.extend([drugbank_results, dgidb_results, chembl_results])
# 2.2 Get drug details
for drug_name in unique_drugs:
# Get DrugBank info
drug_info = tu.tools.drugbank_get_drug_basic_info_by_drug_name_or_id(
drug_name_or_drugbank_id=drug_name
)
# Get current indications
indications = tu.tools.drugbank_get_indications_by_drug_name_or_drugbank_id(
drug_name_or_drugbank_id=drug_name
)
# Get pharmacology
pharmacology = tu.tools.drugbank_get_pharmacology_by_drug_name_or_drugbank_id(
drug_name_or_drugbank_id=drug_name
)
Phase 3: Safety & Feasibility Assessment
# 3.1 Check FDA safety data
for drug in top_candidates:
# Get warnings and precautions
warnings = tu.tools.FDA_get_warnings_and_cautions_by_drug_name(
drug_name=drug['name']
)
# Get adverse event reports
adverse_events = tu.tools.FAERS_search_reports_by_drug_and_reaction(
drug_name=drug['name'],
limit=100
)
# Get drug interactions
interactions = tu.tools.drugbank_get_drug_interactions_by_drug_name_or_id(
drug_name_or_id=drug['name']
)
# 3.2 Assess ADMET properties (for novel formulations)
for drug in top_candidates:
if 'smiles' in drug:
admet = tu.tools.ADMETAI_predict_admet(
smiles=drug['smiles'],
use_cache=True
)
Phase 4: Literature Evidence
# 4.1 Search for existing evidence
for drug in top_candidates:
# PubMed search
query = f"{drug['name']} AND {disease_name}"
pubmed_results = tu.tools.PubMed_search_articles(
query=query,
max_results=50
)
# Europe PMC search
pmc_results = tu.tools.EuropePMC_search_articles(
query=query,
limit=50
)
# Clinical trials
trials = tu.tools.ClinicalTrials_search(
condition=disease_name,
intervention=drug['name']
)
Phase 5: Scoring & Ranking
Create a scoring function to rank candidates:
def score_repurposing_candidate(drug, target_score, safety_data, literature_count):
"""Score drug repurposing candidate (0-100)."""
score = 0
# Target association strength (0-40 points)
score += min(target_score * 40, 40)
# Safety profile (0-30 points)
if drug['approval_status'] == 'approved':
score += 20
elif drug['approval_status'] == 'clinical':
score += 10
if not safety_data.get('black_box_warning'):
score += 10
# Literature evidence (0-20 points)
score += min(literature_count / 5 * 20, 20)
# Drug-likeness (0-10 points)
if drug.get('bioavailability') == 'high':
score += 10
return score
# Score all candidates
scored_candidates = []
for drug in drug_candidates:
score = score_repurposing_candidate(
drug=drug,
target_score=drug['target_association_score'],
safety_data=drug['safety_profile'],
literature_count=drug['supporting_papers']
)
drug['repurposing_score'] = score
scored_candidates.append(drug)
# Sort by score
ranked_candidates = sorted(
scored_candidates,
key=lambda x: x['repurposing_score'],
reverse=True
)
Alternative Strategies
Strategy A: Mechanism-Based Repurposing
# Find drugs with similar mechanism of action
known_drug = "metformin"
# Get mechanism
moa = tu.tools.drugbank_get_drug_desc_pharmacology_by_moa(
mechanism_of_action="[moa_term]"
)
# Get similar drugs
similar = tu.tools.ChEMBL_search_similar_molecules(
query=known_drug,
similarity_threshold=70
)
Strategy B: Network-Based Repurposing
# Use pathway analysis
pathways = tu.tools.drugbank_get_pathways_reactions_by_drug_or_id(
drug_name_or_drugbank_id="[drug_name]"
)
# Find drugs affecting same pathways
pathway_drugs = tu.tools.drugbank_get_drug_name_and_description_by_pathway_name(
pathway_name=pathways['data'][0]['pathway_name']
)
Strategy C: Phenotype-Based Repurposing
# Search by indication/phenotype
indication_drugs = tu.tools.drugbank_get_drug_name_and_description_by_indication(
indication="[related_indication]"
)
# Analyze adverse events as therapeutic effects
# Example: minoxidil (hypertension) → hair growth
adverse_as_therapeutic = tu.tools.FAERS_search_reports_by_drug_and_reaction(
drug_name="[drug_name]",
limit=1000
)
Key ToolUniverse Tools
Disease & Target Tools:
OpenTargets_get_disease_id_description_by_name- Disease lookupOpenTargets_get_associated_targets_by_disease_efoId- Disease targetsUniProt_get_entry_by_accession- Protein details
Drug Discovery Tools:
drugbank_get_drug_name_and_description_by_target_name- Drugs by targetdrugbank_get_drug_name_and_description_by_indication- Drugs by indicationDGIdb_get_drug_gene_interactions- Drug-gene interactionsChEMBL_search_drugs- Drug searchChEMBL_get_drug_mechanisms- Mechanism of action
Drug Information Tools:
drugbank_get_drug_basic_info_by_drug_name_or_id- Basic drug infodrugbank_get_indications_by_drug_name_or_drugbank_id- Approved indicationsdrugbank_get_pharmacology_by_drug_name_or_drugbank_id- Pharmacologydrugbank_get_targets_by_drug_name_or_drugbank_id- Drug targets
Safety Assessment Tools:
FDA_get_warnings_and_cautions_by_drug_name- FDA warningsFAERS_search_reports_by_drug_and_reaction- Adverse eventsFAERS_count_death_related_by_drug- Serious outcomesdrugbank_get_drug_interactions_by_drug_name_or_id- Interactions
Property Prediction Tools:
ADMETAI_predict_admet- ADMET propertiesADMETAI_predict_toxicity- Toxicity prediction
Literature Tools:
PubMed_search_articles- PubMed searchEuropePMC_search_articles- Europe PMC searchClinicalTrials_search- Clinical trials
Output Format
Present results as ranked candidates:
## Drug Repurposing Analysis: [Disease Name]
### Top 10 Repurposing Candidates
#### 1. [Drug Name] (Score: 87/100)
**Current Indications**: [list approved uses]
**Proposed Indication**: [new disease/condition]
**Repurposing Rationale**: Targets [gene/protein] with high association to disease
**Evidence Summary**:
- Target association score: 0.85
- Approval status: FDA approved (safer profile)
- Literature support: 23 papers, 4 clinical trials
- Safety profile: No black box warnings
**Mechanism**: [Brief mechanism description]
**Next Steps**:
- Phase II trial feasibility assessment
- Patient population identification
- Dosing optimization study
**Key Papers**:
1. Smith et al. 2024 - Clinical efficacy in similar condition
2. Jones et al. 2023 - Mechanism validation
---
#### 2. [Drug Name] (Score: 79/100)
[Similar structure...]
### Supporting Analysis
**Target Network**: [visualization or description]
**Pathway Overlap**: [affected pathways]
**Safety Considerations**: [major concerns]
**Development Timeline**: [estimated phases]
Scoring Criteria
Target Association (0-40 points):
- Strong genetic evidence: 40
- Moderate association: 25
- Pathway-level evidence: 15
- Weak/predicted: 5
Safety Profile (0-30 points):
- FDA approved: 20
- Phase III: 15
- Phase II: 10
- Phase I: 5
- No black box warning: +10
- Known serious AE: -10
Literature Evidence (0-20 points):
- Clinical trials: 5 points each (max 15)
- Preclinical studies: 1 point each (max 10)
- Case reports: 0.5 points each (max 5)
Drug Properties (0-10 points):
- High bioavailability: 5
- Good BBB penetration (if CNS): 5
- Low toxicity predictions: 5
Best Practices
- Start Broad: Query multiple databases (DrugBank, ChEMBL, DGIdb)
- Validate Targets: Confirm target-disease associations in OpenTargets
- Check Safety First: Prioritize approved drugs with known safety profiles
- Literature Mining: Always search for existing clinical/preclinical evidence
- Use Caching: Enable
use_cache=Truefor expensive predictions - Batch Operations: Use
tu.run_batch()for parallel queries - Consider Mechanism: Evaluate biological plausibility
- Patent Landscape: Check if indication is already protected
- Market Analysis: Consider unmet medical need and commercial viability
- Regulatory Path: FDA approved drugs have faster repurposing path
Common Patterns
Pattern 1: Rapid Screening
# Quick screening of 100+ drugs against disease targets
targets = get_disease_targets(disease_id)[:10]
all_drugs = []
for target in targets:
drugs = tu.tools.DGIdb_get_drug_gene_interactions(
gene_name=target['gene_symbol']
)
all_drugs.extend(drugs)
# Filter to FDA approved only
approved_drugs = [d for d in all_drugs if d.get('approved')]
Pattern 2: Deep Dive Single Drug
# Comprehensive analysis of one drug candidate
drug_name = "metformin"
# Get everything
info = tu.tools.drugbank_get_drug_basic_info_by_drug_name_or_id(drug_name_or_drugbank_id=drug_name)
targets = tu.tools.drugbank_get_targets_by_drug_name_or_drugbank_id(drug_name_or_drugbank_id=drug_name)
indications = tu.tools.drugbank_get_indications_by_drug_name_or_drugbank_id(drug_name_or_drugbank_id=drug_name)
pharmacology = tu.tools.drugbank_get_pharmacology_by_drug_name_or_drugbank_id(drug_name_or_drugbank_id=drug_name)
interactions = tu.tools.drugbank_get_drug_interactions_by_drug_name_or_id(drug_name_or_id=drug_name)
warnings = tu.tools.FDA_get_warnings_and_cautions_by_drug_name(drug_name=drug_name)
papers = tu.tools.PubMed_search_articles(query=f"{drug_name} AND [new_disease]", max_results=100)
Pattern 3: Comparative Analysis
# Compare multiple candidates side-by-side
candidates = ["drug_a", "drug_b", "drug_c"]
comparison = []
for drug in candidates:
data = {
'name': drug,
'info': tu.tools.drugbank_get_drug_basic_info_by_drug_name_or_id(drug_name_or_drugbank_id=drug),
'safety': tu.tools.FDA_get_warnings_and_cautions_by_drug_name(drug_name=drug),
'evidence': tu.tools.PubMed_search_articles(query=drug, max_results=10)
}
comparison.append(data)
Troubleshooting
"Disease not found":
- Try disease synonyms or EFO ID lookup
- Use broader disease categories
"No drugs found for target":
- Check target name/symbol (HUGO nomenclature)
- Expand to pathway-level drugs
- Consider similar targets (protein family)
"Insufficient literature evidence":
- Search for drug class rather than specific drug
- Check preclinical/animal studies
- Look for mechanism papers
"Safety data unavailable":
- Drug may not be FDA approved in US
- Check EMA or other regulatory databases
- Review clinical trial safety data
Example Use Cases
Use Case 1: Find repurposing candidates for rare disease
# Rare disease often lack approved drugs
# Strategy: Find drugs targeting same pathways as related common diseases
rare_disease = "Niemann-Pick disease"
related_disease = "Alzheimer's disease" # Similar pathology
# Get pathways affected in related disease
targets = tu.tools.OpenTargets_get_associated_targets_by_disease_efoId(
efoId=related_disease_id
)
# Find drugs for those targets
# Evaluate for rare disease applicability
Use Case 2: Repurpose based on adverse effects
# Adverse effect in one context = therapeutic in another
# Example: Thalidomide (teratogenic) → cancer treatment
drug = "drug_name"
adverse_events = tu.tools.FAERS_search_reports_by_drug_and_reaction(
drug_name=drug,
limit=1000
)
# Analyze if adverse effects beneficial in other contexts
# Example: weight loss AE → obesity treatment potential
Use Case 3: Combination therapy discovery
# Find drugs that complement existing therapy
primary_drug = "existing_therapy"
disease = "disease_name"
# Get targets not covered by primary drug
disease_targets = tu.tools.OpenTargets_get_associated_targets_by_disease_efoId(
efoId=disease_id
)
primary_targets = tu.tools.drugbank_get_targets_by_drug_name_or_drugbank_id(
drug_name_or_drugbank_id=primary_drug
)
# Find drugs for uncovered targets
uncovered_targets = [t for t in disease_targets if t not in primary_targets]
Advanced Techniques
Technique 1: Polypharmacology-Based Repurposing
# Find drugs with multi-target activity matching disease network
# Get disease network
targets = tu.tools.OpenTargets_get_associated_targets_by_disease_efoId(
efoId=disease_id,
limit=50
)
# For each drug, count how many disease targets it hits
for drug in candidate_drugs:
drug_targets = tu.tools.drugbank_get_targets_by_drug_name_or_drugbank_id(
drug_name_or_drugbank_id=drug
)
overlap = len(set(drug_targets) & set(disease_targets))
if overlap >= 3: # Multi-target match
print(f"{drug}: hits {overlap} disease targets")
Technique 2: Structure-Based Repurposing
# Find structurally similar approved drugs
known_active = "known_active_compound"
# Get structure
cid = tu.tools.PubChem_get_CID_by_compound_name(
compound_name=known_active
)
# Find similar
similar = tu.tools.PubChem_search_compounds_by_similarity(
cid=cid['data']['cid'],
threshold=85
)
# Check which are approved drugs
for compound in similar['data']:
drug_info = tu.tools.PubChem_get_drug_label_info_by_CID(
cid=compound['cid']
)
Technique 3: AI-Powered Candidate Selection
# Use ML predictions to filter candidates
candidates_with_smiles = get_candidates_with_structures()
# Predict ADMET for all
admet_results = []
for drug in candidates_with_smiles:
admet = tu.tools.ADMETAI_predict_admet(
smiles=drug['smiles'],
use_cache=True
)
admet_results.append({
'drug': drug['name'],
'admet': admet,
'pass': evaluate_admet_criteria(admet)
})
# Keep only drugs passing ADMET criteria
viable_candidates = [r for r in admet_results if r['pass']]
Resources
For comprehensive disease analysis, see disease-intelligence-gatherer skill.
For compound property analysis, see chemical-compound-retrieval skill.
For detailed ToolUniverse SDK usage, see tooluniverse-sdk skill.