# Reported issues for gnomad-genetics-mcp-server

Pod holds 16 of 17 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [gnomad-genetics-mcp-server](/mcp/gnomad-genetics-mcp-server).

## Most discussed

### bug(gnomad_get_variant): absent coordinate IDs fail as graphql_error instead of not-found

### Server version

0.2.1

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0 / Node v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

An absent coordinate variant surfaces as a generic GraphQL failure instead of as absence. For a missing variant, gnomAD returns HTTP 200 with one pathless error, `{"message":"Variant not found"}`, and `data: {"variant": null, "clinvar_variant": null}` on all four datasets. gnomAD strips `path` from every error it…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/25) · 2026-08-31 · closed · 4 comments

### bug(gnomad_get_variant): failed[] items drop the failure's reason and recovery hint

### Server version

0.3.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

`gnomad_get_variant` catches each item's service error and records only `err.message` in `failed[].error`. The error's `data.reason` and recovery hint are dropped, so a caller reading `failed[]` cannot branch on why an item failed or learn its next step. An item that exhausts retries reads `gnomAD is unavailable or rate-limited.` with no guidance,…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/43) · 2026-09-30 · closed · 1 comment

### bug(chromosome-m): mitochondrial IDs, regions, and genes return false absence

### Server version

0.3.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

gnomAD serves mitochondrial variants through separate fields (`mitochondrial_variant`, `gene.mitochondrial_variants`, `mitochondrial_coverage`). The server accepts chromosome `M` in coordinate variant IDs and regions and resolves mitochondrial genes, but it queries only the nuclear fields, which answer with nothing. Callers get absence for variants…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/42) · 2026-09-30 · closed · 1 comment

### bug(gnomad_search_clinvar): query syntax in gene escapes the [gene] field

### Server version

0.2.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

`gnomad_search_clinvar` splices `gene` into the ESearch term as `${gene}[gene]` with no character check. A value carrying E-utilities query syntax (parentheses, brackets, quotes, a trailing `OR`/`AND`/`NOT`) detaches the `[gene]` tag, NCBI rewrites the term to `[All Fields]`, and the tool returns other genes' records labeled as the requested gene.…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/40) · 2026-09-24 · closed · 1 comment

### bug(upstream-errors): gnomAD's caller-correctable 500 messages retry as upstream_unavailable

### Server version

0.2.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

gnomAD answers some caller-correctable requests with HTTP 500 and a user-facing GraphQL message. The server classifies every 5xx as `upstream_unavailable`, retries it four times, and drops the message. A region under the 2.5 Mb span limit that holds more than gnomAD's per-region ceiling of 30,000 variants is the case no local pre-check can predict…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/39) · 2026-09-24 · closed · 1 comment

### bug(error-contracts): sanitizer reasons reach callers undeclared

### Server version

0.2.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

The gnomAD and ClinVar services put a typed `data.reason` on every failure, but the tools' and resources' `errors[]` contracts declare few of them. Callers receive reasons no definition advertises, and every undeclared reason except the two the sanitizer hard-codes reaches the wire with no recovery hint. Undeclared today:

| Surface | Reachable,…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/38) · 2026-09-24 · closed · 1 comment

### bug(canvas): staging tools return ~120 KB per call — preview budget lands on both surfaces

### Server version

0.2.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

With DataCanvas enabled, `gnomad_search_clinvar` and `gnomad_list_gene_variants` call `spillover()` with `previewChars: 60_000`, and the preview rows land on both surfaces — `structuredContent.preview` and the `format()` text. One call therefore returns roughly twice the preview budget, ~30k tokens, before the caller has asked for anything beyond…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/37) · 2026-09-24 · closed · 1 comment

### bug(gnomad_get_variant): gnomad_r3 SpliceAI values become NaN and fail every batch containing one

### Server version

0.2.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

On `gnomad_r3`, gnomAD returns `splice_ai` as a score followed by the SpliceAI event in parentheses, e.g. `"0.00 (no_consequence)"`. `GnomadService` maps every predictor with `Number(p.value)`, so these values become `NaN`. `gnomad_get_variant` output validation then rejects the whole response, losing every variant in the batch, including those…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/36) · 2026-09-24 · closed · 1 comment

## Most recent

### bug(gnomad_get_coverage): positions counts gnomAD's coverage buckets, not bases

### Server version

0.3.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

