Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Compound-target-disease network construction and analysis for drug repurposing, polypharmacology discovery, and multi-target drug design. Uses STRING, BioGRID, ChEMBL, DGIdb, OMIM, OpenTargets. Use for off-target effect prediction, network-based drug repurposing, and identifying molecules with desired multi-target profile.
.claude/skills/mims-harvard-tooluniverse-network-pharmacology/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 143% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 354% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 110% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 188% | 0% |
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.
Construct and analyze compound-target-disease (C-T-D) networks to identify drug repurposing opportunities, understand polypharmacology, and predict drug mechanisms using systems pharmacology approaches.
LOOK UP DON'T GUESS - Retrieve actual target lists, network data, and clinical evidence from tools. Do not infer network relationships from drug class alone.
IMPORTANT: Always use English terms in tool calls, even if the user writes in another language. Respond in the user's language.
Before building any network, reason about what kind of multi-target effect you are dealing with:
A drug hitting multiple targets is either polypharmacology (desired multi-target) or promiscuity (undesired off-target). The distinction depends on whether the additional targets contribute to efficacy or cause toxicity.
Use this framework to guide the analysis:
Document this reasoning explicitly in the report before listing candidates.
Apply when users:
NOT for (use other skills instead):
tooluniverse-drug-repurposingtooluniverse-drug-target-validationtooluniverse-adverse-event-detectionFive components with explicit reasoning at each step:
Priority tiers: 80-100 = high repurposing potential (proceed to experimental validation); 60-79 = good potential (needs mechanistic validation); 40-59 = moderate potential (high-risk/high-reward); 0-39 = low potential.
Evidence grades: T1 = human clinical proof; T2 = functional experimental evidence (IC50 < 1 uM, CRISPR screen); T3 = association/computational (GWAS hit, network proximity); T4 = prediction or text-mining only.
> Full scoring details: SCORING_REFERENCE.md
OpenTargets_get_drug_chembId_by_generic_name, drugbank_get_drug_basic_info_by_drug_name_or_id, PubChem_get_CID_by_compound_name, OpenTargets_get_target_id_description_by_name, OpenTargets_get_disease_id_description_by_nameOpenTargets_get_drug_mechanisms_of_action_by_chemblId, OpenTargets_get_associated_targets_by_drug_chemblId, drugbank_get_targets_by_drug_name_or_drugbank_id, DGIdb_get_drug_gene_interactions, CTD_get_chemical_gene_interactions, OpenTargets_get_associated_targets_by_disease_efoId, Pharos_get_targetChEMBL_get_target_activities, OpenTargets_target_disease_evidence, GWAS_search_associations_by_gene, search_clinical_trials, CTD_get_chemical_diseases, STRING_get_interaction_partners, STRING_get_network, intact_search_interactions, humanbase_ppi_analysisNetwork_proximity tool — Guney/Barabasi (2016) + Menche (2015) set-distance with a degree-matched Z-score, computed deterministically from a graph you supply (inline edges or an edgelist_path) plus two node sets (set_a/set_b, or the aliases targets/disease_genes). measure = closest (default), shortest, or separation (s_AB < 0 ⇒ overlapping modules). Returns value, z_score, p_value.STRING_get_network returns rows with preferredName_A/preferredName_B (gene symbols) — map each to a [A, B] pair and pass as edges; the IDs line up with symbol-based gene sets natively (no conversion).STRING_get_network with a low limit) makes the degree-matched random sets nearly identical to the real ones, giving an uninformative z>0, p≈1. For a meaningful Z, pull the broad interactome (high limit, or a full network via NDEx_get_network), not just the immediate neighborhood. (The skill's scripts/network_proximity.py, which downloads the full STRING network, is the CLI equivalent.)Network_proximity, STRING_functional_enrichment, STRING_ppi_enrichment, enrichr_gene_enrichment_analysis, ReactomeAnalysis_pathway_enrichmentOpenTargets_get_associated_drugs_by_target_ensemblID, drugbank_get_drug_name_and_description_by_target_name, drugbank_get_pathways_reactions_by_drug_or_idOpenTargets_get_target_classes_by_ensemblID, DGIdb_get_gene_druggability, OpenTargets_get_target_tractability_by_ensemblIDFAERS_calculate_disproportionality, FAERS_filter_serious_events, FAERS_count_death_related_by_drug, FDA_get_warnings_and_cautions_by_drug_name, OpenTargets_get_drug_adverse_events_by_chemblId, OpenTargets_get_target_safety_profile_by_ensemblID, gnomad_get_gene_constraintssearch_clinical_trials, get_clinical_trial_descriptions, PubMed_search_articles, EuropePMC_search_articles, ADMETAI_predict_toxicity, PharmGKB_get_drug_details> Full step-by-step code examples: ANALYSIS_PROCEDURES.md > Report template: REPORT_TEMPLATE.md
query, case_sensitive, exact_match, limit (4 params, ALL required)operation parametermedicinalproduct NOT drug_name{data: {entity: {field: ...}}} structure{articles: [...]}identifiers string, NOT arrayspecies='homo_sapiens' parameter> Full tool parameter reference and response structures: TOOL_REFERENCE.md
When a tool fails, try the next in chain before reporting "no data":
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→fail | 38,624 | 11,315 | -71% | 1 | 1 | 0% | 6,214 | 4,344 | -30% | 0 | 0 | — |
case-02 | fail→fail | 33,094 | 11,723 | -65% | 1 | 1 | 0% | 6,218 | 4,490 | -28% | 0 | 0 | — |
case-03 | pass→fail | 33,199 | 9,664 | -71% | 1 | 1 | 0% | 6,205 | 4,263 | -31% | 0 | 0 | — |
case-04 | pass→fail | 12,122 | 7,398 | -39% | 1 | 1 | 0% | 2,159 | 3,875 | +79% | 0 | 0 | — |
case-05 | pass→fail | 18,289 | 10,685 | -42% | 1 | 1 | 0% | 3,354 | 4,120 | +23% | 0 | 0 | — |
case-06 | pass→fail | 20,542 | 9,559 | -53% | 1 | 1 | 0% | 4,617 | 4,117 | -11% | 0 | 0 | — |
case-07 | pass→pass | 16,101 | 30,827 | +91% | 1 | 1 | 0% | 2,625 | 8,008 | +205% | 0 | 0 | — |
case-08 | pass→pass | 10,726 | 11,082 | +3% | 1 | 1 | 0% | 1,902 | 5,673 | +198% | 0 | 0 | — |
case-09 | fail→pass | 32,075 | 17,212 | -46% | 1 | 1 | 0% | 2,780 | 6,390 | +130% | 0 | 0 | — |
case-10 | fail→pass | 12,762 | 11,455 | -10% | 1 | 1 | 0% | 2,149 | 5,226 | +143% | 0 | 0 | — |
case-11 | pass→pass | 12,399 | 9,773 | -21% | 1 | 1 | 0% | 2,257 | 5,156 | +128% | 0 | 0 | — |
case-12 | fail→pass | 5,604 | 4,620 | -18% | 1 | 1 | 0% | 946 | 4,299 | +354% | 0 | 0 | — |
case-13 | fail→pass | 10,920 | 2,525 | -77% | 1 | 1 | 0% | 1,829 | 3,846 | +110% | 0 | 0 | — |
case-18 | pass→pass | 14,455 | 8,972 | -38% | 1 | 1 | 0% | 2,402 | 5,072 | +111% | 0 | 0 | — |
case-14 | pass→pass | 4,776 | 3,036 | -36% | 1 | 1 | 0% | 798 | 3,916 | +391% | 0 | 0 | — |
case-15 | fail→pass | 8,663 | 8,934 | +3% | 1 | 1 | 0% | 1,501 | 4,316 | +188% | 0 | 0 | — |
case-16 | pass→pass | 9,342 | 10,086 | +8% | 1 | 1 | 0% | 1,597 | 5,168 | +224% | 0 | 0 | — |
case-17 | fail→pass | 10,670 | 4,979 | -53% | 1 | 1 | 0% | 1,758 | 4,400 | +150% | 0 | 0 | — |
case-19 | pass→pass | 13,659 | 29,221 | +114% | 1 | 1 | 0% | 2,274 | 5,416 | +138% | 0 | 0 | — |
case-20 | pass→fail | 10,994 | 20,119 | +83% | 1 | 1 | 0% | 1,986 | 4,174 | +110% | 0 | 0 | — |
case-21 | pass→fail | 5,736 | 8,252 | +44% | 1 | 1 | 0% | 1,083 | 4,194 | +287% | 0 | 0 | — |
case-22 | pass→pass | 4,995 | 6,762 | +35% | 1 | 1 | 0% | 773 | 4,549 | +488% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 14 counted toward the lift figure. The other 8 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -5 percentage points is the difference between those two pass rates over the 14 comparable cases. 7 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.