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
- Target-Based Repurposing
Start with disease targets → Find drugs that modulate those targets
- Compound-Based Repurposing
Start with approved drugs → Find new disease indications
- 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 lookup
-
OpenTargets_get_associated_targets_by_disease_efoId
-
Disease targets
-
UniProt_get_entry_by_accession
-
Protein details
Drug Discovery Tools:
-
drugbank_get_drug_name_and_description_by_target_name
-
Drugs by target
-
drugbank_get_drug_name_and_description_by_indication
-
Drugs by indication
-
DGIdb_get_drug_gene_interactions
-
Drug-gene interactions
-
ChEMBL_search_drugs
-
Drug search
-
ChEMBL_get_drug_mechanisms
-
Mechanism of action
Drug Information Tools:
-
drugbank_get_drug_basic_info_by_drug_name_or_id
-
Basic drug info
-
drugbank_get_indications_by_drug_name_or_drugbank_id
-
Approved indications
-
drugbank_get_pharmacology_by_drug_name_or_drugbank_id
-
Pharmacology
-
drugbank_get_targets_by_drug_name_or_drugbank_id
-
Drug targets
Safety Assessment Tools:
-
FDA_get_warnings_and_cautions_by_drug_name
-
FDA warnings
-
FAERS_search_reports_by_drug_and_reaction
-
Adverse events
-
FAERS_count_death_related_by_drug
-
Serious outcomes
-
drugbank_get_drug_interactions_by_drug_name_or_id
-
Interactions
Property Prediction Tools:
-
ADMETAI_predict_admet
-
ADMET properties
-
ADMETAI_predict_toxicity
-
Toxicity prediction
Literature Tools:
-
PubMed_search_articles
-
PubMed search
-
EuropePMC_search_articles
-
Europe PMC search
-
ClinicalTrials_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:
- Smith et al. 2024 - Clinical efficacy in similar condition
- 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=True for 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.