gnomad-genetics-mcp-server
An MCP server providing access to gnomAD population genetics data and ClinVar clinical significance. It allows agents to fetch ancestry-specific allele frequencies, loss-of-function constraint metrics (pLI, LOEUF), variant lists, and sequencing coverage. The server supports batched variant lookups, gene constraint queries, and SQL-based filtering for large result sets, facilitating genetic variant interpretation and research.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://gnomad-genetics.caseyjhand.com/mcpWhat its tools do
8 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Fetch full population records for variants including allele frequencies and ClinVar significance
- Retrieve gene loss-of-function constraint metrics like pLI and LOEUF
- List variants in a gene or region with filtering by consequence and allele frequency
- Check sequencing coverage across a gene or transcript region
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- gnomad-genetics-mcp-server 0.6.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 8 advertised
- Resources
- 1 advertised
- Resource templates
- 3 advertised
- Prompts
- 1 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/skills": {
"directoryRead": true
}
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
8 advertised
gnomad_get_variant — gnomad-genetics-mcp-server: get variant
Fetch the full gnomAD population record for one or more variants — allele count/number/frequency overall and broken down per genetic-ancestry group, the filtering allele frequency (faf95) to test against a disease threshold such as ACMG/AMP BA1 or BS1, homozygote and hemizygote counts, quality flags, each callset's own counts and QC filters with a qc_status, the most severe transcript consequence with its HGVS and LOFTEE loss-of-function call (confidence, filter, flags) beside the same on the gene's MANE Select (else canonical) transcript, gnomAD's manual LoF curation verdicts, in-silico predictor scores, and joined ClinVar clinical significance. The "how common, is it benign" answer in one call. A qc_status of filtered means the variant failed gnomAD QC in every callset carrying it (gnomAD's browser hides these by default; AC0 means no high-quality carrier), so treat its counts as low-confidence rather than an observed frequency. Accepts a batch of up to 25 IDs (chrom-pos-ref-alt or rsID) with per-item partial success: a malformed or absent ID lands in failed[] — with its reason and a recovery hint — without failing the others. A coordinate ID carries no build: an absent one whose string also lifts over from the other build fails as variant_not_found_other_build, with the lifted IDs on the dataset's build in candidates, while a string valid on both builds can name a different variant on each, which no not-found path can see — so keep IDs on the dataset's build. variant_not_found means the variant is not in the chosen dataset — pair with gnomad_get_coverage to confirm the position is callable before concluding true absence. Data source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"variants"
],
"properties": {
"dataset": {
"enum": [
"gnomad_r4",
"gnomad_r4_non_ukb",
"gnomad_r3",
"gnomad_r3_controls_and_biobanks",
"gnomad_r3_non_cancer",
"gnomad_r3_non_neuro",
"gnomad_r3_non_topmed",
"gnomad_r3_non_v2",
"gnomad_r2_1",
"gnomad_r2_1_controls",
"gnomad_r2_1_non_neuro",
"gnomad_r2_1_non_cancer",
"gnomad_r2_1_non_topmed",
"exac"
],
"type": "string",
"description": "gnomAD dataset, default gnomad_r4: gnomad_r4 and its subset gnomad_r4_non_ukb (GRCh38); gnomad_r3 and its subsets gnomad_r3_controls_and_biobanks, gnomad_r3_non_cancer, gnomad_r3_non_neuro, gnomad_r3_non_topmed, gnomad_r3_non_v2 (GRCh38); gnomad_r2_1 and its subsets gnomad_r2_1_controls, gnomad_r2_1_non_cancer, gnomad_r2_1_non_neuro, gnomad_r2_1_non_topmed (GRCh37); exac (GRCh37). A subset keeps only part of its parent release's samples (non_cancer leaves out cancer-study samples, non_ukb UK Biobank's) and can leave a callset unchanged: gnomad_r4_non_ukb genome counts equal gnomad_r4's, and gnomad_r2_1_non_cancer genome counts equal gnomad_r2_1's. No subset publishes joint data, and gnomAD publishes no subset coverage or constraint, so those come from the parent. Echoed in output."
},
"variants": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"description": "Variant ID — chrom-pos-ref-alt (1-based, e.g. 1-55051215-G-GA) on chromosome 1–22, X, or Y with an optional chr prefix, or an rsID (rs11591147). Mitochondrial IDs (M, MT, chrM) are not served. Obtain a variantId from ensembl_predict_variant or a VCF. Malformed IDs are reported per-item in failed[], not rejected wholesale."
},
"maxItems": 25,
"minItems": 1,
"description": "1–25 variant IDs (chrom-pos-ref-alt or rsID) to look up in one batched call."
},
"reference_genome": {
"enum": [
"GRCh38",
"GRCh37"
],
"type": "string",
"description": "Reference build. Derived from dataset when omitted: GRCh38 for gnomad_r4, gnomad_r3, and their subsets; GRCh37 for gnomad_r2_1, its subsets, and exac. If supplied it must match the dataset, or the call is rejected. Keep aligned with ensembl coordinates."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"found",
"failed",
"dataset",
"reference_genome"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"incoherent_build",
"invalid_variant_id",
"variant_not_found",
"variant_not_found_other_build",
"mitochondrial_unsupported",
"ambiguous_rsid",
"graphql_error",
"upstream_build_mismatch",
"upstream_unavailable",
"upstream_timeout",
"upstream_access",
"invalid_upstream_response"
],
"description": "Machine-readable failure mode. Declared by this tool: `incoherent_build`: reference_genome was supplied but does not match the dataset. `invalid_variant_id`: A variant ID is outside the chrom-pos-ref-alt or rsID grammar; reported per item in failed[]. `variant_not_found`: A well-formed ID is absent from the requested dataset with no liftover candidate from the other build: rsIDs are never lifted, and a liftover lookup that fails or runs out of time leaves this reason. Reported per item in failed[]. `variant_not_found_other_build`: A coordinate ID is absent from the requested dataset and, read as an ID on the other reference build, lifts over to the IDs in candidates on the dataset's build; reported per item in failed[]. `mitochondrial_unsupported`: A variant ID names the mitochondrial chromosome (M, MT, or chrM); reported per item in failed[]. `ambiguous_rsid`: An rsID maps to more than one variant in the dataset; reported per item in failed[]. `graphql_error`: gnomAD rejected the lookup for one ID with a GraphQL error; reported per item in failed[]. `upstream_build_mismatch`: gnomAD answered one ID with a variant on a different reference build; reported per item in failed[]. `upstream_unavailable`: gnomAD stayed unavailable or throttled through every retry for one ID; reported per item in failed[]. `upstream_timeout`: gnomAD attempts timed out or the shared 45 s batch budget expired for one ID; reported per item in failed[]. `upstream_access`: gnomAD refused the request for one ID (access denied); reported per item in failed[]. `invalid_upstream_response`: gnomAD kept answering one ID with a response that failed validation; reported per item in failed[]. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"found": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant_id",
"rsids",
"reference_genome",
"dataset",
"ac",
"an",
"af",
"homozygote_count",
"hemizygote_count",
"faf95",
"populations",
"joint_populations",
"callsets",
"source",
"flags",
"qc_status",
"consequence",
"transcript_id",
"hgvsc",
"hgvsp",
"lof",
"lof_filter",
"lof_flags",
"primary_transcript",
"gene_symbol",
"lof_curations",
"in_silico",
"clinvar",
"clinvar_unavailable"
],
"properties": {
"ac": {
"type": "number",
"description": "Overall allele count — gnomAD's joint exome + genome count on gnomad_r4, the sum across carried callset(s) on every other dataset, gnomad_r4_non_ukb and the other subsets included, since none publishes joint data."
},
"af": {
"type": [
"number",
"null"
],
"description": "Overall allele frequency, ac/an from the same source; null when an is 0."
},
"an": {
"type": "number",
"description": "Overall allele number. On gnomad_r4, gnomAD's joint AN over every callable sample in both callsets, including a callset that does not carry the variant; on every other dataset (no joint data — gnomad_r4_non_ukb and every other subset, gnomad_r3, gnomad_r2_1, exac), the sum across carried callset(s), a callset that failed QC included — callsets carries each one's own AN and filters."
},
"lof": {
"type": [
"string",
"null"
],
"description": "LOFTEE's loss-of-function call on the consequence — HC high-confidence, LC low-confidence, or OS other splice; null when it made none. It describes transcript_id, which can be a minor isoform; primary_transcript carries the MANE Select (else canonical) view."
},
"faf95": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"group",
"source"
],
"properties": {
"group": {
"type": [
"string",
"null"
],
"description": "Genetic-ancestry group the value comes from (e.g. nfe); null when gnomAD names none."
},
"value": {
"type": "number",
"description": "The FAF95: the lower bound of the 95% confidence interval of the group's allele frequency."
},
"source": {
"enum": [
"joint",
"exome",
"genome"
],
"type": "string",
"description": "The record value comes from: gnomAD's joint data, or that callset."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "gnomAD's filtering allele frequency (GroupMax FAF95): the lower bound of the 95% confidence interval of a genetic-ancestry group's AF, from the group with the highest bound, over non-bottlenecked groups only — the value to test against a disease threshold such as ACMG/AMP BA1 or BS1, which raw AF is not. Read from gnomAD's joint data wherever it publishes a joint record (gnomad_r4), even when that value is null; elsewhere the higher of the callsets' faf95, which source names. Null when gnomAD reports none, as for AC 0 and singleton variants and on exac, and on a gnomad_r4 or gnomad_r3 subset, whose variant record carries the parent release's FAF (a notice names the parent); gnomad_list_gene_variants' faf95_max carries gnomad_r4_non_ukb's own."
},
"flags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Quality flags (e.g. lcr, segdup, lc_lof)."
},
"hgvsc": {
"type": [
"string",
"null"
],
"description": "HGVS coding or transcript notation of the consequence (e.g. c.406G>T); null when none. It describes transcript_id, which can be a minor isoform; primary_transcript carries the MANE Select (else canonical) view."
},
"hgvsp": {
"type": [
"string",
"null"
],
"description": "HGVS protein notation of the consequence (e.g. p.Glu136Ter); null when gnomAD gives none, as for a UTR or intronic change. It describes transcript_id, which can be a minor isoform; primary_transcript carries the MANE Select (else canonical) view."
},
"rsids": {
"type": "array",
"items": {
"type": "string"
},
"description": "dbSNP rsIDs for this variant."
},
"source": {
"type": "array",
"items": {
"enum": [
"exome",
"genome"
],
"type": "string"
},
"description": "Which gnomAD callset(s) carry this variant."
},
"clinvar": {
"anyOf": [
{
"type": "object",
"required": [
"clinical_significance",
"review_status",
"gold_stars",
"clinvar_variation_id"
],
"properties": {
"gold_stars": {
"type": [
"number",
"null"
],
"description": "ClinVar 0–4 star review rating."
},
"review_status": {
"type": [
"string",
"null"
],
"description": "ClinVar review status text."
},
"clinvar_variation_id": {
"type": [
"string",
"null"
],
"description": "ClinVar VariationID."
},
"clinical_significance": {
"type": [
"string",
"null"
],
"description": "ClinVar clinical significance (e.g. Pathogenic, Likely benign); null when no entry."
}
},
"description": "Joined ClinVar significance from gnomAD. Null when the variant has no ClinVar entry.",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "ClinVar annotation, or null when no entry exists."
},
"dataset": {
"type": "string",
"description": "Effective gnomAD dataset."
},
"callsets": {
"type": "object",
"required": [
"exome",
"genome"
],
"properties": {
"exome": {
"anyOf": [
{
"type": "object",
"required": [
"ac",
"an",
"af",
"homozygote_count",
"hemizygote_count",
"filters",
"faf95"
],
"properties": {
"ac": {
"type": "number",
"description": "Allele count in this callset alone."
},
"af": {
"type": [
"number",
"null"
],
"description": "This callset's allele frequency, ac/an; null when an is 0."
},
"an": {
"type": "number",
"description": "Allele number in this callset alone."
},
"faf95": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"group"
],
"properties": {
"group": {
"type": [
"string",
"null"
],
"description": "Genetic-ancestry group the value comes from (e.g. nfe); null when gnomAD names none."
},
"value": {
"type": "number",
"description": "The FAF95: the lower bound of the 95% confidence interval of the group's allele frequency."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "This callset's own filtering allele frequency (GroupMax FAF95, as the record's faf95). Null when gnomAD reports none, as for AC 0 and singleton variants and on exac, and on a gnomad_r4 or gnomad_r3 subset, whose variant record carries the parent release's FAF, not the subset's."
},
"filters": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "QC filters gnomAD applied to this callset's call — on gnomad_r4 AC0 (no high-quality carrier after genotype QC), AS_VQSR, InbreedingCoeff; the set varies by dataset (RF on gnomad_r2_1). Empty when the call passed QC; null when gnomAD returned no filter list."
},
"hemizygote_count": {
"type": [
"number",
"null"
],
"description": "Hemizygote count in this callset (0 off X/Y); null when gnomAD reports none."
},
"homozygote_count": {
"type": "number",
"description": "Homozygote count in this callset."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "One callset's own counts and QC filters; null when that callset does not carry the variant (absent from source)."
},
"genome": {
"anyOf": [
{
"type": "object",
"required": [
"ac",
"an",
"af",
"homozygote_count",
"hemizygote_count",
"filters",
"faf95"
],
"properties": {
"ac": {
"type": "number",
"description": "Allele count in this callset alone."
},
"af": {
"type": [
"number",
"null"
],
"description": "This callset's allele frequency, ac/an; null when an is 0."
},
"an": {
"type": "number",
"description": "Allele number in this callset alone."
},
"faf95": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"group"
],
"properties": {
"group": {
"type": [
"string",
"null"
],
"description": "Genetic-ancestry group the value comes from (e.g. nfe); null when gnomAD names none."
},
"value": {
"type": "number",
"description": "The FAF95: the lower bound of the 95% confidence interval of the group's allele frequency."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "This callset's own filtering allele frequency (GroupMax FAF95, as the record's faf95). Null when gnomAD reports none, as for AC 0 and singleton variants and on exac, and on a gnomad_r4 or gnomad_r3 subset, whose variant record carries the parent release's FAF, not the subset's."
},
"filters": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "QC filters gnomAD applied to this callset's call — on gnomad_r4 AC0 (no high-quality carrier after genotype QC), AS_VQSR, InbreedingCoeff; the set varies by dataset (RF on gnomad_r2_1). Empty when the call passed QC; null when gnomAD returned no filter list."
},
"hemizygote_count": {
"type": [
"number",
"null"
],
"description": "Hemizygote count in this callset (0 off X/Y); null when gnomAD reports none."
},
"homozygote_count": {
"type": "number",
"description": "Homozygote count in this callset."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "One callset's own counts and QC filters; null when that callset does not carry the variant (absent from source)."
}
},
"description": "Each callset's own AC/AN/AF and QC filters, beside the overall counts (which read gnomAD's joint record on gnomad_r4). A variant can fail QC in one callset and pass in the other.",
"additionalProperties": false
},
"in_silico": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value",
"annotation"
],
"properties": {
"id": {
"type": "string",
"description": "Predictor name. Ids vary by dataset — gnomad_r4: cadd, revel_max, spliceai_ds_max, pangolin_largest_ds, phylop, sift_max, polyphen_max; gnomad_r3: cadd, revel, splice_ai, primate_ai; gnomad_r2_1 and exac carry none."
},
"value": {
"type": [
"number",
"null"
],
"description": "Predictor score; null when not provided for this variant, or when gnomAD gave text with no number (the text is then in annotation)."
},
"annotation": {
"type": [
"string",
"null"
],
"description": "Text gnomAD attaches to the score — on gnomad_r3, the SpliceAI event (e.g. acceptor_gain, no_consequence). Holds the raw text when value is null for lack of a number; null for a plain score."
}
},
"description": "One in-silico predictor score.",
"additionalProperties": false
},
"description": "In-silico predictor scores present for this variant."
},
"lof_flags": {
"type": [
"string",
"null"
],
"description": "LOFTEE's flags on that call, as gnomAD writes them (e.g. PHYLOCSF_WEAK); null when none. It describes transcript_id, which can be a minor isoform; primary_transcript carries the MANE Select (else canonical) view."
},
"qc_status": {
"enum": [
"pass",
"filtered"
],
"type": "string",
"description": "gnomAD's QC verdict, by its browser's rule: pass when at least one callset carrying the variant passed QC (empty filters); filtered when none did — gnomAD's browser hides these by default."
},
"lof_filter": {
"type": [
"string",
"null"
],
"description": "The LOFTEE filter that made that call low-confidence (e.g. END_TRUNC); null when none. It describes transcript_id, which can be a minor isoform; primary_transcript carries the MANE Select (else canonical) view."
},
"variant_id": {
"type": "string",
"description": "Resolved chrom-pos-ref-alt variant ID."
},
"consequence": {
"type": [
"string",
"null"
],
"description": "The most severe VEP consequence term across the variant's transcripts, as gnomAD reports it; it can sit on a non-primary isoform, so read it beside primary_transcript. Null when none."
},
"gene_symbol": {
"type": [
"string",
"null"
],
"description": "Gene symbol for the reported consequence; null when none."
},
"populations": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"source",
"ac",
"an",
"af",
"homozygote_count",
"hemizygote_count"
],
"properties": {
"ac": {
"type": "number",
"description": "Allele count in this group."
},
"af": {
"type": [
"number",
"null"
],
"description": "Allele frequency (ac/an); null when an is 0."
},
"an": {
"type": "number",
"description": "Allele number (called chromosomes) in this group."
},
"id": {
"type": "string",
"description": "Genetic-ancestry group: afr, amr, asj, eas, fin, mid, nfe, sas, ami (genomes only), and the catch-all group — remaining on gnomad_r4 and gnomad_r4_non_ukb, oth on every other dataset."
},
"source": {
"enum": [
"exome",
"genome"
],
"type": "string",
"description": "Which gnomAD callset this group vector came from."
},
"hemizygote_count": {
"type": [
"number",
"null"
],
"description": "Hemizygote count in this group (0 off X/Y); null when gnomAD reports none."
},
"homozygote_count": {
"type": "number",
"description": "Homozygote count in this group."
}
},
"description": "One genetic-ancestry group AC/AN/AF vector.",
"additionalProperties": false
},
"description": "Per-ancestry frequency vector of each carrying callset — never collapsed to a single global AF."
},
"lof_curations": {
"type": "array",
"items": {
"type": "object",
"required": [
"gene_id",
"gene_symbol",
"verdict",
"flags",
"project"
],
"properties": {
"flags": {
"type": "array",
"items": {
"type": "string"
},
"description": "The reasons the curators recorded, as gnomAD writes them (e.g. Weak Exon Conservation); empty when none."
},
"gene_id": {
"type": "string",
"description": "Ensembl gene ID the curation is for."
},
"project": {
"type": "string",
"description": "The curation project the verdict comes from (e.g. metabolic_conditions_genes)."
},
"verdict": {
"type": "string",
"description": "The curators’ verdict (e.g. LoF, Likely LoF, Not LoF)."
},
"gene_symbol": {
"type": [
"string",
"null"
],
"description": "Its gene symbol; null when gnomAD gives none."
}
},
"description": "One of gnomAD's manual loss-of-function curations of the variant.",
"additionalProperties": false
},
"description": "gnomAD's manual loss-of-function curations of this variant, which can overturn a LOFTEE call; empty when gnomAD has none."
},
"transcript_id": {
"type": [
"string",
"null"
],
"description": "Ensembl transcript ID (unversioned) the consequence is on — not necessarily the gene's MANE Select or canonical transcript; null when none."
},
"hemizygote_count": {
"type": [
"number",
"null"
],
"description": "Overall hemizygote count, from the same source as ac and an (0 off X/Y); null when gnomAD reports none."
},
"homozygote_count": {
"type": "number",
"description": "Overall homozygote count, from the same source as ac and an."
},
"reference_genome": {
"type": "string",
"description": "Reference build the record is on (GRCh38 or GRCh37)."
},
"joint_populations": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"ac",
"an",
"af",
"homozygote_count",
"hemizygote_count"
],
"properties": {
"ac": {
"type": "number",
"description": "Allele count in this group."
},
"af": {
"type": [
"number",
"null"
],
"description": "Allele frequency (ac/an); null when an is 0."
},
"an": {
"type": "number",
"description": "Allele number (called chromosomes) in this group."
},
"id": {
"type": "string",
"description": "Genetic-ancestry group: afr, amr, asj, eas, fin, mid, nfe, sas, ami (genomes only), and the catch-all group — remaining on gnomad_r4 and gnomad_r4_non_ukb, oth on every other dataset."
},
"hemizygote_count": {
"type": [
"number",
"null"
],
"description": "Hemizygote count in this group (0 off X/Y); null when gnomAD reports none."
},
"homozygote_count": {
"type": "number",
"description": "Homozygote count in this group."
}
},
"description": "One genetic-ancestry group's AC/AN/AF in gnomAD's joint exome + genome data.",
"additionalProperties": false
},
"description": "Per-ancestry frequency vector of gnomAD's joint exome + genome data, over the same samples as the overall an. Empty on every dataset but gnomad_r4: gnomad_r4_non_ukb and every other subset, gnomad_r3, gnomad_r2_1, and exac publish no joint data."
},
"primary_transcript": {
"anyOf": [
{
"type": "object",
"required": [
"transcript_id",
"is_mane_select",
"consequence",
"hgvsc",
"hgvsp",
"lof",
"lof_filter",
"lof_flags"
],
"properties": {
"lof": {
"type": [
"string",
"null"
],
"description": "LOFTEE's loss-of-function call on this transcript (e.g. HC high-confidence, LC low-confidence); null when it made none."
},
"hgvsc": {
"type": [
"string",
"null"
],
"description": "HGVS coding or transcript notation on this transcript (e.g. c.*9G>T); null when none."
},
"hgvsp": {
"type": [
"string",
"null"
],
"description": "HGVS protein notation on this transcript (e.g. p.Glu136Ter); null when gnomAD gives none, as for a UTR or intronic change."
},
"lof_flags": {
"type": [
"string",
"null"
],
"description": "LOFTEE's flags on the call on this transcript, as gnomAD writes them (e.g. PHYLOCSF_WEAK); null when none."
},
"lof_filter": {
"type": [
"string",
"null"
],
"description": "The LOFTEE filter that made the call on this transcript low-confidence (e.g. END_TRUNC); null when none."
},
"consequence": {
"type": [
"string",
"null"
],
"description": "Most severe VEP consequence term on this transcript; null when none."
},
"transcript_id": {
"type": "string",
"description": "Ensembl transcript ID (unversioned)."
},
"is_mane_select": {
"type": [
"boolean",
"null"
],
"description": "True when this is the gene's MANE Select transcript. For the canonical entry standing in: null where gnomAD reports no MANE status — a gene without a MANE Select (such as a lncRNA) on any dataset, and every gene on a GRCh37 dataset (gnomad_r2_1, its subsets, and exac) — else false."
}
},
"description": "The variant's consequence on its gene's primary transcript.",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The consequence on the primary transcript of the consequence's gene: its MANE Select entry, else its canonical entry, from the transcript consequences gnomAD returns. Null when gnomAD lists neither entry for that gene — the variant lies outside both transcripts, e.g. on an exon only minor isoforms carry (CDKN2A's p14ARF exon 1β) — or when the variant has no transcript consequence."
},
"clinvar_unavailable": {
"type": "boolean",
"description": "True when the ClinVar lookup failed or ran out of its time budget, so clinvar is null for want of an answer; false when it succeeded, with or without an entry."
}
},
"description": "Full population record for one variant.",
"additionalProperties": false
},
"description": "Variants resolved to a population record."
},
"failed": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"error",
"reason",
"recovery"
],
"properties": {
"error": {
"type": "string",
"description": "What went wrong for this ID."
},
"reason": {
"enum": [
"invalid_variant_id",
"variant_not_found",
"variant_not_found_other_build",
"mitochondrial_unsupported",
"ambiguous_rsid",
"graphql_error",
"upstream_build_mismatch",
"upstream_unavailable",
"upstream_timeout",
"upstream_access",
"invalid_upstream_response"
],
"type": "string",
"description": "Why this ID failed — a reason declared in this tool's error contract. Branch on it rather than on the message."
},
"variant": {
"type": "string",
"description": "The input ID that failed to resolve."
},
"recovery": {
"type": "string",
"description": "The next step for this ID — the recovery hint declared for its reason."
},
"candidates": {
"type": "array",
"items": {
"type": "string"
},
"description": "Concrete variant IDs to retry: for ambiguous_rsid, the chrom-pos-ref-alt IDs the rsID maps to; for variant_not_found_other_build, the IDs this string lifts over to on the dataset's reference build when read as an ID on the other build."
}
},
"description": "One failed input ID, why it failed, and what to do next.",
"additionalProperties": false
},
"description": "Per-item failures, in input order: malformed IDs, variants absent from the dataset, or upstream errors — each with its reason and recovery hint."
},
"notice": {
"type": "string",
"description": "Non-fatal notice when optional ClinVar annotation was unavailable, and when the dataset is a gnomad_r4 or gnomad_r3 subset, whose records carry no filtering allele frequency of their own (it names the parent release)."
},
"dataset": {
"type": "string",
"description": "Effective gnomAD dataset used for the batch."
},
"reference_genome": {
"type": "string",
"description": "Effective reference build used for the batch."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}gnomad_get_gene_constraint — gnomad-genetics-mcp-server: get gene constraint
Fetch gnomAD loss-of-function constraint for a gene — pLI (probability of LoF intolerance; >0.9 intolerant), LOEUF (oe_lof_upper, the headline metric) plus its lower bound and gnomAD’s LOEUF percentile, observed/expected ratios for LoF, missense, and synonymous variation with 90% intervals for missense and synonymous, and the three Z-scores. This is the orthogonal axis to allele frequency: a loss-of-function variant matters far more in a gene intolerant to being broken. Accepts an HGNC symbol (PCSK9) or an Ensembl gene ID (ENSG00000169174). constraint_release names the release the metrics come from: gnomAD v4.1.2 for gnomad_r4, gnomad_r3, and their subsets (gnomAD publishes no v3 constraint), gnomAD v2.1.1 for gnomad_r2_1 and its subsets, and ExAC r0.3 for exac. gnomAD publishes no subset constraint, so a subset dataset reads its parent release’s table and echoes the subset as dataset. gnomAD recommends LOEUF < 0.45 to call a gene LoF-intolerant on v4.1.2 and LOEUF < 0.35 on v2.1.1; only v4.1.2 publishes the LOEUF percentile. ExAC r0.3 publishes only pLI, the Z-scores, and observed/expected counts, so on exac the ratios, their intervals, LOEUF, and the LOEUF percentile are null, constraint_flags is empty, and pLI is the intolerance measure. A mitochondrial gene (MT-CO1, MT-TL1) has no nuclear constraint: gnomAD’s mitochondrial constraint comes back in mitochondrial_constraint instead — kind protein or rna, the same table on every dataset, exac included — and is null for every nuclear gene; the nuclear LOEUF thresholds do not apply to it. Many genes have null constraint (sparse upstream) — null fields are reported as such, never fabricated. Echoes the effective dataset and reference build. Data source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"gene"
],
"properties": {
"gene": {
"type": "string",
"minLength": 2,
"description": "Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene."
},
"dataset": {
"enum": [
"gnomad_r4",
"gnomad_r4_non_ukb",
"gnomad_r3",
"gnomad_r3_controls_and_biobanks",
"gnomad_r3_non_cancer",
"gnomad_r3_non_neuro",
"gnomad_r3_non_topmed",
"gnomad_r3_non_v2",
"gnomad_r2_1",
"gnomad_r2_1_controls",
"gnomad_r2_1_non_neuro",
"gnomad_r2_1_non_cancer",
"gnomad_r2_1_non_topmed",
"exac"
],
"type": "string",
"description": "gnomAD dataset, default gnomad_r4: gnomad_r4 and its subset gnomad_r4_non_ukb (GRCh38); gnomad_r3 and its subsets gnomad_r3_controls_and_biobanks, gnomad_r3_non_cancer, gnomad_r3_non_neuro, gnomad_r3_non_topmed, gnomad_r3_non_v2 (GRCh38); gnomad_r2_1 and its subsets gnomad_r2_1_controls, gnomad_r2_1_non_cancer, gnomad_r2_1_non_neuro, gnomad_r2_1_non_topmed (GRCh37); exac (GRCh37). A subset keeps only part of its parent release's samples (non_cancer leaves out cancer-study samples, non_ukb UK Biobank's) and can leave a callset unchanged: gnomad_r4_non_ukb genome counts equal gnomad_r4's, and gnomad_r2_1_non_cancer genome counts equal gnomad_r2_1's. No subset publishes joint data, and gnomAD publishes no subset coverage or constraint, so those come from the parent. Echoed in output."
},
"reference_genome": {
"enum": [
"GRCh38",
"GRCh37"
],
"type": "string",
"description": "Reference build. Derived from dataset when omitted: GRCh38 for gnomad_r4, gnomad_r3, and their subsets; GRCh37 for gnomad_r2_1, its subsets, and exac. If supplied it must match the dataset, or the call is rejected. Keep aligned with ensembl coordinates."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"gene_id",
"symbol",
"dataset",
"reference_genome",
"constraint_release",
"pli",
"oe_lof",
"oe_lof_lower",
"oe_lof_upper",
"oe_lof_percentile",
"oe_mis",
"oe_mis_lower",
"oe_mis_upper",
"oe_syn",
"oe_syn_lower",
"oe_syn_upper",
"lof_z",
"mis_z",
"syn_z",
"obs_lof",
"exp_lof",
"obs_mis",
"exp_mis",
"obs_syn",
"exp_syn",
"constraint_flags",
"mitochondrial_constraint"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"pli": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"type": "null"
}
],
"description": "pLI — probability of LoF intolerance; >0.9 intolerant. Null when unavailable."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"gene_not_found",
"incoherent_build",
"invalid_constraint_data",
"graphql_error",
"upstream_unavailable",
"upstream_timeout",
"upstream_access",
"invalid_upstream_response"
],
"description": "Machine-readable failure mode. Declared by this tool: `gene_not_found`: No gene matched the symbol or Ensembl ID in this build. `incoherent_build`: reference_genome was supplied but does not match the dataset. `invalid_constraint_data`: gnomAD returned constraint metrics outside their valid ranges, such as a pLI above 1, or a mitochondrial constraint of a shape gnomAD’s schema does not define. `graphql_error`: gnomAD rejected the constraint query with a GraphQL error. `upstream_unavailable`: gnomAD stayed unavailable or throttled through every retry. `upstream_timeout`: gnomAD attempts timed out or the shared 45 s call budget expired. `upstream_access`: gnomAD refused the request (access denied). `invalid_upstream_response`: gnomAD kept answering with a response that failed validation. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"lof_z": {
"type": [
"number",
"null"
],
"description": "LoF constraint Z-score. Null when unavailable."
},
"mis_z": {
"type": [
"number",
"null"
],
"description": "Missense constraint Z-score. Null when unavailable."
},
"syn_z": {
"type": [
"number",
"null"
],
"description": "Synonymous constraint Z-score. Null when unavailable."
},
"oe_lof": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Non-negative observed/expected LoF ratio. Null when unavailable."
},
"oe_mis": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Observed/expected missense ratio. Null when unavailable."
},
"oe_syn": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Observed/expected synonymous ratio. Null when unavailable."
},
"symbol": {
"type": "string",
"description": "HGNC gene symbol."
},
"dataset": {
"type": "string",
"description": "Effective gnomAD dataset."
},
"exp_lof": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Non-negative expected LoF variant count. Null when unavailable."
},
"exp_mis": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Non-negative expected missense count. Null when unavailable."
},
"exp_syn": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Non-negative expected synonymous count. Null when unavailable."
},
"gene_id": {
"type": "string",
"description": "Ensembl gene ID resolved for the gene."
},
"obs_lof": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Non-negative observed LoF variant count. Null when unavailable."
},
"obs_mis": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Non-negative observed missense count. Null when unavailable."
},
"obs_syn": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Non-negative observed synonymous count. Null when unavailable."
},
"oe_lof_lower": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "LOEUF confidence-interval lower bound. Null when unavailable."
},
"oe_lof_upper": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "LOEUF (oe_lof_upper) — the headline intolerance metric; gnomAD recommends < 0.45 on v4.1.2 and < 0.35 on v2.1.1 to call a gene LoF-intolerant. Null when unavailable, and always null on exac."
},
"oe_mis_lower": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Lower bound of the 90% confidence interval around oe_mis. Null when unavailable, and always null on exac."
},
"oe_mis_upper": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Upper bound of the 90% confidence interval around oe_mis. Null when unavailable, and always null on exac."
},
"oe_syn_lower": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Lower bound of the 90% confidence interval around oe_syn. Null when unavailable, and always null on exac."
},
"oe_syn_upper": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Upper bound of the 90% confidence interval around oe_syn. Null when unavailable, and always null on exac."
},
"constraint_flags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Caveat flags gnomAD attaches to the gene’s constraint (e.g. no_exp_lof, mis_too_many, syn_outlier); empty when none, and always empty on exac, where ExAC publishes no flags."
},
"reference_genome": {
"type": "string",
"description": "Effective reference build."
},
"oe_lof_percentile": {
"anyOf": [
{
"type": "integer",
"maximum": 100,
"minimum": 0
},
{
"type": "null"
}
],
"description": "gnomAD’s LOEUF percentile — the percentile bin the gene’s LOEUF falls in among gnomAD v4.1.2’s MANE Select transcripts, an integer from 0 to 100; lower is more constrained (KMT2A is 0, FLG is 98). Only gnomAD v4.1.2 publishes it, so it is null on gnomad_r2_1, its subsets, and exac, and wherever LOEUF is null."
},
"constraint_release": {
"type": "string",
"description": "Constraint release the metrics come from: gnomAD v4.1.2 for gnomad_r4, gnomad_r3, and their subsets (gnomAD publishes no v3 constraint, so gnomad_r3 serves the GRCh38 table), gnomAD v2.1.1 for gnomad_r2_1 and its subsets, ExAC r0.3 for exac. A subset reads its parent release’s table, since gnomAD publishes no subset constraint. It labels the nuclear tables only, never mitochondrial_constraint."
},
"mitochondrial_constraint": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"obs_lof",
"exp_lof",
"oe_lof",
"oe_lof_lower",
"oe_lof_upper",
"obs_mis",
"exp_mis",
"oe_mis",
"oe_mis_lower",
"oe_mis_upper",
"obs_syn",
"exp_syn",
"oe_syn",
"oe_syn_lower",
"oe_syn_upper"
],
"properties": {
"kind": {
"type": "string",
"const": "protein",
"description": "A protein-coding mitochondrial gene: stop-gain (lof), missense, and synonymous sets."
},
"oe_lof": {
"type": "number",
"minimum": 0,
"description": "Observed/expected ratio for stop-gain SNVs."
},
"oe_mis": {
"type": "number",
"minimum": 0,
"description": "Observed/expected ratio for missense SNVs."
},
"oe_syn": {
"type": "number",
"minimum": 0,
"description": "Observed/expected ratio for synonymous SNVs."
},
"exp_lof": {
"type": "number",
"minimum": 0,
"description": "Expected sum of maximum heteroplasmy over stop-gain SNVs."
},
"exp_mis": {
"type": "number",
"minimum": 0,
"description": "Expected sum of maximum heteroplasmy over missense SNVs."
},
"exp_syn": {
"type": "number",
"minimum": 0,
"description": "Expected sum of maximum heteroplasmy over synonymous SNVs."
},
"obs_lof": {
"type": "number",
"minimum": 0,
"description": "Observed sum of maximum heteroplasmy over stop-gain SNVs."
},
"obs_mis": {
"type": "number",
"minimum": 0,
"description": "Observed sum of maximum heteroplasmy over missense SNVs."
},
"obs_syn": {
"type": "number",
"minimum": 0,
"description": "Observed sum of maximum heteroplasmy over synonymous SNVs."
},
"oe_lof_lower": {
"type": "number",
"minimum": 0,
"description": "Lower bound of the 90% interval around oe_lof."
},
"oe_lof_upper": {
"type": "number",
"minimum": 0,
"description": "Upper bound of the 90% interval around oe_lof (OEUF); lower is more constrained."
},
"oe_mis_lower": {
"type": "number",
"minimum": 0,
"description": "Lower bound of the 90% interval around oe_mis."
},
"oe_mis_upper": {
"type": "number",
"minimum": 0,
"description": "Upper bound of the 90% interval around oe_mis (OEUF); lower is more constrained."
},
"oe_syn_lower": {
"type": "number",
"minimum": 0,
"description": "Lower bound of the 90% interval around oe_syn."
},
"oe_syn_upper": {
"type": "number",
"minimum": 0,
"description": "Upper bound of the 90% interval around oe_syn."
}
},
"description": "Constraint for a protein-coding mitochondrial gene.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"observed",
"expected",
"oe",
"oe_lower",
"oe_upper"
],
"properties": {
"oe": {
"type": "number",
"minimum": 0,
"description": "Observed/expected ratio over all SNVs."
},
"kind": {
"type": "string",
"const": "rna",
"description": "A tRNA or rRNA mitochondrial gene: one set over all SNVs."
},
"expected": {
"type": "number",
"minimum": 0,
"description": "Expected sum of maximum heteroplasmy over all SNVs."
},
"observed": {
"type": "number",
"minimum": 0,
"description": "Observed sum of maximum heteroplasmy over all SNVs."
},
"oe_lower": {
"type": "number",
"minimum": 0,
"description": "Lower bound of the 90% interval around oe."
},
"oe_upper": {
"type": "number",
"minimum": 0,
"description": "Upper bound of the 90% interval around oe (OEUF); lower is more constrained."
}
},
"description": "Constraint for a tRNA or rRNA mitochondrial gene.",
"additionalProperties": false
},
{
"type": "null",
"description": "No mitochondrial constraint: the gene is nuclear."
}
],
"description": "gnomAD’s mitochondrial gene constraint, computed from 56,434 gnomAD v4.1 genomes: present for every mitochondrial gene and null for a nuclear gene, whose nuclear fields carry its constraint instead. kind \"protein\" carries observed, expected, observed/expected, and its 90% interval for stop-gain (lof; splice variants do not apply in mtDNA), missense (mis), and synonymous (syn) SNVs; kind \"rna\" (a tRNA or rRNA gene) carries one set over all SNVs. Observed and expected are sums of maximum heteroplasmy over every possible SNV, not variant counts, and the intervals come from a beta distribution, so the nuclear LOEUF thresholds do not apply; gnomAD reads the upper bound (OEUF) as the conservative measure, lower meaning stronger selection. The same table on every dataset, exac included; constraint_release does not label it."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}gnomad_list_gene_variants — gnomad-genetics-mcp-server: list gene variants
List every gnomAD variant in a gene, transcript, or region with allele frequencies, filtering allele frequencies, zygosity counts, predicted consequences with LOFTEE's loss-of-function call, and QC status, optionally filtered to one consequence class (lof, missense, synonymous, other), a LOFTEE confidence (lof_confidence HC or LC), a maximum allele frequency, and/or a maximum filtering allele frequency (faf95_max, the value to test against a disease threshold such as ACMG/AMP BA1 or BS1). Pass annotations: true to add each row's HGVS c. and p. notation, LOFTEE filter and flags, and rsIDs. Every row carries its exome and genome QC filters and a qc_status; qc_filtered counts the matching variants that failed QC in every callset carrying them (often AC0, no high-quality carrier, at AF 0), which gnomAD's browser hides by default — read them as low-confidence, not observed variants, or pass pass_only to drop them. Each call returns one page: up to limit matching variants from offset, in gnomAD's genomic order, with total counting every match; pass next_offset as offset until it is null. gnomAD lists a target only whole, so each page re-fetches the whole target — page a large gene with filters and a large limit. At offset 0, a result too large to inline is also staged on a DataCanvas table named gene_variants holding every matching variant, returned as canvas_id and table_name — call gnomad_dataframe_describe for its columns, then gnomad_dataframe_query to rank by AF, count by consequence, or group across every row rather than one page. A result that fits inline stages no table unless canvas_id is supplied, and a page past offset 0 never stages. Supply exactly one of gene, transcript_id, or region. Echoes the resolved target, the row filters, and the effective dataset and build. Data source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"gene": {
"anyOf": [
{
"type": "string",
"minLength": 2,
"description": "Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene."
},
{
"type": "string",
"maxLength": 0,
"description": "Blank — the gene is treated as omitted."
}
],
"description": "Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene. Mitochondrial genes (e.g. MT-TL1) are not served. Mutually exclusive with transcript_id and region; blank means omitted."
},
"limit": {
"type": "number",
"default": 25,
"minimum": 1,
"multipleOf": 1,
"description": "Matching variants on this page. Default 25; a value above 3,000 is clamped to 3,000, with a notice."
},
"max_af": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Keep only variants with allele frequency ≤ this value (0–1). Variants with null AF are always kept."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based position, among the variants the filters keep, of the first one on this page. Pass next_offset from the previous call to continue."
},
"region": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^(?:chr)?[0-9A-Z]+-\\d+-\\d+$",
"description": "Genomic region chrom-start-stop (1-based inclusive, e.g. 1-55039447-55064852) on chromosome 1–22, X, or Y, optional chr prefix."
}
],
"description": "Genomic region chrom-start-stop (1-based inclusive, e.g. 1-55039447-55064852): chromosome 1–22, X, or Y with an optional chr prefix (mitochondrial regions are not served), a span (stop − start) under 2,500,000 bp, and at most ~30,000 variants. Mutually exclusive with gene and transcript_id."
},
"dataset": {
"enum": [
"gnomad_r4",
"gnomad_r4_non_ukb",
"gnomad_r3",
"gnomad_r3_controls_and_biobanks",
"gnomad_r3_non_cancer",
"gnomad_r3_non_neuro",
"gnomad_r3_non_topmed",
"gnomad_r3_non_v2",
"gnomad_r2_1",
"gnomad_r2_1_controls",
"gnomad_r2_1_non_neuro",
"gnomad_r2_1_non_cancer",
"gnomad_r2_1_non_topmed",
"exac"
],
"type": "string",
"description": "gnomAD dataset, default gnomad_r4: gnomad_r4 and its subset gnomad_r4_non_ukb (GRCh38); gnomad_r3 and its subsets gnomad_r3_controls_and_biobanks, gnomad_r3_non_cancer, gnomad_r3_non_neuro, gnomad_r3_non_topmed, gnomad_r3_non_v2 (GRCh38); gnomad_r2_1 and its subsets gnomad_r2_1_controls, gnomad_r2_1_non_cancer, gnomad_r2_1_non_neuro, gnomad_r2_1_non_topmed (GRCh37); exac (GRCh37). A subset keeps only part of its parent release's samples (non_cancer leaves out cancer-study samples, non_ukb UK Biobank's) and can leave a callset unchanged: gnomad_r4_non_ukb genome counts equal gnomad_r4's, and gnomad_r2_1_non_cancer genome counts equal gnomad_r2_1's. No subset publishes joint data, and gnomAD publishes no subset coverage or constraint, so those come from the parent. Echoed in output."
},
"max_faf": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Keep only variants whose filtering allele frequency (faf95_max) is ≤ this value (0–1) — the test against a disease threshold such as ACMG/AMP BA1 or BS1. Variants with a null faf95_max are always kept, and a notice counts them among total. gnomad_r3, its subsets, and exac list rows carry no FAF, so there it filters nothing and the notice says so."
},
"canvas_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{10}$",
"description": "Optional canvas ID from a prior call, to reuse the same canvas. When supplied, a call at offset 0 always writes its result to the gene_variants table on that canvas, replacing (not appending to) the previous one, its columns included: the table takes this call's annotations shape — even when the result fits inline; a result with no variants removes the table. A page past offset 0 leaves the table as it was. Omit to stage on a fresh canvas only when the result is too large to inline."
},
"pass_only": {
"type": "boolean",
"description": "Keep only variants that passed gnomAD QC in at least one callset carrying them (qc_status pass), with the counts gnomAD's browser table shows by default: a row without joint data (every dataset but gnomad_r4, gnomad_r4_non_ukb included) reads ac, an, af, homozygote_count, hemizygote_count, and faf95_max from its passing callsets only, and max_af and max_faf filter on those values; gnomad_r4 rows keep their joint counts. The drop follows consequence_class, lof_confidence, max_af, and max_faf, and qc_filtered still counts the dropped rows. Omit to list every matching variant with its QC columns and a QC-failed callset's counts included — a single-position region then never reads as absent because of QC."
},
"annotations": {
"type": "boolean",
"description": "Add five columns describing each row's transcript_id after every default column, on the rows and in the staged gene_variants table: hgvsc, hgvsp, lof_filter, lof_flags, and rsids (pipe-joined). Omitted or false, the rows and the table carry none of them. A column toggle, not a filter: it keeps every row and filters does not echo it. It widens every row by about a quarter and every page's re-fetch of the target from gnomAD by about as much."
},
"transcript_id": {
"type": "string",
"description": "Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region; blank means omitted."
},
"lof_confidence": {
"enum": [
"HC",
"LC"
],
"type": "string",
"description": "Keep only variants whose lof — LOFTEE's call on the row's transcript_id — equals this: HC high-confidence or LC low-confidence. A row with lof null or OS matches neither. consequence_class lof reads the consequence term instead, so it keeps LoF terms LOFTEE did not call. Omit to keep every call."
},
"reference_genome": {
"enum": [
"GRCh38",
"GRCh37"
],
"type": "string",
"description": "Reference build. Derived from dataset when omitted: GRCh38 for gnomad_r4, gnomad_r3, and their subsets; GRCh37 for gnomad_r2_1, its subsets, and exac. If supplied it must match the dataset, or the call is rejected. Keep aligned with ensembl coordinates."
},
"consequence_class": {
"enum": [
"lof",
"missense",
"synonymous",
"other"
],
"type": "string",
"description": "Keep only variants in this gnomAD consequence category, read from each row's consequence: lof (pLoF) is transcript_ablation, splice_acceptor_variant, splice_donor_variant, stop_gained, frameshift_variant; missense (missense / inframe indel) is missense_variant, stop_lost, start_lost, inframe_insertion, inframe_deletion; synonymous is synonymous_variant; other is every other term and a null consequence. Omit to return all classes."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"target",
"target_kind",
"filters",
"preview",
"canvas_id",
"table_name",
"spilled",
"total",
"truncated",
"next_offset",
"qc_filtered",
"dataset",
"reference_genome"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_target",
"incoherent_build",
"invalid_region",
"region_too_large",
"mitochondrial_unsupported",
"gene_not_found",
"transcript_not_found",
"graphql_error",
"upstream_unavailable",
"upstream_timeout",
"upstream_access",
"invalid_upstream_response"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_target`: Not exactly one of gene, transcript_id, or region was supplied. `incoherent_build`: reference_genome was supplied but does not match the dataset. `invalid_region`: The region names a chromosome outside 1–22, X, Y, or breaks the coordinate bounds. `region_too_large`: The region spans 2,500,000 bp or more, or holds more variants (~30,000) than gnomAD lists at once. `mitochondrial_unsupported`: The gene, transcript, or region is on the mitochondrial chromosome (M or MT). `gene_not_found`: gnomAD holds no gene matching the symbol or Ensembl ID in this build. `transcript_not_found`: gnomAD holds no transcript matching transcript_id in this build. `graphql_error`: gnomAD rejected the variant-list query with a GraphQL error. `upstream_unavailable`: gnomAD stayed unavailable or throttled through every retry. `upstream_timeout`: gnomAD attempts timed out or the shared 45 s call budget expired. `upstream_access`: gnomAD refused the request (access denied). `invalid_upstream_response`: gnomAD kept answering with a response that failed validation. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"total": {
"type": "number",
"description": "Total matching variants across every page, not just this one — counted after pass_only drops QC-failed rows when it is set, so it then excludes the qc_filtered rows."
},
"notice": {
"type": "string",
"description": "Guidance when no variants matched, when matching variants failed gnomAD QC (the qc_filtered count, and what pass_only dropped), when max_faf is set (how many variants in total it kept untested for a null faf95_max, or that the dataset carries no FAF on its rows), when limit was clamped to its cap, the next offset when no staged table holds the rest, an offset past the end, and — when a table was staged — its name with the next steps: gnomad_dataframe_describe, then gnomad_dataframe_query."
},
"target": {
"type": "string",
"description": "The resolved target the rows describe: gene symbol or Ensembl gene ID, transcript ID, or region, as normalized for the lookup."
},
"dataset": {
"type": "string",
"description": "Effective gnomAD dataset."
},
"filters": {
"type": "object",
"required": [
"consequence_class",
"lof_confidence",
"max_af",
"max_faf",
"pass_only"
],
"properties": {
"max_af": {
"type": [
"number",
"null"
],
"description": "The max_af filter; null when omitted."
},
"max_faf": {
"type": [
"number",
"null"
],
"description": "The max_faf filter; null when omitted."
},
"pass_only": {
"anyOf": [
{
"type": "boolean",
"const": true
},
{
"type": "null"
}
],
"description": "true when pass_only was set; null when omitted or false."
},
"lof_confidence": {
"anyOf": [
{
"enum": [
"HC",
"LC"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "The lof_confidence filter; null when omitted."
},
"consequence_class": {
"anyOf": [
{
"enum": [
"lof",
"missense",
"synonymous",
"other"
],
"type": "string",
"description": "gnomAD's category of consequence (the terms each holds are listed on the consequence_class filter): lof is pLoF, missense covers missense and inframe indels, start_lost, and stop_lost; other includes a null consequence."
},
{
"type": "null"
}
],
"description": "The consequence_class filter; null when omitted."
}
},
"description": "The row filters this call applied, each null when not set. offset, limit, canvas_id, and annotations are not filters.",
"additionalProperties": false
},
"preview": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant_id",
"af",
"ac",
"an",
"consequence",
"consequence_class",
"homozygote_count",
"hemizygote_count",
"faf95_max",
"faf95_max_group",
"source",
"flags",
"exome_filters",
"genome_filters",
"qc_status",
"transcript_id",
"consequence_transcript",
"lof"
],
"properties": {
"ac": {
"type": "number",
"description": "Allele count — gnomAD's joint exome + genome count on gnomad_r4; on every other dataset, gnomad_r4_non_ukb and the other subsets included (no joint data), the sum across carried callsets, or under pass_only across those that passed QC."
},
"af": {
"type": [
"number",
"null"
],
"description": "Allele frequency, ac/an from the same source — the value max_af filters on, so under pass_only a row without joint data reads its passing callsets; null when an is 0."
},
"an": {
"type": "number",
"description": "Allele number. On gnomad_r4, gnomAD's joint AN over every callable sample in both callsets, including a callset that does not carry the variant or failed QC; on every other dataset (no joint data — gnomad_r4_non_ukb and every other subset, gnomad_r3, gnomad_r2_1, exac), the sum across carried callsets — a QC-failed one included, except under pass_only, which sums only the callsets that passed, as gnomAD's browser table does."
},
"lof": {
"type": [
"string",
"null"
],
"description": "LOFTEE's loss-of-function call on transcript_id — HC high-confidence, LC low-confidence, or OS other splice — the value lof_confidence filters on; null when LOFTEE made none. It describes transcript_id, which can be a minor isoform (consequence_transcript other), and is distinct from consequence_class lof, which gnomAD reads from the consequence term."
},
"flags": {
"type": "string",
"description": "Quality flags, pipe-joined (empty when none)."
},
"hgvsc": {
"type": [
"string",
"null"
],
"description": "HGVS coding or transcript notation on transcript_id (e.g. c.137G>T, c.*9G>T); null when gnomAD gives none. Present only when annotations is true; absent (not null) otherwise."
},
"hgvsp": {
"type": [
"string",
"null"
],
"description": "HGVS protein notation on transcript_id (e.g. p.Arg46Leu); null when gnomAD gives none, as for a UTR or intronic change. Present only when annotations is true; absent (not null) otherwise."
},
"rsids": {
"type": "string",
"description": "dbSNP rsIDs, pipe-joined; empty when gnomAD lists none. gnomad_search_clinvar's table joins its rsids with semicolons. Present only when annotations is true; absent (not null) otherwise."
},
"source": {
"type": "string",
"description": "Carried callset(s), pipe-joined (e.g. exome|genome)."
},
"faf95_max": {
"type": [
"number",
"null"
],
"description": "gnomAD's filtering allele frequency (GroupMax FAF95): the lower bound of the 95% confidence interval of a genetic-ancestry group's AF, from the group with the highest bound, over non-bottlenecked groups — the value max_faf filters on and the one to test against a disease threshold such as ACMG/AMP BA1 or BS1, which raw AF is not. From the same records as ac and an: gnomAD's joint value on gnomad_r4 (the same figure as gnomad_get_variant's faf95 there); elsewhere the highest a summed callset reports, gnomad_r4_non_ukb's and each gnomad_r2_1 subset's own. Null when gnomAD reports none, as for AC 0 and singleton variants, and on every row of gnomad_r3, its subsets, and exac, whose list rows carry no FAF."
},
"lof_flags": {
"type": [
"string",
"null"
],
"description": "LOFTEE's flags on the call on transcript_id, as gnomAD writes them (e.g. PHYLOCSF_WEAK, NAGNAG_SITE) — they can qualify an HC call too; null when none. Present only when annotations is true; absent (not null) otherwise."
},
"qc_status": {
"enum": [
"pass",
"filtered"
],
"type": "string",
"description": "gnomAD's QC verdict, by its browser's rule: pass when at least one callset carrying the variant passed QC (an empty filters column); filtered when none did — gnomAD's browser hides these by default, and AC0 among the filters means no high-quality carrier."
},
"lof_filter": {
"type": [
"string",
"null"
],
"description": "The LOFTEE filter that made the call on transcript_id low-confidence (e.g. END_TRUNC); null when none. Present only when annotations is true; absent (not null) otherwise."
},
"variant_id": {
"type": "string",
"description": "chrom-pos-ref-alt variant ID."
},
"consequence": {
"type": [
"string",
"null"
],
"description": "VEP consequence term, as gnomAD's tables show it: the most severe in the gene on a gene target, the named transcript's term on a transcript target, the most severe across transcripts on a region target. It can sit on a non-primary isoform — see consequence_transcript. Null when none."
},
"exome_filters": {
"type": [
"string",
"null"
],
"description": "QC filters gnomAD applied to the exome call, pipe-joined (e.g. AC0|AS_VQSR; the set varies by dataset, RF on gnomad_r2_1). Empty when the exome call passed QC; null when the exome callset does not carry the variant or gnomAD returned no filter list."
},
"transcript_id": {
"type": [
"string",
"null"
],
"description": "Ensembl transcript ID (unversioned) the consequence is on; null when gnomAD names none, as for an intergenic variant."
},
"genome_filters": {
"type": [
"string",
"null"
],
"description": "QC filters gnomAD applied to the genome call, pipe-joined (e.g. AC0|AS_VQSR; the set varies by dataset, RF on gnomad_r2_1). Empty when the genome call passed QC; null when the genome callset does not carry the variant or gnomAD returned no filter list."
},
"faf95_max_group": {
"type": [
"string",
"null"
],
"description": "Genetic-ancestry group faf95_max comes from (e.g. nfe); null when faf95_max is null or gnomAD names none."
},
"hemizygote_count": {
"type": [
"number",
"null"
],
"description": "Hemizygote count (0 off X/Y), from the same source as ac, an, and homozygote_count — under pass_only, the passing callsets of a row without joint data; null when none of them reports one."
},
"homozygote_count": {
"type": "number",
"description": "Homozygote count, from the same source as ac and an — under pass_only, the passing callsets of a row without joint data."
},
"consequence_class": {
"enum": [
"lof",
"missense",
"synonymous",
"other"
],
"type": "string",
"description": "gnomAD's category of consequence (the terms each holds are listed on the consequence_class filter): lof is pLoF, missense covers missense and inframe indels, start_lost, and stop_lost; other includes a null consequence."
},
"consequence_transcript": {
"anyOf": [
{
"enum": [
"mane_select",
"canonical",
"other"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "On a gene target, where transcript_id sits as gnomAD's gene table marks it (†): mane_select when it is the gene's MANE Select transcript; canonical when the gene has no MANE Select (none on any GRCh37 dataset: gnomad_r2_1, its subsets, and exac) and it is the canonical transcript; other when the consequence is on another transcript, so it may be milder or absent on the primary one — gnomad_get_variant's primary_transcript gives that term. Null on transcript and region targets, and for a gene with neither a MANE Select nor a canonical transcript."
}
},
"description": "One gene-variant row — also the canvas table column set: the default columns, then, with annotations, hgvsc, hgvsp, lof_filter, lof_flags, and rsids.",
"additionalProperties": false
},
"description": "This page: up to limit matching variants from offset, in genomic order — the immediate answer."
},
"spilled": {
"type": "boolean",
"description": "True when the matching variants exceeded the inline budget at offset 0, so this call staged every one of them in table_name; the page holds at most limit of them either way."
},
"canvas_id": {
"type": "string",
"description": "Canvas holding table_name (or the canvas_id you supplied) — pass it to gnomad_dataframe_describe, then gnomad_dataframe_query. Empty when this call used no canvas: the result fit inline and no canvas_id was supplied, or the page started past offset 0."
},
"truncated": {
"type": "boolean",
"description": "True when matching variants remain past this page; continue with next_offset."
},
"table_name": {
"type": "string",
"description": "Canvas table this call staged (gene_variants), holding every matching variant — inspect it with gnomad_dataframe_describe, then query it with gnomad_dataframe_query. Empty when this call staged no table, as on every page past offset 0."
},
"next_offset": {
"type": [
"number",
"null"
],
"description": "offset for the next page; null when this page reaches the last matching variant."
},
"qc_filtered": {
"type": "number",
"description": "Matching variants that failed gnomAD QC in every callset carrying them (qc_status filtered), counted over every match — not just this page — before pass_only drops them."
},
"target_kind": {
"enum": [
"gene",
"transcript",
"region"
],
"type": "string",
"description": "Which target type was queried."
},
"reference_genome": {
"type": "string",
"description": "Effective reference build."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}gnomad_get_coverage — gnomad-genetics-mcp-server: get coverage
Fetch gnomAD sequencing-coverage summary across a gene, transcript, or region — mean and median read depth, plus the mean fraction of samples covered at each depth threshold (1× through 100×), separated by exome and genome track. gnomAD reports coverage in buckets: 1 bp for a region spanning under 850 bp, wider for larger targets (bucket_size), and a gene or transcript is summarized over its exons ±75 bp, not its introns. Use this to disambiguate a true absent variant from an uncallable position: a variant missing from a well-covered region is informative, while one missing from a poorly-covered region is not. Supply exactly one of gene, transcript_id, or region. The optional coverage_source narrows to one track; by default both available tracks are returned. gnomAD publishes no coverage for subsets, so a subset dataset reads its parent release (gnomad_r4_non_ukb reads gnomad_r4) over all the parent’s samples: coverage_dataset names the release read, and a notice says so. Echoes the effective dataset and build. Data source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"gene": {
"anyOf": [
{
"type": "string",
"minLength": 2,
"description": "Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene."
},
{
"type": "string",
"maxLength": 0,
"description": "Blank — the gene is treated as omitted."
}
],
"description": "Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene. Mitochondrial genes (e.g. MT-TL1) are not served. Mutually exclusive with transcript_id and region; blank means omitted."
},
"region": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^(?:chr)?[0-9A-Z]+-\\d+-\\d+$",
"description": "Genomic region chrom-start-stop (1-based inclusive, e.g. 1-55039447-55064852) on chromosome 1–22, X, or Y, optional chr prefix."
}
],
"description": "Genomic region chrom-start-stop (1-based inclusive, e.g. 1-55039447-55064852): chromosome 1–22, X, or Y with an optional chr prefix (mitochondrial regions are not served) and a span (stop − start) under 2,500,000 bp. Mutually exclusive with gene and transcript_id."
},
"dataset": {
"enum": [
"gnomad_r4",
"gnomad_r4_non_ukb",
"gnomad_r3",
"gnomad_r3_controls_and_biobanks",
"gnomad_r3_non_cancer",
"gnomad_r3_non_neuro",
"gnomad_r3_non_topmed",
"gnomad_r3_non_v2",
"gnomad_r2_1",
"gnomad_r2_1_controls",
"gnomad_r2_1_non_neuro",
"gnomad_r2_1_non_cancer",
"gnomad_r2_1_non_topmed",
"exac"
],
"type": "string",
"description": "gnomAD dataset, default gnomad_r4: gnomad_r4 and its subset gnomad_r4_non_ukb (GRCh38); gnomad_r3 and its subsets gnomad_r3_controls_and_biobanks, gnomad_r3_non_cancer, gnomad_r3_non_neuro, gnomad_r3_non_topmed, gnomad_r3_non_v2 (GRCh38); gnomad_r2_1 and its subsets gnomad_r2_1_controls, gnomad_r2_1_non_cancer, gnomad_r2_1_non_neuro, gnomad_r2_1_non_topmed (GRCh37); exac (GRCh37). A subset keeps only part of its parent release's samples (non_cancer leaves out cancer-study samples, non_ukb UK Biobank's) and can leave a callset unchanged: gnomad_r4_non_ukb genome counts equal gnomad_r4's, and gnomad_r2_1_non_cancer genome counts equal gnomad_r2_1's. No subset publishes joint data, and gnomAD publishes no subset coverage or constraint, so those come from the parent. Echoed in output."
},
"transcript_id": {
"type": "string",
"description": "Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region; blank means omitted."
},
"coverage_source": {
"enum": [
"exome",
"genome"
],
"type": "string",
"description": "Restrict to one coverage track. Omit to return every available track."
},
"reference_genome": {
"enum": [
"GRCh38",
"GRCh37"
],
"type": "string",
"description": "Reference build. Derived from dataset when omitted: GRCh38 for gnomad_r4, gnomad_r3, and their subsets; GRCh37 for gnomad_r2_1, its subsets, and exac. If supplied it must match the dataset, or the call is rejected. Keep aligned with ensembl coordinates."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"target",
"target_kind",
"summaries",
"dataset",
"coverage_dataset",
"reference_genome"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_target",
"incoherent_build",
"invalid_region",
"region_too_large",
"mitochondrial_unsupported",
"gene_not_found",
"transcript_not_found",
"graphql_error",
"upstream_unavailable",
"upstream_timeout",
"upstream_access",
"invalid_upstream_response"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_target`: Not exactly one of gene, transcript_id, or region was supplied. `incoherent_build`: reference_genome was supplied but does not match the dataset. `invalid_region`: The region names a chromosome outside 1–22, X, Y, or breaks the coordinate bounds. `region_too_large`: The region spans 2,500,000 bp or more, beyond what gnomAD summarizes at once. `mitochondrial_unsupported`: The gene, transcript, or region is on the mitochondrial chromosome (M or MT). `gene_not_found`: gnomAD holds no gene matching the symbol or Ensembl ID in this build. `transcript_not_found`: gnomAD holds no transcript matching transcript_id in this build. `graphql_error`: gnomAD rejected the coverage query with a GraphQL error. `upstream_unavailable`: gnomAD stayed unavailable or throttled through every retry. `upstream_timeout`: gnomAD attempts timed out or the shared 45 s call budget expired. `upstream_access`: gnomAD refused the request (access denied). `invalid_upstream_response`: gnomAD kept answering with a response that failed validation. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Disclosure that a subset dataset was read from its parent release, and of missing target bases, missing supported tracks, or an explicitly requested unsupported track. Missing data leaves callability unknown."
},
"target": {
"type": "string",
"description": "The resolved target (gene symbol/ID, transcript ID, or region) the coverage describes."
},
"dataset": {
"type": "string",
"description": "Effective gnomAD dataset."
},
"summaries": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"positions",
"target_positions",
"missing_positions",
"bucket_count",
"bucket_size",
"mean_depth",
"median_depth",
"fraction_over_1",
"fraction_over_5",
"fraction_over_10",
"fraction_over_15",
"fraction_over_20",
"fraction_over_25",
"fraction_over_30",
"fraction_over_50",
"fraction_over_100"
],
"properties": {
"source": {
"enum": [
"exome",
"genome"
],
"type": "string",
"description": "Which gnomAD coverage track this summary covers."
},
"positions": {
"type": "number",
"description": "Target bases inside the summarized buckets: of start..stop for a region, of the exons ±75 bp for a gene or transcript. Falls short of the target when the track has no records at its edges (typically outside the exome capture); those bases are left out, not counted as zero depth."
},
"mean_depth": {
"type": [
"number",
"null"
],
"description": "Mean read depth: the average of the summarized buckets’ mean depths; null when no data."
},
"bucket_size": {
"type": "number",
"description": "Width of each gnomAD coverage bucket in bp: 1 for a region spanning under 850 bp, otherwise about 1/500 of the queried size. Depth and fraction values describe buckets, not single bases."
},
"bucket_count": {
"type": "number",
"description": "Number of gnomAD coverage buckets summarized: every returned bucket overlapping the target bases. gnomAD returns every bucket between the first and last record of a track, so an empty bucket inside that span counts as zero depth; buckets past the outermost records are not returned and not counted."
},
"median_depth": {
"type": [
"number",
"null"
],
"description": "Median, across the summarized buckets, of each bucket’s depth (the average of its per-base medians); null when no data."
},
"fraction_over_1": {
"type": [
"number",
"null"
],
"description": "Fraction of samples covered at ≥1×, averaged over the summarized buckets (gnomAD rounds each bucket's fraction up to the next 0.01); null when no data."
},
"fraction_over_5": {
"type": [
"number",
"null"
],
"description": "Fraction of samples covered at ≥5×, averaged over the summarized buckets (gnomAD rounds each bucket's fraction up to the next 0.01); null when no data."
},
"fraction_over_10": {
"type": [
"number",
"null"
],
"description": "Fraction of samples covered at ≥10×, averaged over the summarized buckets (gnomAD rounds each bucket's fraction up to the next 0.01); null when no data."
},
"fraction_over_15": {
"type": [
"number",
"null"
],
"description": "Fraction of samples covered at ≥15×, averaged over the summarized buckets (gnomAD rounds each bucket's fraction up to the next 0.01); null when no data."
},
"fraction_over_20": {
"type": [
"number",
"null"
],
"description": "Fraction of samples covered at ≥20×, averaged over the summarized buckets (gnomAD rounds each bucket's fraction up to the next 0.01); null when no data."
},
"fraction_over_25": {
"type": [
"number",
"null"
],
"description": "Fraction of samples covered at ≥25×, averaged over the summarized buckets (gnomAD rounds each bucket's fraction up to the next 0.01); null when no data."
},
"fraction_over_30": {
"type": [
"number",
"null"
],
"description": "Fraction of samples covered at ≥30×, averaged over the summarized buckets (gnomAD rounds each bucket's fraction up to the next 0.01); null when no data."
},
"fraction_over_50": {
"type": [
"number",
"null"
],
"description": "Fraction of samples covered at ≥50×, averaged over the summarized buckets (gnomAD rounds each bucket's fraction up to the next 0.01); null when no data."
},
"target_positions": {
"type": "number",
"description": "Total target bases: start..stop inclusive for a region, merged exons ±75 bp for a gene or transcript."
},
"fraction_over_100": {
"type": [
"number",
"null"
],
"description": "Fraction of samples covered at ≥100×, averaged over the summarized buckets (gnomAD rounds each bucket's fraction up to the next 0.01); null when no data."
},
"missing_positions": {
"type": "number",
"description": "Target bases without returned coverage buckets (target_positions minus positions). Callability is unknown for these bases; they are not measured zero depth."
}
},
"description": "Aggregate coverage for one callset track over the target.",
"additionalProperties": false
},
"description": "Per-track coverage summaries (exome and/or genome)."
},
"target_kind": {
"enum": [
"gene",
"transcript",
"region"
],
"type": "string",
"description": "Which target type was queried."
},
"coverage_dataset": {
"type": "string",
"description": "The gnomAD release the coverage was read from: dataset itself for a release, the parent release for a subset (gnomad_r4 for gnomad_r4_non_ukb, gnomad_r3 for the gnomad_r3 subsets, gnomad_r2_1 for the gnomad_r2_1 subsets), since gnomAD publishes no subset coverage."
},
"reference_genome": {
"type": "string",
"description": "Effective reference build."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}gnomad_get_variant_cooccurrence — gnomad-genetics-mcp-server: get variant cooccurrence
Estimate whether two variants in the same gene sit on different haplotypes (in trans — compound heterozygous) or on the same one (in cis), from gnomAD v2.1 exome genotypes: the probability of compound heterozygosity and the genotype and haplotype counts behind it, overall and per genetic-ancestry group. For a proband with two rare heterozygous variants in a recessive gene and no parental samples. Takes exactly two GRCh37 chrom-pos-ref-alt IDs and always reads gnomad_r2_1, the only dataset gnomAD serves co-occurrence for, echoing it with GRCh37. A GRCh38 ID can name a different GRCh37 variant or none, so convert GRCh38 IDs first: gnomad_get_variant on dataset gnomad_r2_1 lists their GRCh37 IDs as candidates only when the ID fails there as variant_not_found_other_build; an ID gnomad_r2_1 finds returns a different variant. gnomAD answers only for two different coding or UTR variants of one gene, both in its exome samples with exome allele frequency of 5% or less; any other pair fails as cooccurrence_unavailable with gnomAD's reason. Each count key names variant_ids[0]'s genotype or allele first and variant_ids[1]'s second, and variant_ids can list the pair in another order than sent. The notice carries gnomAD's calibration caveat and its browser's reading of the probability. gnomAD's browser also notes when the pair is found in phase as a multi-nucleotide variant; this tool does not check for one. Data source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"variants"
],
"properties": {
"variants": {
"type": "array",
"items": {
"type": "string",
"description": "GRCh37 variant ID — chrom-pos-ref-alt (1-based, e.g. 1-55505647-G-T) on chromosome 1–22, X, or Y, with an optional chr prefix."
},
"maxItems": 2,
"minItems": 2,
"description": "The two variants to phase, as GRCh37 chrom-pos-ref-alt IDs. Order does not matter: variant_ids in the output gives the order the counts use."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"variant_ids",
"dataset",
"reference_genome",
"p_compound_heterozygous",
"genotype_counts",
"haplotype_counts",
"populations",
"notice"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_variant_id",
"mitochondrial_unsupported",
"cooccurrence_unavailable",
"graphql_error",
"upstream_unavailable",
"upstream_timeout",
"upstream_access",
"invalid_upstream_response"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_variant_id`: A variant is not a chrom-pos-ref-alt ID on chromosome 1–22, X, or Y — an rsID included, since co-occurrence takes coordinate IDs. `mitochondrial_unsupported`: A variant ID names the mitochondrial chromosome (M, MT, or chrM). `cooccurrence_unavailable`: gnomAD refused the pair: the same variant twice, a variant absent from gnomAD v2.1 (as a GRCh38 ID usually is), variants in different genes or outside coding and UTR sequence, a variant with no exome call, or one with exome allele frequency above 5%. The message is gnomAD's reason. `graphql_error`: gnomAD rejected the co-occurrence query with a GraphQL error other than a refusal of the pair. `upstream_unavailable`: gnomAD stayed unavailable or throttled through every retry. `upstream_timeout`: gnomAD attempts timed out or the shared 45 s call budget expired. `upstream_access`: gnomAD refused the request (access denied). `invalid_upstream_response`: gnomAD kept answering with a response that failed validation — counts of the wrong shape, or variant_ids naming a pair other than the one sent. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "gnomAD's calibration caveat and its browser's reading of the probability for this pair. When no sample carries both variants, it adds that the counts come from each variant's separate data and do not account for samples not covered at both sites; that coverage sentence appears only then."
},
"dataset": {
"type": "string",
"const": "gnomad_r2_1",
"description": "Dataset the counts come from — always gnomad_r2_1, the only one gnomAD serves co-occurrence for."
},
"populations": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"p_compound_heterozygous",
"genotype_counts",
"haplotype_counts"
],
"properties": {
"id": {
"type": "string",
"description": "Genetic-ancestry group of gnomAD v2.1 exomes: afr, amr, asj, eas, fin, nfe, oth, sas."
},
"genotype_counts": {
"type": "object",
"required": [
"ref_ref",
"ref_het",
"ref_hom",
"het_ref",
"het_het",
"het_hom",
"hom_ref",
"hom_het",
"hom_hom"
],
"properties": {
"het_het": {
"type": "number",
"description": "Samples heterozygous for both variants — the carriers whose phase the probability estimates."
},
"het_hom": {
"type": "number",
"description": "Samples heterozygous for variant_ids[0] and homozygous alternate for variant_ids[1]."
},
"het_ref": {
"type": "number",
"description": "Samples heterozygous for variant_ids[0] and homozygous reference for variant_ids[1]."
},
"hom_het": {
"type": "number",
"description": "Samples homozygous alternate for variant_ids[0] and heterozygous for variant_ids[1]."
},
"hom_hom": {
"type": "number",
"description": "Samples homozygous alternate for variant_ids[0] and for variant_ids[1]."
},
"hom_ref": {
"type": "number",
"description": "Samples homozygous alternate for variant_ids[0] and homozygous reference for variant_ids[1]."
},
"ref_het": {
"type": "number",
"description": "Samples homozygous reference for variant_ids[0] and heterozygous for variant_ids[1]."
},
"ref_hom": {
"type": "number",
"description": "Samples homozygous reference for variant_ids[0] and homozygous alternate for variant_ids[1]."
},
"ref_ref": {
"type": "number",
"description": "Samples homozygous reference for variant_ids[0] and for variant_ids[1]."
}
},
"description": "Samples per genotype pair. Each key names variant_ids[0]'s genotype first and variant_ids[1]'s second: ref (homozygous reference), het (heterozygous), hom (homozygous alternate).",
"additionalProperties": false
},
"haplotype_counts": {
"type": "object",
"required": [
"ref_ref",
"ref_alt",
"alt_ref",
"alt_alt"
],
"properties": {
"alt_alt": {
"type": "number",
"description": "Estimated haplotypes carrying the alternate allele of both variants (in cis)."
},
"alt_ref": {
"type": "number",
"description": "Estimated haplotypes carrying the alternate allele of variant_ids[0] and the reference allele of variant_ids[1]."
},
"ref_alt": {
"type": "number",
"description": "Estimated haplotypes carrying the reference allele of variant_ids[0] and the alternate allele of variant_ids[1]."
},
"ref_ref": {
"type": "number",
"description": "Estimated haplotypes carrying the reference allele of both variants."
}
},
"description": "gnomAD's estimated haplotype counts, fractional where samples heterozygous for both variants leave the phase to its EM estimate. Each key names variant_ids[0]'s allele first and variant_ids[1]'s second.",
"additionalProperties": false
},
"p_compound_heterozygous": {
"type": [
"number",
"null"
],
"description": "Estimated probability that the two variants lie on different haplotypes (in trans, compound heterozygous). Null when gnomAD computes none, as when either variant has no carrier among these samples — never read null as 0."
}
},
"description": "One genetic-ancestry group's co-occurrence counts, keyed like the overall counts.",
"additionalProperties": false
},
"description": "The same counts per genetic-ancestry group, in gnomAD's order."
},
"variant_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The pair in gnomAD's order, which labels every count: variant_ids[0] is the first token of each key, variant_ids[1] the second. Can differ from the order sent."
},
"genotype_counts": {
"type": "object",
"required": [
"ref_ref",
"ref_het",
"ref_hom",
"het_ref",
"het_het",
"het_hom",
"hom_ref",
"hom_het",
"hom_hom"
],
"properties": {
"het_het": {
"type": "number",
"description": "Samples heterozygous for both variants — the carriers whose phase the probability estimates."
},
"het_hom": {
"type": "number",
"description": "Samples heterozygous for variant_ids[0] and homozygous alternate for variant_ids[1]."
},
"het_ref": {
"type": "number",
"description": "Samples heterozygous for variant_ids[0] and homozygous reference for variant_ids[1]."
},
"hom_het": {
"type": "number",
"description": "Samples homozygous alternate for variant_ids[0] and heterozygous for variant_ids[1]."
},
"hom_hom": {
"type": "number",
"description": "Samples homozygous alternate for variant_ids[0] and for variant_ids[1]."
},
"hom_ref": {
"type": "number",
"description": "Samples homozygous alternate for variant_ids[0] and homozygous reference for variant_ids[1]."
},
"ref_het": {
"type": "number",
"description": "Samples homozygous reference for variant_ids[0] and heterozygous for variant_ids[1]."
},
"ref_hom": {
"type": "number",
"description": "Samples homozygous reference for variant_ids[0] and homozygous alternate for variant_ids[1]."
},
"ref_ref": {
"type": "number",
"description": "Samples homozygous reference for variant_ids[0] and for variant_ids[1]."
}
},
"description": "Samples per genotype pair. Each key names variant_ids[0]'s genotype first and variant_ids[1]'s second: ref (homozygous reference), het (heterozygous), hom (homozygous alternate).",
"additionalProperties": false
},
"haplotype_counts": {
"type": "object",
"required": [
"ref_ref",
"ref_alt",
"alt_ref",
"alt_alt"
],
"properties": {
"alt_alt": {
"type": "number",
"description": "Estimated haplotypes carrying the alternate allele of both variants (in cis)."
},
"alt_ref": {
"type": "number",
"description": "Estimated haplotypes carrying the alternate allele of variant_ids[0] and the reference allele of variant_ids[1]."
},
"ref_alt": {
"type": "number",
"description": "Estimated haplotypes carrying the reference allele of variant_ids[0] and the alternate allele of variant_ids[1]."
},
"ref_ref": {
"type": "number",
"description": "Estimated haplotypes carrying the reference allele of both variants."
}
},
"description": "gnomAD's estimated haplotype counts, fractional where samples heterozygous for both variants leave the phase to its EM estimate. Each key names variant_ids[0]'s allele first and variant_ids[1]'s second.",
"additionalProperties": false
},
"reference_genome": {
"type": "string",
"const": "GRCh37",
"description": "Reference build of variant_ids — always GRCh37."
},
"p_compound_heterozygous": {
"type": [
"number",
"null"
],
"description": "Estimated probability that the two variants lie on different haplotypes (in trans, compound heterozygous). Null when gnomAD computes none, as when either variant has no carrier among these samples — never read null as 0."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}gnomad_search_clinvar — gnomad-genetics-mcp-server: search clinvar
Search ClinVar (NCBI E-utilities) for a gene and return its classified variants — the germline clinical significance with its review status, 0–4 star rating, and conditions; any somatic oncogenicity or clinical-impact classification with its own review status and tumor types; molecular consequences, submission counts, and gnomAD-compatible identifiers (canonical SPDI, rsIDs, and a GRCh38 variant ID for gnomad_get_variant, derived from the SPDI or filled from gnomAD's own ClinVar mapping) — turning the variant-level significance gnomAD joins into a gene-panel curation view. Optionally filter by germline clinical_significance (e.g. pathogenic) and a minimum germline star rating. Each call returns one window of up to limit ClinVar records (default 10): total_found is the ClinVar count for the search terms (the match count for a mapped significance term alone, a candidate count once min_review_stars or any other term applies), and next_offset continues through the rest via offset. A window too large to inline is staged on a DataCanvas table named clinvar_variants, returned as canvas_id and table_name beside an inline preview — call gnomad_dataframe_describe for its columns, then gnomad_dataframe_query to rank or count across the window. A window that fits inline stages no table unless canvas_id is supplied. Keyless, but honors NCBI_API_KEY for a higher rate limit. Credit: ClinVar, NCBI.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"gene"
],
"properties": {
"gene": {
"type": "string",
"minLength": 2,
"description": "Gene HGNC symbol (e.g. PCSK9). ClinVar indexes HGNC symbols only — Ensembl gene IDs (ENSG…) are not resolved here, unlike the other gnomAD tools; resolve one to its symbol via ensembl_lookup_gene."
},
"limit": {
"type": "number",
"default": 10,
"minimum": 1,
"multipleOf": 1,
"description": "ClinVar records to fetch in this window. A mapped clinical_significance term alone narrows the search to matching records, so its windows are full; min_review_stars and any other significance term are also applied after the fetch, so their windows can return fewer rows. Default 10; a value above 1,500 is clamped to 1,500, with a notice."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 2147483647,
"minimum": 0,
"description": "Zero-based position of the first ClinVar record in this window. Pass next_offset from the previous call to continue."
},
"canvas_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{10}$",
"description": "Optional canvas ID from a prior call, to reuse the same canvas. When supplied, each search writes its window to the clinvar_variants table on that canvas, replacing (not appending to) the previous one — even when the window fits inline; a window with no rows removes the table. An Ensembl gene ID searches nothing and leaves the canvas as it was. Omit to stage on a fresh canvas only when the window is too large to inline."
},
"min_review_stars": {
"type": "integer",
"maximum": 4,
"minimum": 0,
"description": "Keep only variants whose germline classification has at least this gold-star rating (0–4). ClinVar's review-status search also matches the review status of a somatic classification, and those records are dropped after the fetch, so a window can return fewer rows than limit."
},
"clinical_significance": {
"type": "string",
"description": "Filter by ClinVar germline classification, case-insensitive, matched as whole words; underscores read as spaces. Somatic oncogenicity and clinical-impact classifications are never matched. pathogenic (Pathogenic and Likely pathogenic, combined and low-penetrance forms included), likely pathogenic, uncertain significance, vus (Uncertain significance plus VUS-high, VUS-mid, and VUS-low), likely benign, benign (Benign and Likely benign), and conflicting search ClinVar's germline classification index, so on their own their windows hold matching records only. Any other term (e.g. risk factor) narrows a text search, and its windows can return fewer rows than limit. Blank means no filter."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"gene",
"filters",
"preview",
"canvas_id",
"table_name",
"spilled",
"total",
"total_found",
"truncated",
"next_offset",
"unavailable_ids"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"gene": {
"type": "string",
"description": "The gene searched, as given."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"upstream_unavailable",
"upstream_timeout",
"upstream_access",
"invalid_upstream_response"
],
"description": "Machine-readable failure mode. Declared by this tool: `upstream_unavailable`: NCBI E-utilities is unreachable, failing, or rate-limiting after retries. `upstream_timeout`: NCBI attempts timed out or the shared 45 s search-and-summary budget expired. `upstream_access`: NCBI E-utilities refused the request (access denied). `invalid_upstream_response`: NCBI E-utilities kept answering with a response that failed validation. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"total": {
"type": "number",
"description": "Rows in this window that passed the filters, including any beyond the preview."
},
"notice": {
"type": "string",
"description": "Guidance on a clamped limit, completeness (the offset that continues the list, or an offset past the end), no-match results, the staged table with its next steps (gnomad_dataframe_describe, then gnomad_dataframe_query), gnomAD's ClinVar mapping when it could not fill missing grch38_variant_id values, and which identifier to pass to gnomad_get_variant."
},
"filters": {
"type": "object",
"required": [
"clinical_significance",
"min_review_stars"
],
"properties": {
"min_review_stars": {
"type": [
"number",
"null"
],
"description": "The min_review_stars floor; null when omitted."
},
"clinical_significance": {
"type": [
"string",
"null"
],
"description": "The clinical_significance filter as applied — quotes dropped, underscores read as spaces, trimmed, lowercased; null when omitted or blank."
}
},
"description": "Row filters applied to this window; offset and limit are not filters.",
"additionalProperties": false
},
"preview": {
"type": "array",
"items": {
"type": "object",
"required": [
"clinvar_variation_id",
"accession",
"title",
"obj_type",
"clinical_significance",
"review_status",
"gold_stars",
"last_evaluated",
"molecular_consequences",
"protein_change",
"conditions",
"oncogenicity_classification",
"oncogenicity_review_status",
"oncogenicity_last_evaluated",
"oncogenicity_conditions",
"clinical_impact_classification",
"clinical_impact_review_status",
"clinical_impact_last_evaluated",
"clinical_impact_conditions",
"submission_count",
"canonical_spdi",
"rsids",
"grch38_variant_id"
],
"properties": {
"rsids": {
"type": "string",
"description": "dbSNP rsIDs (e.g. rs11591147), semicolon-joined; empty when none. One rsID can match several gnomAD variants, so prefer grch38_variant_id for gnomad_get_variant."
},
"title": {
"type": "string",
"description": "Variant title (HGVS expression)."
},
"obj_type": {
"type": "string",
"description": "Variant object type (e.g. single nucleotide variant)."
},
"accession": {
"type": "string",
"description": "ClinVar accession (e.g. VCV004855003)."
},
"conditions": {
"type": "string",
"description": "Conditions the germline classification names, semicolon-joined; empty when none."
},
"gold_stars": {
"type": "number",
"description": "0–4 star rating derived from the germline review status; 0 when there is none."
},
"review_status": {
"type": [
"string",
"null"
],
"description": "Review status of the germline classification; null when none."
},
"canonical_spdi": {
"type": [
"string",
"null"
],
"description": "Canonical SPDI of the variant (GRCh38, e.g. NC_000001.11:55039973:G:T); null for multi-allele records, CNVs, and records without one."
},
"last_evaluated": {
"type": [
"string",
"null"
],
"description": "Date the germline classification was last evaluated; null when unknown."
},
"protein_change": {
"type": "string",
"description": "Protein change(s), comma-joined as ClinVar reports them."
},
"submission_count": {
"type": "number",
"description": "Number of submitted (SCV) records."
},
"grch38_variant_id": {
"type": [
"string",
"null"
],
"description": "gnomAD variant ID (chrom-pos-ref-alt, GRCh38) for gnomad_get_variant with a GRCh38 dataset (gnomad_r4, gnomad_r3, or one of their subsets). Derived from the canonical SPDI for SNVs, MNVs, and delins; for deletions, insertions, and duplications, taken from gnomAD's ClinVar mapping by VariationID. Most of those indel IDs are absent from gnomAD's callsets, so gnomad_get_variant answers variant_not_found: absence evidence to pair with gnomad_get_coverage. Null for mitochondrial variants, multi-allele, copy-number, and imprecise structural records, and for records newer than gnomAD's ClinVar release, which lags NCBI's."
},
"clinvar_variation_id": {
"type": "string",
"description": "ClinVar VariationID (uid)."
},
"clinical_significance": {
"type": [
"string",
"null"
],
"description": "Germline classification (e.g. Pathogenic); null when none, as on a record ClinVar classifies only for somatic use (see oncogenicity_classification and clinical_impact_classification)."
},
"molecular_consequences": {
"type": "string",
"description": "Molecular consequences, semicolon-joined."
},
"oncogenicity_conditions": {
"type": "string",
"description": "Tumor types the oncogenicity classification applies to, semicolon-joined; empty when none."
},
"clinical_impact_conditions": {
"type": "string",
"description": "Tumor types the clinical-impact classification applies to, semicolon-joined; empty when none."
},
"oncogenicity_review_status": {
"type": [
"string",
"null"
],
"description": "Review status of the oncogenicity classification; null when none. No star rating is derived from it."
},
"oncogenicity_classification": {
"type": [
"string",
"null"
],
"description": "Somatic oncogenicity classification (e.g. Likely oncogenic, Oncogenic); null when none."
},
"oncogenicity_last_evaluated": {
"type": [
"string",
"null"
],
"description": "Date the oncogenicity classification was last evaluated; null when unknown."
},
"clinical_impact_review_status": {
"type": [
"string",
"null"
],
"description": "Review status of the clinical-impact classification; null when none. No star rating is derived from it."
},
"clinical_impact_classification": {
"type": [
"string",
"null"
],
"description": "Somatic clinical-impact classification, an AMP/ASCO/CAP tier (e.g. Tier I - Strong); null when none."
},
"clinical_impact_last_evaluated": {
"type": [
"string",
"null"
],
"description": "Date the clinical-impact classification was last evaluated; null when unknown."
}
},
"description": "One ClinVar variant row — also the canvas table column set.",
"additionalProperties": false
},
"description": "Inline preview rows — the immediate answer; the window's every row unless spilled."
},
"spilled": {
"type": "boolean",
"description": "True when this window's rows exceeded the inline preview budget, so the preview holds only the first rows and table_name holds them all."
},
"canvas_id": {
"type": "string",
"description": "Canvas holding table_name (or the canvas_id you supplied) — pass it to gnomad_dataframe_describe, then gnomad_dataframe_query. Empty when this call used no canvas: the window fit inline and no canvas_id was supplied, the gene was an Ensembl ID (nothing was searched), or the canvas is disabled."
},
"truncated": {
"type": "boolean",
"description": "True when ClinVar records remain past this window; continue with next_offset."
},
"table_name": {
"type": "string",
"description": "Canvas table this call staged (clinvar_variants), holding this window's rows — inspect it with gnomad_dataframe_describe, then query it with gnomad_dataframe_query. Empty when this call staged no table."
},
"next_offset": {
"type": [
"number",
"null"
],
"description": "offset for the next window; null when this window reaches the end."
},
"total_found": {
"type": "number",
"description": "ClinVar records matching the gene and filter terms across every window, counted by the search before the post-fetch filters: the match count for a mapped significance term alone, a candidate count once min_review_stars or any other term applies."
},
"unavailable_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "VariationIDs in this window that ClinVar returned no summary for, so they have no row; empty when none."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}gnomad_dataframe_query — gnomad-genetics-mcp-server: dataframe query
Run a read-only SQL SELECT against a canvas table staged by gnomad_list_gene_variants (table gene_variants) or gnomad_search_clinvar (table clinvar_variants) and return one page of the result. Use the canvas_id and table_name those tools returned to rank by allele frequency, group by consequence class, count loss-of-function variants, or filter the full set the inline preview only sampled. A page holds up to limit rows (default 25, capped at 3,000) and ends before a row that would take its row JSON past 4,000,000 characters; continue from next_offset until it is null. Each page re-runs the SQL, so stable paging needs an ORDER BY over a unique key (such as variant_id) and an unchanged table. Paging reaches the server row cap: above it total is null and later rows are reachable only by filtering or aggregating in SQL. BIGINT values, such as the staged ac and an counts and COUNT(*), arrive as JSON strings to keep their precision; CAST(col AS INTEGER) returns a number. SELECT statements only — writes, DDL, and file/HTTP table functions are rejected by the canvas gate. Call gnomad_dataframe_describe first to discover staged table and column names.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"canvas_id",
"sql"
],
"properties": {
"sql": {
"type": "string",
"minLength": 1,
"description": "Read-only SQL SELECT. Reference tables by the names the staging tool returned (e.g. gene_variants). Add an ORDER BY over a unique key when paging."
},
"limit": {
"type": "number",
"default": 25,
"minimum": 1,
"multipleOf": 1,
"description": "Maximum rows on the page. A page also ends before a row that would take its row JSON past 4,000,000 characters. Default 25; a value above 3,000 is clamped to 3,000, with a notice."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Row offset of the page to return. Start at 0, then pass next_offset from the previous page."
},
"canvas_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{10}$",
"description": "Canvas ID returned by gnomad_list_gene_variants or gnomad_search_clinvar."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"rows",
"columns",
"offset",
"returned",
"total",
"truncated",
"next_offset"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"description": "One result row — dynamic columns per the SQL projection.",
"additionalProperties": {}
},
"description": "This page of result rows, in result order."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"canvas_disabled",
"row_too_large"
],
"description": "Machine-readable failure mode. Declared by this tool: `canvas_disabled`: DataCanvas is not enabled on this server instance. `row_too_large`: The first row of the requested page serializes to more than 4,000,000 characters of JSON, so no page can hold it. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"total": {
"type": [
"number",
"null"
],
"description": "Rows the SQL produced; null when the result exceeds the server row cap, whose later rows paging cannot reach."
},
"notice": {
"type": "string",
"description": "Set when limit was above its cap: the requested and applied values."
},
"offset": {
"type": "number",
"description": "Row offset this page starts at."
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Column names in the result, in order."
},
"returned": {
"type": "number",
"description": "Rows on this page — fewer than limit when the end of the result, the row cap, or the 4,000,000-character row-JSON ceiling ends it early."
},
"truncated": {
"type": "boolean",
"description": "True when result rows exist after this page, including rows past the row cap that next_offset cannot reach."
},
"next_offset": {
"type": [
"number",
"null"
],
"description": "offset for the next page; null when no page follows (end of the result, or the row cap reached)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}gnomad_dataframe_describe — gnomad-genetics-mcp-server: dataframe describe
List the tables staged on a canvas and their columns (name and type) so you can write correct SQL for gnomad_dataframe_query. Use the canvas_id returned by gnomad_list_gene_variants or gnomad_search_clinvar. Returns one entry per table with its row count and column schema.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"canvas_id"
],
"properties": {
"canvas_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{10}$",
"description": "Canvas ID returned by a prior staging call (gnomad_list_gene_variants or gnomad_search_clinvar)."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"tables"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"canvas_disabled"
],
"description": "Machine-readable failure mode. Declared by this tool: `canvas_disabled`: DataCanvas is not enabled on this server instance. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"tables": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"row_count",
"columns"
],
"properties": {
"name": {
"type": "string",
"description": "Table name to reference in SQL."
},
"columns": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"name": {
"type": "string",
"description": "Column name."
},
"type": {
"type": "string",
"description": "Column SQL type (DuckDB type)."
}
},
"description": "One column: name and SQL type.",
"additionalProperties": false
},
"description": "Column schema, in order."
},
"row_count": {
"type": "number",
"description": "Number of rows in the table."
}
},
"description": "One staged table: name, row count, and column schema.",
"additionalProperties": false
},
"description": "Tables staged on the canvas."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}Prompts
1 advertised
gnomad_variant_triage — gnomAD variant triage
Guided rare-disease variant-triage workflow over gnomAD: pull the variant population record, weigh it against gene loss-of-function constraint, and — critically — confirm the position is well-covered before concluding a variant is absent. Emits the exact tool chain in order.
- variant
- Variant to triage — a chrom-pos-ref-alt variantId (e.g. 1-55051215-G-GA) or an rsID (rs11591147). (required)
- gene
- Gene symbol or Ensembl ID for the constraint step (e.g. PCSK9). Omit (or leave blank) if not yet known.
- dataset
- gnomAD dataset to use: gnomad_r4 and its subset gnomad_r4_non_ukb (GRCh38); gnomad_r3 and its subsets gnomad_r3_controls_and_biobanks, gnomad_r3_non_cancer, gnomad_r3_non_neuro, gnomad_r3_non_topmed, gnomad_r3_non_v2 (GRCh38); gnomad_r2_1 and its subsets gnomad_r2_1_controls, gnomad_r2_1_non_cancer, gnomad_r2_1_non_neuro, gnomad_r2_1_non_topmed (GRCh37); exac (GRCh37). A subset reads its parent release's coverage and constraint. faf95 is null on a gnomad_r4 or gnomad_r3 subset; look the variant up on the parent. Omit or leave blank to use the server default.
Resources
1 advertised
gnomad-genetics-guide
Use gnomad_* tools to follow ClinVar gene candidates into population evidence, screen gene variant catalogs, or analyze staged results. Covers identifier conversion gates, complete ClinVar pagination, and candidate selection without treating missing frequency as rarity.
skill://gnomad-genetics-guide/SKILL.mdgnomAD variant record — gnomAD variant record
Population record for one gnomAD variant — AC/AN/AF overall and per ancestry, the filtering allele frequency (faf95), counts, flags, consequence with its HGVS and LOFTEE call, LoF curations, in-silico predictors, and joined ClinVar significance. Mirrors gnomad_get_variant. The dataset segment (e.g. gnomad_r4, or a subset such as gnomad_r4_non_ukb) makes the URI self-describing. On a gnomad_r4 or gnomad_r3 subset, faf95 and each callset's faf95 are null: gnomAD's record there carries the parent release's FAF, not the subset's, and a resource carries no notice to say so — read the parent's segment for its faf95. Data source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/
gnomad://variant/{dataset}/{variantId}gnomAD gene constraint — gnomAD gene constraint
gnomAD loss-of-function constraint for a gene — pLI, LOEUF (oe_lof_upper) with CI and gnomAD’s LOEUF percentile (v4.1.2 only), observed/expected ratios with 90% intervals for missense and synonymous, and Z-scores, with constraint_release naming the release they come from. Mirrors gnomad_get_gene_constraint: the exac segment serves ExAC r0.3 constraint (pLI, Z-scores, and counts only), and gnomad_r3 serves the GRCh38 gnomAD v4.1.2 table because gnomAD publishes no v3 constraint. gnomAD publishes no subset constraint either, so a subset segment reads its parent release’s table and the record echoes the subset as dataset. gnomAD recommends LOEUF < 0.45 to call a gene LoF-intolerant on v4.1.2 and LOEUF < 0.35 on v2.1.1; on exac, which has no LOEUF, pLI (>0.9 intolerant) is the intolerance measure. A mitochondrial gene’s constraint comes back in mitochondrial_constraint (kind protein or rna, sums of maximum heteroplasmy rather than variant counts), the same table on every segment and null for a nuclear gene. The gene segment is an HGNC symbol or Ensembl gene ID. Data source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/
gnomad://gene/{dataset}/{gene}/constraintio.modelcontextprotocol/skills
skill://{+path}90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 2 of 2 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 721 ms
- 95th percentile latency
- 721 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 721 ms · metadata changed · 8 tool(s), 1 resource(s), 3 resource template(s), 1 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http gnomad-genetics-mcp-server-caseyjhand https://gnomad-genetics.caseyjhand.com/mcpCodex
codex mcp add gnomad-genetics-mcp-server-caseyjhand --url https://gnomad-genetics.caseyjhand.com/mcpCursor
{
"mcpServers": {
"gnomad-genetics-mcp-server-caseyjhand": {
"url": "https://gnomad-genetics.caseyjhand.com/mcp"
}
}
}Cline
{
"mcpServers": {
"gnomad-genetics-mcp-server-caseyjhand": {
"type": "streamableHttp",
"url": "https://gnomad-genetics.caseyjhand.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"gnomad-genetics-mcp-server-caseyjhand": {
"type": "http",
"url": "https://gnomad-genetics.caseyjhand.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http gnomad-genetics-mcp-server-caseyjhand https://gnomad-genetics.caseyjhand.com/mcpClaude Desktop
https://gnomad-genetics.caseyjhand.com/mcpWindsurf
{
"mcpServers": {
"gnomad-genetics-mcp-server-caseyjhand": {
"serverUrl": "https://gnomad-genetics.caseyjhand.com/mcp"
}
}
}Let your agent find its tools
Find servers like gnomad-genetics-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.