This source did not publish a separate summary. Review SKILL.md before using the skill.
SKILL.md
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.
KEY PRINCIPLES:
Report-first approach - Create report file FIRST, then populate progressively
Target disambiguation FIRST - Resolve all identifiers before analysis
Evidence grading - Grade all evidence as T1 (experimental) to T4 (computational)
Disease-specific - Tailor analysis to disease context when provided
Modality-aware - Consider small molecule vs biologics tractability
Safety-first - Prominently flag safety concerns early
Quantitative scoring - Every dimension scored numerically (0-100 composite)
Negative results documented - "No data" is data; empty sections are failures
Source references - Every statement must cite tool/database
Phase 0: Target Disambiguation & ID Resolution (ALWAYS FIRST)
Objective: Resolve target to ALL needed identifiers before any analysis.
Resolution Strategy
# Step 1: Determine input type and get initial identifiers
# If gene symbol (e.g., "EGFR"):
mygene = tu.tools.MyGene_query_genes(query="EGFR", species="human", fields="symbol,name,ensembl.gene,uniprot.Swiss-Prot,entrezgene")
# Extract: ensembl_id, uniprot_id, entrez_id, symbol, name
# If UniProt ID (e.g., "P00533"):
uniprot = tu.tools.UniProt_get_entry_by_accession(accession="P00533")
# Extract: gene names, Ensembl xrefs, function
# Step 2: Resolve Ensembl ID and get versioned ID for GTEx
ensembl = tu.tools.ensembl_lookup_gene(gene_id=ensembl_id, species="homo_sapiens")
# CRITICAL: species parameter is REQUIRED
# CRITICAL: Response is wrapped in {status, data, url, content_type} - access via ensembl['data']
ensembl_data = ensembl.get('data', ensembl) if isinstance(ensembl, dict) else ensembl
# Extract: version for versioned_id (e.g., "ENSG00000146648.18")
# Step 3: Get Ensembl cross-references
xrefs = tu.tools.ensembl_get_xrefs(id=ensembl_id)
# Extract: HGNC, UniProt, EntrezGene mappings
# Step 4: Get OpenTargets target info
ot_target = tu.tools.OpenTargets_get_target_id_description_by_name(targetName="EGFR")
# Verify ensemblId matches
# Step 5: Get ChEMBL target ID
chembl_targets = tu.tools.ChEMBL_search_targets(pref_name__contains="EGFR", organism="Homo sapiens", limit=5)
# Extract: target_chembl_id for later use
# Step 6: Get UniProt function summary
function_info = tu.tools.UniProt_get_function_by_accession(accession=uniprot_id)
# Returns list of strings (NOT dict)
# Step 7: Get alternative names for collision detection
alt_names = tu.tools.UniProt_get_alternative_names_by_accession(accession=uniprot_id)
Phase 1: Disease Association Evidence (0-30 points)
Objective: Quantify the strength of target-disease association from genetic, literature, and pathway evidence.
1A. OpenTargets Disease Associations (Primary)
# Get ALL disease associations for target
diseases = tu.tools.OpenTargets_get_diseases_phenotypes_by_target_ensembl(ensemblId=ensembl_id)
# If specific disease provided, get detailed evidence
if disease_name:
disease_info = tu.tools.OpenTargets_get_disease_id_description_by_name(diseaseName=disease_name)
efo_id = disease_info.get('id') # e.g., "EFO_0003060"
evidence = tu.tools.OpenTargets_target_disease_evidence(
efoId=efo_id, ensemblId=ensembl_id
)
# Get evidence by data source for detailed breakdown
datasource_evidence = tu.tools.OpenTargets_get_evidence_by_datasource(
efoId=efo_id, ensemblId=ensembl_id,
datasourceIds=["ot_genetics_portal", "eva", "gene2phenotype", "genomics_england", "uniprot_literature"],
size=100
)
1B. GWAS Genetic Evidence
# GWAS associations for target gene
gwas_snps = tu.tools.gwas_get_snps_for_gene(mapped_gene=gene_symbol, size=50)
# If specific disease, search for trait-specific associations
if disease_name:
gwas_studies = tu.tools.gwas_search_studies(query=disease_name, size=20)
1C. Constraint Scores (gnomAD)
# Genetic constraint - intolerance to loss of function
constraints = tu.tools.gnomad_get_gene_constraints(gene_symbol=gene_symbol)
# Extract: pLI, LOEUF, missense_z, pRec
# High pLI (>0.9) = highly intolerant to LoF = likely essential
1D. Literature Evidence
# PubMed for target-disease association
articles = tu.tools.PubMed_search_articles(
query=f'"{gene_symbol}" AND "{disease_name}" AND (target OR therapeutic OR inhibitor)',
limit=50
)
# PubMed_search_articles returns a plain list of dicts
# OpenTargets publications
pubs = tu.tools.OpenTargets_get_publications_by_target_ensemblID(entityId=ensembl_id)
# HTS screening data
assays = tu.tools.PubChem_search_assays_by_target_gene(gene_symbol=gene_symbol)
# Get details for top assays
for aid in assay_ids[:5]:
summary = tu.tools.PubChem_get_assay_summary(aid=str(aid))
targets = tu.tools.PubChem_get_assay_targets(aid=str(aid))
actives = tu.tools.PubChem_get_assay_active_compounds(aid=str(aid))
3D. Known Drugs Targeting This Protein
# OpenTargets known drugs
drugs = tu.tools.OpenTargets_get_associated_drugs_by_target_ensemblID(
ensemblId=ensembl_id, size=25
)
# ChEMBL drug mechanisms
drug_mechanisms = tu.tools.ChEMBL_search_mechanisms(
target_chembl_id=target_chembl_id, limit=50
)
# Drug interaction databases
dgidb = tu.tools.DGIdb_get_gene_info(genes=[gene_symbol])
# Active clinical trials targeting this protein
trials = tu.tools.search_clinical_trials(
query_term=gene_symbol,
intervention=gene_symbol,
pageSize=50
)
# If specific disease context
if disease_name:
disease_trials = tu.tools.search_clinical_trials(
query_term=gene_symbol,
condition=disease_name,
pageSize=50
)
4C. Failed Programs (Learn from Failures)
# Drug warnings and withdrawals
for drug_chembl_id in known_drug_ids:
warnings = tu.tools.OpenTargets_get_drug_warnings_by_chemblId(chemblId=drug_chembl_id)
adverse = tu.tools.OpenTargets_get_drug_adverse_events_by_chemblId(chemblId=drug_chembl_id)
Scoring Logic - Clinical Precedent
Clinical Precedent (0-15):
- 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
# GTEx tissue expression (identifies essential organ expression)
gtex = tu.tools.GTEx_get_median_gene_expression(
operation="median", gencode_id=ensembl_versioned_id
)
# If empty, try unversioned ID
# HPA expression
# NOTE: HPA_get_rna_expression_by_source requires gene_name, source_type, source_name
hpa = tu.tools.HPA_search_genes_by_query(search_query=gene_symbol)
hpa_details = tu.tools.HPA_get_comprehensive_gene_details_by_ensembl_id(ensembl_id=ensembl_id)
# Check expression in safety-critical tissues
# Heart, liver, kidney, brain, bone marrow = high risk if target is expressed
5C. Knockout Phenotypes
# Mouse model phenotypes
mouse_models = tu.tools.OpenTargets_get_biological_mouse_models_by_ensemblID(ensemblId=ensembl_id)
# Genetic constraint (proxy for essentiality)
constraints = tu.tools.gnomad_get_gene_constraints(gene_symbol=gene_symbol)
# High pLI = essential gene = potential safety concern
5D. Known Adverse Events from Target Modulation
# For known drugs targeting this protein
for drug_name in known_drug_names:
fda_adr = tu.tools.FDA_get_adverse_reactions_by_drug_name(drug_name=drug_name)
fda_warnings = tu.tools.FDA_get_warnings_and_cautions_by_drug_name(drug_name=drug_name)
fda_boxed = tu.tools.FDA_get_boxed_warning_info_by_drug_name(drug_name=drug_name)
fda_contraindications = tu.tools.FDA_get_contraindications_by_drug_name(drug_name=drug_name)
5E. Homologs & Off-Target Risks
# Paralogs (close family members that might be hit)
homologs = tu.tools.OpenTargets_get_target_homologues_by_ensemblID(ensemblId=ensembl_id)
# Paralogs with high sequence identity = selectivity challenge
Scoring Logic - Safety
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
Phase 6: Pathway Context & Network Analysis
Objective: Understand the target's role in biological networks and disease pathways.
6A. Reactome Pathways
# Map target to pathways
pathways = tu.tools.Reactome_map_uniprot_to_pathways(id=uniprot_id)
# Get pathway details for top pathways
for pathway in top_pathways[:5]:
detail = tu.tools.Reactome_get_pathway(id=pathway['stId'])
reactions = tu.tools.Reactome_get_pathway_reactions(id=pathway['stId'])
# Gene essentiality in cancer cell lines
deps = tu.tools.DepMap_get_gene_dependencies(gene_symbol=gene_symbol)
# Negative scores = essential (cells die upon KO)
# Score < -0.5: moderately essential
# Score < -1.0: strongly essential
7B. Literature Validation Evidence
# Search for functional studies
validation_papers = tu.tools.PubMed_search_articles(
query=f'"{gene_symbol}" AND (CRISPR OR siRNA OR knockdown OR knockout OR "loss of function") AND "{disease_name}"',
limit=30
)
# Search for biomarker studies
biomarker_papers = tu.tools.PubMed_search_articles(
query=f'"{gene_symbol}" AND (biomarker OR "target engagement" OR "pharmacodynamic")',
limit=20
)
7C. Animal Model Evidence
# Mouse phenotypes from OpenTargets (already retrieved in Phase 5)
# Reuse mouse_models data
# CTD gene-disease associations (complementary)
ctd_diseases = tu.tools.CTD_get_gene_diseases(input_terms=gene_symbol)
Scoring Logic - Validation Evidence
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
Phase 8: Structural Insights
Objective: Leverage structural biology for druggability and mechanism understanding.
8A. PDB Structures
# Get PDB entries from UniProt cross-references
uniprot_entry = tu.tools.UniProt_get_entry_by_accession(accession=uniprot_id)
# Parse: uniProtKBCrossReferences where database == "PDB"
# Get details for each PDB
for pdb_id in pdb_ids[:10]:
metadata = tu.tools.get_protein_metadata_by_pdb_id(pdb_id=pdb_id)
quality = tu.tools.pdbe_get_entry_quality(pdb_id=pdb_id)
summary = tu.tools.pdbe_get_entry_summary(pdb_id=pdb_id)
experiment = tu.tools.pdbe_get_entry_experiment(pdb_id=pdb_id)
molecules = tu.tools.pdbe_get_entry_molecules(pdb_id=pdb_id)
# ProteinsPlus DoGSiteScorer for best PDB structure
pockets = tu.tools.ProteinsPlus_predict_binding_sites(pdb_id=best_pdb_id)
# Returns: pocket locations, druggability scores, volume, surface
# Interaction diagram for co-crystal structures
if has_ligand:
diagram = tu.tools.ProteinsPlus_generate_interaction_diagram(pdb_id=pdb_id)
8D. Domain Architecture
# InterPro domains
domains = tu.tools.InterPro_get_protein_domains(uniprot_accession=uniprot_id)
# Domain details for key domains
for domain in domains[:5]:
detail = tu.tools.InterPro_get_domain_details(entry_id=domain['accession'])
Phase 9: Literature Deep Dive
Objective: Comprehensive literature analysis with collision-aware search.
9A. Collision Detection
# Detect naming collisions before literature search
test_results = tu.tools.PubMed_search_articles(
query=f'"{gene_symbol}"[Title]', limit=20
)
# PubMed returns plain list of dicts
# Check if >20% of results are off-topic (no biology terms)
# If collision detected, add filters: AND (protein OR gene OR receptor OR kinase)
9B. Publication Metrics
# Total publications
total = tu.tools.PubMed_search_articles(
query=f'"{gene_symbol}" AND (protein OR gene)', limit=1
)
# Check total_count field
# Recent publications (5-year trend)
recent = tu.tools.PubMed_search_articles(
query=f'"{gene_symbol}" AND (protein OR gene) AND ("2021"[PDAT] : "2026"[PDAT])',
limit=50
)
# Drug-focused publications
drug_pubs = tu.tools.PubMed_search_articles(
query=f'"{gene_symbol}" AND (drug OR therapeutic OR inhibitor OR antibody)',
limit=30
)
# EuropePMC for broader coverage
epmc = tu.tools.EuropePMC_search_articles(
query=f'"{gene_symbol}" AND drug target',
limit=30
)
9C. Key Reviews and Landmark Papers
# Reviews for target overview
reviews = tu.tools.PubMed_search_articles(
query=f'"{gene_symbol}" AND drug target AND review[pt]',
limit=10
)
# OpenAlex for citation metrics
openalex_works = tu.tools.openalex_search_works(
query=f'{gene_symbol} drug target', limit=20
)
Phase 10: Validation Roadmap (Synthesis)
Objective: Generate actionable recommendations based on all evidence.