gnomAD returns region, gene, and transcript coverage in buckets of `max(floor(span / 500), 1)` bp (`graphql-api/src/queries/coverage-queries.ts` in `broadinstitute/gnomad-browser`). `getCoverage()` reports `positions: bins.length`, which the output schema describes as "Number of base positions summarized across the target", so any target longer…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/45) · 2026-09-30 · open · 0 comments

### bug(canvas): fit-inline calls mint empty canvases and leave reused tables stale

### Server version

0.2.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`gnomad_list_gene_variants` and `gnomad_search_clinvar` call `canvas.acquire(input.canvas_id, ctx)` before `spillover()` decides whether to stage anything. Two defects follow:

- A call whose result fits inline, with no `canvas_id` supplied, still mints a new canvas that holds no table. Minted canvases count against…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/35) · 2026-09-24 · closed · 1 comment

### bug(gnomad_search_clinvar): format() claims the canvas is disabled when it is enabled

### Server version

0.2.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

With `CANVAS_PROVIDER_TYPE=duckdb` set, `gnomad_search_clinvar` given an Ensembl gene ID renders `**Canvas disabled** — inline preview only.`, which tells the model the SQL path is unavailable when it is available. The Ensembl-ID short-circuit returns `canvas_id: ''` without calling `canvas.acquire()`, and `format()` treats any…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/33) · 2026-09-20 · closed · 1 comment

### bug(gnomad_dataframe_query): bound results without cross-surface data loss

### Server version

0.2.1

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0 / Node v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Related: #21, #37

`gnomad_dataframe_query` puts every row the SQL produces into `structuredContent.rows`, up to the canvas row cap (`CANVAS_DEFAULT_ROW_LIMIT`, 10,000 by default), while `format()` renders the first 50 and then `… and N more row(s).` `content[]` readers cannot reach the rest, one call can return…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/30) · 2026-08-31 · closed · 1 comment

### bug(region): unsupported chromosomes and out-of-range regions retry as upstream_unavailable

### Server version

0.2.1

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0 / Node v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Related: #1, #39

gnomAD rejects a region deterministically, with HTTP 500 and a GraphQL error message, on every dataset when it breaks any of these rules:

- the chromosome is outside `1`–`22`, `X`, `Y`, `M` (exact case, no `chr` prefix, no `MT`, no zero-padding);
- start is less than 1, or stop is 1,000,000,000 or…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/27) · 2026-08-31 · closed · 1 comment

### bug(gnomad_get_gene_constraint): exac serves v2.1.1 metrics and no output names the constraint release

### Server version

0.2.1

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0 / Node v26.5.0

### Transport

stdio

### Description

`gnomad_get_gene_constraint` sends gnomAD only the reference genome and echoes the requested `dataset` as provenance. `gene.gnomad_constraint` takes no arguments, so the build picks the table (gnomAD v4.1.2 on GRCh38, v2.1.1 on GRCh37). ExAC constraint lives in `gene.exac_constraint` (GRCh37), which the server never requests. So…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/26) · 2026-08-31 · closed · 1 comment

### bug(docker): multi-arch image ships the builder's @duckdb binding, not the target platform's

Related: #7

`Dockerfile:80` copies `node_modules/@duckdb` out of the build stage:

```dockerfile
COPY --from=build /usr/src/app/node_modules/@duckdb ./node_modules/@duckdb
```

Since `Dockerfile:7` pins the build stage to `--platform=$BUILDPLATFORM`, that stage resolves dependencies for the **builder's** platform, not the target's. `@duckdb/node-bindings` declares one optionalDependency per platform and installs exactly one of them:

```
$ ls node_modules/@duckdb          # on an arm64 macOS…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/24) · 2026-08-25 · closed · 1 comment

### feat(config): default MCP_SESSION_MODE to stateless across env, Docker, and src

`Dockerfile` sets `ENV MCP_SESSION_MODE="stateless"`, but `.env.example` carries a commented `# MCP_SESSION_MODE=stateful`, whose comment documents the value set as `stateful | stateless (default: stateful)`. The container and the same code run via `bunx`, `npm start`, or from source therefore resolve to different session modes — stateless in Docker, stateful everywhere else, since the framework schema defaults to `auto` and `auto` resolves to `stateful`.

The hosted deployment runs stateless…

[Read the thread](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues/23) · 2026-08-22 · closed · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/gnomad-genetics-mcp-server/issues).
