plugin/skills/tooluniverse-gwas-drug-discovery/SKILL.md
Transform GWAS signals into drug targets and repurposing opportunities. Connects GWAS-significant loci to causal genes via fine-mapping/eQTL, then to druggable proteins via DGIdb/OpenTargets, then to existing drugs via ChEMBL. Use for GWAS-to-target hypothesis generation, druggable-fraction analysis of disease loci, and human-genetics-validated drug-repurposing prioritization.
npx skillsauth add mims-harvard/tooluniverse tooluniverse-gwas-drug-discoveryInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Transform genome-wide association studies (GWAS) into actionable drug targets and repurposing opportunities.
IMPORTANT: Always use English terms in tool calls. Respond in the user's language.
This skill bridges genetic discoveries from GWAS with drug development by:
Key insight: Targets with genetic support have 2x higher probability of clinical approval (Nelson et al., Nature Genetics 2015).
GWAS-to-drug translation succeeds when you think causally. A genetic association provides causal direction that observational data cannot: if a loss-of-function variant protects against disease, an inhibitor of that gene's product is the hypothesis to test. The direction of effect (LOF vs. GOF) determines whether you need an inhibitor or an agonist — get this wrong and the drug works backwards. GWAS effect sizes are small (odds ratios of 1.1–1.5 are typical), but the drug effect may be much larger or smaller than the genetic effect; the genetic signal validates the target, not the dose. Always integrate multiple lines of evidence (eQTL colocalization, pQTL, L2G score) before committing to a target, because many GWAS variants tag the causal gene only indirectly.
LOOK UP DON'T GUESS: Do not assume which gene a GWAS variant implicates — use OpenTargets_get_variant_credible_sets or gwas_get_associations_for_snp to get the actual mapped gene and L2G score. Do not guess the direction of effect, odds ratio, or whether a drug already exists for the target; always query the tools.
Input: Disease/trait name (e.g., "type 2 diabetes", "Alzheimer disease")
Process: Query GWAS Catalog for associations, filter by significance (p < 5x10^-8), map variants to genes, aggregate evidence.
Tools:
gwas_get_associations_for_trait - Get associations by diseasegwas_search_associations - Flexible searchgwas_get_associations_for_snp - SNP-specific associationsOpenTargets_search_gwas_studies_by_disease - Curated GWAS dataOpenTargets_get_variant_credible_sets - Fine-mapped loci with L2G predictionsInput: Gene list from Step 1
Process: Check target class, assess tractability, evaluate safety, check for tool compounds or structures.
Tools:
OpenTargets_get_target_tractability_by_ensemblID - Druggability assessmentOpenTargets_get_target_classes_by_ensemblID - Target classificationOpenTargets_get_target_safety_profile_by_ensemblID - Safety dataOpenTargets_get_target_genomic_location_by_ensemblID - Genomic contextScoring Formula:
Target Score = (GWAS Score x 0.4) + (Druggability x 0.3) + (Clinical Evidence x 0.2) + (Novelty x 0.1)
Rank targets by composite score. Generate target dossiers.
Process: Search drug-target associations, find approved drugs and clinical candidates, get MOA and indication data.
Tools:
OpenTargets_get_associated_drugs_by_disease_efoId - Known drugs for diseaseOpenTargets_get_drug_mechanisms_of_action_by_chemblId - Drug MOAChEMBL_get_target_activities - Bioactivity dataChEMBL_get_drug_mechanisms / ChEMBL_search_drugs - Drug dataTools:
FDA_get_adverse_reactions_by_drug_name - Safety dataFDA_get_active_ingredient_info_by_drug_name - Drug compositionOpenTargets_get_drug_warnings_by_chemblId - Drug warningsMatch drug targets to new disease genes, assess mechanistic fit, check contraindications, estimate repurposing probability.
from tooluniverse import ToolUniverse
tu = ToolUniverse(use_cache=True)
tu.load_tools()
# Step 1: Get GWAS associations (use disease_trait not trait; no p_value_threshold param)
associations = tu.tools.gwas_get_associations_for_trait(disease_trait="type 2 diabetes")
# Step 2: Assess druggability (ensemblId lowercase d)
tractability = tu.tools.OpenTargets_get_target_tractability_by_ensemblID(ensemblId="ENSG00000148737")
# Step 3: Find existing drugs per target via DGIdb (OpenTargets drug query may return HTTP 400)
drugs = tu.tools.DGIdb_get_drug_gene_interactions(genes=["TCF7L2"])
GWAS & Genetics:
gwas_get_associations_for_trait / gwas_search_associations / gwas_get_associations_for_snpOpenTargets_search_gwas_studies_by_disease / OpenTargets_get_variant_credible_setsTarget Assessment:
OpenTargets_get_target_tractability_by_ensemblID / OpenTargets_get_target_classes_by_ensemblIDOpenTargets_get_target_safety_profile_by_ensemblID / OpenTargets_get_target_genomic_location_by_ensemblIDDrug Discovery:
OpenTargets_get_associated_drugs_by_disease_efoId / OpenTargets_get_drug_mechanisms_of_action_by_chemblIdChEMBL_get_target_activities / ChEMBL_get_drug_mechanisms / ChEMBL_search_drugsSafety & Clinical:
FDA_get_adverse_reactions_by_drug_name / FDA_get_active_ingredient_info_by_drug_nameOpenTargets_get_drug_warnings_by_chemblIdLiterature:
PubMed_search_articles / EuropePMC_search_articles / ClinicalTrials_search_studiestu.run_batch() for parallel queries across targets| Issue | Wrong | Correct |
|-------|-------|---------|
| GWAS trait param | gwas_get_associations_for_trait(trait=...) | disease_trait=... (no trait param exists) |
| GWAS p-value filter | p_value_threshold=5e-8 | No such param; filter client-side after fetching results |
| OpenTargets ensembl case | ensemblID="ENSG..." | ensemblId="ENSG..." (lowercase 'd') |
| ClinicalTrials tool name | ClinicalTrials_search_studies(...) | ClinicalTrials_search_studies(...) |
| DGIdb tool name | DGIdb_get_drug_gene_interactions(...) | DGIdb_get_drug_gene_interactions(genes=[...]) |
| OpenTargets disease drugs | OpenTargets_get_associated_drugs_by_disease_efoId may return HTTP 400 | Fall back to DGIdb_get_drug_gene_interactions per gene |
| GWAS study search param | gwas_search_studies(disease_trait=...) | Use efo_trait=... for studies (disease_trait works for associations only) |
| Signal Quality | Criteria | Drug Discovery Value | |---------------|---------|---------------------| | Gold standard | Genome-wide significant (p < 5e-8), replicated across ancestries, L2G > 0.5, eQTL colocalized | Highest priority — genetic causality established | | Strong | Genome-wide significant, L2G > 0.3, biological plausibility | High priority — pursue with functional validation | | Moderate | Suggestive (p < 1e-5), or significant but no fine-mapping | Medium — needs additional evidence before investment | | Weak | Single study, no replication, low L2G, no functional support | Low — hypothesis generating only |
After identifying GWAS-linked genes, rank them by answering:
Is the gene druggable? (DGIdb category: kinase/GPCR/ion channel = yes; transcription factor/scaffold = harder)
Is the genetic direction clear?
What's the effect size? (Odds ratio from GWAS)
Is there clinical precedent?
| Problem | Solution | |---------|----------| | No GWAS hits for disease | Try broader trait name, check synonyms, use OpenTargets | | Gene not in druggable class | Consider antibody/antisense modalities, check pathway neighbors | | No existing drugs for target | Target may be novel - check tool compounds in ChEMBL | | Low L2G score | Variants may be regulatory - check eQTL/pQTL evidence |
tools
Generate the success criteria for a task or question, then review work against them. Given a task, goal, or open-ended question, decompose it into scenarios, evaluation perspectives, and fine-grained weighted YES/NO criteria using the Recursive Expansion Tree (RET) method; if work is supplied, score it criterion-by-criterion and surface what is missing or could be better. Use when asked to self-review or check your own work, judge whether a task is done well or completely, build a definition-of-done or completeness checklist, create an evaluation rubric or grading criteria, score or grade answers to a question, set up an LLM-as-judge rubric, or when the user mentions self-review, completeness check, success criteria, evaluation criteria, scoring rubric, Qworld, or the RET algorithm.
tools
Find the real protein target(s) of a peptide from its sequence — peptide target deorphanization / off-target identification, for ANY target class (GPCR, ion channel, protease, cytokine/growth-factor receptor, enzyme, integrin), not only GPCRs. Use when a peptide has a phenotype but does not bind its hypothesized target, when a peptide binds a target in one species or assay but not another, or to screen candidate targets for an orphan peptide. A target-class router steers a multi-route keyless pipeline (PROSITE/ELM motif, BLAST homology, HGNC/InterPro/GPCRdb/GtoPdb target-family enumeration, OpenTargets phenotype anchor, EnsemblCompara/Alliance cross-species reconciliation) plus optional NVIDIA-NIM co-folding (Boltz2, AlphaFold2-Multimer, OpenFold3) for structural confirmation.
tools
Install or update ToolUniverse in Claude Science — create the conda env, install the tooluniverse pip package, and (re)build the tooluniverse-research skill by fetching the current workflow library from GitHub. Use for first-time setup, upgrading the ToolUniverse version, refreshing the bundled workflows after an upstream release, or reinstalling on a new machine.
tools
Install, set up, verify, update, pin, uninstall, or troubleshoot the ToolUniverse plugin on OpenAI Codex. ALWAYS consult this skill for any of those — don't answer from memory, because the exact marketplace name (mims-harvard/ToolUniverse), the "codex plugin marketplace add" then "codex plugin add -m tooluniverse" flow, Codex's startup auto-upgrade behavior, the uvx tooluniverse MCP server, and the API-key env vars are easy to get wrong. Use it whenever someone wants to get ToolUniverse (or "the 1000+ scientific tools" / "the harvard tools") working on Codex, says the Codex plugin or its tools/skills won't load, hits a uvx or MCP-server startup error, asks how Codex updates it, wants to pin or remove it, or finds it running an old tool version — even if they never say the word "plugin". Not for the Claude Code plugin (use tooluniverse-claude-code-plugin), for running research with the tools, or for authoring new tools or skills.