tooluniverse-clinical-trial-matching — Claude Code skill: match
This skill turns a patient's molecular profile and clinical state into a ranked list of clinical trials with evidence tiers and match scores.
npx skills add mims-harvard/ToolUniverse --skill tooluniverse-clinical-trial-matching -a claude-codeWhat tooluniverse-clinical-trial-matching does
The skill takes a disease name, molecular alterations (mutations, biomarkers, expression), stage and prior treatments. It then searches ClinicalTrials.gov, the EU CTIS register for European and EEA trials, and the ISRCTN registry for UK and international studies, cross-referencing CIViC, OpenTargets, ChEMBL and FDA label data.
The workflow runs in ten phases: standardising the patient profile against ontology IDs, broad trial discovery, characterising each trial, parsing inclusion and exclusion criteria, aligning drugs with biomarkers, assessing evidence, checking geography and feasibility, then looking at basket trials and expanded access. Every trial gets a Trial Match Score from 0 to 100 and an evidence tier from T1 to T4. Molecular matching outranks stage and prior treatment, so a patient with EGFR L858R lands on EGFR-targeted trials first.
It needs Python for the scoring and analysis steps, and access to the ToolUniverse databases. Tool calls are always issued in English while the answer comes back in the user's language. If you only need to interpret a single variant without trial context, that is a different job — this one stays on trial matching.
What it helps with
- find trials for a specific mutation rather than just a cancer type
- check whether a patient passes inclusion and exclusion criteria
- compare US, European and UK trials in one ranked list
- see which trial drugs are already FDA-approved for a given biomarker
- look for options after progression on standard therapy
Example prompts for the agent
- NSCLC with EGFR L858R, stage IV, progressed on osimertinib — what trials are available?
- Find basket trials for an NTRK fusion
- BRAF V600E melanoma, failed ipilimumab — what's in the EU and UK registries?
How to install tooluniverse-clinical-trial-matching
1Skills CLI (Vercel)
npx skills add mims-harvard/ToolUniverse --skill tooluniverse-clinical-trial-matching -a claude-code2Manually: put the files in place
~/.claude/skills/tooluniverse-clinical-trial-matching/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/tooluniverse-clinical-trial-matching/
1Skills CLI (Vercel)
npx skills add mims-harvard/ToolUniverse --skill tooluniverse-clinical-trial-matching -a codex2Manually: put the files in place
.agents/skills/tooluniverse-clinical-trial-matching/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add mims-harvard/ToolUniverse --skill tooluniverse-clinical-trial-matching -a cursor2Manually: put the files in place
.cursor/skills/tooluniverse-clinical-trial-matching/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install mims-harvard/ToolUniverse tooluniverse-clinical-trial-matching2Manually: put the files in place
.github/skills/tooluniverse-clinical-trial-matching/SKILL.md1Skills CLI (Vercel)
npx skills add mims-harvard/ToolUniverse --skill tooluniverse-clinical-trial-matching -a gemini-cli2Platform CLI
gemini skills install https://github.com/mims-harvard/ToolUniverse --path skills/tooluniverse-clinical-trial-matchingManually: put the files in place
.devin/skills/tooluniverse-clinical-trial-matching/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add mims-harvard/ToolUniverse --skill tooluniverse-clinical-trial-matching -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about tooluniverse-clinical-trial-matching
How do I install tooluniverse-clinical-trial-matching in Claude?
Run npx skills add mims-harvard/ToolUniverse --skill tooluniverse-clinical-trial-matching -a claude-code. The skill file lands at ~/.claude/skills/tooluniverse-clinical-trial-matching/SKILL.md.
What does tooluniverse-clinical-trial-matching do?
It matches a patient's molecular profile against clinical trials and returns a ranked list with a 0–100 score and a T1–T4 evidence tier. Searches run across ClinicalTrials.gov, EU CTIS and ISRCTN.
How is it different from tooluniverse-cancer-variant-interpretation?
This skill focuses on finding trials for a patient profile. Interpreting a single variant without trial context is handled by tooluniverse-cancer-variant-interpretation.
Source text
SKILL.md · Apache-2.0
--- name: tooluniverse-clinical-trial-matching description: AI-driven patient-to-trial matching for precision oncology and rare-disease care. Transforms a patient's molecular profile (mutations, biomarkers, expression) and clinical state into ranked clinical-trial recommendations with evidence tiers. Searches ClinicalTrials.gov, the EU CTIS register (European/EEA trials), AND the ISRCTN registry (UK/international) plus cross-references CIViC, OpenTargets, ChEMBL, and FDA labels. Use for matching patients to trials by genotype, biomarker-driven trial selection, trial-eligibility scoring, and finding trials across the US, Europe, and the UK. disable-model-invocation: true --- # Clinical Trial Matching for Precision Medicine Transform patient molecular profiles and clinical characteristics into prioritized clinical trial recommendations. Searches ClinicalTrials.gov and cross-references with molecular databases (CIViC, OpenTargets, ChEMBL, FDA) to produce evidence-graded, scored trial matches. **KEY PRINCIPLES**: 1. **Report-first approach** - Create report file FIRST, then populate progressively 2. **Patient-centric** - Every recommendation considers the individual patient's profile 3. **Molecular-first matching** - Prioritize trials targeting patient's specific biomarkers ## Molecular Matching Priority Match patients to trials by molecular profile FIRST (specific mutations), then by disease stage, then by prior treatments. A patient with EGFR L858R should match to EGFR-targeted trials regardless of other factors. 4. **Evidence-graded** - Every recommendation has an evidence tier (T1-T4) 5. **Quantitative scoring** - Trial Match Score (0-100) for every trial 6. **Eligibility-aware** - Parse and evaluate inclusion/exclusion criteria 7. **Actionable output** - Clear next steps, contact info, enrollment status 8. **Source-referenced** - Every statement cites the tool/database source 9. **Completeness checklist** - Mandatory section showing analysis coverage 10. **English-first queries** - Always use English terms in tool calls. Respond in user's language ## LOOK UP, DON'T GUESS When uncertain about any scientific fact, SEARCH databases first rather than reasoning from memory. A database-verified answer is always more reliable than a guess. --- ## 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. ## When to Use Apply when user asks: - "What clinical trials are available for my NSCLC with EGFR L858R?" - "Patient has BRAF V600E melanoma, failed ipilimumab - what trials?" - "Find basket trials for NTRK fusion" - "Breast cancer with HER2 amplification, post-CDK4/6 inhibitor trials" - "KRAS G12C colorectal cancer clinical trials" - "Immunotherapy trials for TMB-high solid tumors" - "Clinical trials near Boston for lung cancer" - "What are my options after failing osimertinib for EGFR+ NSCLC?" **NOT for** (use other skills instead): - Single variant interpretation without trial focus -> Use `tooluniverse-cancer-variant-interpretation` - Drug safety profiling -> Use `tooluniverse-adverse-event-detection` - Target validation -> Use `tooluniverse-drug-target-validation` - General disease research -> Use `tooluniverse-disease-research` --- ## Input Parsing ### Required Input - **Disease/cancer type**: Free-text disease name (e.g., "non-small cell lung cancer", "melanoma") ### Strongly Recommended - **Molecular alterations**: One or more biomarkers (e.g., "EGFR L858R", "KRAS G12C", "PD-L1 50%", "TMB-high") - **Stage/grade**: Disease stage (e.g., "Stage IV", "metastatic", "locally advanced") - **Prior treatments**: Previous therapies and outcomes (e.g., "failed platinum chemotherapy", "progressed on osimertinib") ### Optional - **Performance status**: ECOG or Karnofsky score - **Geographic location**: City/state for proximity filtering - **Trial phase preference**: I, II, III, IV, or "any" - **Intervention type**: drug, biological, device, etc. - **Recruiting status preference**: recruiting, not yet recruiting, active For biomarker parsing rules and gene symbol normalization, see [MATCHING_ALGORITHMS.md](./MATCHING_ALGORITHMS.md). --- ## Workflow Overview ``` Input: Patient profile (disease + biomarkers + stage + prior treatments) Phase 1: Patient Profile Standardization - Resolve disease to EFO/ontology IDs (OpenTargets, OLS) - Parse molecular alterations to gene + variant - Resolve gene symbols to Ensembl/Entrez IDs (MyGene) - Classify biomarker actionability (FDA-approved vs investigational) Phase 2: Broad Trial Discovery - Disease-based trial search (ClinicalTrials.gov) - Biomarker-specific trial search - Intervention-based search (for known drugs targeting patient's biomarkers) - Deduplicate and collect NCT IDs Phase 3: Trial Characterization (batch, groups of 10) - Eligibility criteria, conditions/interventions, locations, status, descriptions Phase 4: Molecular Eligibility Matching - Parse eligibility text for biomarker requirements - Match patient's molecular profile to trial requirements - Score molecular eligibility (0-40 points) Phase 5: Drug-Biomarker Alignment - Identify trial intervention drugs and mechanisms (OpenTargets, ChEMBL) - FDA approval status for biomarker-drug combinations - Classify drugs (targeted therapy, immunotherapy, chemotherapy) Phase 6: Evidence Assessment - FDA-approved biomarker-drug combinations - Clinical trial results (PubMed), CIViC evidence, PharmGKB - Evidence tier classification (T1-T4) Phase 7: Geographic & Feasibility Analysis - Trial site locations, enrollment status, proximity scoring Phase 8: Alternative Options - Basket trials, expanded access, related studies Phase 9: Scoring & Ranking (0-100 composite score) - Tier classification: Optimal (80-100) / Good (60-79) / Possible (40-59) / Exploratory (0-39) Phase 10: Report Synthesis - Executive summary, ranked trial list, evidence grading, completeness checklist ``` --- ## Critical Tool Parameters ### Clinical Trial Search Tools | Tool | Key Parameters | Notes | |------|---------------|-------| | `search_clinical_trials` | `query_term` (REQ), `condition`, `intervention`, `pageSize` | Main search (ClinicalTrials.gov, U.S./global) | | `search_clinical_trials` | `action="search_studies"` (REQ), `condition`, `intervention`, `limit` | Alternative search | | `get_clinical_trial_descriptions` | `action="get_study_details"` (REQ), `nct_id` (REQ) | Full trial details | | `CTIS_search_trials` | `query` (REQ), `limit`, `page` | **EU/EEA trials** (EU CTIS register, since 2022) — complements ClinicalTrials.gov | | `CTIS_get_trial` | `ct_number` (REQ, e.g. `2022-503001-38-01`) | Full EU trial detail (Part I/II, member states, results) | | `ISRCTN_search_trials` | `query` (REQ), `limit` | **ISRCTN registry** (UK-based, WHO-primary, international) — a third source | | `ISRCTN_get_trial` | `isrctn_id` (REQ, e.g. `ISRCTN12336055`) | Full ISRCTN trial detail + cross-ref ids (DOI/EudraCT/NCT) | **Geographic coverage**: ClinicalTrials.gov is U.S.-centric but global; many EU/EEA-only trials appear *only* in the EU CTIS register, and UK/international trials in **ISRCTN**. For a comprehensive search — or any patient who could enroll outside the U.S. — query `search_clinical_trials`, `CTIS_search_trials`, **and** `ISRCTN_search_trials`, then merge (the three registers list largely disjoint trials; ISRCTN records carry DOI/EudraCT/NCT cross-refs you can use to dedupe against the others). Each register has its own id namespace and detail tool: NCT→`get_clinical_trial_*`, CT number→`CTIS_get_trial`, ISRCTN id→`ISRCTN_get_trial`. ### Batch Trial Detail Tools (all take `nct_ids` array) | Tool | Second Required Param | Returns | |------|----------------------|---------| | `get_clinical_trial_eligibility_criteria` | `eligibility_criteria="all"` | Eligibility text | | `get_clinical_trial_locations` | `location="all"` | Site locations | | `get_clinical_trial_conditions_and_interventions` | `condition_and_intervention="all"` | Arms/interventions | | `get_clinical_trial_status_and_dates` | `status_and_date="all"` | Status/dates | | `get_clinical_trial_descriptions` | `description_type="brief"` or `"full"` | Titles/summaries | | `get_clinical_trial_outcome_measures` | `outcome_measures="all"` | Outcomes | ### Gene/Disease Resolution | Tool | Key Parameters | |------|---------------| | `MyGene_query_genes` | `query`, `species` | | `OpenTargets_get_disease_id_description_by_name` | `diseaseName` | | `OpenTargets_get_target_id_description_by_name` | `targetName` | | `ols_search_efo_terms` | `query`, `limit` | ### Drug Information | Tool | Key Parameters | Notes | |------|---------------|-------| | `OpenTargets_get_drug_id_description_by_name` | `drugName` | Resolve drug to ChEMBL ID | | `OpenTargets_get_drug_mechanisms_of_action_by_chemblId` | `chemblId` | Drug MoA and targets | | `OpenTargets_get_associated_drugs_by_target_ensemblID` | `ensemblId`, `size` | Drugs for a target | | `drugbank_get_targets_by_drug_name_or_drugbank_id` | `query`, `case_sensitive`, `exact_match`, `limit` (ALL REQ) | Drug targets | | `fda_pharmacogenomic_biomarkers` | (none) | FDA biomarker-drug list | | `FDA_get_indications_by_drug_name` | `drug_name`, `limit` | FDA indications | ### Evidence Tools | Tool | Key Parameters | |------|---------------| | `PubMed_search_articles` | `query`, `max_results` | | `civic_get_variants_by_gene` | `gene_id` (CIViC int ID), `limit` | | `PharmGKB_search_genes` | `query` | ### Known CIViC Gene IDs EGFR=19, BRAF=5, ALK=1, ABL1=4, KRAS=30, TP53=45, ERBB2=20, NTRK1=197, NTRK2=560, NTRK3=561, PIK3CA=37, MET=52, ROS1=118, RET=122, BRCA1=2370, BRCA2=2371 ### Critical Parameter Notes 1. **DrugBank tools**: ALL 4 parameters (`query`, `case_sensitive`, `exact_match`, `limit`) are REQUIRED 2. **`search_clinical_trials`**: `query_term` is REQUIRED even for disease-only searches 3. **`search_clinical_trials`**: `action` must be exactly `"search_studies"` 4. **CIViC `civic_search_variants`**: Does NOT filter by query - returns alphabetically 5. **CIViC `civic_get_variants_by_gene`**: Takes CIViC gene ID (integer), NOT gene symbol 6. **Batch clinical trial tools**: Accept arrays of NCT IDs, process in batches of 10 --- ## Scoring Summary **Trial Match Score (0-100)**: - Molecular Match: 0-40 pts (exact variant=40, gene-level=30, pathway=20, none=10, excluded=0) - Clinical Eligibility: 0-25 pts (all met=25, most=18, some=10, ineligible=0) - Evidence Strength: 0-20 pts (FDA-approved=20, Phase III=15, Phase II=10, Phase I=5) - Trial Phase: 0-10 pts (III=10, II=8, I/II=6, I=4) - Geographic: 0-5 pts (local=5, same country=3, international=1) **Recommendation Tiers**: Optimal (80-100), Good (60-79), Possible (40-59), Exploratory (0-39) **Evidence Tiers**: T1 (FDA/guideline), T2 (Phase III), T3 (Phase I/II), T4 (computational) For detailed scoring logic, see [SCORING_CRITERIA.md](./SCORING_CRITERIA.md). --- ## Parallelization Strategy **Group 1** (Phase 1 - simultaneous): - `MyGene_query_genes` per gene, `OpenTargets` disease search, `ols_search_efo_terms`, `fda_pharmacogenomic_biomarkers` **Group 2** (Phase 2 - simultaneous): - `search_clinical_trials` by disease, biomarker, and intervention; `search_clinical_trials` alternative **Group 3** (Phase 3 - simultaneous): - All batch detail tools (eligibility, interventions, locations, status, descriptions) **Group 4** (Phases 5-6 - per drug): - Drug resolution, MoA, FDA indications, PubMed evidence --- ## Error Handling 1. Wrap every tool call in try/except 2. Check for empty results and string error responses 3. Use fallback tools when primary fails (e.g., OLS if OpenTargets fails) 4. Document failures in completeness checklist 5. Never let one failure block the entire analysis --- ## Reference Files | File | Contents | |------|----------| | [TOOLS_REFERENCE.md](./TOOLS_REFERENCE.md) | Full tool inventory with parameters and response structures | | [MATCHING_ALGORITHMS.md](./MATCHING_ALGORITHMS.md) | Patient profile standardization, biomarker parsing, molecular eligibility matching, drug-biomarker alignment code | | [SCORING_CRITERIA.md](./SCORING_CRITERIA.md) | Detailed scoring tables, molecular match logic, drug-biomarker alignment scoring | | [REPORT_TEMPLATE.md](./REPORT_TEMPLATE.md) | Full markdown report template with all sections | | [TRIAL_SEARCH_PATTERNS.md](./TRIAL_SEARCH_PATTERNS.md) | Search functions, batch retrieval, parallelization, common use patterns, edge cases | | [EXAMPLES.md](./EXAMPLES.md) | Worked examples for different matching scenarios | | [QUICK_START.md](./QUICK_START.md) | Quick-start guide for common workflows |
© mims-harvard · Apache-2.0 · mims-harvard/ToolUniverse