gnomad-genetics-mcp-server
Server Details
Look up allele frequencies by ancestry, gene constraint, variants, and coverage over gnomAD.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/gnomad-genetics-mcp-server
- GitHub Stars
- 1
- Server Listing
- @cyanheads/gnomad-genetics-mcp-server
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 declare readOnlyHint and idempotentHint, indicating a safe, non-mutating operation. The description adds behavioral context about what is returned (row count and column schema per table) and the staging concept, which complements the annotations without contradicting them. It does not mention error cases or side effects, but given the strong annotation coverage, this is sufficient.
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?
The description is concise, two sentences total, with the primary purpose and usage in the first sentence and return details in the second. It is front-loaded, avoids redundancy, and every sentence adds essential information without fluff.
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 simple tool with only one parameter and a rich output schema (present though not shown), the description provides complete context: it explains the staging workflow, the source of the canvas_id, the purpose of writing correct SQL, and what the output will contain (row counts and column schema). This is adequate for an agent to know when and how to use it.
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?
The single parameter canvas_id is already well-described in the schema: 'Canvas ID returned by a prior staging call (gnomad_list_gene_variants or gnomad_search_clinvar).' The main description repeats this guidance but adds no new semantic details, so it adds minimal value beyond the schema's 100% coverage. This aligns with the baseline for high schema coverage.
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 clearly states the tool lists tables staged on a canvas with their columns, explicitly tying its purpose to enabling correct SQL for gnomad_dataframe_query. It also distinguishes itself from related tools by referencing the staging tools (gnomad_list_gene_variants, gnomad_search_clinvar) and the downstream query tool, making its role in the workflow unambiguous.
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 specifies when to use it: after a staging call, and why: to inspect tables before writing SQL for gnomad_dataframe_query. It provides explicit source of the canvas_id. However, it does not explicitly state when not to use it or mention alternative inspection methods, though the context strongly implies this is the standard inspection step.
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). 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. 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). | |
| canvas_id | Yes | Canvas ID returned by gnomad_list_gene_variants or gnomad_search_clinvar. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | Result rows (dynamic columns per the SQL projection), capped at the canvas row limit. |
| error | No | Present when the call failed. Absent on success. |
| columns | No | Column names in the result, in order. |
| row_count | No | Number of rows the query produced (materialized count). |
| truncated | No | True when the result exceeded the row cap and was clipped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint=true and idempotentHint=true, but the description adds specific constraints beyond those: 'SELECT statements only — writes, DDL, and file/HTTP table functions are rejected by the canvas gate.' It also mentions the workflow dependency on staging tools, which is valuable behavioral context not captured by annotations. The description does not contradict any annotation.
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?
The description is concise (about 4 sentences), front-loaded with the core purpose, and every sentence adds value: purpose, usage, example use cases, constraints, and prerequisite call. There is no fluff or repetition, making it efficient and well-structured.
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?
Given the tool is a SQL query against staged tables, the description covers all essential context: the staging mechanism (other tools), the required inputs (canvas_id and table_name), the workflow (call describe first), constraints (read-only, rejected functions), and example use cases. The presence of an output schema means detailed return values are not needed. This is complete for a tool of this complexity.
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 both parameters (sql and canvas_id) are fully documented in the schema. The description reinforces their use but does not add new syntactic or semantic details beyond what the schema already provides (e.g., the schema already says 'Read-only SQL SELECT' and 'Canvas ID returned by gnomad_list_gene_variants or gnomad_search_clinvar'). Since the description adds no new parameter-level information, the baseline 3 is appropriate.
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 clearly states what the tool does: '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).' It specifies the verb (run), the resource (canvas table), and the scope (read-only SQL SELECT), and differentiates from siblings by naming the staging tools and the specific use cases (ranking, grouping, filtering).
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 provides explicit when-to-use guidance: 'Use the canvas_id and table_name those tools returned...' and 'Call gnomad_dataframe_describe first to discover staged table and column names.' It also gives explicit exclusions: 'writes, DDL, and file/HTTP table functions are rejected by the canvas gate.' This gives clear alternatives and context without ambiguity.
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. | |
| region | No | Genomic region chrom-start-stop (1-based inclusive, e.g. 1-55039447-55064852). 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. | |
| 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 establish read-only, idempotent behavior; the description adds materially useful behavioral detail beyond that: the output shape (depth stats, threshold fractions, exome/genome separation), the default to return all available tracks, and the behavior of echoing the effective dataset and build. It does not cover failure modes or edge-case behavior, but it does not contradict the annotations.
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?
The description is dense but efficient, front-loading the output content and purpose in the first sentence, then giving the use case, cardinality rule, and default behavior. The brief data-source attribution is earned for provenance. Every sentence contributes to correct selection or invocation.
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?
Given a rich 100%-covered input schema, an output schema, and read-only/idempotent annotations, the description covers the essential non-schema guidance: what the output means, why an agent would call this tool, the selector cardinality, and the default track behavior. Nothing critical 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 baseline is 3. The description adds real value by clarifying the exact-one-of constraint across gene/transcript_id/region, which the schema only expresses through mutual-exclusion pair notes. It also reinforces the coverage_source default behavior. It does not add deep syntax guidance for each parameter, but the schema already handles that.
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 anchors on a specific, unambiguous operation: fetching gnomAD sequencing-coverage summaries. It enumerates the resource types (gene, transcript, region) and specifies exactly what the result contains (mean/median depth, fraction at 1×–100× thresholds, exome/genome tracks). This clearly separates it from sibling variant and dataframe tools even without naming them.
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 gives an explicit, actionable use case: disambiguating true absent variants from uncallable positions, with a clear explanation of why well-covered versus poorly-covered regions matter. It also instructs the caller to supply exactly one of gene, transcript_id, or region. It stops short of explicitly naming sibling alternatives or stating when not to use this tool, so it misses a 5.
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; <0.6 intolerant in v4, <0.35 in v2) 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). Many genes have null constraint (sparse upstream) — null fields are reported as such, never fabricated. v4 constraint is flagged beta by the gnomAD team; constraint_flags surfaces any caveats. 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. Null when unavailable. |
| constraint_flags | No | Constraint caveat flags (e.g. beta/experimental notes for v4). |
| reference_genome | No | Effective reference build. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower. The description adds substantial behavioral context: it discloses that null constraint fields are reported as such and never fabricated, that v4 constraint is flagged beta, that constraint_flags surfaces caveats, and that the effective dataset and reference build are echoed. These details address output edge cases and data-source caveats beyond what annotations convey, without contradicting them.
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?
The description is information-dense and front-loaded with the core purpose, then systematically elaborates on metrics, version differences, null behavior, and data source. Every sentence serves a purpose, with no filler. It is somewhat long but justified by the tool's complexity. A 4 reflects strong structure with minor verbosity, not a flaw.
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?
The output schema exists, so return-value explanation is not required. The description covers the core metrics, version-specific thresholds (pLI >0.9, LOEUF <0.6 v4 / <0.35 v2), null-field handling, beta status, covariance with reference genome, and the data source attribution. There are no obvious gaps that would prevent an agent from correctly invoking and interpreting the 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 description coverage is 100%, so the baseline is 3. The description reiterates the accepted gene identifier types (HGNC symbol or Ensembl ID) and mentions echoing dataset/reference build, but it does not add new meaning beyond the schema for parameters. The threshold values (LOEUF <0.6 in v4) are interpretation aids, not parameter semantics. Credit is given for reinforcing schema details, but no substantive additions.
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: 'Fetch gnomAD loss-of-function constraint for a gene' and enumerates the exact metrics returned (pLI, LOEUF, observed/expected ratios, Z-scores). It explicitly differentiates itself from the allele-frequency axis, making clear it is the orthogonal tool for gene tolerance. This distinguishes it from sibling tools like gnomad_get_variant and gnomad_list_gene_variants without ambiguity.
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 provides strong contextual guidance on when this tool is relevant ('a loss-of-function variant matters far more in a gene intolerant to being broken') and notes the beta flag for v4 constraint. However, it does not explicitly name alternative tools or state when NOT to use this tool. The schema also covers required input types. This is clear context but lacks explicit exclusions or sibling routing, so a 4 is appropriate.
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[] 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: malformed IDs, variants absent from the dataset, or upstream errors. |
| 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 already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context beyond these: per-item partial success (malformed/absent IDs land in failed[] without failing others), empty found[] semantics indicating absence in the dataset, and the recommendation to pair with coverage tool. It also mentions the data source. No contradiction with annotations; in fact, it reinforces the read-only nature by explaining non-destructive error handling.
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?
The description is comprehensive but not overly verbose. The first sentence front-loads the core purpose. It then covers batch behavior, absence semantics, and pairing guidance in clear, structured sentences. It includes a data source line at the end, which is useful but could be considered optional. Slightly longer than strictly necessary, but every sentence adds value; a strong structure with no 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?
Given the tool's complexity (batch, multiple datasets, reference genomes, partial success), the description covers all necessary operational details: accepted ID formats, dataset-to-genome mapping, error handling, and absence interpretation. Since there is an output schema (presumably documenting return fields), the description doesn't need to explain return values. The inclusion of the data source and the pairing suggestion for coverage completes the picture 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 coverage is 100%, with each parameter described. The description adds substantial enrichment: it clarifies the meaning of dataset values (e.g., gnomad_r4 is GRCh38 default), provides concrete variant ID examples (1-55051215-G-GA, rs11591147), explains how reference_genome is derived from dataset and the requirement of coordinate alignment. These details go beyond the schema and help the agent construct correct calls.
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 clearly states the verb 'Fetch' and the resource 'full gnomAD population record for one or more variants', enumerating the specific data fields (allele counts, homozygote/hemizygote counts, quality flags, transcript consequence, in-silico scores, ClinVar significance). It distinguishes itself from siblings by framing the answer as 'how common, is it benign' and explicitly referencing gnomad_get_coverage for absence confirmation, which sets it apart clearly.
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 provides explicit usage context: 'The ''how common, is it benign'' answer in one call.' It also gives a clear pairing instruction with gnomad_get_coverage for confirming absence, and explains the batch behavior with per-item partial success and failure handling. This effectively tells the agent when to use this tool versus alternatives, including a direct reference to a sibling tool.
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. The full result is staged on a DataCanvas table named gene_variants and an inline preview is returned alongside canvas_id and table_name — run gnomad_dataframe_query against them to rank by AF, count by consequence, or group across the complete set rather than the preview. When the canvas is disabled (CANVAS_PROVIDER_TYPE != duckdb) the tool returns a capped inline preview with spilled=false and canvas_id empty; the SQL path is then 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. | |
| 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). 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. 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. | |
| transcript_id | No | Ensembl transcript ID (e.g. ENST00000302118). Mutually exclusive with gene and region. | |
| 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 (staged row count when spilled, else preview length). |
| notice | No | Guidance when no variants matched, or when the canvas is disabled and the preview is capped. |
| dataset | No | Effective gnomAD dataset. |
| preview | No | Inline preview rows — the immediate answer. |
| spilled | No | True when the full result was staged on the canvas beyond the preview. |
| canvas_id | No | Canvas ID — pass to gnomad_dataframe_query. Empty string when canvas is disabled. |
| table_name | No | Canvas table holding the full set (gene_variants); empty when not spilled. |
| reference_genome | No | Effective reference build. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is transparent about staging results and about the destructive replacement behavior: 'Reusing it REPLACES (overwrites) the gene_variants table... it does not append.' However, this directly contradicts the annotation readOnlyHint=true, which indicates the tool does not modify its environment. Because the description contradicts structured annotations, the score must be 1 and this is an Annotation Contradiction.
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?
The description is long but every sentence earns its place: core behavior, optional filters, staging flow, disabled-canvas fallback, selector exclusivity, dataset/build echo, and data source. The main purpose is front-loaded, and the canvas details are logically sequenced without 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?
Given the tool's complexity — 8 parameters, canvas staging, and a disabled-canvas fallback — the description is complete. It covers result staging, inline preview, canvas_id semantics, capped preview behavior when canvas is disabled, selector exclusivity, and dataset/build behavior. Since an output schema exists, not detailing return fields is acceptable.
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 baseline is 3. The description adds value beyond the schema by stating the cross-parameter constraint 'Supply exactly one of gene, transcript_id, or region,' explaining what canvas_id reuse does, and noting the effective dataset/build echo. This is meaningful context that the individual property descriptions do not fully convey.
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 with allele frequencies and predicted consequences.' This clearly distinguishes it from siblings like gnomad_get_variant (single variant) and gnomad_get_coverage or gnomad_get_gene_constraint. An agent can tell what this tool does without opening the 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?
The description gives clear usage context: filter by consequence class and max AF, supply exactly one of gene/transcript/region, and use gnomad_dataframe_query to operate on the full staged result. It does not explicitly contrast this tool with alternatives such as when to prefer gnomad_get_variant or search_clinvar, so it stops short of a 5.
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, and submission counts — 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. The full set is staged on a DataCanvas table named clinvar_variants with an inline preview; query it with gnomad_dataframe_query to rank or count across the complete set. Keyless, but honors NCBI_API_KEY for a higher rate limit. When the canvas is disabled the tool returns a capped inline preview with spilled=false. 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. | |
| canvas_id | No | 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. | |
| 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, benign). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| total | No | Total matching ClinVar records (staged row count when spilled, else preview length). |
| notice | No | Guidance when no ClinVar records matched, or when the canvas is disabled and the preview is capped. |
| preview | No | Inline preview rows — the immediate answer. |
| spilled | No | True when the full result was staged on the canvas beyond the preview. |
| canvas_id | No | Canvas ID — pass to gnomad_dataframe_query. Empty string when canvas is disabled. |
| table_name | No | Canvas table holding the full set (clinvar_variants); empty when not spilled. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation Contradiction: readOnlyHint is true, but the description says the full set is staged on a DataCanvas table and the schema notes that reusing a canvas_id REPLACES the table. This describes a write/side-effect behavior that conflicts with the read-only annotation.
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?
The description is front-loaded with the purpose, then covers filters, DataCanvas staging, query alternative, API-key behavior, and fallback behavior. It is somewhat dense and includes minor extras like 'Credit: ClinVar, NCBI', but every major sentence adds value.
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?
The description covers the external source, rate-limit behavior, DataCanvas staging, disabled-canvas fallback, filtering options, and the recommended way to query the complete result set. The output schema handles return-value expectations. The readOnlyHint contradiction leaves the overall behavioral context slightly incoherent, preventing a perfect score.
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 all four parameters thoroughly. The description adds only light extra meaning, such as examples for clinical_significance ('pathogenic') and the 0–4 star rating concept; it does not materially compensate beyond 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?
The description opens with a specific action and resource: 'Search ClinVar (NCBI E-utilities) for a gene and return its classified variants.' It clearly differentiates this tool from gnomAD-native siblings by emphasizing an external ClinVar source, gene-level classification, and a 'gene-panel curation view.'
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 supplies clear context: you use this tool when you need ClinVar variant classifications for a gene, with optional filters and a staged DataCanvas table for further querying via gnomad_dataframe_query. It does not explicitly state when not to use it or name alternative tools beyond the dataframe query direction.
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. Dates show when Glama detected each change.
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
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Broad Institute gnomAD genomic variant database (GraphQL)
Canine genomics for agents: breed allele frequencies, AI pathogenicity + OMIA clinical disease layer
Look up genes, sequences, variants, homologs, and cross-database xrefs from Ensembl REST.
Gencove consumer genomics: profile, kit status, ancestry, PRS, raw data. Requires Gencove auth.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables querying the gnomAD genome aggregation database for variant, gene, and region information.16MIT
- 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.
TDQS
Every tool has a clearly distinct role: specific variant lookup, gene constraint, coverage, ClinVar search, and canvas SQL describe/query. The closest pair, gnomad_get_variant and gnomad_list_gene_variants, is separated by input type and the depth of data returned.
Most tools follow a gnomad_<verb>_<object> pattern like get_coverage, get_variant, list_gene_variants, and search_clinvar. The two canvas helpers break this with gnomad_dataframe_describe and gnomad_dataframe_query, but they form a readable and internally consistent sub-pattern.
Seven tools is well-scoped for a gnomAD/ClinVar genetics server. Each tool addresses a distinct query need, and the two dataframe utilities add real analytic value without bloating the API.
The surface covers the core read-only workflows: variant lookup, gene variant listing with filters, constraint, coverage, and ClinVar curation. The dataframe query path prevents dead ends when working with large staged result sets.