gnomad-genetics-mcp-server
Server Details
Look up allele frequencies by ancestry, gene constraint, variants, and coverage over gnomAD.
- Status
- Healthy
- Uptime
- 100.0% over 41 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/gnomad-genetics-mcp-server
- GitHub Stars
- 1
- Server Listing
- @cyanheads/gnomad-genetics-mcp-server
TDQS
Scored across 7 tools
Each tool targets a distinct resource or action: targeted variant lookup (gnomad_get_variant) vs. gene/region variant listing (gnomad_list_gene_variants), coverage vs. constraint, and ClinVar search vs. variant-level annotation. The two dataframe helpers are clearly subordinate to staged canvas tables and do not overlap with the retrieval tools.
All tools share the gnomad_ prefix and snake_case convention, and most follow a verb_noun pattern (get_coverage, list_gene_variants, search_clinvar). The two dataframe tools deviate slightly with a noun-first form (dataframe_describe, dataframe_query), though they remain readable and predictable.
Seven tools are well-scoped for a gnomAD genetics server, covering variant lookup, gene/region listing, coverage, constraint, ClinVar search, and staged-table SQL support. No tool appears redundant or missing from the overall set.
The surface covers core variant interpretation workflows: variant records, gene/region variant lists, sequencing coverage, gene constraint, ClinVar classification, and flexible SQL over staged results. Minor gaps remain, such as dedicated gene metadata/search or structural-variant coverage, but agents can work around these for common tasks.
Available Tools
7 toolsgnomad_dataframe_describegnomad-genetics-mcp-server: dataframe describeARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | Canvas ID returned by a prior staging call (gnomad_list_gene_variants or gnomad_search_clinvar). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| tables | No | Tables staged on the canvas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint and idempotentHint, so the safety profile is known. The description adds value by disclosing the return shape—'one entry per table with its row count and column schema'—and by clarifying the canvas-staging context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, purposeful sentences. The first sentence front-loads the action and purpose, the second gives the prerequisite, and the third describes the output. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool with an output schema available, the description is complete: it explains what the tool returns, why it is needed for SQL generation, and how to obtain the required canvas_id. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter canvas_id is already described as the ID returned by prior staging calls. The description repeats this provenance without adding extra syntax or format details, so the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List the tables staged on a canvas and their columns.' It also ties this to the downstream action of writing correct SQL for gnomad_dataframe_query, which distinguishes it from the query and staging siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: call it after gnomad_list_gene_variants or gnomad_search_clinvar, and use the returned canvas_id before issuing gnomad_dataframe_query. It does not explicitly state when not to use it, but the intended workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnomad_dataframe_querygnomad-genetics-mcp-server: dataframe queryARead-onlyIdempotentInspect
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 100, max 500) and ends early once its rows reach 10,000 characters of JSON; 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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | 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 | No | Maximum rows on the page (1–500). A page also ends before its rows pass 10,000 characters of JSON. | |
| offset | No | Row offset of the page to return. Start at 0, then pass next_offset from the previous page. | |
| canvas_id | Yes | Canvas ID returned by gnomad_list_gene_variants or gnomad_search_clinvar. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | This page of result rows, in result order. |
| error | No | Present when the call failed. Absent on success. |
| total | No | Rows the SQL produced; null when the result exceeds the server row cap, whose later rows paging cannot reach. |
| offset | No | Row offset this page starts at. |
| columns | No | Column names in the result, in order. |
| returned | No | Rows on this page — fewer than limit when the 10,000-character row budget or the end of the result ends it early. |
| truncated | No | True when result rows exist after this page, including rows past the row cap that next_offset cannot reach. |
| next_offset | No | offset for the next page; null when no page follows (end of the result, or the row cap reached). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint, idempotentHint and openWorldHint=false; the description goes well beyond by disclosing the 10,000-character page cutoff, that each page re-runs the SQL so stable paging requires ORDER BY over a unique key, that row caps make total null, and that a canvas gate rejects non-SELECT statements. These are the exact operational traits an agent needs to page correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and staging tools, then layers paging rules in descending priority; no sentence is wasted. Slightly long and repeats the limit default/max already in the schema, costing a bit of tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, yet the description still covers the pagination contract (next_offset, early termination, row cap) that governs how the agent should loop. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), and the description adds meaning beyond it: it ties offset to next_offset continuation, restates the default/max limit behavior in a paging context, and explains the ORDER BY unique-key requirement for stable paging. Minor overlap with schema text keeps it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run a read-only SQL SELECT against a canvas table') and names the exact staging tools and table names (gene_variants, clinvar_variants) that produce the input. An agent can distinguish it from the sibling staging tools and from gnomad_dataframe_describe without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use cases (rank by allele frequency, group by consequence, count LoF variants, filter beyond the inline preview) and explicitly routes the agent to call gnomad_dataframe_describe first. It also states what is not allowed (writes, DDL, file/HTTP table functions), which is a genuine exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnomad_get_coveragegnomad-genetics-mcp-server: get coverageARead-onlyIdempotentInspect
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. 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. Echoes the effective dataset and build. Data source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/
| Name | Required | Description | Default |
|---|---|---|---|
| gene | No | 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 | No | 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 | No | gnomAD dataset: gnomad_r4 (GRCh38, default), gnomad_r3 (GRCh38), gnomad_r2_1 (GRCh37), exac (GRCh37). Echoed in output. | |
| transcript_id | No | Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region; blank means omitted. | |
| coverage_source | No | Restrict to one coverage track. Omit to return every available track. | |
| reference_genome | No | Reference build. Derived from dataset when omitted (v4/v3=GRCh38, v2.1/ExAC=GRCh37). If supplied it must match the dataset, or the call is rejected. Keep aligned with ensembl coordinates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no coverage data is available for the target. |
| target | No | The resolved target (gene symbol/ID, transcript ID, or region) the coverage describes. |
| dataset | No | Effective gnomAD dataset. |
| summaries | No | Per-track coverage summaries (exome and/or genome). |
| target_kind | No | Which target type was queried. |
| reference_genome | No | Effective reference build. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld safety profile, so the burden is lower, yet the description adds real behavior: default returns both tracks, coverage_source narrows to one, and the effective dataset/build are echoed. The mutual-exclusivity and rejection-on-mismatch rules further help the agent predict outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information is front-loaded: purpose, output shape, then the disambiguation rationale, then parameter rules. Slightly verbose with some restatement (dataset/build echoing appears twice and the data-source URL), but each sentence carries usable signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained; combined with 100% schema coverage and the annotations, the description supplies everything an agent needs — purpose, use case, selection constraint, and defaults — for this moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds the selection rule ('supply exactly one of gene, transcript_id, or region') and the default-vs-narrow behavior of coverage_source, reinforcing the key invocation constraint beyond the raw property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch gnomAD sequencing-coverage summary across a gene, transcript, or region') and enumerates the returned quantities (mean/median read depth, fraction covered at 1×–100×, split by exome/genome). It is clearly distinguishable from siblings like get_variant or get_gene_constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit motivating use case — 'disambiguate a true absent variant from an uncallable position' — with the reasoning spelled out. It does not name a sibling tool or state when-not-to-use, so it stops short of the 5 tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnomad_get_gene_constraintgnomad-genetics-mcp-server: get gene constraintARead-onlyIdempotentInspect
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, observed/expected ratios for LoF, missense, and synonymous variation, 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 and gnomad_r3 (gnomAD publishes no v3 constraint), gnomAD v2.1.1 for gnomad_r2_1, and ExAC r0.3 for exac. gnomAD recommends LOEUF < 0.45 to call a gene LoF-intolerant on v4.1.2 and LOEUF < 0.35 on v2.1.1. ExAC r0.3 publishes only pLI, the Z-scores, and observed/expected counts, so on exac the ratios and LOEUF are null, constraint_flags is empty, and pLI is the intolerance measure. 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/
| Name | Required | Description | Default |
|---|---|---|---|
| gene | Yes | Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene. | |
| dataset | No | gnomAD dataset: gnomad_r4 (GRCh38, default), gnomad_r3 (GRCh38), gnomad_r2_1 (GRCh37), exac (GRCh37). Echoed in output. | |
| reference_genome | No | Reference build. Derived from dataset when omitted (v4/v3=GRCh38, v2.1/ExAC=GRCh37). If supplied it must match the dataset, or the call is rejected. Keep aligned with ensembl coordinates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pli | No | pLI — probability of LoF intolerance; >0.9 intolerant. Null when unavailable. |
| error | No | Present when the call failed. Absent on success. |
| lof_z | No | LoF constraint Z-score. Null when unavailable. |
| mis_z | No | Missense constraint Z-score. Null when unavailable. |
| syn_z | No | Synonymous constraint Z-score. Null when unavailable. |
| oe_lof | No | Non-negative observed/expected LoF ratio. Null when unavailable. |
| oe_mis | No | Observed/expected missense ratio. Null when unavailable. |
| oe_syn | No | Observed/expected synonymous ratio. Null when unavailable. |
| symbol | No | HGNC gene symbol. |
| dataset | No | Effective gnomAD dataset. |
| exp_lof | No | Non-negative expected LoF variant count. Null when unavailable. |
| exp_mis | No | Non-negative expected missense count. Null when unavailable. |
| exp_syn | No | Non-negative expected synonymous count. Null when unavailable. |
| gene_id | No | Ensembl gene ID resolved for the gene. |
| obs_lof | No | Non-negative observed LoF variant count. Null when unavailable. |
| obs_mis | No | Non-negative observed missense count. Null when unavailable. |
| obs_syn | No | Non-negative observed synonymous count. Null when unavailable. |
| oe_lof_lower | No | LOEUF confidence-interval lower bound. Null when unavailable. |
| oe_lof_upper | No | 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. |
| constraint_flags | No | 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 | No | Effective reference build. |
| constraint_release | No | Constraint release the metrics come from: gnomAD v4.1.2 for gnomad_r4 and gnomad_r3 (gnomAD publishes no v3 constraint, so gnomad_r3 serves the GRCh38 table), gnomAD v2.1.1 for gnomad_r2_1, ExAC r0.3 for exac. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations covering safety (readOnly, idempotent, openWorld), the description adds substantial behavioral context: null fields are reported as null and never fabricated, ExAC r0.3 returns null LOEUF/ratios with empty constraint_flags, and reference_genome is rejected if it mismatches the dataset. These are caveats an agent cannot infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the headline metric (LOEUF) and its interpretation threshold, followed by edge-case caveats in descending priority. It is dense and long-ish, but nearly every clause (thresholds, release mapping, null handling) is actionable, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be described, and the description still supplies the interpretive context (LOEUF < 0.45 on v4.1.2, < 0.35 on v2.1.1) an agent needs to use the result correctly. Nothing required to call or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents gene, dataset, and reference_genome, so the baseline is 3. The description earns above baseline by mapping each dataset to its actual constraint release (v4.1.2, v2.1.1, ExAC r0.3) and by noting that reference build is derived from dataset and echoed in output — meaning beyond what the schema's enum text conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (gnomAD loss-of-function constraint for a gene) and enumerates exactly which metrics are returned (pLI, LOEUF, observed/expected ratios, three Z-scores). It also positions itself against siblings by calling constraint 'the orthogonal axis to allele frequency', so an agent can distinguish it from get_variant or list_gene_variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent what to do with the result — interpret variant impact via gene intolerance — and specifies accepted identifiers and dataset/release alignment rules. It does not, however, explicitly name a sibling or state when to prefer another tool, so it stops just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnomad_get_variantgnomad-genetics-mcp-server: get variantARead-onlyIdempotentInspect
Fetch the full gnomAD population record for one or more variants — allele count/number/frequency overall and broken down per genetic-ancestry group, homozygote and hemizygote counts, quality flags, transcript consequence, in-silico predictor scores, and joined ClinVar clinical significance. The "how common, is it benign" answer in one call. 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. An empty found[] for a well-formed ID 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/
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | No | gnomAD dataset: gnomad_r4 (GRCh38, default), gnomad_r3 (GRCh38), gnomad_r2_1 (GRCh37), exac (GRCh37). Echoed in output. | |
| variants | Yes | 1–25 variant IDs (chrom-pos-ref-alt or rsID) to look up in one batched call. | |
| reference_genome | No | Reference build. Derived from dataset when omitted (v4/v3=GRCh38, v2.1/ExAC=GRCh37). If supplied it must match the dataset, or the call is rejected. Keep aligned with ensembl coordinates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| found | No | Variants resolved to a population record. |
| failed | No | Per-item failures, in input order: malformed IDs, variants absent from the dataset, or upstream errors — each with its reason and recovery hint. |
| notice | No | Non-fatal notice when optional ClinVar annotation was unavailable. |
| dataset | No | Effective gnomAD dataset used for the batch. |
| reference_genome | No | Effective reference build used for the batch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, openWorld), and the description adds genuinely useful behavioral detail beyond them: batch cap of 25 with per-item partial success where malformed/absent IDs land in failed[] with a reason and recovery hint rather than failing the batch, empty-result semantics, the fixed dataset options with defaults, and the derived reference build. It even states that mitochondrial IDs are not served.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return payload, then the batching/failure semantics, then the data source. The long enumeration of returned fields is dense but informative; nearly every sentence earns its place, though the field list could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and it covers everything else an agent needs: batch limits, partial-failure handling, empty-result interpretation, dataset/reference-build coupling, and the coverage cross-check. Nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents variants, dataset, and reference_genome with their enums and defaults. The description restates the batch size and ID formats but adds no syntax or format detail beyond the schema, so the baseline 3 is appropriate when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (full gnomAD population record for one or more variants) and enumerates the payload: allele counts/frequency per ancestry group, homozygote/hemizygote counts, quality flags, transcript consequence, in-silico scores, ClinVar significance. It also frames the scope ('the how common, is it benign answer in one call') and names the complementary sibling gnomad_get_coverage, so an agent can place it among the other gnomad_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: batching up to 25 IDs in one call, per-item partial success, and the key interpretive rule that an empty found[] means the variant is not in the chosen dataset — with the explicit instruction to pair with gnomad_get_coverage before concluding true absence. It names an alternative with its selecting condition, but does not explicitly exclude sibling tools like gnomad_search_clinvar for clinical-only lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnomad_list_gene_variantsgnomad-genetics-mcp-server: list gene variantsARead-onlyIdempotentInspect
List every gnomAD variant in a gene, transcript, or region with allele frequencies and predicted consequences, optionally filtered to one consequence class (lof, missense, synonymous, other) and/or a maximum allele frequency. A result too large to inline is staged on a DataCanvas table named gene_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 by AF, count by consequence, or group across every row rather than the preview. A result that fits inline stages no table unless canvas_id is supplied. When the canvas is disabled (CANVAS_PROVIDER_TYPE != duckdb) the tool returns a capped inline preview and the SQL path is unavailable. Supply exactly one of gene, transcript_id, or region. Echoes the effective dataset and build. Data source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/
| Name | Required | Description | Default |
|---|---|---|---|
| gene | No | 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. | |
| max_af | No | Keep only variants with allele frequency ≤ this value (0–1). Variants with null AF are always kept. | |
| region | No | Genomic region chrom-start-stop (1-based inclusive, e.g. 13-32315474-32400266): 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 | No | gnomAD dataset: gnomad_r4 (GRCh38, default), gnomad_r3 (GRCh38), gnomad_r2_1 (GRCh37), exac (GRCh37). Echoed in output. | |
| canvas_id | No | Optional canvas ID from a prior call, to reuse the same canvas. When supplied, this call always writes its result to the gene_variants table on that canvas, replacing (not appending to) the previous one — even when the result fits inline; a result with no variants removes the table. Omit to stage on a fresh canvas only when the result is too large to inline. | |
| transcript_id | No | Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region; blank means omitted. | |
| reference_genome | No | Reference build. Derived from dataset when omitted (v4/v3=GRCh38, v2.1/ExAC=GRCh37). If supplied it must match the dataset, or the call is rejected. Keep aligned with ensembl coordinates. | |
| consequence_class | No | Keep only variants in this consequence class. Omit to return all classes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| total | No | Total matching variants, including any beyond the preview. |
| notice | No | Guidance when no variants matched, when the canvas is disabled and the preview is capped, and — when a table was staged — its name with the next steps: gnomad_dataframe_describe, then gnomad_dataframe_query. |
| dataset | No | Effective gnomAD dataset. |
| preview | No | Inline preview rows — the immediate answer; every matching variant unless spilled. |
| spilled | No | True when the result exceeded the inline preview budget, so the preview holds only the first rows and table_name holds them all. |
| canvas_id | No | 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 canvas is disabled. |
| table_name | No | 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. |
| reference_genome | No | Effective reference build. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-read profile (readOnlyHint, idempotentHint, openWorldHint), and the description goes well beyond them: staging semantics (table named gene_variants, canvas_id + table_name plus inline preview), replacement-not-append behavior, table removal on empty results, no table when the result fits inline and no canvas_id is given, and capped preview degradation when canvas is disabled. This is exactly the extra behavioral context that agents need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose first, then routing, then edge cases and provenance. Every sentence carries information (canvas replacement, disabled-canvas fallback, dataset echoing). The long canvas passage is somewhat packed, which keeps it from a 5, but there is little filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value shape need not be explained, and the description still covers the non-obvious return facts (canvas_id/table_name, inline preview, echoed dataset/build). Combined with the schema's mutual-exclusion and format constraints, an agent has everything required to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds the cross-parameter constraint ("Supply exactly one of gene, transcript_id, or region") and the filter semantics for consequence_class and max_af that tie the parameters to the tool's purpose. It does not add syntax or format detail beyond the schema, so it clears the baseline but not by much.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("List every gnomAD variant in a gene, transcript, or region") plus the payload (allele frequencies and predicted consequences) and the filter scope. That is enough to separate it from gnomad_get_variant (single variant), gnomad_get_gene_constraint (aggregate constraint), and the dataframe siblings (post-processing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong routing guidance: it tells the agent to call gnomad_dataframe_describe then gnomad_dataframe_query for ranking/grouping across the full row set, and warns that the SQL path is unavailable when CANVAS_PROVIDER_TYPE != duckdb. It also spells out the exactly-one-selector rule. It stops short of naming retrieval alternatives (e.g. when to prefer gnomad_get_variant instead), so no explicit when-not for sibling selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnomad_search_clinvargnomad-genetics-mcp-server: search clinvarARead-onlyIdempotentInspect
Search ClinVar (NCBI E-utilities) for a gene and return its classified variants — clinical significance, review status with a 0–4 star rating, associated conditions, molecular consequences, submission counts, and gnomAD-compatible identifiers (canonical SPDI, rsIDs, GRCh38 variant ID for gnomad_get_variant) — turning the variant-level significance gnomAD joins into a gene-panel curation view. Optionally filter by clinical_significance (e.g. pathogenic) and a minimum star rating. Each call returns one window of up to 500 ClinVar records: total_found is the ClinVar candidate count for the search terms, taken before the significance and star filters narrow each window, 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. When the canvas is disabled the tool returns a capped inline preview. Credit: ClinVar, NCBI.
| Name | Required | Description | Default |
|---|---|---|---|
| gene | Yes | 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 | No | ClinVar records to fetch in this window (1–500). Counted before the clinical_significance and min_review_stars filters, so a window can return fewer rows. | |
| offset | No | Zero-based position of the first ClinVar record in this window. Pass next_offset from the previous call to continue. | |
| canvas_id | No | 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 | No | Keep only variants with at least this gold-star review rating (0–4). | |
| clinical_significance | No | Filter by ClinVar clinical significance term (e.g. pathogenic, likely_pathogenic, uncertain significance), matched as whole words; underscores read as spaces. Blank means no filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| total | No | Rows in this window that passed the filters, including any beyond the preview. |
| notice | No | Guidance on completeness (the offset that continues the list, or an offset past the end), no-match results, a capped preview when the canvas is disabled, the staged table with its next steps (gnomad_dataframe_describe, then gnomad_dataframe_query), and which identifier to pass to gnomad_get_variant. |
| preview | No | Inline preview rows — the immediate answer; the window's every row unless spilled. |
| spilled | No | 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 | No | 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 | No | True when ClinVar records remain past this window; continue with next_offset. |
| table_name | No | 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 | No | offset for the next window; null when this window reaches the end. |
| total_found | No | ClinVar records matching the gene and filter terms across every window, counted before the post-fetch significance and star filters. |
| unavailable_ids | No | VariationIDs in this window that ClinVar returned no summary for, so they have no row; empty when none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world, but the description adds substantial unsurfaced behavior: window-vs-inline staging, canvas table replacement semantics (not appending), table removal on empty windows, the capped preview when canvas is disabled, and the NCBI_API_KEY rate-limit behavior. This is unusually rich disclosure beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and return shape, and every section carries information. However the description is very long and dense, with pagination, canvas, and credit details packed into single sprawling sentences that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the full agent workflow for a complex, multi-mode tool: filtering, pagination via next_offset, the canvas staging path and its follow-up tools, and graceful degradation. With an output schema present, no further return-value explanation is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds genuine interaction semantics — limit is counted before the significance/star filters so a window can return fewer rows, and filters narrow each window. It reinforces rather than merely restates the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search ClinVar for a gene) and enumerates exactly what comes back — clinical significance, review stars, conditions, consequences, gnomAD-compatible IDs. It also distinguishes the tool from gnomad_get_variant by naming the latter as the consumer of the returned GRCh38 variant ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational routing: use gnomad_dataframe_describe then gnomad_dataframe_query when a window is staged, and pass next_offset to continue pagination. It does not explicitly state when to prefer this over the sibling gnomad_list_gene_variants, so the when-not case is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- Changed
gnomad_dataframe_query13 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 100, + "description": "Maximum rows on the page (1–500). A page also ends before its rows pass 10,000 characters of JSON.", + "maximum": 500, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Row offset of the page to return. Start at 0, then pass next_offset from the previous page.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / sql / descriptionPrevious value: -"Read-only SQL SELECT. Reference tables by the names the staging tool returned (e.g. gene_variants)."New value: +"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." - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "rows", - "row_count", - "columns", - "truncated" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "rows", + "columns", + "offset", + "returned", + "total", + "truncated", + "next_offset" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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."New value: +"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 10,000 characters of JSON, so no page can hold it. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "canvas_disabled" -]New value: +[ + "canvas_disabled", + "row_too_large" +] - added
Output schema / properties / next_offsetAdded value: +{ + "description": "offset for the next page; null when no page follows (end of the result, or the row cap reached).", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / offsetAdded value: +{ + "description": "Row offset this page starts at.", + "type": "number" +} - added
Output schema / properties / returnedAdded value: +{ + "description": "Rows on this page — fewer than limit when the 10,000-character row budget or the end of the result ends it early.", + "type": "number" +} - removed
Output schema / properties / row_countRemoved value: -{ - "description": "Number of rows the query produced (materialized count).", - "type": "number" -} - changed
Output schema / properties / rows / descriptionPrevious value: -"Result rows (dynamic columns per the SQL projection), capped at the canvas row limit."New value: +"This page of result rows, in result order." - added
Output schema / properties / totalAdded value: +{ + "description": "Rows the SQL produced; null when the result exceeds the server row cap, whose later rows paging cannot reach.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / truncated / descriptionPrevious value: -"True when the result exceeded the row cap and was clipped."New value: +"True when result rows exist after this page, including rows past the row cap that next_offset cannot reach."
- Changed
gnomad_get_coverage5 fields changed- changed
Input schema / properties / gene / descriptionPrevious value: -"Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene. Mutually exclusive with transcript_id and region; blank means omitted."New value: +"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." - changed
Input schema / properties / region / anyOfPrevious value: -[ - { - "const": "", - "type": "string" - }, - { - "description": "Genomic region chrom-start-stop (1-based inclusive, e.g. 1-55039447-55064852).", - "pattern": "^[0-9XYM]+-\\d+-\\d+$", - "type": "string" - } -]New value: +[ + { + "const": "", + "type": "string" + }, + { + "description": "Genomic region chrom-start-stop (1-based inclusive, e.g. 1-55039447-55064852) on chromosome 1–22, X, or Y, optional chr prefix.", + "pattern": "^(?:chr)?[0-9A-Z]+-\\d+-\\d+$", + "type": "string" + } +] - changed
Input schema / properties / region / descriptionPrevious value: -"Genomic region chrom-start-stop (1-based inclusive, e.g. 1-55039447-55064852). Mutually exclusive with gene and transcript_id."New value: +"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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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. Other values are possible when a failure originates below the handler."New value: +"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). `graphql_error`: gnomAD rejected the coverage query with a GraphQL error. `upstream_unavailable`: gnomAD stayed unavailable or throttled through every retry. `upstream_timeout`: Every attempt to reach gnomAD timed out. `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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_target", - "incoherent_build" -]New value: +[ + "invalid_target", + "incoherent_build", + "invalid_region", + "region_too_large", + "mitochondrial_unsupported", + "graphql_error", + "upstream_unavailable", + "upstream_timeout", + "upstream_access", + "invalid_upstream_response" +]
- Changed
gnomad_get_gene_constraint6 fields changed- changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "gene_id", - "symbol", - "dataset", - "reference_genome", - "pli", - "oe_lof", - "oe_lof_lower", - "oe_lof_upper", - "oe_mis", - "oe_syn", - "lof_z", - "mis_z", - "syn_z", - "obs_lof", - "exp_lof", - "obs_mis", - "exp_mis", - "obs_syn", - "exp_syn", - "constraint_flags" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "gene_id", + "symbol", + "dataset", + "reference_genome", + "constraint_release", + "pli", + "oe_lof", + "oe_lof_lower", + "oe_lof_upper", + "oe_mis", + "oe_syn", + "lof_z", + "mis_z", + "syn_z", + "obs_lof", + "exp_lof", + "obs_mis", + "exp_mis", + "obs_syn", + "exp_syn", + "constraint_flags" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / constraint_flags / descriptionPrevious value: -"Constraint caveat flags (e.g. beta/experimental notes for v4)."New value: +"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." - added
Output schema / properties / constraint_releaseAdded value: +{ + "description": "Constraint release the metrics come from: gnomAD v4.1.2 for gnomad_r4 and gnomad_r3 (gnomAD publishes no v3 constraint, so gnomad_r3 serves the GRCh38 table), gnomAD v2.1.1 for gnomad_r2_1, ExAC r0.3 for exac.", + "type": "string" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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. Other values are possible when a failure originates below the handler."New value: +"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. `graphql_error`: gnomAD rejected the constraint query with a GraphQL error. `upstream_unavailable`: gnomAD stayed unavailable or throttled through every retry. `upstream_timeout`: Every attempt to reach gnomAD timed out. `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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "gene_not_found", - "incoherent_build" -]New value: +[ + "gene_not_found", + "incoherent_build", + "invalid_constraint_data", + "graphql_error", + "upstream_unavailable", + "upstream_timeout", + "upstream_access", + "invalid_upstream_response" +] - changed
Output schema / properties / oe_lof_upper / descriptionPrevious value: -"LOEUF (oe_lof_upper) — the headline intolerance metric. Null when unavailable."New value: +"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."
- Changed
gnomad_get_variant13 fields changed- changed
Input schema / properties / variants / items / descriptionPrevious value: -"Variant ID — chrom-pos-ref-alt (1-based, e.g. 1-55051215-G-GA) or an rsID (rs11591147). Obtain a variantId from ensembl_predict_variant or a VCF. Malformed IDs are reported per-item in failed[], not rejected wholesale."New value: +"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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `incoherent_build`: reference_genome was supplied but does not match the dataset. Other values are possible when a failure originates below the handler."New value: +"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; 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`: Every attempt to reach gnomAD for one ID timed out; 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "incoherent_build" -]New value: +[ + "incoherent_build", + "invalid_variant_id", + "variant_not_found", + "mitochondrial_unsupported", + "ambiguous_rsid", + "graphql_error", + "upstream_build_mismatch", + "upstream_unavailable", + "upstream_timeout", + "upstream_access", + "invalid_upstream_response" +] - changed
Output schema / properties / failed / descriptionPrevious value: -"Per-item failures: malformed IDs, variants absent from the dataset, or upstream errors."New value: +"Per-item failures, in input order: malformed IDs, variants absent from the dataset, or upstream errors — each with its reason and recovery hint." - changed
Output schema / properties / failed / items / descriptionPrevious value: -"One failed input ID and why it failed."New value: +"One failed input ID, why it failed, and what to do next." - changed
Output schema / properties / failed / items / properties / error / descriptionPrevious value: -"What went wrong and how to resolve it."New value: +"What went wrong for this ID." - added
Output schema / properties / failed / items / properties / reasonAdded value: +{ + "description": "Why this ID failed — a reason declared in this tool's error contract. Branch on it rather than on the message.", + "enum": [ + "invalid_variant_id", + "variant_not_found", + "mitochondrial_unsupported", + "ambiguous_rsid", + "graphql_error", + "upstream_build_mismatch", + "upstream_unavailable", + "upstream_timeout", + "upstream_access", + "invalid_upstream_response" + ], + "type": "string" +} - added
Output schema / properties / failed / items / properties / recoveryAdded value: +{ + "description": "The next step for this ID — the recovery hint declared for its reason.", + "type": "string" +} - changed
Output schema / properties / failed / items / requiredPrevious value: -[ - "variant", - "error" -]New value: +[ + "variant", + "error", + "reason", + "recovery" +] - added
Output schema / properties / found / items / properties / in_silico / items / properties / annotationAdded value: +{ + "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.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / found / items / properties / in_silico / items / properties / id / descriptionPrevious value: -"Predictor name (e.g. revel_max, cadd, spliceai_ds_max)."New value: +"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." - changed
Output schema / properties / found / items / properties / in_silico / items / properties / value / descriptionPrevious value: -"Predictor score; null when not provided for this variant."New value: +"Predictor score; null when not provided for this variant, or when gnomAD gave text with no number (the text is then in annotation)." - changed
Output schema / properties / found / items / properties / in_silico / items / requiredPrevious value: -[ - "id", - "value" -]New value: +[ + "id", + "value", + "annotation" +]
- Changed
gnomad_list_gene_variants5 fields changed- changed
Input schema / properties / gene / descriptionPrevious value: -"Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene. Mutually exclusive with transcript_id and region; blank means omitted."New value: +"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." - changed
Input schema / properties / region / anyOfPrevious value: -[ - { - "const": "", - "type": "string" - }, - { - "description": "Genomic region chrom-start-stop (1-based inclusive, e.g. 13-32315474-32400266).", - "pattern": "^[0-9XYM]+-\\d+-\\d+$", - "type": "string" - } -]New value: +[ + { + "const": "", + "type": "string" + }, + { + "description": "Genomic region chrom-start-stop (1-based inclusive, e.g. 13-32315474-32400266) on chromosome 1–22, X, or Y, optional chr prefix.", + "pattern": "^(?:chr)?[0-9A-Z]+-\\d+-\\d+$", + "type": "string" + } +] - changed
Input schema / properties / region / descriptionPrevious value: -"Genomic region chrom-start-stop (1-based inclusive). Mutually exclusive with gene and transcript_id."New value: +"Genomic region chrom-start-stop (1-based inclusive, e.g. 13-32315474-32400266): 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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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. Other values are possible when a failure originates below the handler."New value: +"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). `graphql_error`: gnomAD rejected the variant-list query with a GraphQL error. `upstream_unavailable`: gnomAD stayed unavailable or throttled through every retry. `upstream_timeout`: Every attempt to reach gnomAD timed out. `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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_target", - "incoherent_build" -]New value: +[ + "invalid_target", + "incoherent_build", + "invalid_region", + "region_too_large", + "mitochondrial_unsupported", + "graphql_error", + "upstream_unavailable", + "upstream_timeout", + "upstream_access", + "invalid_upstream_response" +]
- Changed
gnomad_search_clinvar2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `upstream_unavailable`: NCBI E-utilities is unreachable, failing, or rate-limiting after retries. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `upstream_unavailable`: NCBI E-utilities is unreachable, failing, or rate-limiting after retries. `upstream_timeout`: Every attempt to reach NCBI E-utilities timed out. `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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "upstream_unavailable" -]New value: +[ + "upstream_unavailable", + "upstream_timeout", + "upstream_access", + "invalid_upstream_response" +]
3 tool updates
- Changed
gnomad_get_coverage5 fields changed- added
Input schema / properties / gene / anyOfAdded value: +[ + { + "description": "Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene.", + "minLength": 2, + "type": "string" + }, + { + "description": "Blank — the gene is treated as omitted.", + "maxLength": 0, + "type": "string" + } +] - changed
Input schema / properties / gene / descriptionPrevious value: -"Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene."New value: +"Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene. Mutually exclusive with transcript_id and region; blank means omitted." - removed
Input schema / properties / gene / minLengthRemoved value: -2 - removed
Input schema / properties / gene / typeRemoved value: -"string" - changed
Input schema / properties / transcript_id / descriptionPrevious value: -"Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region."New value: +"Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region; blank means omitted."
- Changed
gnomad_list_gene_variants12 fields changed- changed
Input schema / properties / canvas_id / descriptionPrevious value: -"Optional canvas ID from a prior call, to reuse the same canvas. Reusing it REPLACES (overwrites) the gene_variants table with this call's results — it does not append. Omit to start a fresh canvas; the response returns a new one."New value: +"Optional canvas ID from a prior call, to reuse the same canvas. When supplied, this call always writes its result to the gene_variants table on that canvas, replacing (not appending to) the previous one — even when the result fits inline; a result with no variants removes the table. Omit to stage on a fresh canvas only when the result is too large to inline." - added
Input schema / properties / gene / anyOfAdded value: +[ + { + "description": "Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene.", + "minLength": 2, + "type": "string" + }, + { + "description": "Blank — the gene is treated as omitted.", + "maxLength": 0, + "type": "string" + } +] - changed
Input schema / properties / gene / descriptionPrevious value: -"Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene."New value: +"Gene — HGNC symbol (e.g. PCSK9) or Ensembl gene ID (e.g. ENSG00000169174). Obtain a stable ID from ensembl_lookup_gene. Mutually exclusive with transcript_id and region; blank means omitted." - removed
Input schema / properties / gene / minLengthRemoved value: -2 - removed
Input schema / properties / gene / typeRemoved value: -"string" - changed
Input schema / properties / transcript_id / descriptionPrevious value: -"Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region."New value: +"Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region; blank means omitted." - changed
Output schema / properties / canvas_id / descriptionPrevious value: -"Canvas ID — pass to gnomad_dataframe_query. Empty string when canvas is disabled."New value: +"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 canvas is disabled." - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no variants matched, or when the canvas is disabled and the preview is capped."New value: +"Guidance when no variants matched, when the canvas is disabled and the preview is capped, and — when a table was staged — its name with the next steps: gnomad_dataframe_describe, then gnomad_dataframe_query." - changed
Output schema / properties / preview / descriptionPrevious value: -"Inline preview rows — the immediate answer."New value: +"Inline preview rows — the immediate answer; every matching variant unless spilled." - changed
Output schema / properties / spilled / descriptionPrevious value: -"True when the full result was staged on the canvas beyond the preview."New value: +"True when the result exceeded the inline preview budget, so the preview holds only the first rows and table_name holds them all." - changed
Output schema / properties / table_name / descriptionPrevious value: -"Canvas table holding the full set (gene_variants); empty when not spilled."New value: +"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." - changed
Output schema / properties / total / descriptionPrevious value: -"Total matching variants (staged row count when spilled, else preview length)."New value: +"Total matching variants, including any beyond the preview."
- Changed
gnomad_search_clinvar21 fields changed- changed
Input schema / properties / canvas_id / descriptionPrevious value: -"Optional canvas ID from a prior call, to reuse the same canvas. Reusing it REPLACES (overwrites) the clinvar_variants table with this call's results — it does not append. Omit to start a fresh canvas; the response returns a new one."New value: +"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." - changed
Input schema / properties / clinical_significance / descriptionPrevious value: -"Filter by ClinVar clinical significance term (e.g. pathogenic, likely_pathogenic, benign)."New value: +"Filter by ClinVar clinical significance term (e.g. pathogenic, likely_pathogenic, uncertain significance), matched as whole words; underscores read as spaces. Blank means no filter." - added
Input schema / properties / limitAdded value: +{ + "default": 500, + "description": "ClinVar records to fetch in this window (1–500). Counted before the clinical_significance and min_review_stars filters, so a window can return fewer rows.", + "maximum": 500, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Zero-based position of the first ClinVar record in this window. Pass next_offset from the previous call to continue.", + "maximum": 2147483647, + "minimum": 0, + "type": "integer" +} - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "preview", - "canvas_id", - "table_name", - "spilled", - "total" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "preview", + "canvas_id", + "table_name", + "spilled", + "total", + "total_found", + "truncated", + "next_offset", + "unavailable_ids" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / canvas_id / descriptionPrevious value: -"Canvas ID — pass to gnomad_dataframe_query. Empty string when canvas is disabled."New value: +"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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `ncbi_unreachable`: NCBI E-utilities is unreachable or rate-limited. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `upstream_unavailable`: NCBI E-utilities is unreachable, failing, or rate-limiting after retries. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "ncbi_unreachable" -]New value: +[ + "upstream_unavailable" +] - added
Output schema / properties / next_offsetAdded value: +{ + "description": "offset for the next window; null when this window reaches the end.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no ClinVar records matched, or when the canvas is disabled and the preview is capped."New value: +"Guidance on completeness (the offset that continues the list, or an offset past the end), no-match results, a capped preview when the canvas is disabled, the staged table with its next steps (gnomad_dataframe_describe, then gnomad_dataframe_query), and which identifier to pass to gnomad_get_variant." - changed
Output schema / properties / preview / descriptionPrevious value: -"Inline preview rows — the immediate answer."New value: +"Inline preview rows — the immediate answer; the window's every row unless spilled." - added
Output schema / properties / preview / items / properties / canonical_spdiAdded value: +{ + "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.", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / preview / items / properties / grch38_variant_idAdded value: +{ + "description": "gnomAD variant ID (chrom-pos-ref-alt, GRCh38) for gnomad_get_variant with the GRCh38 datasets (gnomad_r4, gnomad_r3). Set for SNVs, MNVs, and delins; null for deletions, insertions, duplications, mitochondrial variants, and multi-allele records.", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / preview / items / properties / rsidsAdded value: +{ + "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.", + "type": "string" +} - changed
Output schema / properties / preview / items / requiredPrevious value: -[ - "clinvar_variation_id", - "accession", - "title", - "obj_type", - "clinical_significance", - "review_status", - "gold_stars", - "last_evaluated", - "molecular_consequences", - "protein_change", - "conditions", - "submission_count" -]New value: +[ + "clinvar_variation_id", + "accession", + "title", + "obj_type", + "clinical_significance", + "review_status", + "gold_stars", + "last_evaluated", + "molecular_consequences", + "protein_change", + "conditions", + "submission_count", + "canonical_spdi", + "rsids", + "grch38_variant_id" +] - changed
Output schema / properties / spilled / descriptionPrevious value: -"True when the full result was staged on the canvas beyond the preview."New value: +"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." - changed
Output schema / properties / table_name / descriptionPrevious value: -"Canvas table holding the full set (clinvar_variants); empty when not spilled."New value: +"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." - changed
Output schema / properties / total / descriptionPrevious value: -"Total matching ClinVar records (staged row count when spilled, else preview length)."New value: +"Rows in this window that passed the filters, including any beyond the preview." - added
Output schema / properties / total_foundAdded value: +{ + "description": "ClinVar records matching the gene and filter terms across every window, counted before the post-fetch significance and star filters.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when ClinVar records remain past this window; continue with next_offset.", + "type": "boolean" +} - added
Output schema / properties / unavailable_idsAdded value: +{ + "description": "VariationIDs in this window that ClinVar returned no summary for, so they have no row; empty when none.", + "items": { + "type": "string" + }, + "type": "array" +}
7 tool updates
- Changed
gnomad_dataframe_describe2 fields changed- removed
Input schema / properties / canvas_id / minLengthRemoved value: -1 - added
Input schema / properties / canvas_id / patternAdded value: +"^[A-Za-z0-9_-]{10}$"
- Changed
gnomad_dataframe_query2 fields changed- removed
Input schema / properties / canvas_id / minLengthRemoved value: -1 - added
Input schema / properties / canvas_id / patternAdded value: +"^[A-Za-z0-9_-]{10}$"
- Changed
gnomad_get_coverage22 fields changed- removed
Output schema / properties / summaries / items / properties / fraction_over_1 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / fraction_over_1 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / fraction_over_10 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / fraction_over_10 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / fraction_over_100 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / fraction_over_100 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / fraction_over_15 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / fraction_over_15 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / fraction_over_20 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / fraction_over_20 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / fraction_over_25 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / fraction_over_25 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / fraction_over_30 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / fraction_over_30 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / fraction_over_5 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / fraction_over_5 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / fraction_over_50 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / fraction_over_50 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / mean_depth / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / mean_depth / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / summaries / items / properties / median_depth / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / summaries / items / properties / median_depth / typeAdded value: +[ + "number", + "null" +]
- Changed
gnomad_get_gene_constraint6 fields changed- removed
Output schema / properties / lof_z / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / lof_z / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / mis_z / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / mis_z / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / syn_z / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / syn_z / typeAdded value: +[ + "number", + "null" +]
- Changed
gnomad_get_variant17 fields changed- removed
Output schema / properties / found / items / properties / af / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / af / typeAdded value: +[ + "number", + "null" +] - changed
Output schema / properties / found / items / properties / clinvar / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "Joined ClinVar significance from gnomAD. Null when the variant has no ClinVar entry.", - "properties": { - "clinical_significance": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "ClinVar clinical significance (e.g. Pathogenic, Likely benign); null when no entry." - }, - "clinvar_variation_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "ClinVar VariationID." - }, - "gold_stars": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "ClinVar 0–4 star review rating." - }, - "review_status": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "ClinVar review status text." - } - }, - "required": [ - "clinical_significance", - "review_status", - "gold_stars", - "clinvar_variation_id" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "Joined ClinVar significance from gnomAD. Null when the variant has no ClinVar entry.", + "properties": { + "clinical_significance": { + "description": "ClinVar clinical significance (e.g. Pathogenic, Likely benign); null when no entry.", + "type": [ + "string", + "null" + ] + }, + "clinvar_variation_id": { + "description": "ClinVar VariationID.", + "type": [ + "string", + "null" + ] + }, + "gold_stars": { + "description": "ClinVar 0–4 star review rating.", + "type": [ + "number", + "null" + ] + }, + "review_status": { + "description": "ClinVar review status text.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "clinical_significance", + "review_status", + "gold_stars", + "clinvar_variation_id" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / found / items / properties / consequence / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / consequence / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / found / items / properties / gene_symbol / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / gene_symbol / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / found / items / properties / hemizygote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / hemizygote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / found / items / properties / in_silico / items / properties / value / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / in_silico / items / properties / value / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / found / items / properties / populations / items / properties / af / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / populations / items / properties / af / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / found / items / properties / populations / items / properties / hemizygote_count / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / populations / items / properties / hemizygote_count / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / found / items / properties / transcript_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / transcript_id / typeAdded value: +[ + "string", + "null" +]
- Changed
gnomad_list_gene_variants5 fields changed- added
Input schema / properties / canvas_id / patternAdded value: +"^[A-Za-z0-9_-]{10}$" - removed
Output schema / properties / preview / items / properties / af / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / preview / items / properties / af / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / preview / items / properties / consequence / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / preview / items / properties / consequence / typeAdded value: +[ + "string", + "null" +]
- Changed
gnomad_search_clinvar7 fields changed- added
Input schema / properties / canvas_id / patternAdded value: +"^[A-Za-z0-9_-]{10}$" - removed
Output schema / properties / preview / items / properties / clinical_significance / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / preview / items / properties / clinical_significance / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / preview / items / properties / last_evaluated / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / preview / items / properties / last_evaluated / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / preview / items / properties / review_status / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / preview / items / properties / review_status / typeAdded value: +[ + "string", + "null" +]
2 tool updates
- Changed
gnomad_get_gene_constraint19 fields changed- changed
Output schema / properties / exp_lof / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / exp_lof / descriptionPrevious value: -"Expected LoF variant count. Null when unavailable."New value: +"Non-negative expected LoF variant count. Null when unavailable." - changed
Output schema / properties / exp_mis / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / exp_mis / descriptionPrevious value: -"Expected missense count. Null when unavailable."New value: +"Non-negative expected missense count. Null when unavailable." - changed
Output schema / properties / exp_syn / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / exp_syn / descriptionPrevious value: -"Expected synonymous count. Null when unavailable."New value: +"Non-negative expected synonymous count. Null when unavailable." - changed
Output schema / properties / obs_lof / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / obs_lof / descriptionPrevious value: -"Observed LoF variant count. Null when unavailable."New value: +"Non-negative observed LoF variant count. Null when unavailable." - changed
Output schema / properties / obs_mis / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / obs_mis / descriptionPrevious value: -"Observed missense count. Null when unavailable."New value: +"Non-negative observed missense count. Null when unavailable." - changed
Output schema / properties / obs_syn / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / obs_syn / descriptionPrevious value: -"Observed synonymous count. Null when unavailable."New value: +"Non-negative observed synonymous count. Null when unavailable." - changed
Output schema / properties / oe_lof / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / oe_lof / descriptionPrevious value: -"Observed/expected LoF ratio. Null when unavailable."New value: +"Non-negative observed/expected LoF ratio. Null when unavailable." - changed
Output schema / properties / oe_lof_lower / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / oe_lof_upper / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / oe_mis / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / oe_syn / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +] - changed
Output schema / properties / pli / anyOfPrevious value: -[ - { - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } +]
- Changed
gnomad_get_variant4 fields changed- added
Output schema / properties / failed / items / properties / candidatesAdded value: +{ + "description": "Concrete variant IDs to retry when an rsID is ambiguous.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / found / items / properties / clinvar_unavailableAdded value: +{ + "description": "True when the optional ClinVar resolver failed; false when no entry exists.", + "type": "boolean" +} - changed
Output schema / properties / found / items / requiredPrevious value: -[ - "variant_id", - "rsids", - "reference_genome", - "dataset", - "ac", - "an", - "af", - "homozygote_count", - "hemizygote_count", - "populations", - "source", - "flags", - "consequence", - "transcript_id", - "gene_symbol", - "in_silico", - "clinvar" -]New value: +[ + "variant_id", + "rsids", + "reference_genome", + "dataset", + "ac", + "an", + "af", + "homozygote_count", + "hemizygote_count", + "populations", + "source", + "flags", + "consequence", + "transcript_id", + "gene_symbol", + "in_silico", + "clinvar", + "clinvar_unavailable" +] - added
Output schema / properties / noticeAdded value: +{ + "description": "Non-fatal notice when optional ClinVar annotation was unavailable.", + "type": "string" +}
7 tool updates
- First observed
gnomad_dataframe_describe - First observed
gnomad_dataframe_query - First observed
gnomad_get_coverage - First observed
gnomad_get_gene_constraint - First observed
gnomad_get_variant - First observed
gnomad_list_gene_variants - First observed
gnomad_search_clinvar
Related MCP Connectors
gnomAD MCP — Broad Institute Genome Aggregation Database (GraphQL).
Cited gene, variant (rsID) and CPIC drug–gene lookups for AI agents. Read-only, no key.
Canine genomics for agents: breed allele frequencies, AI pathogenicity + OMIA clinical disease layer
dbSNP refSNP records and HGVS/SPDI/rsID normalization for human genetic variants, from NCBI…
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables querying the gnomAD genome aggregation database for variant, gene, and region information.2 npmMIT
- FlicenseBqualityDmaintenanceEnables AI assistants to query genetic variant data, gene constraints, and population genetics information from the gnomAD (Genome Aggregation Database) through its GraphQL API. Supports searching for genes and variants, retrieving constraint scores, analyzing population frequencies, and accessing genomic coverage data.910-
- FlicenseAqualityAmaintenanceEnables querying rare-variant, gene-based association results across ~1.2M individuals from 10 global biobanks, supporting phenome-wide scans, replication screens across ancestries, and candidate list evaluation for 44 harmonized traits.4-
- AlicenseBqualityDmaintenanceProvides a programmatic interface to the Genome Aggregation Database (gnomAD) API across versions v2.1.1, v3.1.2, and v4.1.0. It enables users to query gene metadata, variant information, population frequencies, and ClinVar data through a unified schema.126Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.