Skip to main content
Glama

variant_call_summary

Read-only

Summarize a variant call set the way bcftools stats does: records by class, transitions and transversions with their ratio, the twelve directed substitutions, indel lengths, per-contig counts, the FILTER tally, the QUAL range, and per-sample genotype counts. Reports what could NOT be counted rather than leaving a zero standing in for it, meaning a file whose genotypes were not parsed, and any genotype naming an allele its record never declares.

Input Schema

NameRequiredDescriptionDefault
fileNowhich call set in this project, by name. Unset, it is the project's only one, and it refuses rather than guessing when there is more than one.
_filesNoThe project: record references shaped like _subject. Their records become library documents a tool names in sequences/parts/document; a trace or alignment is found by file name.
contigNosummarize ONE contig instead of the whole file, named as the file names it. The per-contig table is always over everything read; this narrows what everything else counts.
_subjectNoThe record to act on: exactly one of sequence, accession (+source), sample (an id from list_samples) or file ({name, text} or {name, base64}); record_index picks one record of several.
pass_onlyNocount only records whose FILTER is PASS or unset. A Ts/Tv computed over unfiltered calls and one computed over passing calls are different measurements, and this is which one you asked for.

Output Schema

NameRequiredDescriptionDefault
qualYesmin, max, median and the number of records stating no QUAL. Null when nothing stated one, which is not the same as a range of zero
tstvYests, tv and ratio over every ALT, and tsFirstAlt/tvFirstAlt/ratioFirstAlt over each site’s first ALT only. Both, because bcftools reports both and a multiallelic call set makes them differ
countsYesrecords, samples, and the class tallies: snps, mnps, indels, others, noAlts, multiallelicSites and multiallelicSnpSites. A site counts in every class its alleles carry, which is how bcftools counts them
filtersYesevery FILTER value seen with its count, including PASS and the unfiltered (`.`) tally: the two are different states and are counted apart
summaryYesthe call set in one sentence, generated from this run
indelPlotYessites per indel length (ALT minus REF), deletions left of zero and insertions right of it
per_contigYesrecords, snps and indels per contig, over everything read
per_sampleYesbcftools' PSC section per sample: refHom, nonRefHom, hets, transitions, transversions, indels, averageDepth, singletons, hapRef, hapAlt and missing
not_countedYeswhat this run could NOT count and why: `genotypesUnavailable` when the file's genotypes were not parsed (so per_sample is empty for a reason), and `badAlleleCalls` listing genotypes naming an allele their record never declares. Real bcftools stats exits on such a file rather than reporting per-sample numbers, so a non-empty list means per_sample has no bcftools counterpart to be compared against
indel_lengthsYesindel length (ALT minus REF) to the number of sites, sorted by length: bcftools' IDD section. Negative is a deletion
substitutionsYesthe twelve directed substitution types with their counts
substitutionMapYesthe twelve directed substitutions as a REF by ALT grid, the Summary tab’s bars as one picture; the diagonal is empty, since a base does not substitute for itself

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedOutput schema / properties / indelPlot
      Added value: +{
      +  "description": "sites per indel length (ALT minus REF), deletions left of zero and insertions right of it",
      +  "properties": {
      +    "mark": {
      +      "enum": [
      +        "line",
      +        "bar",
      +        "point"
      +      ],
      +      "type": "string"
      +    },
      +    "rules": {
      +      "items": {
      +        "properties": {
      +          "label": {
      +            "type": "string"
      +          },
      +          "y": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "y",
      +          "label"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "series": {
      +      "items": {
      +        "properties": {
      +          "name": {
      +            "type": "string"
      +          },
      +          "y": {
      +            "items": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "y"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "x": {
      +      "items": {
      +        "type": "number"
      +      },
      +      "type": "array"
      +    },
      +    "xLabel": {
      +      "type": "string"
      +    },
      +    "yLabel": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "x",
      +    "series",
      +    "xLabel",
      +    "yLabel"
      +  ],
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / substitutionMap
      Added value: +{
      +  "description": "the twelve directed substitutions as a REF by ALT grid, the Summary tab’s bars as one picture; the diagonal is empty, since a base does not substitute for itself",
      +  "properties": {
      +    "cols": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "label": {
      +      "type": "string"
      +    },
      +    "rows": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "values": {
      +      "items": {
      +        "items": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "type": "array"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "rows",
      +    "cols",
      +    "values",
      +    "label"
      +  ],
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "summary",
      -  "counts",
      -  "tstv",
      -  "substitutions",
      -  "indel_lengths",
      -  "per_contig",
      -  "filters",
      -  "qual",
      -  "per_sample",
      -  "not_counted"
      -]New value: +[
      +  "summary",
      +  "counts",
      +  "tstv",
      +  "substitutions",
      +  "indel_lengths",
      +  "substitutionMap",
      +  "indelPlot",
      +  "per_contig",
      +  "filters",
      +  "qual",
      +  "per_sample",
      +  "not_counted"
      +]
  2. First observed

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although annotations already state that the tool is read-only and non-destructive, the description adds substantial behavioral detail: it lists what statistics are reported and explains that uncountable items are reported rather than silently shown as zero, including missing genotype parsing and genotypes naming undeclared alleles. This goes well beyond safety annotations and gives the agent useful expectations about output and edge-case handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then adds one carefully placed caveat about uncountable values. Despite the long enumeration of reported statistics, every element serves to scope the summary output and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and full parameter documentation, the description is complete enough for correct tool selection and invocation. It explains the summary scope and reporting caveats without needing to duplicate return-value structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all five parameters, including the file default behavior, contig narrowing, and pass_only distinction. The description does not add parameter-specific meaning beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource (summarize a variant call set) and enumerates the exact statistics produced, tying the tool to the familiar bcftools stats behavior. This clearly distinguishes it from sibling tools such as read_variant_calls, apply_variant_call, or score_variant_effect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended use case clear—producing a bcftools-stats-style summary of a call set—but it does not explicitly say when to choose this over related sibling tools like read_variant_calls or discover_flag_rates. The usage context is implied rather than spelled out with alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources