Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.cyanheads/gnomad-genetics-mcp-server

REMOTE · GNOMAD-GENETICS.CASEYJHAND.COM · 2 COMPONENTS

Ancestry allele frequencies, LoF constraint, variant lists, and coverage from gnomAD, with ClinVar.

−3 this week 86 Trust /100

Last scanned (16 hours ago)

Scores higher than 92% of remote servers

Reachable. Last reached 6 Nov 2026.

Category Health and Science

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security83
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation. See how to fix → View diagnostics → Partial
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
Schema Quality & AI Usability71
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6358 tokens (~706/item across 9 items; 8 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management86
  • Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 2 breaking changes, 0 auth/transport breaks, 1 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 8 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
What we tested

Checks we ran (13)

  • TLS certificate
  • Authorization
  • HTTPS
  • HSTS header
  • DNSSEC
  • Transport
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this hosted endpoint (2)

  • Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
  • Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 6 Nov 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 4 Nov 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “gnomad_get_variant” rewrote its description, which is the text the model reads security
    • Tool “gnomad_list_gene_variants” rewrote its description, which is the text the model reads security
    • Tool “gnomad_search_clinvar” rewrote its description, which is the text the model reads security
    • Tool “gnomad_get_coverage” rewrote its description, which is the text the model reads security
    • Tool “gnomad_get_gene_constraint” rewrote its description, which is the text the model reads security
    • Schema quality: 521 → 706 ▼ functional
    • Server version: 0.5.2 → 0.6.0 functional
    • New tool “gnomad_get_variant_cooccurrence” functional
    • “gnomad_list_gene_variants” added an optional parameter “max_faf” cosmetic
    • “gnomad_list_gene_variants” added an optional parameter “lof_confidence” cosmetic
    • “gnomad_list_gene_variants” added an optional parameter “annotations” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “canvas_id” cosmetic
    • “gnomad_get_gene_constraint” reworded the description of “reference_genome” cosmetic
    • “gnomad_get_variant” reworded the description of “dataset” cosmetic
    • “gnomad_get_variant” reworded the description of “reference_genome” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “dataset” cosmetic
    • “gnomad_search_clinvar” reworded the description of “min_review_stars” cosmetic
    • “gnomad_search_clinvar” reworded the description of “limit” cosmetic
    • “gnomad_search_clinvar” reworded the description of “clinical_significance” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “reference_genome” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “pass_only” cosmetic
    • “gnomad_get_coverage” reworded the description of “dataset” cosmetic
    • “gnomad_get_coverage” reworded the description of “reference_genome” cosmetic
    • “gnomad_get_gene_constraint” reworded the description of “dataset” cosmetic
  • 1 Nov 26 −3
    • Stability: pass → fail ▼ security
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “gnomad_dataframe_query” rewrote its description, which is the text the model reads security
    • Tool “gnomad_search_clinvar” rewrote its description, which is the text the model reads security
    • Tool “gnomad_get_variant” rewrote its description, which is the text the model reads security
    • Tool “gnomad_list_gene_variants” rewrote its description, which is the text the model reads security
    • Schema quality: 415 → 521 ▼ functional
    • “gnomad_dataframe_query” changed the type of “limit”: integer → number ▼ functional
    • “gnomad_search_clinvar” changed the type of “limit”: integer → number ▼ functional
    • Server version: 0.5.1 → 0.5.2 functional
    • Server version: 0.5.0 → 0.5.1 functional
    • “gnomad_list_gene_variants” added an optional parameter “limit” cosmetic
    • “gnomad_list_gene_variants” added an optional parameter “offset” cosmetic
    • “gnomad_list_gene_variants” added an optional parameter “pass_only” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “canvas_id” cosmetic
    • “gnomad_dataframe_query” reworded the description of “limit” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “pass_only” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “region” cosmetic
    • “gnomad_search_clinvar” reworded the description of “clinical_significance” cosmetic
    • “gnomad_search_clinvar” reworded the description of “limit” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “consequence_class” cosmetic
  • 28 Oct 26 0
    • Schema quality: 466 → 415 ▲ functional
    • New resource “gnomad-genetics-guide” functional
    • Server version: 0.4.2 → 0.5.0 functional
  • 24 Oct 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “gnomad_list_gene_variants” rewrote its description, which is the text the model reads security
    • Server version: 0.4.1 → 0.4.2 functional
  • 14 Oct 26 0
    • Tool “gnomad_get_coverage” rewrote its description, which is the text the model reads security
    • Server version: 0.4.0 → 0.4.1 functional
  • 30 Sept 26 0
    • Tool “gnomad_dataframe_query” rewrote its description, which is the text the model reads security
    • Tool “gnomad_get_gene_constraint” rewrote its description, which is the text the model reads security
    • Tool “gnomad_get_variant” rewrote its description, which is the text the model reads security
    • Schema quality: 396 → 461 ▼ functional
    • Server version: 0.3.0 → 0.4.0 functional
    • “gnomad_dataframe_query” added an optional parameter “limit” cosmetic
    • “gnomad_dataframe_query” added an optional parameter “offset” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “gene” cosmetic
    • “gnomad_list_gene_variants” reworded the description of “region” cosmetic
    • “gnomad_dataframe_query” reworded the description of “sql” cosmetic
    • “gnomad_get_coverage” reworded the description of “gene” cosmetic
    • “gnomad_get_coverage” reworded the description of “region” cosmetic
  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 6 Nov 2026 · Probed https://gnomad-genetics.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 2 Nov 2026 31 Jan 2027 ECDSA 256 ECDSA-SHA256 995a30681ab772540e934241ca1d576c
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of gnomad-genetics.caseyjhand.com. — Secure

Zone DS Keys Algorithms Outcome
. Trust anchor 20326, 38696 8, 8 Verified
com. DS published 19718 13 Verified
caseyjhand.com. DS published 2371 13 Verified
gnomad-genetics.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://gnomad-genetics.caseyjhand.com/mcp Verified 200
http (plaintext) http://gnomad-genetics.caseyjhand.com/mcp HTTPS enforced 301 https://gnomad-genetics.caseyjhand.com/mcp
MCP tools · 8 exposed · ~6,028 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
gnomad_dataframe_describe ~107

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.

NameTypeReqDescription
canvas_idstringyesCanvas ID returned by a prior staging call (gnomad_list_gene_variants or gnomad_search_clinvar).
NameTypeReqDescription
errorobject–Present when the call failed. Absent on success.
tablesarray–Tables staged on the canvas.

No examples provided.

gnomad_dataframe_query ~425

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.

NameTypeReqDescription
canvas_idstringyesCanvas ID returned by gnomad_list_gene_variants or gnomad_search_clinvar.
limitnumber–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.
offsetinteger–Row offset of the page to return. Start at 0, then pass next_offset from the previous page.
sqlstringyesRead-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.
NameTypeReqDescription
columnsarray–Column names in the result, in order.
errorobject–Present when the call failed. Absent on success.
next_offsetnumber|null–offset for the next page; null when no page follows (end of the result, or the row cap reached).
noticestring–Set when limit was above its cap: the requested and applied values.
offsetnumber–Row offset this page starts at.
returnednumber–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.
rowsarray–This page of result rows, in result order.
totalnumber|null–Rows the SQL produced; null when the result exceeds the server row cap, whose later rows paging cannot reach.
truncatedboolean–True when result rows exist after this page, including rows past the row cap that next_offset cannot reach.

No examples provided.

gnomad_get_coverage ~822

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/

NameTypeReqDescription
coverage_sourcestring–Restrict to one coverage track. Omit to return every available track.
datasetstring–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…
gene––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 trans…
reference_genomestring–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 ca…
region––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) un…
transcript_idstring–Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region; blank means omitted.
NameTypeReqDescription
coverage_datasetstring–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…
datasetstring–Effective gnomAD dataset.
errorobject–Present when the call failed. Absent on success.
noticestring–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…
reference_genomestring–Effective reference build.
summariesarray–Per-track coverage summaries (exome and/or genome).
targetstring–The resolved target (gene symbol/ID, transcript ID, or region) the coverage describes.
target_kindstring–Which target type was queried.

