Detailed tool documentation and API reference for drug repurposing workflows.
disease_info = tu.tools.OpenTargets_get_disease_id_description_by_name(
diseaseName="Alzheimer's disease"
)
# Returns: {'data': {'id': 'EFO_0000249', 'name': '...', 'description': '...'}}Use: Initial disease lookup, get EFO ID for further queries
targets = tu.tools.OpenTargets_get_associated_targets_by_disease_efoId(
efoId="EFO_0000249",
limit=20
)
# Returns: List of targets with association scoresUse: Find proteins/genes associated with disease (repurposing targets)
diseases = tu.tools.OpenTargets_get_diseases_by_target_ensemblId(
ensemblId="ENSG00000012048"
)
# Returns: Diseases associated with gene/proteinUse: Reverse lookup - find diseases for drug targets (compound-based repurposing)
drugs = tu.tools.drugbank_get_drug_name_and_description_by_target_name(
target_name="BACE1"
)
# Returns: List of drugs targeting specified proteinUse: Primary tool for finding drugs by target (target-based repurposing)
drugs = tu.tools.drugbank_get_drug_name_and_description_by_indication(
indication="hypertension"
)
# Returns: Drugs approved for specified indicationUse: Find drugs for related indications (indication-based repurposing)
interactions = tu.tools.DGIdb_get_drug_gene_interactions(
gene_name="APP"
)
# Returns: Drug-gene interactions with interaction typesUse: Alternative source for drug-target pairs, includes interaction types
druggability = tu.tools.DGIdb_get_gene_druggability(
gene_name="APOE"
)
# Returns: Druggability assessment and tierUse: Assess if target is druggable before extensive search
drugs = tu.tools.ChEMBL_search_drugs(
query="kinase inhibitor",
limit=10
)
# Returns: ChEMBL drug molecules matching queryUse: Broad drug search, alternative to DrugBank
mechanisms = tu.tools.ChEMBL_get_drug_mechanisms(
chembl_id="CHEMBL941"
)
# Returns: Mechanism of action detailsUse: Understand drug mechanism for repurposing rationale
info = tu.tools.drugbank_get_drug_basic_info_by_drug_name_or_id(
drug_name_or_drugbank_id="metformin"
)
# Returns: Basic drug info including approval status, groups, descriptionUse: Initial drug lookup, verify approval status
indications = tu.tools.drugbank_get_indications_by_drug_name_or_drugbank_id(
drug_name_or_drugbank_id="aspirin"
)
# Returns: List of approved indicationsUse: Check current uses, identify repurposing opportunities (new indications)
targets = tu.tools.drugbank_get_targets_by_drug_name_or_drugbank_id(
drug_name_or_drugbank_id="imatinib"
)
# Returns: Drug targets with accessionsUse: Compound-based repurposing - find all targets for known drug
pharmacology = tu.tools.drugbank_get_pharmacology_by_drug_name_or_drugbank_id(
drug_name_or_drugbank_id="warfarin"
)
# Returns: Mechanism of action, pharmacodynamics, pharmacokineticsUse: Understand drug mechanism for repurposing rationale
pathways = tu.tools.drugbank_get_pathways_reactions_by_drug_or_id(
drug_name_or_drugbank_id="statins"
)
# Returns: Affected pathways and reactionsUse: Pathway-based repurposing - find drugs affecting similar pathways
drugs = tu.tools.drugbank_get_drug_name_and_description_by_pathway_name(
pathway_name="cholesterol biosynthesis"
)
# Returns: Drugs affecting specified pathwayUse: Find drugs with pathway overlap (network-based repurposing)
drugs = tu.tools.drugbank_get_drug_desc_pharmacology_by_moa(
mechanism_of_action="receptor antagonist"
)
# Returns: Drugs with specified mechanismUse: Mechanism-based repurposing
warnings = tu.tools.FDA_get_warnings_and_cautions_by_drug_name(
drug_name="aspirin"
)
# Returns: FDA warnings, precautions, contraindicationsUse: Critical safety assessment before repurposing recommendation
precautions = tu.tools.FDA_get_precautions_by_drug_name(
drug_name="metformin"
)
# Returns: Precautions and special populationsUse: Identify patient populations to exclude
interactions = tu.tools.drugbank_get_drug_interactions_by_drug_name_or_id(
drug_name_or_id="warfarin"
)
# Returns: Drug-drug interactionsUse: Assess interaction risk for new indication (different patient population)
reports = tu.tools.FAERS_search_reports_by_drug_and_reaction(
drug_name="LIPITOR",
reaction="myalgia",
limit=100
)
# Returns: Adverse event reportsUse: Real-world safety data, specific adverse events
reactions = tu.tools.FAERS_count_reactions_by_drug_event(
medicinalproduct="ASPIRIN"
)
# Returns: Counts of all reported reactionsUse: Overview of adverse event profile
deaths = tu.tools.FAERS_count_death_related_by_drug(
medicinalproduct="FENTANYL"
)
# Returns: Death-related adverse event countsUse: Most serious safety assessment
seriousness = tu.tools.FAERS_count_seriousness_by_drug_event(
medicinalproduct="METFORMIN"
)
# Returns: Classification of events by seriousnessUse: Stratify adverse events by severity
cid = tu.tools.PubChem_get_CID_by_compound_name(
compound_name="aspirin"
)
# Returns: PubChem Compound IDUse: First step for PubChem queries
properties = tu.tools.PubChem_get_compound_properties_by_CID(
cid=2244
)
# Returns: MW, formula, SMILES, LogP, H-bond donors/acceptorsUse: Assess drug-likeness, compare analogs
similar = tu.tools.PubChem_search_compounds_by_similarity(
smiles="CC(=O)Oc1ccccc1C(=O)O",
threshold=85,
limit=50
)
# Returns: Structurally similar compoundsUse: Structure-based repurposing - find approved drug analogs
bioactivity = tu.tools.PubChem_get_bioactivity_summary_by_CID(
cid=2244
)
# Returns: Active/inactive assay countsUse: Evidence of biological activity
bioactivity = tu.tools.ChEMBL_get_bioactivity_by_chemblid(
chembl_id="CHEMBL25"
)
# Returns: Detailed bioactivity data (IC50, EC50, etc.)Use: Quantitative activity data for target validation
admet = tu.tools.ADMETAI_predict_admet(
smiles="CC(C)Cc1ccc(cc1)C(C)C(O)=O"
)
# Returns: Absorption, distribution, metabolism, excretion, toxicity predictionsUse: Predict drug-like properties for candidates, filter early
Important: Use use_cache=True for expensive ML predictions
toxicity = tu.tools.ADMETAI_predict_toxicity(
smiles=["SMILES1", "SMILES2"]
)
# Returns: Toxicity predictions (hERG, hepatotoxicity, etc.)Use: Safety screening before clinical consideration
papers = tu.tools.PubMed_search_articles(
query="metformin AND Alzheimer's disease",
max_results=50
)
# Returns: PubMed articles with PMIDs, titles, abstractsUse: Primary literature evidence for repurposing hypothesis
papers = tu.tools.EuropePMC_search_articles(
query="aspirin AND cancer",
limit=50
)
# Returns: Europe PMC articles (includes preprints)Use: Alternative/additional literature source
trials = tu.tools.ClinicalTrials_search(
condition="COVID-19",
intervention="hydroxychloroquine"
)
# Returns: Clinical trial recordsUse: Check existing clinical evidence, identify completed/ongoing trials
protein = tu.tools.UniProt_get_entry_by_accession(
accession="P05067"
)
# Returns: Detailed protein informationUse: Understand target biology, confirm druggability
Drug names:
- Use generic names: "aspirin" not "Bayer Aspirin"
- Lowercase for DrugBank:
drug_name="metformin" - UPPERCASE for FAERS:
medicinalproduct="METFORMIN"
Disease names:
- Use standard terminology: "Alzheimer's disease" not "dementia"
- Try variations if not found: "breast cancer", "breast carcinoma", "mammary carcinoma"
Gene/Target names:
- HUGO nomenclature: "APP" not "Amyloid Precursor Protein"
- Protein names: "Amyloid beta A4 protein" for UniProt
- Ensembl IDs: "ENSG00000" format for OpenTargets
Recommended limits by tool:
OpenTargets_get_associated_targets: 20-50 (prioritize by score)DGIdb_get_drug_gene_interactions: No limit (returns all)ChEMBL_search_drugs: 10-20PubMed_search_articles: 50-100 for thorough analysisFAERStools: 100-1000 (statistical analysis)PubChem_search_compounds_by_similarity: 50-100
Always cache:
- ADMET predictions (expensive ML)
- Literature searches (large results)
- Drug/protein detail queries (static data)
Don't cache:
- FAERS data (updated quarterly)
- Clinical trials (frequently updated)
- Real-time safety alerts
# Enable caching globally
tu = ToolUniverse(use_cache=True)
# Or per-call
result = tu.tools.ADMETAI_predict_admet(smiles="...", use_cache=True){
'data': [...], # Main results (list or dict)
'meta': {...}, # Metadata (counts, pagination)
'status': 'success', # Status indicator
'message': 'Optional message'
}{
'gene_symbol': 'APP',
'gene_name': 'Amyloid Precursor Protein',
'ensembl_id': 'ENSG00000142192',
'uniprot_id': 'P05067',
'score': 0.95, # Association score (0-1)
'data_sources': [...] # Evidence sources
}{
'drugbank_id': 'DB00945',
'name': 'Aspirin',
'description': '...',
'groups': ['approved', 'vet_approved'],
'indication': '...',
'pharmacodynamics': '...',
'mechanism_of_action': '...',
'targets': [...]
}{
'results': [
{
'term': 'NAUSEA',
'count': 12345
},
...
],
'meta': {
'total': 50000,
'disclaimer': '...'
}
}# Screen multiple targets efficiently
targets = ['APP', 'APOE', 'MAPT', 'PSEN1', 'PSEN2']
all_drugs = []
for target in targets:
drugs = tu.tools.DGIdb_get_drug_gene_interactions(gene_name=target)
if drugs and 'data' in drugs:
all_drugs.extend([{**d, 'target': target} for d in drugs['data']])
# Deduplicate by drug name
unique_drugs = {d['drug_name']: d for d in all_drugs}.values()# Validate drug-target interaction across databases
drug = "imatinib"
target = "ABL1"
# Check DrugBank
db_targets = tu.tools.drugbank_get_targets_by_drug_name_or_drugbank_id(
drug_name_or_drugbank_id=drug
)
db_confirms = any(t['gene_symbol'] == target for t in db_targets.get('data', []))
# Check DGIdb
dgidb = tu.tools.DGIdb_get_drug_gene_interactions(gene_name=target)
dgidb_confirms = any(d['drug_name'].lower() == drug.lower()
for d in dgidb.get('data', []))
# Check ChEMBL
chembl_drugs = tu.tools.ChEMBL_search_drugs(query=drug, limit=1)
if chembl_drugs and 'data' in chembl_drugs:
chembl_id = chembl_drugs['data'][0]['molecule_chembl_id']
mechanisms = tu.tools.ChEMBL_get_drug_mechanisms(chembl_id=chembl_id)
chembl_confirms = any(target in str(m) for m in mechanisms.get('data', []))
validation_score = sum([db_confirms, dgidb_confirms, chembl_confirms])
print(f"Validation: {validation_score}/3 databases confirm {drug}-{target} interaction")# Detect safety signals for repurposing
drug = "THALIDOMIDE"
# Get all adverse events
all_reactions = tu.tools.FAERS_count_reactions_by_drug_event(
medicinalproduct=drug
)
# Classify by seriousness
seriousness = tu.tools.FAERS_count_seriousness_by_drug_event(
medicinalproduct=drug
)
# Get death reports
deaths = tu.tools.FAERS_count_death_related_by_drug(
medicinalproduct=drug
)
# Calculate safety score
total_reports = sum(r['count'] for r in all_reactions.get('results', []))
death_count = deaths.get('meta', {}).get('total', 0)
death_ratio = death_count / max(total_reports, 1)
if death_ratio > 0.01: # >1% death reports
print(f"⚠️ HIGH RISK: {death_ratio*100:.2f}% death ratio")
elif death_ratio > 0.001:
print(f"⚠️ MODERATE RISK: {death_ratio*100:.2f}% death ratio")
else:
print(f"✓ ACCEPTABLE RISK: {death_ratio*100:.2f}% death ratio")# Score repurposing candidate by literature evidence
drug = "metformin"
disease = "cancer"
query = f"{drug} AND {disease}"
# Search multiple sources
pubmed = tu.tools.PubMed_search_articles(query=query, max_results=100)
pmc = tu.tools.EuropePMC_search_articles(query=query, limit=100)
trials = tu.tools.ClinicalTrials_search(condition=disease, intervention=drug)
# Count evidence types
review_count = sum(1 for p in pubmed.get('data', [])
if 'review' in p.get('title', '').lower())
rct_count = sum(1 for p in pubmed.get('data', [])
if 'randomized' in p.get('title', '').lower())
trial_count = len(trials.get('data', []))
# Calculate evidence score
evidence_score = (
len(pubmed.get('data', [])) * 1 + # 1 point per paper
review_count * 3 + # 3 points per review
rct_count * 5 + # 5 points per RCT
trial_count * 10 # 10 points per trial
)
print(f"Evidence Score: {evidence_score}")
print(f" Papers: {len(pubmed.get('data', []))}")
print(f" Reviews: {review_count}")
print(f" RCTs: {rct_count}")
print(f" Trials: {trial_count}")Solutions:
- Try disease synonyms
- Use broader disease categories
- Search OMIM or other disease databases
- Use EFO ID directly if known
Causes:
- Target not druggable
- Target name incorrect
- Limited database coverage
Solutions:
- Check gene symbol (HUGO nomenclature)
- Try protein name instead
- Expand to pathway-level drugs
- Check target druggability first
Solutions:
- Try generic name (not brand)
- Try different capitalization
- Use DrugBank ID if known
- Search PubChem first
Solutions:
- Enable caching:
use_cache=True - Add delays between calls
- Use batch operations
- Register for API keys (NCBI, etc.)
Causes:
- Drug name spelling
- Insufficient reports
- Wrong capitalization
Solutions:
- Use UPPERCASE: "ASPIRIN" not "aspirin"
- Try brand names
- Check OpenFDA directly
Solutions:
- Enable caching globally
- Limit result counts
- Load specific tool categories
- Use batch operations
- Disable validation after testing
- Start with approved drugs - Known safety profiles
- Validate across databases - Cross-reference DrugBank, DGIdb, ChEMBL
- Check safety first - FDA warnings before detailed analysis
- Use caching - Save API calls and time
- Limit initial searches - Expand only promising candidates
- Document evidence - Keep track of supporting papers
- Consider mechanism - Biological plausibility critical
- Assess patient populations - Different from original indication
- Check IP landscape - Patent status for new indications
- Think commercially - Market size and unmet need
- ToolUniverse Documentation: https://zitniklab.hms.harvard.edu/ToolUniverse/
- Tool Catalog: https://zitniklab.hms.harvard.edu/ToolUniverse/tools/
- DrugBank: https://go.drugbank.com/
- OpenTargets: https://platform.opentargets.org/
- ChEMBL: https://www.ebi.ac.uk/chembl/
- OpenFDA: https://open.fda.gov/
- PubMed: https://pubmed.ncbi.nlm.nih.gov/