
Tooluniverse Drug Target Validation
- 335 installs
- 1.6k repo stars
- Updated August 4, 2026
- mims-harvard/tooluniverse
tooluniverse-drug-target-validation is an agent skill that runs a 10-phase computational drug-target validation pipeline and returns a 0-100 Target Validation Score with GO/NO-GO guidance for developers and scientists de
About
tooluniverse-drug-target-validation is a ToolUniverse agent skill for computational drug-target validation in early discovery. The workflow runs 10 phases—from identifier resolution through disease association, druggability, chemical matter, clinical precedent, safety, pathway context, validation evidence, structural insights, literature review, and synthesis—calling 60+ ToolUniverse tools against OpenTargets, ChEMBL, UniProt, GWAS, GTEx, PubChem, and FDA sources. It scores five dimensions (0-100 total), maps results to four priority tiers, and mandates ADMET-AI Chemprop-GNN profiling across 10 endpoints plus structure predictors including AlphaFold and ESMFold. Output is a cited markdown validation report with experiment and biomarker recommendations. Use it before medchem spend, target portfolio ranking, or investor dossiers when genetic linkage, druggability, and safety must be evidenced—not guessed.
- Multi-evidence target scoring
- Genetic and expression cross-checks
- Druggability and safety signals
- Faster go/no-go decisions
- Agent-mediated validation queries
Tooluniverse Drug Target Validation by the numbers
- 335 all-time installs (skills.sh)
- +5 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #558 of 2,064 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mims-harvard/tooluniverse --skill tooluniverse-drug-target-validationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 335 |
|---|---|
| repo stars | ★ 1.6k |
| Last updated | August 4, 2026 |
| Repository | mims-harvard/tooluniverse ↗ |
How do you validate a drug target computationally?
Stress-test whether a proposed therapeutic target has genetic, expression, and safety signals strong enough to justify assay design or partnership conversations.
Who is it for?
Computational biologists, bioinformatics engineers, and drug-discovery developers who need a cited, quantitative go/no-go dossier on a gene or UniProt target before wet-lab assays.
Skip if: Developers seeking general target biology summaries, single-compound ADMET profiling, variant interpretation, or disease overviews—those belong to other ToolUniverse skills.
When should I use this skill?
A user asks whether a gene or protein is a good drug target, requests druggability scoring, target prioritization, safety red flags, or a GO/NO-GO recommendation before medchem or partnership work.
What you get
Markdown validation report, 0-100 Target Validation Score with five-dimension breakdown, Tier 1-4 priority band, GO/NO-GO recommendation, ADMET head-to-head tables, and validation experiment roadmap.
- Target validation markdown report
- 0-100 Target Validation Score with tier assignment
- GO/NO-GO recommendation with experiment roadmap
By the numbers
- Runs a 10-phase validation pipeline from disambiguation through synthesis
- Scores targets 0-100 across 5 dimensions with 4 priority tiers
- Orchestrates 60+ ToolUniverse scientific tools and 10 ADMET-AI endpoints
Files
Drug Target Validation Pipeline
Validate drug target hypotheses using multi-dimensional computational evidence before committing to wet-lab work. Produces a quantitative Target Validation Score (0-100) with priority tier classification and GO/NO-GO recommendation.
Reasoning Before Searching
A valid drug target must pass 4 gates in order. Failing an early gate makes later gates irrelevant:
1. Genetic evidence linking it to disease: Does human genetic data (GWAS, rare variant studies, Mendelian genetics) support this target's role? Genetic evidence is the strongest predictor of clinical success. Use OpenTargets and GWAS catalog before anything else. If no genetic link exists, the hypothesis is speculative — document this clearly. 2. Druggability: Can a molecule reach and modulate the target? Check structure availability (PDB, AlphaFold), binding pocket prediction (ProteinsPlus), target class (kinase, GPCR, nuclear receptor = favorable; transcription factor, scaffold protein = difficult), and existing chemical probes. 3. Safety — essentiality in normal tissue: Is the target expressed in critical tissues (heart, liver, bone marrow)? Is knockout lethal in mice? High expression in essential tissue or lethality in mouse models is a strong safety red flag even before any clinical data. 4. Competitive landscape: Are other drugs already approved or in late-stage trials for this target? If so, the bar is differentiation, not first-in-class. Check ChEMBL, DrugBank, and ClinicalTrials.gov early.
Do not proceed to Phase 3 (Chemical Matter) before completing Phase 1 (Disease Association). Gate 1 failures should prompt a NO-GO or pivot recommendation.
LOOK UP DON'T GUESS: Never assume a target is druggable based on its protein family alone, never assume expression is low in a tissue without checking GTEx or HPA, never assume no competitors without searching ClinicalTrials.gov.
RUN THE ML MODELS, DON'T SKIP THEM: When deep-learning predictors are available (ADMET-AI, ESMFold, AlphaFold, DoGSite, DynaMut2, DeepGO), run them even when database lookups or experimental data already cover the same property. The ML predictions provide an orthogonal, mechanistically-grounded estimate that's a first-class output of this skill — not a fallback. A target-validation report missing ML predictions is incomplete regardless of how much database evidence is present.
COMPUTE, DON'T DESCRIBE
When analysis requires computation (statistics, data processing, scoring, enrichment), write and run Python code via Bash. Don't describe what you would do — execute it and report actual results. Use ToolUniverse tools to retrieve data, then Python (pandas, scipy, statsmodels, matplotlib) to analyze it.
Key Principles
1. Report-first - Create report file FIRST, then populate progressively 2. Target disambiguation FIRST - Resolve all identifiers before analysis 3. Evidence grading - Grade all evidence as T1 (experimental) to T4 (computational) 4. Disease-specific - Tailor analysis to disease context when provided 5. Modality-aware - Consider small molecule vs biologics tractability 6. Safety-first - Prominently flag safety concerns early 7. Quantitative scoring - Every dimension scored numerically (0-100 composite) 8. Negative results documented - "No data" is data; empty sections are failures 9. Source references - Every statement must cite tool/database 10. English-first queries - Always use English terms in tool calls; respond in user's language
When to Use
Apply when users ask about:
- "Is [target] a good drug target for [disease]?"
- Target validation, druggability assessment, or target prioritization
- Safety risks of modulating a target
- Chemical starting points for target validation
- GO/NO-GO recommendation for a target
Not for (use other skills): general target biology (tooluniverse-target-research), drug compound profiling (tooluniverse-drug-research), variant interpretation (tooluniverse-variant-interpretation), disease research (tooluniverse-disease-research).
Input Parameters
| Parameter | Required | Description | Example |
|---|---|---|---|
| target | Yes | Gene symbol, protein name, or UniProt ID | EGFR, P00533 |
| disease | No | Disease/indication for context | Non-small cell lung cancer |
| modality | No | Preferred therapeutic modality | small molecule, antibody, PROTAC |
Reference Files
- SCORING_CRITERIA.md - Detailed scoring matrices, evidence grading, priority tiers, score calculation
- REPORT_TEMPLATE.md - Full report template, completeness checklist, section format examples
- TOOL_REFERENCE.md - Verified tool parameters, known corrections, fallback chains, modality-specific guidance, phase-by-phase tool lists
- QUICK_START.md - Quick start guide
---
Scoring Overview
Total: 0-100 points across 5 dimensions (details in SCORING_CRITERIA.md):
| Dimension | Max | Sub-dimensions |
|---|---|---|
| Disease Association | 30 | Genetic (10) + Literature (10) + Pathway (10) |
| Druggability | 25 | Structure (10) + Chemical matter (10) + Target class (5) |
| Safety Profile | 20 | Expression (5) + Genetic validation (10) + ADRs (5) |
| Clinical Precedent | 15 | Based on highest clinical stage achieved |
| Validation Evidence | 10 | Functional studies (5) + Disease models (5) |
Priority Tiers: 80-100 = Tier 1 (GO) | 60-79 = Tier 2 (CONDITIONAL GO) | 40-59 = Tier 3 (CAUTION) | 0-39 = Tier 4 (NO-GO)
Evidence Grades: T1 (clinical proof) > T2 (functional studies) > T3 (associations) > T4 (predictions)
---
Pipeline Phases
Phase 0: Target Disambiguation (ALWAYS FIRST)
Resolve target to ALL identifiers before any analysis.
Steps: 1. MyGene_query_genes - Get initial IDs (Ensembl, UniProt, Entrez) 2. ensembl_lookup_gene - Get versioned Ensembl ID (species="homo_sapiens" REQUIRED) 3. ensembl_get_xrefs - Cross-references (HGNC, etc.) 4. OpenTargets_get_target_id_description_by_name - Verify OT target 5. ChEMBL_search_targets - Get ChEMBL target ID 6. UniProt_get_function_by_accession - Function summary (returns list of strings) 7. UniProt_get_alternative_names_by_accession - Collision detection
Output: Table of verified identifiers (Gene Symbol, Ensembl, UniProt, Entrez, ChEMBL, HGNC) plus protein function and target class.
Phase 1: Disease Association (0-30 pts)
Quantify target-disease association from genetic, literature, and pathway evidence.
Key tools:
OpenTargets_get_diseases_phenotypes_by_target_ensembl- Disease associationsOpenTargets_target_disease_evidence- Detailed evidence (needsefoId+ensemblId)OpenTargets_get_evidence_by_datasource- Evidence by data sourcegwas_get_snps_for_gene/gwas_search_studies- GWAS evidencegnomad_get_gene_constraints- Genetic constraint (pLI, LOEUF)PubMed_search_articles- Literature (returns plain list of dicts)OpenTargets_get_publications_by_target_ensemblID- OT publications (usesentityId)
Phase 2: Druggability (0-25 pts)
Assess whether the target is amenable to therapeutic intervention.
Key tools:
OpenTargets_get_target_tractability_by_ensemblID- Tractability (SM, AB, PR, OC)OpenTargets_get_target_classes_by_ensemblID- Target classificationPharos_get_target- TDL: Tclin > Tchem > Tbio > TdarkDGIdb_get_gene_druggability- Druggability categoriesalphafold_get_prediction(param:qualifier) /alphafold_get_summaryProteinsPlus_predict_binding_sites- Pocket detectionOpenTargets_get_chemical_probes_by_target_ensemblID- Chemical probesOpenTargets_get_target_enabling_packages_by_ensemblID- TEPsTCDB_get_transporter- For SLC/ABC transporter targets: TC classification, family, PDB structures (param:uniprot_accession)TCDB_search_by_substrate- Find transporters by substrate (param:substrate_name)
Phase 3: Chemical Matter (feeds Phase 2 scoring)
Identify existing chemical starting points for target validation.
Key tools:
ChEMBL_search_targets+ChEMBL_get_target_activities- Bioactivity data (note:target_chembl_id__exactwith double underscore)BindingDB_get_ligands_by_uniprot- Binding data (affinity in nM)PubChem_search_assays_by_target_gene+PubChem_get_assay_active_compounds- HTS dataOpenTargets_get_associated_drugs_by_target_ensemblID- Known drugs (sizeREQUIRED)ChEMBL_search_mechanisms- Drug mechanismsDGIdb_get_gene_info- Drug-gene interactions
Phase 3b: ADMET-AI Deep-Learning Profile (REQUIRED)
For each lead / approved compound identified above, run all ten ADMET-AI Chemprop-GNN endpoints. This is a required deliverable of the skill, not optional:
| Endpoint | Tool |
|---|---|
| Physicochemical (MW, logP, HBA/HBD, TPSA) | ADMETAI_predict_physicochemical_properties |
| Toxicity (AMES, DILI, LD50, carcinogens, skin sensitizers, ClinTox) | ADMETAI_predict_toxicity |
| BBB penetrance | ADMETAI_predict_BBB_penetrance |
| CYP interactions (1A2, 2C9, 2C19, 2D6, 3A4) | ADMETAI_predict_CYP_interactions |
| Bioavailability (HIA, PAMPA, Caco-2, F20/F30) | ADMETAI_predict_bioavailability |
| Clearance & distribution (hepatocyte, microsome, VDss, PPB) | ADMETAI_predict_clearance_distribution |
| Nuclear receptor activity (NR-AR, NR-AhR, NR-Aromatase, NR-ER, NR-PPAR-γ) | ADMETAI_predict_nuclear_receptor_activity |
| Stress response (SR-ARE, SR-ATAD5, SR-HSE, SR-MMP, SR-p53) | ADMETAI_predict_stress_response |
| Solubility, lipophilicity, hydration | ADMETAI_predict_solubility_lipophilicity_hydration |
| Metabolism (CYP-mediated) | ADMETAI_predict_CYP_interactions |
Required output — ADMET head-to-head table: when two or more candidate drugs exist (approved or late-stage), produce a side-by-side comparison table with every endpoint in the same row and a "Winner" column flagging which drug is safer. This table is the primary visual of the report and must not be abbreviated or summarized into prose.
ADMET-AI fallback (IMPORTANT): If MCP calls to ADMETAI_predict_* fail, return empty, or timeout, run them via Bash + Python SDK instead:
from tooluniverse import ToolUniverse
tu = ToolUniverse()
tu.load_tools()
for endpoint in ['physicochemical_properties','toxicity','BBB_penetrance','CYP_interactions',
'bioavailability','clearance_distribution','nuclear_receptor_activity',
'stress_response','solubility_lipophilicity_hydration']:
r = tu.run_one_function({'name': f'ADMETAI_predict_{endpoint}',
'arguments': {'smiles_list': [SMILES_DRUG_A, SMILES_DRUG_B]}})
print(f'{endpoint}: {r}')This SDK path bypasses the CLI subprocess and avoids segfault issues with torch. Always try MCP first; use this fallback if MCP returns no data.
Phase 4: Clinical Precedent (0-15 pts)
Assess clinical validation from approved drugs and clinical trials.
Key tools:
FDA_get_mechanism_of_action_by_drug_name/FDA_get_indications_by_drug_namedrugbank_get_targets_by_drug_name_or_drugbank_id(ALL params required:query,case_sensitive,exact_match,limit)search_clinical_trials(query_termREQUIRED)OpenTargets_get_drug_warnings_by_chemblId/OpenTargets_get_drug_adverse_events_by_chemblId
Phase 5: Safety (0-20 pts)
Identify safety risks from expression, genetics, and known adverse events.
Key tools:
OpenTargets_get_target_safety_profile_by_ensemblID- Safety liabilitiesGTEx_get_median_gene_expression- Tissue expression (operation="median"REQUIRED)HPA_search_genes_by_query/HPA_get_comprehensive_gene_details_by_ensembl_idOpenTargets_get_biological_mouse_models_by_ensemblID- KO phenotypesFDA_get_adverse_reactions_by_drug_name/FDA_get_boxed_warning_info_by_drug_nameOpenTargets_get_target_homologues_by_ensemblID- Paralog risks
Critical tissues to check: heart, liver, kidney, brain, bone marrow.
Phase 6: Pathway Context
Understand the target's role in biological networks and disease pathways.
Key tools:
Reactome_map_uniprot_to_pathways(param:id, NOTuniprot_id)STRING_get_protein_interactions(param:protein_idsas array,species=9606)intact_get_interactions- Experimental PPIOpenTargets_get_target_gene_ontology_by_ensemblID- GO termsSTRING_functional_enrichment- Enrichment analysis
Assess: pathway redundancy, compensation risk, feedback loops.
Phase 7: Validation Evidence (0-10 pts)
Assess existing functional validation data.
Key tools:
DepMap_get_gene_dependencies- Essentiality (score < -0.5 = essential)PubMed_search_articles- Search for CRISPR/siRNA/knockout studiesCTD_get_gene_diseases- Gene-disease associations
Phase 8: Structural Insights
Leverage structural biology for druggability and mechanism understanding. ALWAYS run both the deep-learning predictors (ESMFold, DoGSite) AND retrieve experimental structures, even when high-resolution PDB entries already exist. The ML models give an independent pLDDT/druggability score that is a required output of this phase.
Required tool calls (every run):
ESMFold_predict_structure— Meta ESM-2 language-model structure prediction from the UniProt sequence. Report: model pLDDT, worst-residue confidence, RMSD vs. reference PDB if available.alphafold_get_prediction/alphafold_get_summary— DeepMind AlphaFold model + per-residue pLDDT.ProteinsPlus_predict_binding_sites— DoGSite deep-learning pocket scoring. Report: top 3 pockets with volume, druggability score, residue composition.
Supporting tools:
UniProt_get_entry_by_accession- Extract PDB cross-referencesget_protein_metadata_by_pdb_id/pdbe_get_entry_summary/pdbe_get_entry_qualityInterPro_get_protein_domains/InterPro_get_domain_details- Domain architecture
Phase 9: Literature Deep Dive
Comprehensive collision-aware literature analysis.
Steps: 1. Collision detection: Search "{gene_symbol}"[Title] in PubMed; if >20% off-topic, add filters (AND protein OR gene OR receptor) 2. Publication metrics: Total count, 5-year trend, drug-focused subset 3. Key reviews: review[pt] filter in PubMed 4. Citation metrics: openalex_search_works for impact data 5. Broader coverage: EuropePMC_search_articles
Phase 10: Validation Roadmap (Synthesis)
Synthesize all phases into actionable output: 1. Target Validation Score (0-100) with component breakdown 2. Priority Tier (1-4) assignment 3. GO/NO-GO Recommendation with justification 4. Recommended Validation Experiments 5. Tool Compounds for Testing 6. Biomarker Strategy 7. Key Risks and Mitigations 8. Deep-Learning Models Contributing — explicit attribution table listing every ML predictor invoked during the run and what each produced. Example format:
| Model | Architecture | Contributed |
|---|---|---|
| AlphaFold | DeepMind iterative SE(3)-equivariant Transformer | Full-length 3D model; per-residue pLDDT 91.5 |
| ESMFold | Meta ESM-2 protein language model | Sequence→structure baseline; confidence vs. AlphaFold |
| DoGSite3 | CNN pocket scorer (ProteinsPlus) | Top-3 druggable pockets with volume and drug-score |
| ADMET-AI | Chemprop GNN ensemble (TDC) | 10 endpoints for sotorasib / adagrasib (table above) |
| DynaMut2 | Graph-based mutation stability predictor | ΔΔG for G12C vs. WT |
| DeepGO | Hierarchical GO-term classifier | Molecular-function predictions |
Only list models actually called during the run. This section makes the ML content first-class for a scientific or investor audience.
---
Report Output
Create file: [TARGET]_[DISEASE]_validation_report.md
Use the full template from REPORT_TEMPLATE.md. Key sections:
- Executive Summary (score, tier, recommendation, key findings, critical risks)
- Validation Scorecard (all 12 sub-scores with evidence)
- Sections 1-14 covering each phase
- Completeness Checklist (mandatory before finalizing)
Complete the Completeness Checklist (in REPORT_TEMPLATE.md) before finalizing to verify all phases were covered, all scores justified, and negative results documented.
Drug Target Validation - Quick Start Guide
Overview
This skill validates drug target hypotheses using computational evidence from 60+ ToolUniverse tools. It produces a Target Validation Score (0-100) with a GO/NO-GO recommendation.
Basic Usage
Use Case 1: Full Target Validation (Disease-Specific)
Is KRAS a druggable target for pancreatic cancer?What happens: Full 10-phase analysis with disease-specific evidence, produces validation score and GO/NO-GO recommendation.
Use Case 2: General Target Druggability Assessment
Assess the druggability of BTK as a therapeutic targetWhat happens: Focuses on druggability, chemical matter, structural tractability, and clinical precedent without disease-specific filtering.
Use Case 3: Target Safety Assessment
What are the safety risks of inhibiting IDH1?What happens: Emphasizes safety phase - expression in critical tissues, knockout phenotypes, known adverse events, paralogs.
Use Case 4: Chemical Starting Points
What compounds are available for PCSK9 validation?What happens: Deep dive into chemical matter - ChEMBL activities, BindingDB ligands, PubChem bioassays, chemical probes.
Use Case 5: Target Comparison
Compare PD-1 vs PD-L1 as immunotherapy targetsWhat happens: Runs validation pipeline for both targets, produces side-by-side comparison of scores.
Use Case 6: Novel Target Evaluation
Is TEAD4 a viable target for solid tumors? Consider small molecule approach.What happens: Full validation with modality-specific analysis, extra focus on structural tractability for small molecules.
Output
Every analysis produces a markdown report file with:
1. Executive Summary with GO/NO-GO recommendation 2. Validation Scorecard (0-100 composite score) 3. 10 Detailed Sections covering all evidence dimensions 4. Validation Roadmap with recommended experiments 5. Risk Assessment with mitigation strategies 6. Completeness Checklist showing analysis coverage
Priority Tiers
| Score | Tier | Meaning |
|---|---|---|
| 80-100 | Tier 1 | Highly validated - proceed with confidence |
| 60-79 | Tier 2 | Good target - needs focused validation |
| 40-59 | Tier 3 | Moderate risk - significant validation needed |
| 0-39 | Tier 4 | High risk - consider alternatives |
Evidence Grades
- [T1]: Direct mechanistic evidence (crystal structure, patient mutations, FDA-approved drug)
- [T2]: Functional studies (CRISPR KO, mouse model, biochemical assay)
- [T3]: Association (GWAS hit, DepMap essentiality, expression correlation)
- [T4]: Annotation (database entry, computational prediction, review article)
Example Report Structure
EGFR_NSCLC_validation_report.md
Executive Summary
Score: 90/100 | Tier 1 | GO
Strong genetic + clinical validation for NSCLC
Validation Scorecard
Disease Association: 28/30
Druggability: 24/25
Safety Profile: 14/20
Clinical Precedent: 15/15
Validation Evidence: 9/10
[10 detailed sections with tool outputs and evidence]
Validation Roadmap
- Recommended experiments
- Tool compounds
- Biomarker strategy
- Risk mitigationsKey Databases Queried
| Database | Information | Tools |
|---|---|---|
| OpenTargets | Disease associations, tractability, safety | 15+ tools |
| ChEMBL | Bioactivity, compounds, mechanisms | 8+ tools |
| PDB/AlphaFold | 3D structures, binding pockets | 12+ tools |
| STRING/IntAct | Protein interactions | 6+ tools |
| GTEx/HPA | Tissue expression | 10+ tools |
| GWAS Catalog | Genetic associations | 5+ tools |
| FDA/DrugBank | Approved drugs, safety | 10+ tools |
| ClinicalTrials.gov | Clinical development | 2+ tools |
| PubMed/EuropePMC | Literature evidence | 6+ tools |
| gnomAD | Genetic constraint | 2+ tools |
| DepMap | Cancer essentiality | 3+ tools |
| Reactome | Biological pathways | 5+ tools |
Drug Target Validation - Report Template
Use this template to create the validation report file: [TARGET]_[DISEASE]_validation_report.md
---
Report Structure
# Drug Target Validation Report: [TARGET]
**Target**: [Gene Symbol] ([Full Name])
**Disease Context**: [Disease Name] (if provided)
**Modality**: [Small molecule / Antibody / etc.] (if specified)
**Generated**: [Date]
**Status**: In Progress
---
## Executive Summary
**Target Validation Score**: [XX/100]
**Priority Tier**: [Tier X] - [Description]
**Recommendation**: [GO / CONDITIONAL GO / CAUTION / NO-GO]
**Key Findings**:
- [1-sentence disease association strength with evidence grade]
- [1-sentence druggability assessment]
- [1-sentence safety profile]
- [1-sentence clinical precedent]
**Critical Risks**:
- [Top risk 1]
- [Top risk 2]
---
## Validation Scorecard
| Dimension | Score | Max | Assessment | Key Evidence |
|-----------|-------|-----|------------|--------------|
| **Disease Association** | | 30 | | |
| - Genetic evidence | | 10 | | |
| - Literature evidence | | 10 | | |
| - Pathway evidence | | 10 | | |
| **Druggability** | | 25 | | |
| - Structural tractability | | 10 | | |
| - Chemical matter | | 10 | | |
| - Target class | | 5 | | |
| **Safety Profile** | | 20 | | |
| - Expression selectivity | | 5 | | |
| - Genetic validation | | 10 | | |
| - Known ADRs | | 5 | | |
| **Clinical Precedent** | | 15 | | |
| **Validation Evidence** | | 10 | | |
| - Functional studies | | 5 | | |
| - Disease models | | 5 | | |
| **TOTAL** | **XX** | **100** | **[Tier]** | |
---
## 1. Target Identity
[Researching...]
## 2. Disease Association Evidence
### 2.1 OpenTargets Disease Associations
[Researching...]
### 2.2 GWAS Genetic Evidence
[Researching...]
### 2.3 Constraint Scores (gnomAD)
[Researching...]
### 2.4 Literature Evidence
[Researching...]
## 3. Druggability Assessment
### 3.1 Tractability (OpenTargets)
[Researching...]
### 3.2 Target Classification
[Researching...]
### 3.3 Structural Tractability
[Researching...]
### 3.4 Chemical Probes & Enabling Packages
[Researching...]
## 4. Known Modulators & Chemical Matter
### 4.1 Approved/Clinical Drugs
[Researching...]
### 4.2 ChEMBL Bioactivity
[Researching...]
### 4.3 BindingDB Ligands
[Researching...]
### 4.4 PubChem Bioassays
[Researching...]
### 4.5 Chemical Probes
[Researching...]
## 5. Clinical Precedent
### 5.1 FDA-Approved Drugs
[Researching...]
### 5.2 Clinical Trial Landscape
[Researching...]
### 5.3 Failed Programs & Lessons
[Researching...]
## 6. Safety & Toxicity Profile
### 6.1 OpenTargets Safety Liabilities
[Researching...]
### 6.2 Expression in Critical Tissues
[Researching...]
### 6.3 Knockout Phenotypes
[Researching...]
### 6.4 Known Adverse Events
[Researching...]
### 6.5 Paralog & Off-Target Risks
[Researching...]
## 7. Pathway Context & Network Analysis
### 7.1 Biological Pathways
[Researching...]
### 7.2 Protein-Protein Interactions
[Researching...]
### 7.3 Functional Enrichment
[Researching...]
### 7.4 Pathway Redundancy Assessment
[Researching...]
## 8. Validation Evidence
### 8.1 Target Essentiality (DepMap)
[Researching...]
### 8.2 Functional Studies
[Researching...]
### 8.3 Animal Models
[Researching...]
### 8.4 Biomarker Potential
[Researching...]
## 9. Structural Insights
### 9.1 Experimental Structures (PDB)
[Researching...]
### 9.2 AlphaFold Prediction
[Researching...]
### 9.3 Binding Pocket Analysis
[Researching...]
### 9.4 Domain Architecture
[Researching...]
## 10. Literature Landscape
### 10.1 Publication Metrics
[Researching...]
### 10.2 Key Publications
[Researching...]
### 10.3 Research Trend
[Researching...]
## 11. Validation Roadmap
### 11.1 Recommended Validation Experiments
[Researching...]
### 11.2 Tool Compounds for Testing
[Researching...]
### 11.3 Biomarker Strategy
[Researching...]
### 11.4 Clinical Biomarker Candidates
[Researching...]
### 11.5 Disease Models to Test
[Researching...]
## 12. Risk Assessment
### 12.1 Key Risks
[Researching...]
### 12.2 Mitigation Strategies
[Researching...]
### 12.3 Competitive Landscape
[Researching...]
## 13. Completeness Checklist
[To be populated post-audit...]
## 14. Data Sources & Methodology
[Will be populated as research progresses...]---
Completeness Checklist (MANDATORY)
Before finalizing the report, verify all items:
Phase Coverage
- [ ] Phase 0: Target disambiguation (all IDs resolved)
- [ ] Phase 1: Disease association (OT + GWAS + gnomAD + literature)
- [ ] Phase 2: Druggability (tractability + class + structure + probes)
- [ ] Phase 3: Chemical matter (ChEMBL + BindingDB + PubChem + drugs)
- [ ] Phase 4: Clinical precedent (FDA + trials + failures)
- [ ] Phase 5: Safety (OT safety + expression + KO + ADRs + paralogs)
- [ ] Phase 6: Pathway context (Reactome + STRING + GO)
- [ ] Phase 7: Validation evidence (DepMap + literature + models)
- [ ] Phase 8: Structural insights (PDB + AlphaFold + pockets + domains)
- [ ] Phase 9: Literature (collision-aware + metrics + key papers)
- [ ] Phase 10: Validation roadmap (score + recommendations)
Data Quality
- [ ] All scores justified with specific data
- [ ] Evidence grades (T1-T4) assigned to key claims
- [ ] Negative results documented (not left blank)
- [ ] Failed tools with fallbacks documented
- [ ] Source citations for all data points
Scoring
- [ ] All 12 score components calculated
- [ ] Total score summed correctly
- [ ] Priority tier assigned
- [ ] GO/NO-GO recommendation justified
---
Section-Specific Report Formats
Chemical Matter Section Example
### 4. Known Modulators & Chemical Matter
#### 4.1 Approved Drugs
| Drug | ChEMBL ID | Mechanism | Phase | Indication | Source |
|------|-----------|-----------|-------|------------|--------|
| Erlotinib | CHEMBL553 | Inhibitor | 4 | NSCLC | [T1] OpenTargets |
#### 4.2 ChEMBL Bioactivity Summary
**Total Activities**: 12,456 datapoints across 2,341 assays
**Most Potent Compound**: CHEMBL413456 (IC50 = 0.3 nM) [T1]
**Chemical Series**: 8 distinct scaffolds with pChEMBL >= 7.0
#### 4.3 BindingDB Ligands
**Total Ligands**: 856 with measured affinity
**Affinity Distribution**: <1nM: 23, 1-10nM: 89, 10-100nM: 234, 100nM-1uM: 510
#### 4.4 Chemical Probes
| Probe | Source | Potency | Selectivity | Use |
|-------|--------|---------|-------------|-----|
| SGC-1234 | SGC | IC50=5nM | >100x | In vitro |Pathway Context Section Example
### 7. Pathway Context & Network Analysis
#### 7.1 Key Pathways
| Pathway | Reactome ID | Relevance to Disease | Evidence |
|---------|-------------|---------------------|----------|
| EGFR signaling | R-HSA-177929 | Driver pathway in NSCLC | [T1] |
#### 7.2 Protein-Protein Interactions
**Total Interactors**: 45 (STRING confidence > 0.7)
**Key Interactors**: GRB2, SHC1, PLCG1, PIK3CA, STAT3
#### 7.3 Pathway Redundancy Assessment
**Compensation Risk**: MODERATE
- Parallel pathways: HER2, HER3 can compensate
- Feedback loops: RAS activation bypasses EGFRTarget Identity Section Example
## 1. Target Identity
| Database | Identifier | Verified |
|----------|-----------|----------|
| Gene Symbol | EGFR | Yes |
| Full Name | Epidermal growth factor receptor | Yes |
| Ensembl | ENSG00000146648 | Yes |
| Ensembl (versioned) | ENSG00000146648.18 | Yes |
| UniProt | P00533 | Yes |
| Entrez Gene | 1956 | Yes |
| ChEMBL | CHEMBL203 | Yes |
| HGNC | HGNC:3236 | Yes |
**Protein Function**: [from UniProt_get_function_by_accession]
**Subcellular Location**: [from UniProt_get_subcellular_location_by_accession]
**Target Class**: [from OpenTargets_get_target_classes_by_ensemblID]Drug Target Validation - Scoring Criteria
Detailed scoring matrices, evidence grading, and priority tier definitions for the Target Validation Score (0-100).
---
Score Components (Total: 0-100)
Disease Association (0-30 points)
| Sub-dimension | Range | Description |
|---|---|---|
| Genetic evidence | 0-10 | GWAS, rare variants, somatic mutations |
| Literature evidence | 0-10 | Publications, clinical studies |
| Pathway evidence | 0-10 | Disease pathway involvement |
Genetic Evidence (0-10):
- GWAS hits for specific disease: +3 per significant locus (max 6)
- Rare variant evidence (ClinVar pathogenic): +2
- Somatic mutations in disease: +2
- pLI > 0.9 (essential gene): +2
Literature Evidence (0-10):
- >100 publications on target+disease: 10
- 50-100 publications: 7
- 10-50 publications: 5
- 1-10 publications: 3
- 0 publications: 0
Pathway Evidence (0-10):
- OpenTargets overall score > 0.8: 10
- Score 0.5-0.8: 7
- Score 0.2-0.5: 4
- Score < 0.2: 1
---
Druggability (0-25 points)
| Sub-dimension | Range | Description |
|---|---|---|
| Structural tractability | 0-10 | Structure quality, binding pockets |
| Chemical matter | 0-10 | Known compounds, bioactivity data |
| Target class | 0-5 | Validated target family bonus |
Structural Tractability (0-10):
- High-res co-crystal structure with ligand: 10
- PDB structure available, pockets detected: 7
- AlphaFold only, confident pocket prediction: 5
- AlphaFold low confidence / no structure: 2
- No structural data: 0
Chemical Matter (0-10):
- Known drug-like compounds (IC50 < 100nM): 10
- Tool compounds (IC50 < 1uM): 7
- HTS hits only (IC50 > 1uM): 4
- No known ligands: 0
Target Class Bonus (0-5):
- Validated druggable family (kinase, GPCR, nuclear receptor): 5
- Enzyme, ion channel: 4
- Protein-protein interaction, transporter: 2
- Novel/unknown class: 0
---
Safety Profile (0-20 points)
| Sub-dimension | Range | Description |
|---|---|---|
| Tissue expression selectivity | 0-5 | Expression in critical tissues |
| Genetic validation | 0-10 | Knockout phenotypes, human genetics |
| Known adverse events | 0-5 | Safety signals from modulators |
Tissue Expression Selectivity (0-5):
- Target restricted to disease tissue: 5
- Low expression in heart/liver/kidney/brain: 4
- Moderate expression in 1-2 critical tissues: 2
- High expression in multiple critical tissues: 0
Genetic Validation (0-10):
- Mouse KO viable, no severe phenotype: 10
- Mouse KO viable with mild phenotype: 7
- Mouse KO has concerning phenotype: 3
- Mouse KO lethal: 0
- No KO data, low pLI (<0.5): 5
- No KO data, high pLI (>0.9): 2
Known Adverse Events (0-5):
- No known safety signals: 5
- Mild, manageable ADRs: 3
- Serious ADRs reported: 1
- Black box warning or drug withdrawal: 0
---
Clinical Precedent (0-15 points)
- FDA-approved drug for SAME disease: 15
- FDA-approved drug for DIFFERENT disease: 12
- Phase 3 clinical trial: 10
- Phase 2 clinical trial: 7
- Phase 1 clinical trial: 5
- Preclinical compounds only: 3
- No clinical development: 0
Adjustment factors:
- Failed clinical program for safety: -3
- Drug withdrawal: -5
- Multiple approved drugs (validated class): +2
---
Validation Evidence (0-10 points)
Functional Studies (0-5):
- CRISPR KO shows disease-relevant phenotype: 5
- siRNA knockdown shows phenotype: 4
- Biochemical assay validates mechanism: 3
- Overexpression study only: 2
- No functional data: 0
Disease Models (0-5):
- Patient-derived xenograft (PDX) response: 5
- Genetically engineered mouse model: 4
- Cell line model: 3
- In silico model only: 1
- No model data: 0
---
Priority Tiers
| Score | Tier | Recommendation |
|---|---|---|
| 80-100 | Tier 1 | Highly validated - proceed with confidence |
| 60-79 | Tier 2 | Good target - needs focused validation |
| 40-59 | Tier 3 | Moderate risk - significant validation needed |
| 0-39 | Tier 4 | High risk - consider alternatives |
---
Evidence Grading System
| Tier | Symbol | Criteria | Examples |
|---|---|---|---|
| T1 | [T1] | Direct mechanistic, human clinical proof | FDA-approved drug, crystal structure with mechanism, patient mutation |
| T2 | [T2] | Functional studies, model organism | siRNA phenotype, mouse KO, biochemical assay, CRISPR screen |
| T3 | [T3] | Association, screen hits, computational | GWAS hit, DepMap essentiality, expression correlation |
| T4 | [T4] | Mention, review, text-mined, predicted | Review article, database annotation, AlphaFold prediction |
---
Score Calculation (Pseudocode)
def calculate_validation_score(phase_results):
score = {
'disease_genetic': 0, # 0-10
'disease_literature': 0, # 0-10
'disease_pathway': 0, # 0-10
'drug_structural': 0, # 0-10
'drug_chemical': 0, # 0-10
'drug_class': 0, # 0-5
'safety_expression': 0, # 0-5
'safety_genetic': 0, # 0-10
'safety_adverse': 0, # 0-5
'clinical': 0, # 0-15
'validation_functional': 0, # 0-5
'validation_models': 0, # 0-5
}
total = sum(score.values())
if total >= 80:
tier, rec = "Tier 1", "GO - Highly validated target"
elif total >= 60:
tier, rec = "Tier 2", "CONDITIONAL GO - Needs focused validation"
elif total >= 40:
tier, rec = "Tier 3", "CAUTION - Significant validation needed"
else:
tier, rec = "Tier 4", "NO-GO - Consider alternatives"
return total, tier, rec, score---
Example Scores
EGFR for NSCLC (well-validated target)
- Disease Association: ~28/30 (strong genetic + pathway + literature)
- Druggability: ~24/25 (kinase, many structures, abundant compounds)
- Safety: ~14/20 (widely expressed but manageable toxicity)
- Clinical Precedent: 15/15 (multiple approved drugs)
- Validation Evidence: ~9/10 (extensive functional data)
- Total: ~90/100 = Tier 1
Novel understudied kinase
- Disease Association: ~8/30 (limited GWAS, few publications)
- Druggability: ~15/25 (kinase family bonus, AlphaFold structure)
- Safety: ~12/20 (limited data, unknown KO phenotype)
- Clinical Precedent: 0/15 (no clinical development)
- Validation Evidence: ~2/10 (minimal functional data)
- Total: ~37/100 = Tier 4
#!/usr/bin/env python3
"""
Comprehensive Test Suite for Drug Target Validation Skill
Tests all 10 phases of the validation pipeline with real targets:
- EGFR (kinase, well-validated, many drugs)
- PCSK9 (enzyme, antibody target)
- KRAS (oncogene, historically undruggable)
- BTK (kinase, autoimmune + oncology)
- PD-1/PDCD1 (immune checkpoint, biologics target)
Each test verifies:
1. Tool exists and is callable
2. Parameters match documented spec
3. Response contains expected data fields
4. Data is non-empty for well-known targets
"""
import sys
import time
import traceback
# Test tracking
RESULTS = []
TOTAL = 0
PASSED = 0
FAILED = 0
SKIPPED = 0
def record_result(test_name, status, details="", duration=0):
"""Record a test result."""
global TOTAL, PASSED, FAILED, SKIPPED
TOTAL += 1
if status == "PASS":
PASSED += 1
icon = "PASS"
elif status == "FAIL":
FAILED += 1
icon = "FAIL"
else:
SKIPPED += 1
icon = "SKIP"
RESULTS.append({
"test": test_name,
"status": icon,
"details": details,
"duration": duration
})
print(f" [{icon}] {test_name} ({duration:.1f}s) {details}")
def run_test(test_name, test_func):
"""Run a test function with timing and error handling."""
start = time.time()
try:
test_func()
duration = time.time() - start
record_result(test_name, "PASS", duration=duration)
except AssertionError as e:
duration = time.time() - start
record_result(test_name, "FAIL", str(e), duration=duration)
except Exception as e:
duration = time.time() - start
record_result(test_name, "FAIL", f"Exception: {type(e).__name__}: {str(e)[:200]}", duration=duration)
# ============================================================
# Setup
# ============================================================
print("=" * 70)
print("Drug Target Validation Skill - Comprehensive Test Suite")
print("=" * 70)
print()
print("Loading ToolUniverse...")
from tooluniverse import ToolUniverse
tu = ToolUniverse()
tu.load_tools()
print(f"Tools loaded: {len(tu.all_tool_dict)}")
print()
# ============================================================
# Phase 0: Target Disambiguation Tests
# ============================================================
print("=" * 70)
print("PHASE 0: Target Disambiguation & ID Resolution")
print("=" * 70)
def test_mygene_query():
result = tu.tools.MyGene_query_genes(
query="EGFR", species="human",
fields="symbol,name,ensembl.gene,uniprot.Swiss-Prot,entrezgene"
)
assert result is not None, "MyGene returned None"
# Result can be dict or list
if isinstance(result, list):
assert len(result) > 0, "MyGene returned empty list"
hit = result[0]
else:
hit = result
if 'hits' in result:
assert len(result['hits']) > 0, "No hits"
hit = result['hits'][0]
# Should contain gene info
assert 'symbol' in hit or 'name' in hit or '_id' in hit, f"Missing gene fields. Keys: {list(hit.keys())[:10]}"
def test_ensembl_lookup():
result = tu.tools.ensembl_lookup_gene(gene_id="ENSG00000146648", species="homo_sapiens")
assert result is not None, "Ensembl returned None"
if isinstance(result, dict):
# Ensembl tools wrap response in {status, data, url, content_type}
data = result.get('data', result)
assert data is not None, "Ensembl returned None data"
if isinstance(data, dict):
assert 'display_name' in data or 'id' in data or 'version' in data or len(data) > 0, \
f"Missing expected fields in data. Keys: {list(data.keys())[:10]}"
# Verify the wrapper fields
if 'status' in result:
assert 'data' in result, f"Ensembl wrapper missing 'data' key. Keys: {list(result.keys())}"
def test_uniprot_entry():
result = tu.tools.UniProt_get_entry_by_accession(accession="P00533")
assert result is not None, "UniProt returned None"
if isinstance(result, dict):
assert len(result) > 0, "UniProt returned empty dict"
def test_uniprot_function():
result = tu.tools.UniProt_get_function_by_accession(accession="P00533")
assert result is not None, "UniProt function returned None"
# Returns list of strings per MEMORY.md
if isinstance(result, list):
assert len(result) > 0, "UniProt function returned empty list"
elif isinstance(result, dict):
assert len(result) > 0, "UniProt function returned empty dict"
def test_uniprot_subcellular():
result = tu.tools.UniProt_get_subcellular_location_by_accession(accession="P00533")
assert result is not None, "UniProt subcellular returned None"
def test_ensembl_xrefs():
result = tu.tools.ensembl_get_xrefs(id="ENSG00000146648")
assert result is not None, "Ensembl xrefs returned None"
if isinstance(result, list):
assert len(result) > 0, "Ensembl xrefs returned empty list"
def test_opentargets_target_by_name():
result = tu.tools.OpenTargets_get_target_id_description_by_name(targetName="EGFR")
assert result is not None, "OT target by name returned None"
def test_chembl_search_targets():
result = tu.tools.ChEMBL_search_targets(
pref_name__contains="EGFR", organism="Homo sapiens", limit=5
)
assert result is not None, "ChEMBL search targets returned None"
def test_uniprot_alt_names():
result = tu.tools.UniProt_get_alternative_names_by_accession(accession="P00533")
assert result is not None, "UniProt alt names returned None"
run_test("MyGene query (EGFR)", test_mygene_query)
run_test("Ensembl lookup gene (ENSG00000146648)", test_ensembl_lookup)
run_test("UniProt entry (P00533)", test_uniprot_entry)
run_test("UniProt function (P00533)", test_uniprot_function)
run_test("UniProt subcellular location (P00533)", test_uniprot_subcellular)
run_test("Ensembl xrefs (ENSG00000146648)", test_ensembl_xrefs)
run_test("OpenTargets target by name (EGFR)", test_opentargets_target_by_name)
run_test("ChEMBL search targets (EGFR)", test_chembl_search_targets)
run_test("UniProt alternative names (P00533)", test_uniprot_alt_names)
# ============================================================
# Phase 1: Disease Association Tests
# ============================================================
print()
print("=" * 70)
print("PHASE 1: Disease Association Evidence")
print("=" * 70)
def test_ot_diseases():
result = tu.tools.OpenTargets_get_diseases_phenotypes_by_target_ensembl(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT diseases returned None"
def test_ot_target_disease_evidence():
result = tu.tools.OpenTargets_target_disease_evidence(
efoId="EFO_0003060", ensemblId="ENSG00000146648"
)
assert result is not None, "OT target-disease evidence returned None"
def test_gwas_snps_for_gene():
result = tu.tools.gwas_get_snps_for_gene(mapped_gene="EGFR", size=20)
assert result is not None, "GWAS SNPs returned None"
def test_gnomad_constraints():
result = tu.tools.gnomad_get_gene_constraints(gene_symbol="EGFR")
assert result is not None, "gnomAD constraints returned None"
def test_pubmed_search():
result = tu.tools.PubMed_search_articles(
query='"EGFR" AND "lung cancer" AND (target OR therapeutic)',
limit=10
)
assert result is not None, "PubMed returned None"
# Returns plain list per MEMORY.md
if isinstance(result, list):
assert len(result) > 0, "PubMed returned empty list for EGFR+lung cancer"
def test_ot_publications():
result = tu.tools.OpenTargets_get_publications_by_target_ensemblID(
entityId="ENSG00000146648"
)
assert result is not None, "OT publications returned None"
def test_ot_evidence_by_datasource():
result = tu.tools.OpenTargets_get_evidence_by_datasource(
efoId="EFO_0003060", ensemblId="ENSG00000146648",
datasourceIds=["ot_genetics_portal", "eva"],
size=20
)
assert result is not None, "OT evidence by datasource returned None"
run_test("OT disease associations (EGFR)", test_ot_diseases)
run_test("OT target-disease evidence (EGFR+NSCLC)", test_ot_target_disease_evidence)
run_test("GWAS SNPs for gene (EGFR)", test_gwas_snps_for_gene)
run_test("gnomAD constraints (EGFR)", test_gnomad_constraints)
run_test("PubMed search (EGFR+lung cancer)", test_pubmed_search)
run_test("OT publications (EGFR)", test_ot_publications)
run_test("OT evidence by datasource (EGFR+NSCLC)", test_ot_evidence_by_datasource)
# ============================================================
# Phase 2: Druggability Assessment Tests
# ============================================================
print()
print("=" * 70)
print("PHASE 2: Druggability Assessment")
print("=" * 70)
def test_ot_tractability():
result = tu.tools.OpenTargets_get_target_tractability_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT tractability returned None"
def test_ot_target_classes():
result = tu.tools.OpenTargets_get_target_classes_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT target classes returned None"
def test_pharos_target():
result = tu.tools.Pharos_get_target(gene="EGFR")
assert result is not None, "Pharos returned None"
def test_dgidb_druggability():
result = tu.tools.DGIdb_get_gene_druggability(genes=["EGFR"])
assert result is not None, "DGIdb druggability returned None"
def test_alphafold_prediction():
result = tu.tools.alphafold_get_prediction(qualifier="P00533")
assert result is not None, "AlphaFold prediction returned None"
def test_alphafold_summary():
result = tu.tools.alphafold_get_summary(qualifier="P00533")
assert result is not None, "AlphaFold summary returned None"
def test_ot_chemical_probes():
result = tu.tools.OpenTargets_get_chemical_probes_by_target_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT chemical probes returned None"
def test_ot_teps():
result = tu.tools.OpenTargets_get_target_enabling_packages_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT TEPs returned None"
def test_proteinsplus_binding_sites():
result = tu.tools.ProteinsPlus_predict_binding_sites(pdb_id="1M17")
assert result is not None, "ProteinsPlus binding sites returned None"
run_test("OT tractability (EGFR)", test_ot_tractability)
run_test("OT target classes (EGFR)", test_ot_target_classes)
run_test("Pharos target (EGFR)", test_pharos_target)
run_test("DGIdb druggability (EGFR)", test_dgidb_druggability)
run_test("AlphaFold prediction (P00533)", test_alphafold_prediction)
run_test("AlphaFold summary (P00533)", test_alphafold_summary)
run_test("OT chemical probes (EGFR)", test_ot_chemical_probes)
run_test("OT enabling packages (EGFR)", test_ot_teps)
run_test("ProteinsPlus binding sites (1M17)", test_proteinsplus_binding_sites)
# ============================================================
# Phase 3: Chemical Matter Tests
# ============================================================
print()
print("=" * 70)
print("PHASE 3: Known Modulators & Chemical Matter")
print("=" * 70)
def test_chembl_target_activities():
result = tu.tools.ChEMBL_get_target_activities(
target_chembl_id__exact="CHEMBL203", limit=20
)
assert result is not None, "ChEMBL activities returned None"
def test_bindingdb_ligands():
result = tu.tools.BindingDB_get_ligands_by_uniprot(
uniprot="P00533", affinity_cutoff=10000
)
assert result is not None, "BindingDB returned None"
def test_pubchem_assays_by_gene():
result = tu.tools.PubChem_search_assays_by_target_gene(gene_symbol="EGFR")
assert result is not None, "PubChem assays returned None"
def test_ot_associated_drugs():
result = tu.tools.OpenTargets_get_associated_drugs_by_target_ensemblID(
ensemblId="ENSG00000146648", size=25
)
assert result is not None, "OT associated drugs returned None"
def test_chembl_search_mechanisms():
result = tu.tools.ChEMBL_search_mechanisms(
target_chembl_id="CHEMBL203", limit=20
)
assert result is not None, "ChEMBL mechanisms returned None"
def test_dgidb_gene_info():
result = tu.tools.DGIdb_get_gene_info(genes=["EGFR"])
assert result is not None, "DGIdb gene info returned None"
run_test("ChEMBL target activities (CHEMBL203)", test_chembl_target_activities)
run_test("BindingDB ligands (P00533)", test_bindingdb_ligands)
run_test("PubChem assays by gene (EGFR)", test_pubchem_assays_by_gene)
run_test("OT associated drugs (EGFR)", test_ot_associated_drugs)
run_test("ChEMBL drug mechanisms (CHEMBL203)", test_chembl_search_mechanisms)
run_test("DGIdb gene info (EGFR)", test_dgidb_gene_info)
# ============================================================
# Phase 4: Clinical Precedent Tests
# ============================================================
print()
print("=" * 70)
print("PHASE 4: Clinical Precedent")
print("=" * 70)
def test_fda_moa():
result = tu.tools.FDA_get_mechanism_of_action_by_drug_name(drug_name="erlotinib")
assert result is not None, "FDA MOA returned None"
def test_fda_indications():
result = tu.tools.FDA_get_indications_by_drug_name(drug_name="erlotinib")
assert result is not None, "FDA indications returned None"
def test_clinical_trials():
result = tu.tools.search_clinical_trials(
query_term="EGFR inhibitor",
condition="lung cancer",
pageSize=10
)
assert result is not None, "Clinical trials returned None"
def test_drugbank_targets():
result = tu.tools.drugbank_get_targets_by_drug_name_or_drugbank_id(
query="erlotinib", case_sensitive=False, exact_match=False, limit=10
)
assert result is not None, "DrugBank targets returned None"
def test_ot_drug_warnings():
result = tu.tools.OpenTargets_get_drug_warnings_by_chemblId(chemblId="CHEMBL553")
assert result is not None, "OT drug warnings returned None"
def test_ot_drug_adverse_events():
result = tu.tools.OpenTargets_get_drug_adverse_events_by_chemblId(chemblId="CHEMBL553")
assert result is not None, "OT drug adverse events returned None"
run_test("FDA mechanism of action (erlotinib)", test_fda_moa)
run_test("FDA indications (erlotinib)", test_fda_indications)
run_test("Clinical trials (EGFR+lung cancer)", test_clinical_trials)
run_test("DrugBank targets (erlotinib)", test_drugbank_targets)
run_test("OT drug warnings (CHEMBL553)", test_ot_drug_warnings)
run_test("OT drug adverse events (CHEMBL553)", test_ot_drug_adverse_events)
# ============================================================
# Phase 5: Safety Tests
# ============================================================
print()
print("=" * 70)
print("PHASE 5: Safety & Toxicity")
print("=" * 70)
def test_ot_safety():
result = tu.tools.OpenTargets_get_target_safety_profile_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT safety profile returned None"
def test_gtex_expression():
# Try versioned ID first
result = tu.tools.GTEx_get_median_gene_expression(
operation="median", gencode_id="ENSG00000146648"
)
if result is None or (isinstance(result, dict) and result.get('data') == []):
# Try versioned
result = tu.tools.GTEx_get_median_gene_expression(
operation="median", gencode_id="ENSG00000146648.18"
)
assert result is not None, "GTEx expression returned None for both versioned and unversioned"
def test_hpa_search():
result = tu.tools.HPA_search_genes_by_query(search_query="EGFR")
assert result is not None, "HPA search returned None"
def test_hpa_comprehensive():
result = tu.tools.HPA_get_comprehensive_gene_details_by_ensembl_id(
ensembl_id="ENSG00000146648"
)
assert result is not None, "HPA comprehensive returned None"
def test_ot_mouse_models():
result = tu.tools.OpenTargets_get_biological_mouse_models_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT mouse models returned None"
def test_ot_constraint():
result = tu.tools.OpenTargets_get_target_constraint_info_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT constraint returned None"
def test_fda_adverse_reactions():
result = tu.tools.FDA_get_adverse_reactions_by_drug_name(drug_name="erlotinib")
assert result is not None, "FDA adverse reactions returned None"
def test_fda_boxed_warning():
result = tu.tools.FDA_get_boxed_warning_info_by_drug_name(drug_name="erlotinib")
# May return empty for drugs without boxed warning - that's OK
assert result is not None, "FDA boxed warning returned None"
def test_ot_homologues():
result = tu.tools.OpenTargets_get_target_homologues_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT homologues returned None"
run_test("OT safety profile (EGFR)", test_ot_safety)
run_test("GTEx expression (EGFR)", test_gtex_expression)
run_test("HPA search (EGFR)", test_hpa_search)
run_test("HPA comprehensive (EGFR)", test_hpa_comprehensive)
run_test("OT mouse models (EGFR)", test_ot_mouse_models)
run_test("OT constraint (EGFR)", test_ot_constraint)
run_test("FDA adverse reactions (erlotinib)", test_fda_adverse_reactions)
run_test("FDA boxed warning (erlotinib)", test_fda_boxed_warning)
run_test("OT homologues (EGFR)", test_ot_homologues)
# ============================================================
# Phase 6: Pathway Context Tests
# ============================================================
print()
print("=" * 70)
print("PHASE 6: Pathway Context & Network Analysis")
print("=" * 70)
def test_reactome_pathways():
result = tu.tools.Reactome_map_uniprot_to_pathways(id="P00533")
assert result is not None, "Reactome pathways returned None"
if isinstance(result, list):
assert len(result) > 0, "Reactome returned empty pathway list for EGFR"
def test_string_interactions():
result = tu.tools.STRING_get_protein_interactions(
protein_ids=["EGFR"], species=9606, confidence_score=0.7
)
assert result is not None, "STRING PPI returned None"
def test_intact_interactions():
result = tu.tools.intact_get_interactions(identifier="P00533")
assert result is not None, "IntAct returned None"
def test_ot_interactions():
result = tu.tools.OpenTargets_get_target_interactions_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT interactions returned None"
def test_ot_go_terms():
result = tu.tools.OpenTargets_get_target_gene_ontology_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert result is not None, "OT GO terms returned None"
def test_go_annotations():
result = tu.tools.GO_get_annotations_for_gene(gene_id="EGFR")
assert result is not None, "GO annotations returned None"
def test_string_enrichment():
result = tu.tools.STRING_functional_enrichment(
protein_ids=["EGFR"], species=9606
)
assert result is not None, "STRING enrichment returned None"
run_test("Reactome pathways (P00533)", test_reactome_pathways)
run_test("STRING PPI (EGFR)", test_string_interactions)
run_test("IntAct interactions (P00533)", test_intact_interactions)
run_test("OT interactions (EGFR)", test_ot_interactions)
run_test("OT GO terms (EGFR)", test_ot_go_terms)
run_test("GO annotations (EGFR)", test_go_annotations)
run_test("STRING functional enrichment (EGFR)", test_string_enrichment)
# ============================================================
# Phase 7: Validation Evidence Tests
# ============================================================
print()
print("=" * 70)
print("PHASE 7: Validation Evidence")
print("=" * 70)
def test_depmap_dependencies():
result = tu.tools.DepMap_get_gene_dependencies(gene_symbol="EGFR")
assert result is not None, "DepMap returned None"
def test_pubmed_validation_papers():
result = tu.tools.PubMed_search_articles(
query='"EGFR" AND (CRISPR OR siRNA OR knockdown) AND "lung cancer"',
limit=10
)
assert result is not None, "PubMed validation papers returned None"
def test_ctd_gene_diseases():
result = tu.tools.CTD_get_gene_diseases(input_terms="EGFR")
assert result is not None, "CTD gene diseases returned None"
run_test("DepMap gene dependencies (EGFR)", test_depmap_dependencies)
run_test("PubMed validation papers (EGFR)", test_pubmed_validation_papers)
run_test("CTD gene diseases (EGFR)", test_ctd_gene_diseases)
# ============================================================
# Phase 8: Structural Insights Tests
# ============================================================
print()
print("=" * 70)
print("PHASE 8: Structural Insights")
print("=" * 70)
def test_pdb_metadata():
result = tu.tools.get_protein_metadata_by_pdb_id(pdb_id="1M17")
assert result is not None, "PDB metadata returned None"
def test_pdbe_quality():
result = tu.tools.pdbe_get_entry_quality(pdb_id="1M17")
assert result is not None, "PDBe quality returned None"
def test_pdbe_summary():
result = tu.tools.pdbe_get_entry_summary(pdb_id="1M17")
assert result is not None, "PDBe summary returned None"
def test_pdbe_experiment():
result = tu.tools.pdbe_get_entry_experiment(pdb_id="1M17")
assert result is not None, "PDBe experiment returned None"
def test_interpro_domains():
result = tu.tools.InterPro_get_protein_domains(uniprot_accession="P00533")
assert result is not None, "InterPro domains returned None"
run_test("PDB metadata (1M17)", test_pdb_metadata)
run_test("PDBe quality (1M17)", test_pdbe_quality)
run_test("PDBe summary (1M17)", test_pdbe_summary)
run_test("PDBe experiment (1M17)", test_pdbe_experiment)
run_test("InterPro domains (P00533)", test_interpro_domains)
# ============================================================
# Phase 9: Literature Tests
# ============================================================
print()
print("=" * 70)
print("PHASE 9: Literature Landscape")
print("=" * 70)
def test_pubmed_drug_target():
result = tu.tools.PubMed_search_articles(
query='"EGFR" AND (drug target OR therapeutic target)',
limit=10
)
assert result is not None, "PubMed drug target papers returned None"
if isinstance(result, list):
assert len(result) > 0, "PubMed returned empty for EGFR drug target"
def test_europepmc_search():
result = tu.tools.EuropePMC_search_articles(
query='"EGFR" AND drug target',
limit=10
)
assert result is not None, "EuropePMC returned None"
def test_openalex_search():
result = tu.tools.openalex_search_works(
query="EGFR drug target validation",
limit=10
)
assert result is not None, "OpenAlex returned None"
run_test("PubMed drug target papers (EGFR)", test_pubmed_drug_target)
run_test("EuropePMC search (EGFR)", test_europepmc_search)
run_test("OpenAlex search (EGFR)", test_openalex_search)
# ============================================================
# Cross-Target Tests (Different Target Classes)
# ============================================================
print()
print("=" * 70)
print("CROSS-TARGET VALIDATION (Different Target Classes)")
print("=" * 70)
def test_kras_disambiguation():
"""KRAS - historically undruggable oncogene"""
result = tu.tools.MyGene_query_genes(
query="KRAS", species="human",
fields="symbol,name,ensembl.gene,uniprot.Swiss-Prot"
)
assert result is not None, "MyGene KRAS returned None"
def test_kras_tractability():
result = tu.tools.OpenTargets_get_target_tractability_by_ensemblID(
ensemblId="ENSG00000133703"
)
assert result is not None, "OT KRAS tractability returned None"
def test_btk_disambiguation():
"""BTK - kinase target for autoimmune + oncology"""
result = tu.tools.MyGene_query_genes(
query="BTK", species="human",
fields="symbol,name,ensembl.gene,uniprot.Swiss-Prot"
)
assert result is not None, "MyGene BTK returned None"
def test_btk_drugs():
result = tu.tools.OpenTargets_get_associated_drugs_by_target_ensemblID(
ensemblId="ENSG00000010671", size=20
)
assert result is not None, "OT BTK drugs returned None"
def test_pcsk9_disambiguation():
"""PCSK9 - antibody target for hypercholesterolemia"""
result = tu.tools.MyGene_query_genes(
query="PCSK9", species="human",
fields="symbol,name,ensembl.gene,uniprot.Swiss-Prot"
)
assert result is not None, "MyGene PCSK9 returned None"
def test_pcsk9_safety():
result = tu.tools.OpenTargets_get_target_safety_profile_by_ensemblID(
ensemblId="ENSG00000169174"
)
assert result is not None, "OT PCSK9 safety returned None"
def test_pdcd1_disambiguation():
"""PD-1 (PDCD1) - immune checkpoint"""
result = tu.tools.MyGene_query_genes(
query="PDCD1", species="human",
fields="symbol,name,ensembl.gene,uniprot.Swiss-Prot"
)
assert result is not None, "MyGene PDCD1 returned None"
def test_pdcd1_clinical_trials():
result = tu.tools.search_clinical_trials(
query_term="PD-1 inhibitor",
condition="cancer",
pageSize=10
)
assert result is not None, "Clinical trials PD-1 returned None"
run_test("KRAS disambiguation", test_kras_disambiguation)
run_test("KRAS tractability", test_kras_tractability)
run_test("BTK disambiguation", test_btk_disambiguation)
run_test("BTK associated drugs", test_btk_drugs)
run_test("PCSK9 disambiguation", test_pcsk9_disambiguation)
run_test("PCSK9 safety profile", test_pcsk9_safety)
run_test("PD-1 (PDCD1) disambiguation", test_pdcd1_disambiguation)
run_test("PD-1 clinical trials", test_pdcd1_clinical_trials)
# ============================================================
# Integration Tests: Multi-Step Workflows
# ============================================================
print()
print("=" * 70)
print("INTEGRATION TESTS: Multi-Step Workflows")
print("=" * 70)
def test_full_disambiguation_chain():
"""Test complete ID resolution chain for EGFR"""
# Step 1: MyGene
mg = tu.tools.MyGene_query_genes(
query="EGFR", species="human",
fields="symbol,name,ensembl.gene,uniprot.Swiss-Prot,entrezgene"
)
assert mg is not None, "Step 1 (MyGene) failed"
# Step 2: Ensembl lookup
ensembl = tu.tools.ensembl_lookup_gene(
gene_id="ENSG00000146648", species="homo_sapiens"
)
assert ensembl is not None, "Step 2 (Ensembl) failed"
# Step 3: UniProt
uniprot = tu.tools.UniProt_get_entry_by_accession(accession="P00533")
assert uniprot is not None, "Step 3 (UniProt) failed"
# Step 4: OpenTargets
ot = tu.tools.OpenTargets_get_target_id_description_by_name(targetName="EGFR")
assert ot is not None, "Step 4 (OpenTargets) failed"
def test_druggability_chain():
"""Test multi-tool druggability assessment for BTK"""
# Tractability
tract = tu.tools.OpenTargets_get_target_tractability_by_ensemblID(
ensemblId="ENSG00000010671"
)
assert tract is not None, "Tractability failed"
# Pharos
pharos = tu.tools.Pharos_get_target(gene="BTK")
assert pharos is not None, "Pharos failed"
# DGIdb
dgidb = tu.tools.DGIdb_get_gene_druggability(genes=["BTK"])
assert dgidb is not None, "DGIdb failed"
# ChEMBL activities
chembl = tu.tools.ChEMBL_get_target_activities(
target_chembl_id__exact="CHEMBL5432", limit=10
)
assert chembl is not None, "ChEMBL activities failed"
def test_safety_chain():
"""Test multi-tool safety assessment for PCSK9"""
# OT safety
safety = tu.tools.OpenTargets_get_target_safety_profile_by_ensemblID(
ensemblId="ENSG00000169174"
)
assert safety is not None, "OT safety failed"
# Mouse models
mouse = tu.tools.OpenTargets_get_biological_mouse_models_by_ensemblID(
ensemblId="ENSG00000169174"
)
assert mouse is not None, "Mouse models failed"
# gnomAD
gnomad = tu.tools.gnomad_get_gene_constraints(gene_symbol="PCSK9")
assert gnomad is not None, "gnomAD failed"
def test_pathway_chain():
"""Test pathway analysis chain for EGFR"""
# Reactome
pathways = tu.tools.Reactome_map_uniprot_to_pathways(id="P00533")
assert pathways is not None, "Reactome failed"
# STRING
string_ppi = tu.tools.STRING_get_protein_interactions(
protein_ids=["EGFR"], species=9606, confidence_score=0.7
)
assert string_ppi is not None, "STRING failed"
# GO
go = tu.tools.OpenTargets_get_target_gene_ontology_by_ensemblID(
ensemblId="ENSG00000146648"
)
assert go is not None, "OT GO failed"
run_test("Full disambiguation chain (EGFR)", test_full_disambiguation_chain)
run_test("Druggability assessment chain (BTK)", test_druggability_chain)
run_test("Safety assessment chain (PCSK9)", test_safety_chain)
run_test("Pathway analysis chain (EGFR)", test_pathway_chain)
# ============================================================
# Report Generation
# ============================================================
print()
print("=" * 70)
print("TEST RESULTS SUMMARY")
print("=" * 70)
print()
print(f"Total Tests: {TOTAL}")
print(f"Passed: {PASSED}")
print(f"Failed: {FAILED}")
print(f"Skipped: {SKIPPED}")
print(f"Pass Rate: {PASSED/TOTAL*100:.1f}%" if TOTAL > 0 else "N/A")
print()
if FAILED > 0:
print("FAILED TESTS:")
print("-" * 50)
for r in RESULTS:
if r['status'] == 'FAIL':
print(f" {r['test']}: {r['details']}")
print()
# Calculate total test duration
total_duration = sum(r['duration'] for r in RESULTS)
print(f"Total Duration: {total_duration:.1f}s")
# Exit with appropriate code
sys.exit(0 if FAILED == 0 else 1)
Drug Target Validation - Tool Reference
Verified tool parameters, known corrections, fallback chains, and modality-specific tool guidance.
---
Known Parameter Corrections
| Tool | WRONG Parameter | CORRECT Parameter |
|---|---|---|
ensembl_lookup_gene | id | gene_id (+ species="homo_sapiens" REQUIRED) |
Reactome_map_uniprot_to_pathways | uniprot_id | id |
ensembl_get_xrefs | gene_id | id |
GTEx_get_median_gene_expression | gencode_id only | gencode_id + operation="median" |
OpenTargets_* | ensemblID (uppercase) | ensemblId (camelCase) |
OpenTargets_get_publications_* | ensemblId | entityId |
OpenTargets_get_associated_drugs_by_target_ensemblID | ensemblId only | ensemblId + size (REQUIRED) |
MyGene_query_genes | q | query |
PubMed_search_articles | returns {articles: [...]} | returns plain list of dicts |
UniProt_get_function_by_accession | returns dict | returns list of strings |
HPA_get_rna_expression_by_source | ensembl_id | gene_name + source_type + source_name (ALL required) |
alphafold_get_prediction | uniprot_accession | qualifier |
drugbank_get_safety_* | simple params | query, case_sensitive, exact_match, limit (ALL required) |
---
Verified Tool Parameters (Quick Reference)
| Tool | Parameters | Notes |
|---|---|---|
ensembl_lookup_gene | gene_id, species | species="homo_sapiens" REQUIRED; response wrapped in {status, data, url, content_type} |
OpenTargets_get_*_by_ensemblID | ensemblId | camelCase, NOT ensemblID |
OpenTargets_get_publications_by_target_ensemblID | entityId | NOT ensemblId |
OpenTargets_get_associated_drugs_by_target_ensemblID | ensemblId, size | size is REQUIRED |
OpenTargets_target_disease_evidence | efoId, ensemblId | Both REQUIRED |
GTEx_get_median_gene_expression | operation, gencode_id | operation="median" REQUIRED |
HPA_get_rna_expression_by_source | gene_name, source_type, source_name | ALL 3 required |
PubMed_search_articles | query, limit | Returns plain list, NOT {articles:[]} |
UniProt_get_function_by_accession | accession | Returns list of strings |
alphafold_get_prediction | qualifier | NOT uniprot_accession |
drugbank_get_safety_* | query, case_sensitive, exact_match, limit | ALL required |
STRING_get_protein_interactions | protein_ids, species | protein_ids is array; species=9606 |
Reactome_map_uniprot_to_pathways | id | NOT uniprot_id |
ChEMBL_get_target_activities | target_chembl_id__exact | Note double underscore |
search_clinical_trials | query_term | REQUIRED parameter |
gnomad_get_gene_constraints | gene_symbol | NOT gene_id |
DepMap_get_gene_dependencies | gene_symbol | NOT gene_id |
BindingDB_get_ligands_by_uniprot | uniprot, affinity_cutoff | affinity in nM |
Pharos_get_target | gene or uniprot | Both optional but need one |
---
Fallback Chains
When a primary tool fails, use these fallbacks in order:
| Primary Tool | Fallback 1 | Fallback 2 | If All Fail |
|---|---|---|---|
OpenTargets_get_diseases_phenotypes_* | CTD_get_gene_diseases | PubMed search | Note in report |
GTEx_get_median_gene_expression (versioned) | GTEx (unversioned) | HPA_search_genes_by_query | Document gap |
ChEMBL_get_target_activities | BindingDB_get_ligands_by_uniprot | DGIdb_get_gene_info | Note in report |
gnomad_get_gene_constraints | OpenTargets_get_target_constraint_info_* | - | Note as unavailable |
Reactome_map_uniprot_to_pathways | OpenTargets_get_target_gene_ontology_* | - | Use GO only |
STRING_get_protein_interactions | intact_get_interactions | OpenTargets interactions | Note in report |
ProteinsPlus_predict_binding_sites | alphafold_get_prediction | Literature pockets | Note as limited |
---
Modality-Specific Tool Focus
Small Molecule
- Emphasize: binding pockets, ChEMBL compounds, Lipinski compliance
- Key tractability: OpenTargets SM tractability bucket
- Structure: co-crystal structures with small molecule ligands
- Chemical matter: IC50/Ki/Kd data from ChEMBL/BindingDB
Antibody
- Emphasize: extracellular domains, cell surface expression, glycosylation
- Key tractability: OpenTargets AB tractability bucket
- Structure: ectodomain structures, epitope mapping
- Expression: surface expression in disease vs normal tissue
PROTAC
- Emphasize: intracellular targets, surface lysines, E3 ligase proximity
- Key tractability: OpenTargets PROTAC tractability
- Structure: full-length structures for linker design
- Chemical matter: known binders + E3 ligase binders
---
Phase-by-Phase Tool Lists
Phase 0: Target Disambiguation
MyGene_query_genes- initial ID resolutionUniProt_get_entry_by_accession- protein detailsensembl_lookup_gene- Ensembl ID + versionensembl_get_xrefs- cross-referencesOpenTargets_get_target_id_description_by_name- OT target infoChEMBL_search_targets- ChEMBL target IDUniProt_get_function_by_accession- function summaryUniProt_get_alternative_names_by_accession- collision detection
Phase 1: Disease Association
OpenTargets_get_diseases_phenotypes_by_target_ensembl- disease associationsOpenTargets_get_disease_id_description_by_name- disease ID lookupOpenTargets_target_disease_evidence- detailed evidenceOpenTargets_get_evidence_by_datasource- evidence by sourcegwas_get_snps_for_gene- GWAS associationsgwas_search_studies- GWAS studiesgnomad_get_gene_constraints- genetic constraint (pLI, LOEUF)PubMed_search_articles- literature evidenceOpenTargets_get_publications_by_target_ensemblID- OT publications
Phase 2: Druggability
OpenTargets_get_target_tractability_by_ensemblID- tractabilityOpenTargets_get_target_classes_by_ensemblID- target classificationPharos_get_target- target development level (TDL)DGIdb_get_gene_druggability- druggability categoriesalphafold_get_prediction/alphafold_get_summary- structure predictionProteinsPlus_predict_binding_sites- pocket detectionOpenTargets_get_chemical_probes_by_target_ensemblID- chemical probesOpenTargets_get_target_enabling_packages_by_ensemblID- TEPs
Phase 3: Chemical Matter
ChEMBL_search_targets/ChEMBL_get_target_activities- bioactivityBindingDB_get_ligands_by_uniprot- binding dataPubChem_search_assays_by_target_gene- HTS assaysPubChem_get_assay_summary/PubChem_get_assay_active_compounds- assay detailsOpenTargets_get_associated_drugs_by_target_ensemblID- known drugsChEMBL_search_mechanisms- drug mechanismsDGIdb_get_gene_info- drug-gene interactions
Phase 4: Clinical Precedent
FDA_get_mechanism_of_action_by_drug_name- FDA MoAFDA_get_indications_by_drug_name- FDA indicationsdrugbank_get_targets_by_drug_name_or_drugbank_id- DrugBank targetsdrugbank_get_safety_by_drug_name_or_drugbank_id- DrugBank safetysearch_clinical_trials- active trialsOpenTargets_get_drug_warnings_by_chemblId- drug warningsOpenTargets_get_drug_adverse_events_by_chemblId- adverse events
Phase 5: Safety
OpenTargets_get_target_safety_profile_by_ensemblID- safety profileGTEx_get_median_gene_expression- tissue expressionHPA_search_genes_by_query/HPA_get_comprehensive_gene_details_by_ensembl_id- HPA expressionOpenTargets_get_biological_mouse_models_by_ensemblID- KO phenotypesgnomad_get_gene_constraints- essentiality proxyFDA_get_adverse_reactions_by_drug_name- ADRsFDA_get_warnings_and_cautions_by_drug_name/FDA_get_boxed_warning_info_by_drug_name- warningsOpenTargets_get_target_homologues_by_ensemblID- paralogs
Phase 6: Pathway Context
Reactome_map_uniprot_to_pathways/Reactome_get_pathway- pathwaysSTRING_get_protein_interactions- PPI networkintact_get_interactions- experimental PPIOpenTargets_get_target_interactions_by_ensemblID- OT interactionsOpenTargets_get_target_gene_ontology_by_ensemblID- GO termsGO_get_annotations_for_gene- GO annotationsSTRING_functional_enrichment- enrichment analysis
Phase 7: Validation Evidence
DepMap_get_gene_dependencies- essentiality screenPubMed_search_articles- functional studies literatureCTD_get_gene_diseases- gene-disease associations
Phase 8: Structural Insights
UniProt_get_entry_by_accession- PDB cross-referencesget_protein_metadata_by_pdb_id/pdbe_get_entry_summary- PDB metadatapdbe_get_entry_quality/pdbe_get_entry_experiment- quality metricsalphafold_get_prediction/alphafold_get_summary- AlphaFoldProteinsPlus_predict_binding_sites- binding pocketsProteinsPlus_generate_interaction_diagram- interaction diagramsInterPro_get_protein_domains/InterPro_get_domain_details- domains
Phase 9: Literature Deep Dive
PubMed_search_articles- collision-aware searchesEuropePMC_search_articles- broader coverageopenalex_search_works- citation metrics
Related skills
How it compares
Choose this skill when you need a scored GO/NO-GO dossier with medchem-ready evidence tables; use tooluniverse-target-research for biology overviews without quantitative target prioritization.
FAQ
What score does tooluniverse-drug-target-validation produce?
tooluniverse-drug-target-validation outputs a Target Validation Score from 0-100 across five dimensions—disease association (30), druggability (25), safety (20), clinical precedent (15), and validation evidence (10)—then maps the total to Tier 1-4 priority bands with a GO/NO-GO c
Which databases does the drug target validation skill query?
tooluniverse-drug-target-validation resolves identifiers via MyGene, Ensembl, UniProt, and ChEMBL, then queries OpenTargets, GWAS Catalog, gnomAD, GTEx, HPA, PubChem, BindingDB, FDA, DrugBank, and ClinicalTrials.gov through 60+ ToolUniverse tool calls.
What inputs does tooluniverse-drug-target-validation require?
tooluniverse-drug-target-validation requires a target gene symbol, protein name, or UniProt accession such as EGFR or P00533. Optional disease context (for example NSCLC) and modality (small molecule, antibody, PROTAC) tailor tractability and safety analysis.