No examples provided.

gnomad_get_gene_constraint ~886

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/

NameTypeReqDescription
datasetstring–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…
genestringyesGene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene.
reference_genomestring–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 ca…
NameTypeReqDescription
constraint_flagsarray–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.
constraint_releasestring–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…
datasetstring–Effective gnomAD dataset.
errorobject–Present when the call failed. Absent on success.
exp_lof––Non-negative expected LoF variant count. Null when unavailable.
exp_mis––Non-negative expected missense count. Null when unavailable.
exp_syn––Non-negative expected synonymous count. Null when unavailable.
gene_idstring–Ensembl gene ID resolved for the gene.
lof_znumber|null–LoF constraint Z-score. Null when unavailable.
mis_znumber|null–Missense constraint Z-score. Null when unavailable.
mitochondrial_constraint––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.…
obs_lof––Non-negative observed LoF variant count. Null when unavailable.
obs_mis––Non-negative observed missense count. Null when unavailable.
obs_syn––Non-negative observed synonymous count. Null when unavailable.
oe_lof––Non-negative observed/expected LoF ratio. Null when unavailable.
oe_lof_lower––LOEUF confidence-interval lower bound. Null when unavailable.
oe_lof_percentile––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). On…
oe_lof_upper––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––Observed/expected missense ratio. Null when unavailable.
oe_mis_lower––Lower bound of the 90% confidence interval around oe_mis. Null when unavailable, and always null on exac.
oe_mis_upper––Upper bound of the 90% confidence interval around oe_mis. Null when unavailable, and always null on exac.
oe_syn––Observed/expected synonymous ratio. Null when unavailable.
oe_syn_lower––Lower bound of the 90% confidence interval around oe_syn. Null when unavailable, and always null on exac.
oe_syn_upper––Upper bound of the 90% confidence interval around oe_syn. Null when unavailable, and always null on exac.
pli––pLI — probability of LoF intolerance; >0.9 intolerant. Null when unavailable.
reference_genomestring–Effective reference build.
symbolstring–HGNC gene symbol.
syn_znumber|null–Synonymous constraint Z-score. Null when unavailable.

