diff --git a/hmftools.wdl b/hmftools.wdl
index f1617bbe3b2153a45f8109f0d7eb1cd2b8828cb4..646d01ea81f08c3198cb0833e533f54c631a8ae9 100644
--- a/hmftools.wdl
+++ b/hmftools.wdl
@@ -542,6 +542,101 @@ task Linx {
     }
 }
 
+task Protect {
+    input {
+        String refGenomeVersion
+        String tumorName
+        String normalName
+        Array[String]+ sampleDoids
+        String outputDir = "."
+        Array[File]+ serveActionability
+        File doidsJson
+        File purplePurity
+        File purpleQc
+        File purpleDriverCatalogSomatic
+        File purpleDriverCatalogGermline
+        File purpleSomaticVariants
+        File purpleSomaticVariantsIndex
+        File purpleGermlineVariants
+        File purpleGermlineVariantsIndex
+        File purpleGeneCopyNumber
+        File linxFusion
+        File linxBreakend
+        File linxDriversCatalog
+        File chordPrediction
+        File annotatedVirus
+
+        String memory = "9G"
+        String javaXmx = "8G"
+        Int timeMinutes = 60
+        String dockerImage = "quay.io/biowdl/protect:v1.4"
+    }
+
+    command {
+        protect -Xmx~{javaXmx} \
+        -ref_genome_version ~{refGenomeVersion} \
+        -tumor_sample_id ~{tumorName} \
+        -reference_sample_id ~{normalName} \
+        -primary_tumor_doids ~{sep=";" sampleDoids} \
+        -output_dir ~{outputDir} \
+        -serve_actionability_dir ~{sub(serveActionability[0], basename(serveActionability[0]), "")} \
+        -doid_json ~{doidsJson} \
+        -purple_purity_tsv ~{purplePurity} \
+        -purple_qc_file ~{purpleQc} \
+        -purple_somatic_driver_catalog_tsv ~{purpleDriverCatalogSomatic} \
+        -purple_germline_driver_catalog_tsv ~{purpleDriverCatalogGermline} \
+        -purple_somatic_variant_vcf ~{purpleSomaticVariants} \
+        -purple_germline_variant_vcf ~{purpleGermlineVariants} \
+        -purple_gene_copy_number_tsv ~{purpleGeneCopyNumber} \
+        -linx_fusion_tsv ~{linxFusion} \
+        -linx_breakend_tsv ~{linxBreakend} \
+        -linx_driver_catalog_tsv ~{linxDriversCatalog} \
+        -chord_prediction_txt ~{chordPrediction} \
+        -annotated_virus_tsv ~{annotatedVirus}
+    }
+
+    output {
+        File protectTsv = "~{outputDir}/~{tumorName}.protect.tsv"
+    }
+
+    runtime {
+        time_minutes: timeMinutes # !UnknownRuntimeKey
+        docker: dockerImage
+        memory: memory
+    }
+
+    parameter_meta {
+        refGenomeVersion: {description: "The version of the genome assembly used for alignment. Either \"37\" or \"38\".", category: "required"} 
+        tumorName: {description: "The name of the tumor sample.", category: "required"}
+        normalName: {description: "The name of the normal sample.", category: "required"}
+        sampleDoids: {description: "The DOIDs (Human Disease Ontology) for the primary tumor.", category: "required"}
+        outputDir: {description: "The directory the outputs will be written to.", category: "required"}
+        serveActionability: {description: "The actionability files generated by hmftools' serve.", category: "required"}
+        doidsJson: {description: "A json with the DOID (Human Disease Ontology) tree.", category: "required"}
+        purplePurity: {description: "The purity file generated by purple.", category: "required"}
+        purpleQc: {description: "The QC file generated by purple.", category: "required"}
+        purpleDriverCatalogSomatic: {description: "The somatic driver catalog generated by purple.", category: "required"}
+        purpleDriverCatalogGermline: {description: "The germline driver catalog generated by purple.", category: "required"}
+        purpleSomaticVariants: {description: "The somatic VCF generated by purple.", category: "required"}
+        purpleSomaticVariantsIndex: {description: "The index for the somatic VCF generated by purple.", category: "required"}
+        purpleGermlineVariants: {description: "The germline VCF generated by purple.", category: "required"}
+        purpleGermlineVariantsIndex: {description: "The index of the germline VCF generated by purple.", category: "required"}
+        purpleGeneCopyNumber: {description: "The gene copy number file generated by purple.", category: "required"}
+        linxFusion: {description: "The fusion file generated by linx.", category: "required"}
+        linxBreakend: {description: "The breakend file generated by linx.", category: "required"}
+        linxDriversCatalog: {description: "The driver catalog generated generated by linx.", category: "required"}
+        chordPrediction: {description: "The chord prediction file.", category: "required"}
+        annotatedVirus: {description: "The virus-interpreter output.", category: "required"}
+
+        memory: {description: "The amount of memory this job will use.", category: "advanced"}
+        javaXmx: {description: "The maximum memory available to the program. Should be lower than `memory` to accommodate JVM overhead.",
+                  category: "advanced"}
+        timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
+        dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
+                      category: "advanced"}
+    }
+}
+
 task Purple {
     input {
         String normalName