mcpField
V
variant-calling

variant-calling

github.com/awslabsData & databases6877 installsUpdated 4w ago
Repository

About variant-calling

A decision-support skill for GATK4 variant-calling workflows, intended for users configuring or troubleshooting germline and somatic analyses. It covers filtering choices, WES/WGS parameter differences, and common pipeline errors.

Key features

  1. 01Choose VQSR or hard filters by cohort size
  2. 02Distinguish WES and WGS parameters
  3. 03Review germline calling workflow requirements
  4. 04Check Mutect2 somatic calling inputs
  5. 05Catch reference and sample-tag inconsistencies

Use cases

  1. 01Select filtering for cohorts of different sizes
  2. 02Configure GATK4 for WES or WGS
  3. 03Troubleshoot Mutect2 tumor-calling setup

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/awslabs/hcls-agent-skills --skill variant-calling

After installing, type/variant-callingin Claude Code to confirm it loaded.

Bundled filesscripts/filter_by_acmg.pyscripts/run_germline_pipeline.sh

Details

From the project README

Variant Calling (GATK4) — Pipeline Skill (Thin Scaffold)

Overview

Adds decision logic for VQSR vs hard filters, WES vs WGS parameter differences, and GATK4-specific gotchas that LLMs frequently get wrong (filter thresholds, GVCF requirements, reference consistency).

Usage

  • Activate when choosing between VQSR and hard filters for a given cohort size
  • Activate when setting up WES vs WGS pipeline parameters
  • Activate when running Mutect2 tumor/normal or tumor-only somatic calling

Core Concepts

Decision Logic

Germline calling strategy:
├── Single sample, no future joint calling → HaplotypeCaller direct VCF
└── Cohort (≥2 samples) → HaplotypeCaller -ERC GVCF → GenomicsDBImport → GenotypeGVCFs

Filtering strategy:
├── ≥30 WGS samples OR ≥30 WES exomes → VQSR
└── <30 samples OR single sample → Hard filters

Somatic calling:
├── Tumor + matched normal → Mutect2 with both BAMs
└── Tumor-only → Mutect2 + PoN (MANDATORY) + gnomAD germline resource

WES vs WGS parameter differences:

StepWGSWES
BQSR / HaplotypeCallerNo -L-L capture.bed -ip 100
Known sites for BQSRGenome-wideGenome-wide (do NOT subset)
FilteringVQSR (≥30 samples)Hard filters unless ≥30 exomes
Joint genotyping intervalsPer-chromosome-L capture.bed

Critical Parameters

Hard filter thresholds (GATK Best Practices):

FilterSNP thresholdIndel threshold
QD< 2.0< 2.0
FS> 60.0> 200.0
MQ< 40.0—
MQRankSum< -12.5—
ReadPosRankSum< -8.0< -20.0
SOR> 3.0> 10.0

VQSR truth sensitivity levels:

  • SNPs: 99.7
  • Indels: 99.0
  • Indel --max-gaussians 4 (fewer training variants than SNPs)

VQSR annotations: -an QD -an FS -an MQ -an MQRankSum -an ReadPosRankSum -an SOR

Mutect2 essentials:

  • --germline-resource af-only-gnomad.hg38.vcf.gz
  • --panel-of-normals pon.vcf.gz (essential for tumor-only)
  • --f1r2-tar-gz → LearnReadOrientationModel (FFPE/OxoG artifacts)
  • GetPileupSummaries + CalculateContamination before FilterMutectCalls

Common Mistakes

  • Wrong: Aligning without proper @RG headers (missing ID, SM, PL, LB) Right: Always specify at alignment: -R '@RG\tID:x\tSM:x\tPL:ILLUMINA\tLB:x' Why: GATK refuses to run or silently merges samples when SM tags are wrong

  • Wrong: Running HaplotypeCaller without -ERC GVCF for cohort analysis Right: Always produce GVCFs when joint genotyping will be performed Why: Regular VCFs cannot be joint-genotyped; must re-call from BAM

  • Wrong: Reusing SNP hard-filter thresholds for indels (e.g., FS > 60 for indels) Right: Use FS > 200 for indels, FS > 60 for SNPs Why: Indels tolerate higher strand bias; SNP thresholds over-filter real indels

  • Wrong: Applying VQSR to <30 samples Right: Use hard filters for small cohorts Why: VQSR needs many variants to train its Gaussian mixture model

  • Wrong: Subsetting --known-sites VCFs to WES capture BED for BQSR Right: Use genome-wide known-sites; only restrict analysis intervals via -L Why: BQSR needs genome-wide known sites to model base quality errors

  • Wrong: Skipping samtools index between GATK steps Right: Index after every BAM-producing step Why: GATK requires BAM indices; missing them causes immediate failure

  • Wrong: Mixing reference files from different genome builds Right: Ensure ref.dict, ref.fa.fai, BWA index, and all VCFs match the same build Why: Mismatched dictionaries cause silent failures or cryptic errors

  • Wrong: Running Mutect2 tumor-only without a panel of normals Right: Always provide --panel-of-normals for tumor-only calling Why: Without PoN, recurrent sequencing artifacts are called as somatic mutations

Response Format

  • Lead with the command or code the user needs — explain after
  • Structure as: confirm inputs → working code → key parameters explained → gotchas
  • One complete working example per task; do not show every alternative
  • Keep code comments minimal and functional (what, not why-it-exists)
  • Target: 50-100 lines of code with brief surrounding explanation

Comments

Markdown supported