No examples provided.

gnomad_get_variant ~778

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/

NameTypeReqDescription
datasetstring–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…
reference_genomestring–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 ca…
variantsarrayyes1–25 variant IDs (chrom-pos-ref-alt or rsID) to look up in one batched call.
NameTypeReqDescription
datasetstring–Effective gnomAD dataset used for the batch.
errorobject–Present when the call failed. Absent on success.
failedarray–Per-item failures, in input order: malformed IDs, variants absent from the dataset, or upstream errors — each with its reason and recovery hint.
foundarray–Variants resolved to a population record.
noticestring–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 th…
reference_genomestring–Effective reference build used for the batch.

No examples provided.

gnomad_get_variant_cooccurrence ~423

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/

NameTypeReqDescription
variantsarrayyesThe 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.
NameTypeReqDescription
datasetstring–Dataset the counts come from — always gnomad_r2_1, the only one gnomAD serves co-occurrence for.
errorobject–Present when the call failed. Absent on success.
genotype_countsobject–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).
haplotype_countsobject–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 seco…
noticestring–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…
p_compound_heterozygousnumber|null–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 —…
populationsarray–The same counts per genetic-ancestry group, in gnomAD's order.
reference_genomestring–Reference build of variant_ids — always GRCh37.
variant_idsarray–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.

No examples provided.

gnomad_list_gene_variants ~1,780

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/

