Skip to main content

variant-interpretation

ToolUniverse workflow — Variant Interpretation

Datos de origen

Repositorio
lamm-mit/scienceclaw
Última actividad en el origen
14 de marzo de 2026 a las 06:18
Idioma detectado de SKILL.md
inglés
Estrellas
250
Forks
49

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Explorador de archivos
3 archivos

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
variant-interpretation
description
ToolUniverse workflow — Variant Interpretation
source
https://github.com/mims-harvard/ToolUniverse/tree/main/skills/tooluniverse-variant-interpretation
metadata
null
--- name: tooluniverse-variant-interpretation description: Systematic clinical variant interpretation from raw variant calls to ACMG-classified recommendations with structural impact analysis. Aggregates evidence from ClinVar, gnomAD, CIViC, UniProt, and PDB across ACMG criteria. Produces pathogenicity scores (0-100), clinical recommendations, and treatment implications. Use when interpreting genetic variants, classifying variants of uncertain significance (VUS), performing ACMG variant classification, or translating variant calls to clinical actionability. --- --- name: tooluniverse-variant-interpretation description: Systematic clinical variant interpretation from raw variant calls to ACMG-classified recommendations with structural impact analysis. Aggregates evidence from ClinVar, gnomAD, CIViC, UniProt, and PDB across ACMG criteria. Produces pathogenicity scores (0-100), clinical recommendations, and treatment implications. Use when interpreting genetic variants, classifying variants of uncertain significance (VUS), performing ACMG variant classification, or translating variant calls to clinical actionability. --- # Clinical Variant Interpreter Systematic variant interpretation skill using ToolUniverse - from raw variant calls to ACMG-classified clinical recommendations with structural impact analysis. --- ## Problem This Skill Solves Clinical labs and researchers face critical challenges in variant interpretation: 1. **Variant classification uncertainty** - VUS (Variants of Uncertain Significance) comprise 40-60% of clinical variants 2. **Evidence aggregation burden** - Must integrate data from 10+ databases per variant 3. **Structural context missing** - Traditional annotation ignores 3D protein impact 4. **Clinical actionability unclear** - How does classification translate to patient care? **This skill provides**: A systematic workflow that combines population databases, functional predictions, structural analysis (via AlphaFold2), and literature evidence into ACMG-compliant interpretations with clear clinical recommendations. --- ## Key Principles 1. **ACMG-Guided Classification** - Follow ACMG/AMP 2015 guidelines with explicit evidence codes 2. **Structural Evidence Integration** - Use AlphaFold2 for novel structural impact analysis 3. **Population Context** - gnomAD frequencies with ancestry-specific data 4. **Gene-Disease Validity** - ClinGen curation status for clinical relevance 5. **Actionable Output** - Clear recommendations, not just classifications 6. **English-first queries** - Always use English terms in tool calls (gene names, variant descriptions, disease names), even if the user writes in another language. Only try original-language terms as a fallback. Respond in the user's language --- ## Triggers Use this skill when users: - Ask about variant interpretation or classification - Have VCF data needing clinical annotation - Ask "what does this variant mean clinically?" - Need ACMG classification for variants - Want structural impact analysis for missense variants - Ask about pathogenicity of specific variants --- ## Workflow Overview ``` ┌─────────────────────────────────────────────────────────────────┐ │ VARIANT INTERPRETATION │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ Phase 1: VARIANT IDENTITY │ │ ├── Normalize variant notation (HGVS) │ │ ├── Map to gene, transcript, protein │ │ └── Get consequence type (missense, nonsense, etc.) │ │ │ │ Phase 2: CLINICAL DATABASES │ │ ├── ClinVar: Existing classifications │ │ ├── gnomAD: Population frequencies (all + ancestry) │ │ ├── OMIM: Gene-disease associations │ │ ├── ClinGen: Gene validity + dosage sensitivity (ENHANCED) │ │ │ └─ ClinGen_search_gene_validity, ClinGen_search_dosage │ │ └── SpliceAI: Splice variant prediction (NEW) │ │ │ │ Phase 2.5: REGULATORY CONTEXT (NEW - for non-coding variants) │ │ ├── ChIPAtlas: TF binding at position │ │ ├── ENCODE: Regulatory elements (enhancers, promoters) │ │ ├── Conservation in regulatory regions │ │ └── Functional annotation of regulatory impact │ │ │ │ Phase 3: COMPUTATIONAL PREDICTIONS │ │ ├── SIFT/PolyPhen: Damaging predictions │ │ ├── CADD: Deleteriousness score │ │ ├── SpliceAI: Splice impact (if applicable) │ │ └── Conservation: Cross-species alignment │ │ │ │ Phase 4: STRUCTURAL ANALYSIS (for VUS/novel missense) │ │ ├── Get protein structure (PDB or AlphaFold2) │ │ ├── Map variant to structure │ │ ├── Assess domain/functional site impact │ │ └── Predict structural destabilization │ │ │ │ Phase 4.5: EXPRESSION CONTEXT (NEW) │ │ ├── CELLxGENE: Cell-type specific expression │ │ ├── Tissue relevance to phenotype │ │ └── Expression validation │ │ │ │ Phase 5: LITERATURE EVIDENCE │ │ ├── PubMed: Functional studies │ │ ├── BioRxiv/MedRxiv: Recent preprints (NEW) │ │ ├── Case reports: Phenotype correlations │ │ └── Segregation data (if in literature) │ │ │ │ Phase 6: ACMG CLASSIFICATION │ │ ├── Apply evidence codes (PVS1, PM2, PP3, etc.) │ │ ├── Calculate classification │ │ ├── Identify limiting factors │ │ └── Generate clinical recommendations │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## Phase Details ### Phase 1: Variant Identity & Normalization **Goal**: Standardize variant notation and determine molecular consequence **Tools**: | Tool | Purpose | |------|---------| | `myvariant_query` | Get variant annotations from MyVariant.info | | `Ensembl_get_variant_info` | Variant effect predictor data | | `NCBI_gene_search` | Gene information | **Key Information to Capture**: - HGVS notation (c. and p.) - Gene symbol and Ensembl ID - Transcript (canonical/MANE Select) - Consequence type - Amino acid change (for missense) - Exon/intron location ### Phase 2: Clinical Database Queries **Goal**: Aggregate existing clinical knowledge **Tools**: | Tool | Purpose | Key Data | |------|---------|----------| | `clinvar_search` | Existing classifications | Classification, review status, submissions | | `gnomad_search` | Population frequency | AF, ancestry-specific AFs, homozygotes | | `OMIM_search`, `OMIM_get_entry` | Gene-disease | Inheritance, phenotypes | | `ClinGen_gene_validity` | Curation status | Gene-disease validity level | | `COSMIC_search_mutations` | **Somatic mutations (NEW)** | Cancer frequency, histology | | `DisGeNET_search_gene` | **Gene-disease associations (NEW)** | Evidence scores, sources | ### 2.1 COSMIC for Somatic Context (NEW) For cancer variants, check COSMIC for somatic mutation frequency: ```python def get_somatic_context(tu, gene_symbol, variant_aa): """Get somatic mutation context from COSMIC.""" # Search for specific mutation cosmic = tu.tools.COSMIC_search_mutations( operation="search", terms=f"{gene_symbol} {variant_aa}", max_results=20, genome_build=38 ) # Get all gene mutations for context gene_mutations = tu.tools.COSMIC_get_mutations_by_gene( operation="get_by_gene", gene=gene_symbol, max_results=100 ) # Determine if it's a hotspot mutation_counts = Counter(m['MutationAA'] for m in gene_mutations.get('results', [])) is_hotspot = variant_aa in [m[0] for m in mutation_counts.most_common(10)] return { 'cosmic_hits': cosmic.get('results', []), 'is_somatic_hotspot': is_hotspot, 'cancer_types': [m['PrimarySite'] for m in cosmic.get('results', [])], 'total_cosmic_count': cosmic.get('total_count', 0) } ``` ### 2.2 OMIM Gene-Disease Context (NEW) ```python def get_omim_context(tu, gene_symbol): """Get OMIM gene-disease associations.""" # Search OMIM for gene search = tu.tools.OMIM_search( operation="search", query=gene_symbol, limit=5 ) omim_data = [] for entry in search.get('data', {}).get('entries', []): mim = entry.get('mimNumber') # Get detailed entry details = tu.tools.OMIM_get_entry( operation="get_entry", mim_number=str(mim) ) # Get clinical synopsis synopsis = tu.tools.OMIM_get_clinical_synopsis( operation="get_clinical_synopsis", mim_number=str(mim) ) omim_data.append({ 'mim_number': mim, 'title': details.get('data', {}).get('titles', {}), 'inheritance': synopsis.get('data', {}).get('inheritance'), 'clinical_features': synopsis.get('data', {}) }) return omim_data ``` ### 2.3 DisGeNET Gene-Disease Evidence (NEW) ```python def get_disgenet_context(tu, gene_symbol, variant_rsid=None): """Get gene-disease associations from DisGeNET.""" # Gene-disease associations gda = tu.tools.DisGeNET_search_gene( operation="search_gene", gene=gene_symbol, limit=20 ) # Variant-disease associations (if rsID available) vda = None if variant_rsid: vda = tu.tools.DisGeNET_get_vda( operation="get_vda", variant=variant_rsid, limit=20 ) return { 'gene_associations': gda.get('data', {}).get('associations', []), 'variant_associations': vda.get('data', {}).get('associations', []) if vda else [] } ``` ### 2.4 ClinGen Gene Validity & Dosage Sensitivity (NEW) ClinGen provides authoritative curation of gene-disease relationships: ```python def get_clingen_evidence(tu, gene_symbol): """ Get ClinGen gene validity and dosage sensitivity data. CRITICAL for ACMG classification - establishes gene-disease validity. """ # 1. Gene-disease validity (Definitive/Strong/Moderate/Limited) validity = tu.tools.ClinGen_search_gene_validity(gene=gene_symbol) validity_data = [] if validity.get('data'): for entry in validity.get('data', []): validity_data.append({ 'disease': entry.get('Disease Label'), 'classification': entry.get('Classification'), # Definitive, Strong, etc. 'inheritance': entry.get('Inheritance'), 'mondo_id': entry.get('Disease ID (MONDO)') }) # 2. Dosage sensitivity (haploinsufficiency, triplosensitivity) dosage = tu.tools.ClinGen_search_dosage_sensitivity(gene=gene_symbol) dosage_data = {} if dosage.get('data'): for entry in dosage.get('data', []): dosage_data = { 'haploinsufficiency_score': entry.get('Haploinsufficiency Score'), 'triplosensitivity_score': entry.get('Triplosensitivity Score'), 'disease': entry.get('Disease') } break # Usually one entry per gene # 3. Clinical actionability (for incidental findings context) actionability = tu.tools.ClinGen_search_actionability(gene=gene_symbol) return { 'gene_validity': validity_data, 'dosage_sensitivity': dosage_data, 'actionability': actionability.get('data', {}), 'has_definitive_validity': any(v['classification'] == 'Definitive' for v in validity_data), 'is_haploinsufficient': dosage_data.get('haploinsufficiency_score') == '3' } ``` **ClinGen Validity Levels** (for ACMG PM1/PP4): | Classification | Meaning | ACMG Impact | |----------------|---------|-------------| | **Definitive** | Multiple concordant studies | Strong gene-disease support | | **Strong** | Extensive evidence | Moderate-strong support | | **Moderate** | Some evidence | Moderate support | | **Limited** | Minimal evidence | Weak support, use caution | | **Disputed** | Conflicting evidence | Do not use for classification | | **Refuted** | Evidence against | Gene NOT associated | **Dosage Sensitivity Scores** (for CNV interpretation): | Score | Meaning | Interpretation | |-------|---------|----------------| | **3** | Sufficient evidence | Haploinsufficiency/triplosensitivity established | | **2** | Emerging evidence | Some support, not definitive | | **1** | Little evidence | Minimal support | | **0** | No evidence | Unknown | ### 2.5 SpliceAI Splice Variant Prediction (NEW) ~15% of pathogenic variants affect splicing. SpliceAI is the gold standard for splice prediction: ```python def get_spliceai_prediction(tu, chrom, pos, ref, alt, genome="38"): """ Get SpliceAI splice effect predictions. Delta scores: - DS_AG: Acceptor gain - DS_AL: Acceptor loss - DS_DG: Donor gain - DS_DL: Donor loss Thresholds: - ≥0.8: High pathogenicity (strong PP3) - 0.5-0.8: Moderate (supporting PP3) - 0.2-0.5: Low (weak evidence) - <0.2: Likely benign """ # Format variant for SpliceAI variant = f"chr{chrom}-{pos}-{ref}-{alt}" # Get full splice predictions result = tu.tools.SpliceAI_predict_splice( variant=variant, genome=genome ) if result.get('data'): max_score = result['data'].get('max_delta_score', 0) interpretation = result['data'].get('interpretation', '') # Determine ACMG support if max_score >= 0.8: acmg = 'PP3 (strong) - high splice impact' elif max_score >= 0.5: acmg = 'PP3 (supporting) - moderate splice impact' elif max_score >= 0.2: acmg = 'PP3 (weak) - possible splice impact' else: acmg = 'BP7 (if synonymous) - splice benign' return { 'max_delta_score': max_score, 'interpretation': interpretation, 'acmg_support': acmg, 'scores': result['data'].get('scores', []) } return None def quick_splice_check(tu, variant, genome="38"): """Quick triage using max delta score only.""" result = tu.tools.SpliceAI_get_max_delta( variant=variant, genome=genome ) return result.get('data', {}) ``` **When to Use SpliceAI**: - **Intronic variants** near splice sites (±50bp)
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub