Folklore Clinical Variant Interpretation MCP
Server Details
ACMG/AMP germline variant classification, gene profiles, disease associations and literature.
- Status
- Healthy
- Uptime
- 99.7% over 76 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- helena-bioinformatics/folklore-mcp
- GitHub Stars
- 1
- Server Listing
- Folklore Clinical Variant Interpretation MCP
TDQS
Scored across 11 tools
The gene-resolution/profile/section trio and variant classification are clearly distinct, but the surface contains two confusable clusters: search_literature_corpus explicitly accepts gene and variant queries that duplicate search_gene_literature and search_variant_literature, and get_gene_disease_associations mirrors search_disease_genes with opposite traversal direction. The descriptions do explain the snapshot-vs-live and direction distinctions, so an attentive agent can disambiguate, but the boundaries are not self-evident from names alone.
Almost all tools follow a clean snake_case verb_noun pattern (resolve_gene, get_gene_profile, get_gene_section, search_*_literature, classify_germline_variant). The main inconsistency is conceptual rather than syntactic: the same gene-disease validity resource is exposed as get_gene_disease_associations and search_disease_genes, using different verbs and inverted noun order.
Eleven tools is a well-scoped size for a variant-interpretation server, and each genomics tool carries a distinct role in the resolve-profile-classify-literature workflow. The only questionable inclusion is support_helena, a campaign/manifest helper unrelated to the clinical domain, which slightly dilutes the set.
The core lifecycle is well covered: identifier resolution, gene profile with paginated sections, gene-disease validity in both directions, ACMG classification, and literature retrieval across gene, variant, corpus and individual PMID. Gaps remain around batch/VCF classification, structural or somatic variant handling (explicitly limited to <50bp germline SNVs/indels), and any explicit coordinate liftover or normalization tool, though agents can work around these via the flexible input formats of classify_germline_variant.
Available Tools
11 toolsclassify_germline_variantClassify or interpret a germline variant under ACMG/AMPARead-onlyIdempotentInspect
Classify one GRCh38 germline nuclear SNV or simple indel smaller than 50 bp under ACMG/AMP. Accepts genomic, coding or protein HGVS, coordinates, SPDI, rsID or a returned canonical key. Returns normalized identity, automated classification, applied criteria, ClinVar assertions, population frequencies, annotations and source provenance when available. Ambiguous input returns candidates for selection.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | One germline nuclear SNV or simple indel to resolve and interpret; accepted forms include coordinates, genomic/coding/protein HGVS, SPDI, rsID, or a returned Folklore canonical_key in GRCh38:chrN:position:REF:ALT form. | |
| assembly | No | Reference genome assembly. Folklore currently accepts GRCh38 only. | GRCh38 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | |
| record_url | Yes | |
| adapter_error | Yes | |
| contract_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world and non-destructive, so the safety profile is carried. The description adds genuinely useful behavior beyond that: it enumerates the returned payload (normalized identity, classification, applied criteria, ClinVar assertions, frequencies, provenance) and discloses the ambiguity fallback that returns candidate list rather than a result.
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 sentences, each carrying distinct information: accepted scope, accepted input forms, and returned content plus ambiguity handling. The size limit and assembly constraint are front-loaded where an agent will read them first.
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-query tool with a 100%-documented two-parameter schema, an output schema and full safety annotations, the description covers the remaining gaps an agent needs — variant scope limits and what happens on ambiguous input. Only minor omissions (e.g. what happens for out-of-scope variants) keep it from perfect.
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% and the query parameter already lists coordinates, HGVS, SPDI, rsID and the canonical key form, so the description largely restates the schema. It adds only the canonical key shape hint and the 'one variant' constraint, so baseline 3 applies.
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?
A precise verb (classify/interpret) plus a tightly bounded resource: one GRCh38 germline nuclear SNV or simple indel under 50 bp, under ACMG/AMP. The sibling tools are all gene- or literature-oriented, so this is trivially distinguishable as the variant-interpretation entry point.
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 establishes clear scope conditions — single variant, nuclear, GRCh38, under 50 bp — which implicitly exclude CNVs, structural variants and batch input, and it explains that ambiguous input yields candidates for selection. It stops short of naming alternatives or stating prerequisites, but for this tool family there is no real competing sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gene_disease_associationsFind diseases associated with a geneARead-onlyIdempotentInspect
Find diseases associated with an exact gene symbol or HGNC identifier. Returns ClinGen gene-disease validity assertions, relation-specific inheritance, source reports and snapshot provenance, including conflicting and limited assertions.
| Name | Required | Description | Default |
|---|---|---|---|
| gene | Yes | One public human gene symbol or HGNC identifier, for example BRCA1 or HGNC:1100. | |
| limit | No | Maximum number of source assertions per page, from 1 to 50. | |
| offset | No | Zero-based assertion offset; use the returned nextOffset when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, non-destructive, so the safety profile is covered. The description adds real context beyond that: what the payload contains (ClinGen gene-disease validity assertions, relation-specific inheritance, source reports, snapshot provenance) and that conflicting and limited assertions are included, which tells the agent to expect low-confidence results rather than treat them as errors.
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?
Two tight sentences: the first front-loads the action and accepted inputs, the second enumerates the returned content. No filler, no restatement of the title or annotations.
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 and full parameter descriptions, the description need only frame the tool's role, which it does. The main remaining gap is the lack of explicit routing guidance to resolve_gene or to the gene-profile siblings for agents holding an ambiguous gene name.
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 gene, limit, and offset are already fully documented with examples and bounds. The description reinforces the exact-match requirement on the gene argument but adds no meaning for the pagination parameters, so the baseline 3 applies.
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 ('Find diseases associated with a gene') plus the accepted identifier forms, so the agent knows exactly what is being looked up. It does not distinguish itself from nearby siblings such as get_gene_profile, get_gene_section, or search_disease_genes, so it stops just short of a 5.
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?
Usage is implied by the 'exact gene symbol or HGNC identifier' phrasing, which hints that an unresolved name must be normalized first, but no alternative tool (e.g., resolve_gene) is named and there are no explicit when-not conditions. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gene_profileRead the complete gene profileARead-onlyIdempotentInspect
Read the selected gene_id and immutable snapshot_id from resolve_gene. Returns overview, disease validity, dosage, mechanisms, transcripts, native assemblies, constraint, ClinVar summaries and consequences, expression, GWAS, phenotypes and protein/pathways with source assertions, coverage, count units and null values. get_gene_section supplies further pages. Live search_gene_literature is separate from the snapshot literature section.
| Name | Required | Description | Default |
|---|---|---|---|
| gene_id | Yes | Canonical HGNC gene_id returned by resolve_gene. Select an explicit candidate when resolution is ambiguous. | |
| snapshot_id | Yes | identity_snapshot_id returned by resolve_gene, or snapshot_id from the current gene profile. Restart resolution after snapshot_unavailable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | |
| record_url | Yes | |
| adapter_error | Yes | |
| contract_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, closed-world behavior with no destruction. The description adds useful behavioral context by calling the snapshot immutable, summarizing the returned domains, and noting source assertions, coverage, count units, and null values; error/retry guidance is left mainly to the 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?
The description is front-loaded and compact: the first sentence states the core operation and source, the second summarizes the returned profile, and the third routes to alternatives. Every sentence is functional.
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 the description need not fully enumerate return fields; it appropriately summarizes the rich profile content. Combined with annotations and 100% parameter coverage, it provides enough context for selecting and invoking the tool 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 description coverage is 100%, so both arguments are already well documented with patterns and provenance. The description reinforces that gene_id is the selected gene and snapshot_id is immutable, but it does not add syntax or format details 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 gives a specific verb and resource: read the selected gene profile using gene_id and snapshot_id from resolve_gene. It also distinguishes sibling behavior by naming get_gene_section for further pages and separating live search_gene_literature from the snapshot literature section.
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 clearly situates the tool after resolve_gene and names get_gene_section as the way to obtain further pages, while noting that live literature search is separate. It stops short of an explicit when-not rule, but the alternatives and context are clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gene_sectionRead a page of gene recordsARead-onlyIdempotentInspect
Read a gene-profile section using gene_id, snapshot_id and its returned opaque cursor. Returns source records, assembly/release, coverage, totals, count units and provenance. snapshot_unavailable requires a fresh resolution/profile request.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum source records per page, from 1 to 50. Counts retain their original source unit. | |
| cursor | No | Opaque next_cursor returned for this same gene, snapshot and section. Omit for its first page. | |
| gene_id | Yes | Canonical HGNC gene_id returned by resolve_gene. Select an explicit candidate when resolution is ambiguous. | |
| section | Yes | Source-qualified section from the current profile. Literature is a separate live capture; use search_gene_literature for it. | |
| snapshot_id | Yes | identity_snapshot_id returned by resolve_gene, or snapshot_id from the current gene profile. Restart resolution after snapshot_unavailable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | |
| record_url | Yes | |
| adapter_error | Yes | |
| contract_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real value beyond that: it names the pagination contract (opaque cursor), summarizes what a page yields (source records, assembly/release, coverage, totals, count units, provenance) and discloses a failure mode (snapshot_unavailable) with the remedy.
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?
Two tight sentences with the access keys front-loaded before the return payload and the error case. The return-value enumeration is slightly redundant given that an output schema exists, which keeps it just short of a 5.
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 annotations carrying the safety profile, a full output schema, and 100% parameter documentation, the description's remaining job is to explain the paging model and the snapshot_unavailable recovery, both of which it does. Nothing an agent needs in order to invoke 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 description coverage is 100%, so all five parameters, including the enum values and the cursor's same-gene/snapshot/section constraint, are already documented. The description only restates that the cursor is 'returned' and opaque, adding no new syntax or format detail, so the baseline of 3 applies.
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 definition names a specific verb and resource ('Read a gene-profile section') and enumerates the addressing keys (gene_id, snapshot_id, cursor), so its paginated-section-read purpose is unmistakable. It does not explicitly contrast itself with the sibling get_gene_profile, leaving the agent to infer that one is the full profile and this is a paged slice.
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?
Usage is only implied: 'its returned opaque cursor' signals that follow-up pages go through this same tool, and 'snapshot_unavailable requires a fresh resolution/profile request' gives an error-recovery path. There is no explicit statement of when to choose this over get_gene_profile or which sibling to call first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_publication_detailsGet details for a PubMed publicationBRead-onlyIdempotentInspect
Retrieve one PMID from the PubMed-derived genetics corpus, including title, abstract, authors, journal, publication types, MeSH terms, gene and variant mentions, retraction status and PubMed/PMC links.
| Name | Required | Description | Default |
|---|---|---|---|
| pmid | Yes | One PubMed identifier to look up in Folklore's current corpus, as 1 to 12 digits without a PMID prefix. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, closed-world behavior, so safety is covered. The description adds that data comes from a specific derived corpus and that retraction status is surfaced, but says nothing about what happens when a PMID is absent from the corpus or how stale the data may be.
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?
A single front-loaded sentence with the action and scope stated first, followed by the field inventory. The field list is long but each item is informative rather than 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?
An output schema exists, so the enumerated return fields are partly redundant. What is missing for a lookup tool is the not-found/miss behavior and any note on corpus coverage boundaries, which an agent would need to interpret an empty or error result.
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%, including the digit-only format and the 'no PMID prefix' constraint, so the schema does the heavy lifting. The description only restates 'one PMID' and adds no format or validation detail beyond it.
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: 'Retrieve one PMID from the PubMed-derived genetics corpus', and enumerates the returned content. It is clear what the tool does, but it never differentiates itself from sibling search tools like search_literature_corpus or search_gene_literature.
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?
Usage is only implied by 'one PMID' — i.e. this is the fetch-by-identifier tool, used after a search returns a PMID. No explicit when-to-use, when-not-to-use, or named alternative is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_geneResolve a gene symbol, alias or stable identifierARead-onlyIdempotentInspect
Resolve a human gene symbol, previous symbol, alias, HGNC, Ensembl or NCBI Gene identifier. Returns exact, alias, ambiguous, not_found or withdrawn status with candidates and identity_snapshot_id. Use a selected HGNC gene_id and snapshot_id with get_gene_profile. Gene-plus-HGVS and variant expressions use classify_germline_variant.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | One public gene symbol, previous symbol, alias, HGNC ID, Ensembl gene ID or NCBI Gene ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | |
| record_url | Yes | |
| adapter_error | Yes | |
| contract_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the description's job is lighter. It adds real behavioral value by naming the five possible outcome statuses (exact, alias, ambiguous, not_found, withdrawn) and the returned candidates and identity_snapshot_id, telling the agent to expect non-exact resolutions rather than a boolean hit.
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 tight sentences: what it resolves, what it returns, where to go next. The disambiguation to classify_germline_variant is front-loaded at the end where it prevents the most likely misfire.
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 one-parameter resolution tool with full annotations and an output schema, nothing essential is missing: input space, outcome statuses, and the downstream handoff are all covered, and return-value structure is delegated to the output schema.
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?
With a single parameter at 100% schema coverage, the schema already documents the accepted identifier forms and length bounds. The description restates the identifier types but adds no format or syntax detail beyond what the schema provides, so the baseline 3 applies.
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 (resolve) and enumerates the exact input space: symbol, previous symbol, alias, HGNC, Ensembl or NCBI Gene ID, restricted to human genes. This is clearly distinguishable from siblings like get_gene_profile or classify_germline_variant at a glance.
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?
Explicitly routes the agent forward ('Use a selected HGNC gene_id and snapshot_id with get_gene_profile') and carves out an exclusion ('Gene-plus-HGVS and variant expressions use classify_germline_variant'). Both the when-to-use-next and the when-not-to-use-this cases are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_disease_genesFind genes associated with a diseaseARead-onlyIdempotentInspect
Find genes associated with an exact MONDO identifier or disease-name search. Returns ClinGen validity assertions with inheritance, source reports and snapshot provenance. Name searches can return multiple disease identities.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of source assertions per page, from 1 to 50. | |
| offset | No | Zero-based assertion offset; use the returned nextOffset when present. | |
| disease | Yes | One public disease name or exact MONDO identifier (MONDO: followed by seven digits). A name search may match multiple distinct diseases. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuine behavioral context beyond that: it reveals the payload is ClinGen validity assertions with inheritance and source reports, includes snapshot provenance, and that name searches may resolve to multiple disease identities — all things an agent could not infer from 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?
Three short sentences, front-loaded with the core action and return content, then the name-search caveat. No filler; each sentence carries information, though the caveat partially duplicates the schema.
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-value detail isn't required, and the description still characterizes the result payload. Combined with full schema coverage and safety annotations, an agent has enough to call this correctly; only the missing sibling comparison keeps it from 5.
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 all three parameters are documented in the schema, establishing the baseline of 3. The description adds only the pairing of 'disease' with exact MONDO identifiers or names and the multi-match caveat, both of which are essentially restated in the schema's parameter 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?
The description gives a specific verb+resource ('Find genes associated with a disease') and states what is returned (ClinGen validity assertions with inheritance, source reports, snapshot provenance). It does not explicitly differentiate itself from the sibling get_gene_disease_associations, which is the closest alternative, so it falls short of a 5.
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 implies lookup mode ('exact MONDO identifier or disease-name search') and warns that name searches can return multiple disease identities, which is a useful usage cue. However, it never says when to prefer this over get_gene_disease_associations or resolve_gene, and no exclusion conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_gene_literatureFind live literature for a resolved public geneARead-onlyIdempotentInspect
Retrieve a live publication capture for a resolved gene_id and snapshot_id. Returns source links, match labels, capture time/hash, degradation and gene/snapshot/sort-bound cursors. This capture is separate from the immutable reference snapshot and contains no abstracts.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Discovery ordering. Keep the same sort for continuation pages. | relevance |
| limit | No | Maximum publication records in one live discovery page, from 1 to 25. | |
| cursor | No | Opaque next_cursor returned for this same gene, snapshot and sort. Omit for the first page. | |
| gene_id | Yes | Canonical HGNC gene_id returned by resolve_gene. Select an explicit candidate when resolution is ambiguous. | |
| snapshot_id | Yes | identity_snapshot_id returned by resolve_gene, or snapshot_id from the current gene profile. Restart resolution after snapshot_unavailable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | |
| record_url | Yes | |
| adapter_error | Yes | |
| contract_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuine behavioral context on top: the result is a live capture that may be degraded, it carries capture time/hash and match labels, cursors are bound to gene/snapshot/sort, and abstracts are absent. 'Contains no abstracts' is a return-value detail that partially duplicates the output schema, keeping it from a 5.
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 tight sentences, front-loaded with the operation and inputs before the payoff and the snapshot caveat. Dense but nothing is wasted; the only redundancy is restating return fields that the output schema already covers.
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 need not enumerate return values, and it still adds the key caveat that this is a live, possibly degraded capture distinct from the immutable snapshot. Parameter coverage is complete, so an agent has everything needed to invoke it correctly; only explicit sibling routing 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 description coverage is 100%, so every parameter is already documented, establishing a baseline of 3. The description reinforces the cursor contract ('gene/snapshot/sort-bound cursors') but adds no syntax, defaults, or limits beyond what the schema already states for sort, limit, and cursor.
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 uses a specific verb and resource — 'Retrieve a live publication capture for a resolved gene_id and snapshot_id' — so an agent knows exactly what is being fetched and what the two key inputs are. It also draws a line between the live capture and the immutable reference snapshot, which hints at the sibling corpus tools, though it never names them outright.
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?
Usage is implied rather than stated: the tool is only callable with a resolved gene_id and snapshot_id from resolve_gene, which the schema reinforces, so the prerequisite chain is discoverable. However, the description never explicitly says when to prefer this over search_literature_corpus, search_variant_literature, or get_publication_details, leaving the agent to infer routing from the 'live capture vs immutable snapshot' remark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_literature_corpusSearch the Folklore Literature CorpusARead-onlyIdempotentInspect
Search the genetics Literature Corpus by question, PMID, DOI, PMCID, gene, variant, phenotype, HPO or OMIM concept. Known publication identifiers provide exact anchors. Returns ranked publications, match types, scores and source links.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Result ordering: relevance-ranked, newest publication first, or oldest publication first. | relevance |
| limit | No | Maximum number of publications to return, from 1 to 25. | |
| query | Yes | Natural-language literature question or exact PMID, DOI, PMCID, gene, variant, phenotype, HPO, or OMIM query. Include every known publication identifier when comparing or finding related papers. | |
| cursor | No | Opaque continuation cursor from the preceding response for the same query and sort order; omit for the first page. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, closed-world profile, so the description's burden is lighter; it adds the return shape (ranked publications, match types, scores, source links). It does not mention pagination limits or the 25-result cap, but those are covered by schema and output 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?
Two compact sentences with the resource and accepted query types front-loaded and no filler. The return-shape sentence earns its place, though it slightly overlaps the separate output schema.
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 rich annotations, a fully documented 4-parameter schema, and an output schema, the description supplies enough for correct invocation. The only real gap is routing relative to the specialized gene/variant literature siblings.
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?
With 100% schema description coverage, the baseline is 3. The description reinforces that identifiers act as exact-match anchors and that all known identifiers should be included, which adds a little meaning, but it does not elaborate sort, limit, or cursor semantics 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?
States a specific verb (search) and resource (genetics Literature Corpus) and enumerates the query dimensions accepted (PMID, DOI, gene, variant, phenotype, HPO, OMIM), distinguishing it as the broad corpus search. It does not, however, contrast itself with the closely related siblings search_gene_literature or search_variant_literature, leaving an agent to infer the boundary.
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?
"Known publication identifiers provide exact anchors" is a useful usage hint about identifier-based lookups, but the description gives no explicit when-to-use/when-not guidance and never names an alternative tool. For a corpus with several sibling search tools, that omission forces the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_variant_literatureFind literature for a germline variantARead-onlyIdempotentInspect
Resolve one GRCh38 germline variant and retrieve publications from the PubMed-derived genetics corpus. Exact variant mentions rank ahead of broader gene associations. Returns match types, source links, corpus provenance and retrieval time.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of publications to return, from 1 to 25. | |
| query | Yes | One germline nuclear SNV or simple indel to resolve before retrieving its literature; this is a variant identifier, not a natural-language question. Accepts a returned Folklore canonical_key in GRCh38:chrN:position:REF:ALT form. | |
| assembly | No | Reference genome assembly. Folklore currently accepts GRCh38 only. | GRCh38 |
| question | No | Optional natural-language focus applied after the variant is resolved, such as a condition or evidence question; do not put the variant identifier here. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's real contribution is the ranking behavior ('exact variant mentions rank ahead of broader gene associations') and the return payload shape. That is meaningful context beyond the structured fields, though it doesn't discuss limits like corpus coverage or rate behavior.
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 compact sentences, front-loaded with the core action and scope. The final sentence enumerating return values is slightly redundant given an output schema exists, but it is short and does not bloat the definition.
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 detail return fields, and the full-coverage input schema covers parameters. It is complete enough to call correctly; the only gap is the absence of explicit routing guidance versus the gene- and corpus-level literature siblings.
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 every parameter including the canonical_key format, limit bounds, and the 'do not put the variant identifier here' guard on question. The description adds no syntax or format detail beyond what the schema supplies, so baseline 3 applies.
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 ('resolve one GRCh38 germline variant and retrieve publications'), plus the corpora scope ('PubMed-derived genetics corpus'), which separates it from the gene-level search siblings. It stops short of explicitly naming the sibling it replaces (e.g., search_gene_literature), so sibling differentiation is implicit rather than stated.
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 implies usage ('Resolve one GRCh38 germline variant') and the schema reinforces the 'variant identifier, not a natural-language question' rule, but there is no explicit when-to-use/when-not or named alternative among the sibling tools. The agent must infer that gene-level queries belong to search_gene_literature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
support_helenaSupport Helena's free scientific infrastructureBRead-onlyIdempotentInspect
Retrieve Helena Good campaign, rules, manifest and MCP connection URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only the inventory of returned resources (campaign, rules, manifest, connection URLs), with no mention of auth prerequisites, freshness, or whether the URLs expire. Modest added value beyond 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?
A single compact sentence with no filler, and the verb comes first. It could be tightened only by making the domain clear rather than by removing words.
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-value explanation is unnecessary, and there are no parameters to document. The remaining gap is motivational: for a marketing/funding-flavored tool sitting among gene and variant tools, the description never says why or when an agent would invoke it, which is the main thing left unexplained.
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 tool takes zero parameters and the schema is fully described, so there is nothing for the description to disambiguate. Baseline 4 applies.
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 gives a verb ('Retrieve') and enumerates resources (campaign, rules, manifest, MCP connection URLs), so it is more than a restatement of the name. However, terms like 'Helena Good campaign' and 'manifest' are opaque in a dataset of genomics tools, and the title's framing ('Support Helena's free scientific infrastructure') only hints at the actual purpose. An agent can tell it apart from siblings but cannot easily form a mental model of what the returned object represents.
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?
There is no indication of when an agent should call this tool, whether it is required for setup/connection, or what alternatives exist. It is not misleading, but usage is left entirely to inference from the title.
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.
11 tool updates
- Added
classify_germline_variant - Changed
get_gene_disease_associations7 fields changed- changed
Input schema / properties / gene / descriptionPrevious value: -"One public human gene symbol or HGNC identifier, for example BRCA1 or HGNC:1100. No patient data."New value: +"One public human gene symbol or HGNC identifier, for example BRCA1 or HGNC:1100." - removed
Output schema / $defs / UsageBoundaryRemoved value: -{ - "additionalProperties": false, - "properties": { - "intended_use": { - "const": "professional_gene_disease_review", - "title": "Intended Use", - "type": "string" - }, - "not_for": { - "items": { - "enum": [ - "patient_diagnosis", - "treatment_decision", - "variant_pathogenicity_classification" - ], - "type": "string" - }, - "title": "Not For", - "type": "array" - }, - "patient_context_evaluated": { - "const": false, - "title": "Patient Context Evaluated", - "type": "boolean" - }, - "review_required": { - "const": true, - "title": "Review Required", - "type": "boolean" - } - }, - "required": [ - "intended_use", - "patient_context_evaluated", - "review_required", - "not_for" - ], - "title": "UsageBoundary", - "type": "object" -} - removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / anyOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "associations": { + "items": { + "$ref": "#/$defs/Association" + }, + "maxItems": 50, + "title": "Associations", + "type": "array" + }, + "contractVersion": { + "const": "2", + "title": "Contractversion", + "type": "string" + }, + "pagination": { + "$ref": "#/$defs/Pagination" + }, + "query": { + "$ref": "#/$defs/Query" + }, + "source": { + "$ref": "#/$defs/Source" + }, + "status": { + "enum": [ + "ok", + "not_found" + ], + "title": "Status", + "type": "string" + }, + "warnings": { + "items": { + "type": "string" + }, + "title": "Warnings", + "type": "array" + } + }, + "required": [ + "contractVersion", + "status", + "query", + "associations", + "pagination", + "source", + "warnings" + ], + "title": "GeneDiseaseResponse", + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "adapter_error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message", + "retryable" + ], + "type": "object" + }, + "contractVersion": { + "const": "2" + } + }, + "required": [ + "contractVersion", + "adapter_error" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "associations": { - "items": { - "$ref": "#/$defs/Association" - }, - "maxItems": 50, - "title": "Associations", - "type": "array" - }, - "contractVersion": { - "const": "1.0", - "title": "Contractversion", - "type": "string" - }, - "pagination": { - "$ref": "#/$defs/Pagination" - }, - "query": { - "$ref": "#/$defs/Query" - }, - "source": { - "$ref": "#/$defs/Source" - }, - "status": { - "enum": [ - "ok", - "not_found" - ], - "title": "Status", - "type": "string" - }, - "usage_boundary": { - "$ref": "#/$defs/UsageBoundary" - }, - "warnings": { - "items": { - "type": "string" - }, - "title": "Warnings", - "type": "array" - } -} - removed
Output schema / requiredRemoved value: -[ - "contractVersion", - "status", - "query", - "associations", - "pagination", - "source", - "warnings", - "usage_boundary" -] - removed
Output schema / titleRemoved value: -"GeneDiseaseResponse"
- Changed
get_gene_profile3 fields changed- changed
Output schema / properties / contract_version / constPrevious value: -"1"New value: +"2" - removed
Output schema / properties / usage_boundaryRemoved value: -{ - "additionalProperties": false, - "properties": { - "changes_variant_classification": { - "const": false - }, - "intended_use": { - "const": "professional_gene_reference_review" - }, - "not_for": { - "const": [ - "patient_diagnosis", - "treatment_decision", - "variant_pathogenicity_classification" - ] - }, - "patient_context_evaluated": { - "const": false - }, - "review_required": { - "const": true - } - }, - "required": [ - "intended_use", - "patient_context_evaluated", - "review_required", - "changes_variant_classification", - "not_for" - ], - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "contract_version", - "result", - "record_url", - "usage_boundary", - "adapter_error" -]New value: +[ + "contract_version", + "result", + "record_url", + "adapter_error" +]
- Changed
get_gene_section3 fields changed- changed
Output schema / properties / contract_version / constPrevious value: -"1"New value: +"2" - removed
Output schema / properties / usage_boundaryRemoved value: -{ - "additionalProperties": false, - "properties": { - "changes_variant_classification": { - "const": false - }, - "intended_use": { - "const": "professional_gene_reference_review" - }, - "not_for": { - "const": [ - "patient_diagnosis", - "treatment_decision", - "variant_pathogenicity_classification" - ] - }, - "patient_context_evaluated": { - "const": false - }, - "review_required": { - "const": true - } - }, - "required": [ - "intended_use", - "patient_context_evaluated", - "review_required", - "changes_variant_classification", - "not_for" - ], - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "contract_version", - "result", - "record_url", - "usage_boundary", - "adapter_error" -]New value: +[ + "contract_version", + "result", + "record_url", + "adapter_error" +]
- Changed
get_publication_details5 fields changed- removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / anyOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "contract_version": { + "const": "2", + "title": "Contract Version", + "type": "string" + }, + "publication": { + "$ref": "#/$defs/PublicPublicationDetails" + } + }, + "required": [ + "contract_version", + "publication" + ], + "title": "PublicationDetailsResponse", + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "adapter_error": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "minLength": 1, + "type": "string" + }, + "message": { + "minLength": 1, + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message", + "retryable" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "contract_version": { + "const": "2", + "type": "string" + }, + "record_url": { + "format": "uri", + "type": [ + "string", + "null" + ] + }, + "result": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "search_contract_version": { + "const": "1.0", + "type": "string" + }, + "status": { + "enum": [ + "resolved", + "ambiguous", + "not_found", + "invalid_request", + "unsupported", + "resolution_unavailable" + ], + "type": "string" + } + }, + "required": [ + "search_contract_version", + "status" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "contract_version", + "record_url", + "result", + "adapter_error" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "contract_version": { - "const": "1.0", - "title": "Contract Version", - "type": "string" - }, - "publication": { - "$ref": "#/$defs/PublicPublicationDetails" - }, - "usage_boundary": { - "additionalProperties": true, - "title": "Usage Boundary", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "contract_version", - "publication", - "usage_boundary" -] - removed
Output schema / titleRemoved value: -"PublicationDetailsResponse"
- Changed
resolve_gene4 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"One public gene symbol, previous symbol, alias, HGNC ID, Ensembl gene ID or NCBI Gene ID. No patient or case narrative."New value: +"One public gene symbol, previous symbol, alias, HGNC ID, Ensembl gene ID or NCBI Gene ID." - changed
Output schema / properties / contract_version / constPrevious value: -"1"New value: +"2" - removed
Output schema / properties / usage_boundaryRemoved value: -{ - "additionalProperties": false, - "properties": { - "changes_variant_classification": { - "const": false - }, - "intended_use": { - "const": "professional_gene_reference_review" - }, - "not_for": { - "const": [ - "patient_diagnosis", - "treatment_decision", - "variant_pathogenicity_classification" - ] - }, - "patient_context_evaluated": { - "const": false - }, - "review_required": { - "const": true - } - }, - "required": [ - "intended_use", - "patient_context_evaluated", - "review_required", - "changes_variant_classification", - "not_for" - ], - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "contract_version", - "result", - "record_url", - "usage_boundary", - "adapter_error" -]New value: +[ + "contract_version", + "result", + "record_url", + "adapter_error" +]
- Changed
search_disease_genes7 fields changed- changed
Input schema / properties / disease / descriptionPrevious value: -"One public disease name or exact MONDO identifier (MONDO: followed by seven digits). A name search may match multiple distinct diseases. No symptoms or patient narrative."New value: +"One public disease name or exact MONDO identifier (MONDO: followed by seven digits). A name search may match multiple distinct diseases." - removed
Output schema / $defs / UsageBoundaryRemoved value: -{ - "additionalProperties": false, - "properties": { - "intended_use": { - "const": "professional_gene_disease_review", - "title": "Intended Use", - "type": "string" - }, - "not_for": { - "items": { - "enum": [ - "patient_diagnosis", - "treatment_decision", - "variant_pathogenicity_classification" - ], - "type": "string" - }, - "title": "Not For", - "type": "array" - }, - "patient_context_evaluated": { - "const": false, - "title": "Patient Context Evaluated", - "type": "boolean" - }, - "review_required": { - "const": true, - "title": "Review Required", - "type": "boolean" - } - }, - "required": [ - "intended_use", - "patient_context_evaluated", - "review_required", - "not_for" - ], - "title": "UsageBoundary", - "type": "object" -} - removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / anyOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "associations": { + "items": { + "$ref": "#/$defs/Association" + }, + "maxItems": 50, + "title": "Associations", + "type": "array" + }, + "contractVersion": { + "const": "2", + "title": "Contractversion", + "type": "string" + }, + "pagination": { + "$ref": "#/$defs/Pagination" + }, + "query": { + "$ref": "#/$defs/Query" + }, + "source": { + "$ref": "#/$defs/Source" + }, + "status": { + "enum": [ + "ok", + "not_found" + ], + "title": "Status", + "type": "string" + }, + "warnings": { + "items": { + "type": "string" + }, + "title": "Warnings", + "type": "array" + } + }, + "required": [ + "contractVersion", + "status", + "query", + "associations", + "pagination", + "source", + "warnings" + ], + "title": "GeneDiseaseResponse", + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "adapter_error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message", + "retryable" + ], + "type": "object" + }, + "contractVersion": { + "const": "2" + } + }, + "required": [ + "contractVersion", + "adapter_error" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "associations": { - "items": { - "$ref": "#/$defs/Association" - }, - "maxItems": 50, - "title": "Associations", - "type": "array" - }, - "contractVersion": { - "const": "1.0", - "title": "Contractversion", - "type": "string" - }, - "pagination": { - "$ref": "#/$defs/Pagination" - }, - "query": { - "$ref": "#/$defs/Query" - }, - "source": { - "$ref": "#/$defs/Source" - }, - "status": { - "enum": [ - "ok", - "not_found" - ], - "title": "Status", - "type": "string" - }, - "usage_boundary": { - "$ref": "#/$defs/UsageBoundary" - }, - "warnings": { - "items": { - "type": "string" - }, - "title": "Warnings", - "type": "array" - } -} - removed
Output schema / requiredRemoved value: -[ - "contractVersion", - "status", - "query", - "associations", - "pagination", - "source", - "warnings", - "usage_boundary" -] - removed
Output schema / titleRemoved value: -"GeneDiseaseResponse"
- Changed
search_gene_literature3 fields changed- changed
Output schema / properties / contract_version / constPrevious value: -"1"New value: +"2" - removed
Output schema / properties / usage_boundaryRemoved value: -{ - "additionalProperties": false, - "properties": { - "changes_variant_classification": { - "const": false - }, - "intended_use": { - "const": "professional_gene_reference_review" - }, - "not_for": { - "const": [ - "patient_diagnosis", - "treatment_decision", - "variant_pathogenicity_classification" - ] - }, - "patient_context_evaluated": { - "const": false - }, - "review_required": { - "const": true - } - }, - "required": [ - "intended_use", - "patient_context_evaluated", - "review_required", - "changes_variant_classification", - "not_for" - ], - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "contract_version", - "result", - "record_url", - "usage_boundary", - "adapter_error" -]New value: +[ + "contract_version", + "result", + "record_url", + "adapter_error" +]
- Changed
search_literature_corpus5 fields changed- removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / anyOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "contract_version": { + "const": "2", + "title": "Contract Version", + "type": "string" + }, + "graph_degraded_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Graph Degraded Reason" + }, + "graph_used": { + "default": false, + "title": "Graph Used", + "type": "boolean" + }, + "graph_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Graph Version" + }, + "has_more": { + "default": false, + "title": "Has More", + "type": "boolean" + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Next Cursor" + }, + "query": { + "title": "Query", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/$defs/PublicCorpusSearchResult" + }, + "title": "Results", + "type": "array" + }, + "returned_count": { + "title": "Returned Count", + "type": "integer" + }, + "searchable_fields": { + "items": { + "type": "string" + }, + "title": "Searchable Fields", + "type": "array" + }, + "semantic_degraded_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Semantic Degraded Reason" + }, + "semantic_index_used": { + "default": false, + "title": "Semantic Index Used", + "type": "boolean" + } + }, + "required": [ + "contract_version", + "query", + "returned_count", + "results", + "searchable_fields" + ], + "title": "PublicCorpusSearchResponse", + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "adapter_error": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "minLength": 1, + "type": "string" + }, + "message": { + "minLength": 1, + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message", + "retryable" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "contract_version": { + "const": "2", + "type": "string" + }, + "record_url": { + "format": "uri", + "type": [ + "string", + "null" + ] + }, + "result": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "search_contract_version": { + "const": "1.0", + "type": "string" + }, + "status": { + "enum": [ + "resolved", + "ambiguous", + "not_found", + "invalid_request", + "unsupported", + "resolution_unavailable" + ], + "type": "string" + } + }, + "required": [ + "search_contract_version", + "status" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "contract_version", + "record_url", + "result", + "adapter_error" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "contract_version": { - "const": "1.0", - "title": "Contract Version", - "type": "string" - }, - "graph_degraded_reason": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Graph Degraded Reason" - }, - "graph_used": { - "default": false, - "title": "Graph Used", - "type": "boolean" - }, - "graph_version": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Graph Version" - }, - "has_more": { - "default": false, - "title": "Has More", - "type": "boolean" - }, - "next_cursor": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Next Cursor" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "items": { - "$ref": "#/$defs/PublicCorpusSearchResult" - }, - "title": "Results", - "type": "array" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "searchable_fields": { - "items": { - "type": "string" - }, - "title": "Searchable Fields", - "type": "array" - }, - "semantic_degraded_reason": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Semantic Degraded Reason" - }, - "semantic_index_used": { - "default": false, - "title": "Semantic Index Used", - "type": "boolean" - }, - "usage_boundary": { - "additionalProperties": true, - "title": "Usage Boundary", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "contract_version", - "query", - "returned_count", - "results", - "searchable_fields", - "usage_boundary" -] - removed
Output schema / titleRemoved value: -"PublicCorpusSearchResponse"
- Removed
search_variant_evidence - Changed
search_variant_literature5 fields changed- removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / anyOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "contract_version": { + "const": "2", + "default": "2", + "title": "Contract Version", + "type": "string" + }, + "literature": { + "anyOf": [ + { + "$ref": "#/$defs/LiteratureAuthorityResponse" + }, + { + "type": "null" + } + ] + }, + "status": { + "enum": [ + "resolved", + "ambiguous", + "not_found", + "invalid_request", + "unsupported", + "resolution_unavailable" + ], + "title": "Status", + "type": "string" + }, + "variant_result": { + "additionalProperties": true, + "title": "Variant Result", + "type": "object" + } + }, + "required": [ + "status", + "variant_result", + "literature" + ], + "title": "PublicVariantLiteratureResponse", + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "adapter_error": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "minLength": 1, + "type": "string" + }, + "message": { + "minLength": 1, + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message", + "retryable" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "contract_version": { + "const": "2", + "type": "string" + }, + "record_url": { + "format": "uri", + "type": [ + "string", + "null" + ] + }, + "result": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "search_contract_version": { + "const": "1.0", + "type": "string" + }, + "status": { + "enum": [ + "resolved", + "ambiguous", + "not_found", + "invalid_request", + "unsupported", + "resolution_unavailable" + ], + "type": "string" + } + }, + "required": [ + "search_contract_version", + "status" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "contract_version", + "record_url", + "result", + "adapter_error" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "contract_version": { - "const": "1.0", - "default": "1.0", - "title": "Contract Version", - "type": "string" - }, - "literature": { - "anyOf": [ - { - "$ref": "#/$defs/LiteratureAuthorityResponse" - }, - { - "type": "null" - } - ] - }, - "status": { - "enum": [ - "resolved", - "ambiguous", - "not_found", - "invalid_request", - "unsupported", - "resolution_unavailable" - ], - "title": "Status", - "type": "string" - }, - "usage_boundary": { - "additionalProperties": true, - "title": "Usage Boundary", - "type": "object" - }, - "variant_result": { - "additionalProperties": true, - "title": "Variant Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "status", - "variant_result", - "literature", - "usage_boundary" -] - removed
Output schema / titleRemoved value: -"PublicVariantLiteratureResponse"
4 tool updates
- Added
get_gene_profile - Added
get_gene_section - Added
resolve_gene - Added
search_gene_literature
2 tool updates
- Added
get_gene_disease_associations - Added
search_disease_genes
1 tool update
- Changed
get_publication_details2 fields changed- added
Output schema / $defs / PublicAbstractReuseAdded value: +{ + "additionalProperties": false, + "properties": { + "allowed": { + "default": false, + "title": "Allowed", + "type": "boolean" + }, + "evidence_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Evidence Url" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "License" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source" + } + }, + "title": "PublicAbstractReuse", + "type": "object" +} - added
Output schema / $defs / PublicPublicationDetails / properties / abstract_reuseAdded value: +{ + "$ref": "#/$defs/PublicAbstractReuse" +}
1 tool update
- Changed
search_literature_corpus6 fields changed- added
Output schema / $defs / PublicCorpusSearchResult / properties / graph_anchor_pmidAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Graph Anchor Pmid" +} - added
Output schema / $defs / PublicCorpusSearchResult / properties / graph_scoreAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Graph Score" +} - changed
Output schema / $defs / PublicCorpusSearchResult / properties / match_types / items / enumPrevious value: -[ - "pmid", - "doi", - "pmcid", - "title", - "abstract", - "gene", - "variant", - "phenotype", - "hpo", - "omim", - "semantic" -]New value: +[ + "pmid", + "doi", + "pmcid", + "title", + "abstract", + "gene", + "variant", + "phenotype", + "hpo", + "omim", + "semantic", + "graph" +] - added
Output schema / properties / graph_degraded_reasonAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Graph Degraded Reason" +} - added
Output schema / properties / graph_usedAdded value: +{ + "default": false, + "title": "Graph Used", + "type": "boolean" +} - added
Output schema / properties / graph_versionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Graph Version" +}
1 tool update
- Changed
search_literature_corpus1 field changed- added
Output schema / $defs / PublicCorpusSearchResult / properties / authorsAdded value: +{ + "items": { + "type": "string" + }, + "title": "Authors", + "type": "array" +}
1 tool update
- Added
support_helena
4 tool updates
- Changed
get_publication_details1 field changed- added
Input schema / properties / pmid / descriptionAdded value: +"One PubMed identifier to look up in Folklore's current corpus, as 1 to 12 digits without a PMID prefix."
- Changed
search_literature_corpus4 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Opaque continuation cursor from the preceding response for the same query and sort order; omit for the first page." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of publications to return, from 1 to 25." - added
Input schema / properties / query / descriptionAdded value: +"Natural-language literature question or exact PMID, DOI, PMCID, gene, variant, phenotype, HPO, or OMIM query. Include every known publication identifier when comparing or finding related papers." - added
Input schema / properties / sort / descriptionAdded value: +"Result ordering: relevance-ranked, newest publication first, or oldest publication first."
- Changed
search_variant_evidence2 fields changed- added
Input schema / properties / assembly / descriptionAdded value: +"Reference genome assembly. Folklore currently accepts GRCh38 only." - added
Input schema / properties / query / descriptionAdded value: +"One germline nuclear SNV or simple indel to resolve and interpret; accepted forms include coordinates, genomic/coding/protein HGVS, SPDI, rsID, or a returned Folklore canonical_key in GRCh38:chrN:position:REF:ALT form."
- Changed
search_variant_literature4 fields changed- added
Input schema / properties / assembly / descriptionAdded value: +"Reference genome assembly. Folklore currently accepts GRCh38 only." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of publications to return, from 1 to 25." - added
Input schema / properties / query / descriptionAdded value: +"One germline nuclear SNV or simple indel to resolve before retrieving its literature; this is a variant identifier, not a natural-language question. Accepts a returned Folklore canonical_key in GRCh38:chrN:position:REF:ALT form." - added
Input schema / properties / question / descriptionAdded value: +"Optional natural-language focus applied after the variant is resolved, such as a condition or evidence question; do not put the variant identifier here."
1 tool update
- Changed
search_literature_corpus2 fields changed- added
Output schema / $defs / PublicCorpusArticleEntityAdded value: +{ + "additionalProperties": false, + "properties": { + "entity_type": { + "enum": [ + "gene", + "variant", + "phenotype", + "pmid", + "doi", + "pmcid", + "omim" + ], + "title": "Entity Type", + "type": "string" + }, + "identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Identifier" + }, + "label": { + "title": "Label", + "type": "string" + }, + "normalization_state": { + "enum": [ + "normalized", + "source_indexed" + ], + "title": "Normalization State", + "type": "string" + }, + "source_field": { + "enum": [ + "work_identifiers.normalized_value", + "gene_mentions.gene_symbol", + "variant_mentions.normalized_variant", + "phenotype_mentions.hpo_id", + "phenotype_mentions.omim_id", + "phenotype_mentions.mesh_term", + "phenotype_mentions.phenotype_name" + ], + "title": "Source Field", + "type": "string" + } + }, + "required": [ + "entity_type", + "identifier", + "label", + "source_field", + "normalization_state" + ], + "title": "PublicCorpusArticleEntity", + "type": "object" +} - added
Output schema / $defs / PublicCorpusSearchResult / properties / article_entitiesAdded value: +{ + "items": { + "$ref": "#/$defs/PublicCorpusArticleEntity" + }, + "title": "Article Entities", + "type": "array" +}
1 tool update
- Changed
search_literature_corpus3 fields changed- added
Input schema / properties / cursorAdded value: +{ + "anyOf": [ + { + "maxLength": 128, + "minLength": 8, + "pattern": "^[A-Za-z0-9_-]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cursor" +} - added
Output schema / properties / has_moreAdded value: +{ + "default": false, + "title": "Has More", + "type": "boolean" +} - added
Output schema / properties / next_cursorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Next Cursor" +}
2 tool updates
- Changed
search_literature_corpus8 fields changed- added
Output schema / $defs / PublicCorpusSearchResult / properties / pmid / anyOfAdded value: +[ + { + "pattern": "^[0-9]{1,12}$", + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / $defs / PublicCorpusSearchResult / properties / pmid / patternRemoved value: -"^[0-9]{1,12}$" - removed
Output schema / $defs / PublicCorpusSearchResult / properties / pmid / typeRemoved value: -"string" - added
Output schema / $defs / PublicCorpusSearchResult / properties / pubmed_url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / $defs / PublicCorpusSearchResult / properties / pubmed_url / typeRemoved value: -"string" - added
Output schema / $defs / PublicCorpusSearchResult / properties / source_urlAdded value: +{ + "title": "Source Url", + "type": "string" +} - added
Output schema / $defs / PublicCorpusSearchResult / properties / work_idAdded value: +{ + "title": "Work Id", + "type": "string" +} - changed
Output schema / $defs / PublicCorpusSearchResult / requiredPrevious value: -[ - "pmid", - "title", - "abstract_excerpt", - "journal", - "publication_date", - "doi", - "pmc_id", - "pubmed_url", - "match_types", - "structured_score" -]New value: +[ + "work_id", + "pmid", + "title", + "abstract_excerpt", + "journal", + "publication_date", + "doi", + "pmc_id", + "source_url", + "pubmed_url", + "match_types", + "structured_score" +]
- Changed
search_variant_literature1 field changed- changed
Output schema / $defs / CorpusProvenance / properties / source / constPrevious value: -"PubMed-derived Helena genetics corpus"New value: +"Helena Literature Corpus canonical works"
1 tool update
- Added
search_literature_corpus
2 tool updates
- Added
get_publication_details - Added
search_variant_literature
Related MCP Connectors
CIViC — Clinical Interpretation of Variants in Cancer.
Ancestry allele frequencies, LoF constraint, variant lists, and coverage from gnomAD, with ClinVar.
Annotate and classify human genetic variants with GeneBe (ACMG, gnomAD, ClinVar). Research use only.
MyVariant.info MCP. Aggregated human genetic-variant annotation: dbSNP, ClinVar clinical…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables real-time pharmacogenomics analysis, including variant clinical significance, drug-gene interactions, and dosing guidelines, by connecting to ClinVar, PharmGKB, gnomAD, and other databases.1MIT
- 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-
- AlicenseAqualityAmaintenanceMCP server that provides tools to query harmonized gene-disease validity data from the Gene Curation Coalition, supporting consensus and conflict detection for gene-disease assertions.12MIT
- AlicenseNot gradedqualityAmaintenanceEnables querying ClinGen curated evidence for gene-disease validity, dosage, actionability, and variant pathogenicity via MCP tools.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.