NameTypeReqDescription
annotationsboolean–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). Omitt…
canvas_idstring–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…
consequence_classstring–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_var…
datasetstring–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…
gene––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 trans…
limitnumber–Matching variants on this page. Default 25; a value above 3,000 is clamped to 3,000, with a notice.
lof_confidencestring–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…
max_afnumber–Keep only variants with allele frequency ≤ this value (0–1). Variants with null AF are always kept.
max_fafnumber–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 kep…
offsetinteger–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.
pass_onlyboolean–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 g…
reference_genomestring–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 ca…
region––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…
transcript_idstring–Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region; blank means omitted.
NameTypeReqDescription
canvas_idstring–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…
datasetstring–Effective gnomAD dataset.
errorobject–Present when the call failed. Absent on success.
filtersobject–The row filters this call applied, each null when not set. offset, limit, canvas_id, and annotations are not filters.
next_offsetnumber|null–offset for the next page; null when this page reaches the last matching variant.
noticestring–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…
previewarray–This page: up to limit matching variants from offset, in genomic order — the immediate answer.
qc_filterednumber–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.
reference_genomestring–Effective reference build.
spilledboolean–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.
table_namestring–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 ta…
targetstring–The resolved target the rows describe: gene symbol or Ensembl gene ID, transcript ID, or region, as normalized for the lookup.
target_kindstring–Which target type was queried.
totalnumber–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.
truncatedboolean–True when matching variants remain past this page; continue with next_offset.

No examples provided.

gnomad_search_clinvar ~807

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.

NameTypeReqDescription
canvas_idstring–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 on…
clinical_significancestring–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…
genestringyesGene 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.
limitnumber–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 ar…
min_review_starsinteger–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…
offsetinteger–Zero-based position of the first ClinVar record in this window. Pass next_offset from the previous call to continue.
NameTypeReqDescription
canvas_idstring–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…
errorobject–Present when the call failed. Absent on success.
filtersobject–Row filters applied to this window; offset and limit are not filters.
genestring–The gene searched, as given.
next_offsetnumber|null–offset for the next window; null when this window reaches the end.
noticestring–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 gnom…
previewarray–Inline preview rows — the immediate answer; the window's every row unless spilled.
spilledboolean–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.
table_namestring–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 tab…
totalnumber–Rows in this window that passed the filters, including any beyond the preview.
total_foundnumber–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 on…
truncatedboolean–True when ClinVar records remain past this window; continue with next_offset.
unavailable_idsarray–VariationIDs in this window that ClinVar returned no summary for, so they have no row; empty when none.

No examples provided.

Install

How do I install the io.github.cyanheads/gnomad-genetics-mcp-server server?

io.github.cyanheads/gnomad-genetics-mcp-server is a hosted endpoint at https://gnomad-genetics.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · gnomad-genetics.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-gnomad-genetics-mcp-server 'https://gnomad-genetics.caseyjhand.com/mcp'
Common questions

What is the io.github.cyanheads/gnomad-genetics-mcp-server server?

io.github.cyanheads/gnomad-genetics-mcp-server is listed in the public MCP registry as io.github.cyanheads/gnomad-genetics-mcp-server. Ancestry allele frequencies, LoF constraint, variant lists, and coverage from gnomAD, with ClinVar. This page covers its hosted endpoint (https://gnomad-genetics.caseyjhand.com/mcp).

Is the io.github.cyanheads/gnomad-genetics-mcp-server server safe to use?

io.github.cyanheads/gnomad-genetics-mcp-server scores 86 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.cyanheads/gnomad-genetics-mcp-server server expose?

io.github.cyanheads/gnomad-genetics-mcp-server exposes 8 tools: gnomad_get_variant, gnomad_get_gene_constraint, gnomad_list_gene_variants, gnomad_get_coverage, gnomad_get_variant_cooccurrence, and 3 more. Their descriptions and schemas cost roughly 6,028 tokens of context every time the server is loaded.

Does the io.github.cyanheads/gnomad-genetics-mcp-server server require authentication?

No. We connected to io.github.cyanheads/gnomad-genetics-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.cyanheads/gnomad-genetics-mcp-server server still maintained?

io.github.cyanheads/gnomad-genetics-mcp-server is still listed as active in the MCP registry. We last reached this channel on 6 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What did VerifyMCP test on the io.github.cyanheads/gnomad-genetics-mcp-server server?

VerifyMCP ran 13 checks on io.github.cyanheads/gnomad-genetics-mcp-server, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.