mgi-link
mgi-link provides structured access to Mouse Genome Informatics (MGI) data for mouse genetics research, exposing gene/marker records, alleles, phenotypes, disease models, and ontology terms as queryable tools.
Resolve & retrieve markers: Look up mouse markers by symbol, MGI ID, synonym, or human ortholog (HGNC ID/symbol) to get canonical MGI records with genomic location, cross-references (NCBI, Ensembl), synonyms, and summary counts for alleles, phenotypes, and diseases.
Search markers: Free-text search over mouse marker symbols, names, and synonyms with optional marker type filtering.
Alleles & mutations: Retrieve phenotypic alleles and mutations for a marker, including allele type, attributes, PubMed IDs, and generation-method counts (Targeted, CRISPR, Transgenic, etc.), with optional type filtering.
Phenotype annotations: Get Mammalian Phenotype (MP) annotations for a marker, deduplicated and filterable by MP system; full mode returns per-genotype rows with allelic composition, genetic background, and PubMed IDs.
Phenotype overview grid: View the top-level 27-system phenotype overview showing which biological systems are affected.
Reverse phenotype lookup: Given an MP term ID, find all mouse genes annotated with that phenotype, optionally including descendant terms via ontology rollup.
Ortholog mapping: Retrieve mouse↔human ortholog details including HGNC ID, NCBI Gene, Ensembl, OMIM gene ID, and human GRCh38 coordinates.
Disease models: Retrieve human-mouse disease model associations (Disease Ontology + OMIM IDs) curated by MGI.
MP ontology exploration: Look up MP terms for definitions, parent/child relationships, and top-level system rollup; search MP term names and definitions by free text.
Discovery & diagnostics: Inspect available tools, accepted arguments, response modes, and check local MGI index status (data freshness, record counts, schema version).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mgi-linkWhat phenotypes are associated with the Wt1 gene?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mgi-link
An MCP (Model Context Protocol) server that grounds mouse-genetics work in Mouse Genome Informatics (informatics.jax.org). It reproduces the data on an MGI gene/marker page — especially Mutations, Alleles, and Phenotypes — as structured tools an agent can call.
Research use only. Not clinical decision support. Do not use for diagnosis, treatment, triage, or patient management.
Why
The MGI gene page (e.g. Wt1, MGI:98968) is a rich JS app with no clean JSON API. The data behind it exists only as bulk TSV reports and an OBO ontology file — no endpoint answers "what phenotypes does knocking out this gene cause?".
mgi-link rebuilds that surface from MGI's canonical bulk reports into a fast,
offline, deterministic SQLite index and exposes it as MCP tools with structured
outputs, response_mode verbosity control, and _meta.next_commands chaining.
It also closes the mouse↔human gap: pass a human symbol or HGNC id to any
marker tool and it resolves through the ortholog.
Related MCP server: BioMCP
Quick start
Hosted — no install:
claude mcp add --transport http mgi-link https://mgi-link.genefoundry.org/mcpLocally (Python 3.12+, uv). make data is
required: the server has no data until the MGI reports are downloaded and the
index is built.
make install # uv sync --group dev
make data # REQUIRED: download the MGI bulk reports, build the SQLite index
make dev # unified server: FastAPI /health + MCP /mcp on 127.0.0.1:8000
make mcp-serve # or: the stdio MCP serverclaude mcp add mgi-link -- uv run mgi-link-mcp # stdioDeploying behind a reverse proxy? MGI_LINK_ALLOWED_HOSTS must list the public
hostname — see configuration.md.
Tools
Tool | Purpose |
| Resolve a mouse symbol / MGI id / human ortholog → canonical marker |
| Full marker record: location, xrefs, ortholog, summary counts |
| Full-text search over marker symbol / name / synonyms |
| Mutations & Alleles + generation-method category counts |
| MP annotations (allelic composition, background, PubMed) + summary |
| The 27-system MGI Phenotype Overview grid |
| Human–mouse disease models (DO/OMIM) |
| Mouse ↔ human ortholog (HGNC/Entrez/Ensembl/OMIM) |
| Mammalian Phenotype ontology term (parents/children/systems) |
| Full-text search over MP terms |
| Reverse lookup: MP term → mouse genes (descendants included) |
| Discovery: the tool surface, vocabularies, limits, citation |
| Health and provenance: the loaded MGI release |
Leaf names are intentionally unprefixed per the GeneFoundry
Tool-Naming Standard v1. The
canonical gateway namespace token is mgi: behind
genefoundry-router these
surface as mgi_<tool> (e.g. mgi_get_marker), with get_marker_phenotypes
pinned as the entry point. Worked call sequences: usage.md.
Data & provenance
The index is built from the MGI bulk reports at
informatics.jax.org/downloads/reports:
MRK_List2, MGI_PhenotypicAllele, MGI_GenePheno, VOC_MammalianPhenotype,
MPheno_OBO.ontology, HOM_MouseHumanSequence, MGI_DO and MRK_ENSEMBL. A
live MouseMine (InterMine) enrichment client exists but is off by default and
reserved for v2.
MGI publishes roughly weekly. mgi-link-data refresh is conditional (ETag /
Last-Modified, so an unchanged release costs one 304) and is driven by an
external cron job — the in-process scheduler is off by default. Full model:
data.md.
Data licence. MGI data are freely available for research use; please cite MGI / The Jackson Laboratory (copyright). The Mammalian Phenotype Ontology is licensed CC BY 4.0, a separate grant.
Cite (served verbatim at mgi://citation): Baldarelli RM, Smith CL, Bello SM,
et al. Mouse Genome Informatics: an integrated knowledgebase system for the
laboratory mouse. Genetics. 2024;227(1):iyae031. doi:10.1093/genetics/iyae031.
RRID:SCR_006460.
Documentation
Usage — canonical workflows, the tool reference, and what is out of scope in v1.
Configuration — every
MGI_LINK_*variable, the entry points, and the Host/Origin allowlists.Data — the source reports, the refresh model, licensing and citation.
Deployment — cron, systemd, Docker, and running behind a proxy.
Architecture — the data plane, the SQLite schema, and the MCP plane.
AGENTS.md — engineering conventions and architecture invariants.
Contributing
See AGENTS.md for engineering conventions and the invariants not to
break. make ci-local is the definition-of-done gate: format, lint, line budget,
README standard, mypy strict, and tests. It must be green before a change lands.
License
Code: MIT © mgi-link contributors. Data: MGI data are free for research use (cite MGI / The Jackson Laboratory); the Mammalian Phenotype Ontology is CC BY 4.0.
Available Tools
13 toolsfind_markers_by_phenotypeFind Markers by PhenotypeARead-onlyIdempotent
Reverse lookup: return the mouse markers (genes) annotated with a Mammalian Phenotype term. include_descendants defaults to TRUE and changes WHICH genes are returned: it rolls up annotations to more-specific child terms via the MP ontology (e.g. MP:0005367 renal/urinary system phenotype gathers all kidney phenotypes); the flag is echoed in the response. Returns a truncation contract {total, returned, limit, truncated}; when truncated, next_commands includes a widen step. Resolve a term first with search_phenotype_terms. Signature: find_markers_by_phenotype(mp_id, include_descendants=, limit=).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max markers (default 100). | |
| mp_id | Yes | A Mammalian Phenotype term id (MP:0005367). | |
| include_descendants | No | Also include child (more specific) MP terms (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds valuable context: the truncation contract (total, returned, limit, truncated), the 'next_commands' widening step, and the precise effect of include_descendants (roll-up via MP ontology). No contradictions with 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 compact (two sentences plus a signature line) with no filler. It front-loads the core purpose ('Reverse lookup: return the mouse markers...') and every sentence adds unique value. The signature line at the end reinforces parameter order.
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 read-only query tool with 3 parameters and no output schema, the description covers all essential aspects: purpose, parameter behavior (especially include_descendants), truncation handling, and the prerequisite to resolve terms. It leaves no significant gaps for an AI agent to understand 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 descriptions for each parameter. The description adds meaning beyond the schema: it explains that include_descendants defaults to TRUE and 'rolls up annotations to more-specific child terms,' which clarifies its impact. It also provides the function signature and mentions the truncation contract, which is not in 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 clearly states the action: 'return the mouse markers (genes) annotated with a Mammalian Phenotype term.' It uses a specific verb ('return') and resource ('markers'), and distinguishes from siblings like get_marker_phenotypes (forward lookup) and search_phenotype_terms (term resolution). The 'Reverse lookup' phrasing immediately clarifies its unique role.
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 instructs users to 'Resolve a term first with search_phenotype_terms,' providing a clear prerequisite. It explains the behavior of include_descendants and mentions the truncation contract. However, it does not explicitly state when not to use this tool (e.g., for forward lookups or gene-level queries), but the sibling context helps fill that gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_diagnosticsGet MGI DiagnosticsARead-onlyIdempotent
Report the local MGI index status: whether the data is built, the loaded release, marker/allele/phenotype/ortholog/disease counts, schema version, and when it was built. Use this to confirm freshness or diagnose a data_unavailable error. Signature: get_diagnostics().
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, etc. The description adds valuable behavioral context: what data it returns (counts, schema version, build time). No contradictions with 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?
Two sentences, no wasted words, front-loads the purpose. Signature is provided at the end for clarity.
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 0-parameter tool with no output schema, the description fully covers what the tool returns and when to use it. No gaps.
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?
No parameters (schema coverage 100% with empty properties). The description adds no parameter info, but that's appropriate since there are none. Baseline for 0 parameters is 4, and the description doesn't need to compensate.
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 it 'report[s] the local MGI index status' with specific details like counts, schema version, and build time. The verb 'report' and resource 'local MGI index status' are specific, and it distinguishes well from sibling tools which focus on querying markers, phenotypes, etc.
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?
Explicit guidance: 'Use this to confirm freshness or diagnose a data_unavailable error.' This provides clear context for when to use the tool. No explicit when-not-to-use is given, but the purpose is narrow enough that it's not needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_markerGet Marker RecordARead-onlyIdempotent
Return the full MGI marker record, resolved from an MGI id, mouse symbol/synonym, or human ortholog. Includes name, marker/feature type, GRCm39 location, NCBI/Ensembl ids, synonyms, the human ortholog (symbol/HGNC/OMIM), and summary counts (alleles, phenotypes, phenotype references, diseases). response_mode controls verbosity. Signature: get_marker(query, response_mode=).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A mouse marker symbol (current or synonym, case-insensitive), an MGI id (MGI:98968 or 98968), or a human gene symbol / HGNC id for the ortholog. | |
| response_mode | No | Verbosity: minimal | compact | standard | full (default compact). | compact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is clear. The description adds value by detailing the returned fields (name, type, location, ids, ortholog, counts), and mentions the response_mode parameter for verbosity control. No contradictions with 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 two sentences plus a signature line, no wasted words. Purpose is front-loaded, and all essential information is present. The structure efficiently conveys what the tool does and how to use it.
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?
There is no output schema, so the description compensates by listing the major components of the returned record. It covers query format, response modes, and typical contents. However, it does not mention error behavior (e.g., what if query not found) or pagination, but for a single-record retrieval these are secondary.
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 baseline is 3. The description provides additional context for the 'query' parameter (accepted formats: MGI id, symbol, human ortholog) and shows the signature with default response_mode. This goes beyond the schema descriptions which already cover the basics.
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 'Return' and the resource 'full MGI marker record', and specifies that it resolves from multiple query types (MGI id, mouse symbol/synonym, human ortholog). It also lists the contents, distinguishing it from sibling tools that return subsets (e.g., get_marker_alleles, get_marker_diseases).
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 when to use this tool (to get the full marker record) but does not explicitly state when not to use it or mention alternatives. Sibling tools exist for specific aspects, but no contrast is provided. Some guidance on query flexibility is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marker_allelesGet Marker Alleles & MutationsARead-onlyIdempotent
Return the phenotypic alleles / mutations for a mouse marker — the gene page's 'All Mutations and Alleles' panel. Includes per-allele {allele_id, symbol, name, allele_type, attributes, pubmed_ids} and the generation-method category_counts (Targeted, Endonuclease-mediated, Radiation induced, Chemically induced, Transgenic, ...). allele_type optionally filters (accepts friendly tokens like 'knockout', 'crispr', 'targeted'). Returns a truncation contract {total, returned, limit, truncated}; when truncated, next_commands includes a widen step. Signature: get_marker_alleles(query, allele_type=, limit=, response_mode=).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max alleles returned (default 200). | |
| query | Yes | A mouse marker symbol (current or synonym, case-insensitive), an MGI id (MGI:98968 or 98968), or a human gene symbol / HGNC id for the ortholog. | |
| allele_type | No | Optional generation-method filter. Accepts a canonical MGI allele type or a friendly token (knockout, crispr, cre, enu); an unrecognised value is rejected with invalid_input. | |
| response_mode | No | Verbosity: minimal | compact | standard | full (default compact). | compact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, openWorld. Description adds valuable context: truncation contract with next_commands, friendly token acceptance for allele_type, and output structure. No contradictions.
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?
Description is comprehensive but slightly dense; includes a signature summary. Every sentence adds value, but could be slightly more concise. Well-organized: purpose, output, filter, truncation, signature.
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?
Complete for a tool with 4 params and no output schema: explains return fields, truncation contract, filter options, and query flexibility. No missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds significant meaning: explains allele_type accepts friendly tokens (knockout, crispr), lists response_mode verbosity levels, describes query input types (symbol, MGI, HGNC), and mentions limit default/max. Goes well beyond schema 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?
Description clearly states it returns phenotypic alleles/mutations for a mouse marker, referencing the gene page's panel. Distinguishes from siblings like get_marker (marker details) and search_markers (searching markers) by specifying the exact resource and output.
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?
Provides clear context for when to use (get alleles for a marker) but does not explicitly state when not to use or mention alternatives. However, the purpose is self-evident and agent can infer from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marker_diseasesGet Marker Disease ModelsARead-onlyIdempotent
Return the human-mouse disease models associated with a marker (Disease Ontology id + name + OMIM ids), from MGI's curated DO annotations. Accepts a mouse symbol/MGI id or a human ortholog. Signature: get_marker_diseases(query).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A mouse marker symbol (current or synonym, case-insensitive), an MGI id (MGI:98968 or 98968), or a human gene symbol / HGNC id for the ortholog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds context about output content (disease models, DO id, name, OMIM ids) and data source, but does not disclose additional behavioral traits beyond what annotations provide, meeting expectations without exceeding.
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 sentences plus a concise signature. Front-loaded with purpose, no filler words. Every 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?
Given the tool's simplicity (1 parameter, no output schema), the description adequately explains input and output. It could optionally mention pagination or rate limits, but the openWorldHint reduces need. Generally complete for an agent's 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 covers 100% of parameters. Description adds valuable details beyond schema: clarifies case-insensitivity, synonym support, and alternative human identifier formats (HGNC id). This enhances parameter understanding beyond basic 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 clearly states it returns disease models (Disease Ontology id + name + OMIM ids) from MGI annotations, with specific verb 'Return' and resource. However, it does not differentiate from sibling tools like get_marker_phenotypes, so it's not 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 lists accepted input types (mouse symbol/MGI id or human ortholog) but provides no guidance on when to use this tool versus alternatives like get_marker_phenotypes or search_markers. No explicit when/not-to-use or alternative names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marker_orthologGet Marker OrthologARead-onlyIdempotent
Return the mouse<->human ortholog mapping and cross-references for a marker: human symbol, HGNC id, NCBI Gene (human), Ensembl (human), OMIM gene id, and human GRCh38 coordinates. Accepts a mouse symbol/MGI id OR a human symbol/HGNC id (resolved to the mouse marker first). Signature: get_marker_ortholog(query, response_mode=).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A mouse marker symbol (current or synonym, case-insensitive), an MGI id (MGI:98968 or 98968), or a human gene symbol / HGNC id for the ortholog. | |
| response_mode | No | Verbosity: minimal | compact | standard | full (default compact). | compact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds value by explaining the resolution step (human to mouse first) and listing returned fields. No contradiction with 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 two sentences, front-loaded with purpose, and includes a signature line. Every word adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists output fields. Sibling tools are diverse and this is unique. The description is self-contained and complete for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and includes examples. The description adds context about the resolution process and the list of returned fields, providing meaning beyond the schema alone. Baseline 3 is elevated due to this extra detail.
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 identifies the tool's purpose: returning mouse-human ortholog mapping and cross-references. It lists specific output fields (human symbol, HGNC id, etc.) and distinguishes from sibling tools (no other tool does ortholog mapping).
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 acceptable inputs (mouse symbol/MGI id or human symbol/HGNC id) and mentions the resolution process. It clearly states the input types, though it does not explicitly state when not to use or compare to siblings. However, among siblings, none are ortholog-specific, so context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marker_phenotypesGet Marker PhenotypesARead-onlyIdempotent
Return the Mammalian Phenotype (MP) annotations for a mouse marker. By default (minimal/compact/standard) returns a DEDUPLICATED, support-ordered list of DISTINCT MP terms — each {mp_id, mp_term, genotype_count} (standard adds systems[]) — so the most replicated phenotypes come first and none are buried alphabetically. response_mode=full returns the per-genotype rows {mp_id, mp_term, allelic_composition, genetic_background, pubmed_id, genotype_id, ...}. Every response carries a phenotype summary and a truncation contract {total, returned, limit, truncated}; when truncated, next_commands includes a widen step. mp_system optionally restricts to one top-level system (name like 'renal/urinary system' or its MP id). SCOPE: annotations are single-locus, NON-conditional genotypes (MGI_GenePheno); conditional/Cre-driven and multi-genic genotypes are EXCLUDED (see the response 'scope'/'scope_note'), so a zero or empty result does not mean the gene lacks that phenotype in mouse — confirm on the MGI gene page. Signature: get_marker_phenotypes(query, mp_system=, limit=, response_mode=).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows — distinct terms, or genotype rows in full mode (default 250). | |
| query | Yes | A mouse marker symbol (current or synonym, case-insensitive), an MGI id (MGI:98968 or 98968), or a human gene symbol / HGNC id for the ortholog. | |
| mp_system | No | Optional top-level MP system filter (name or MP id). | |
| response_mode | No | Verbosity: minimal | compact | standard | full (default compact). | compact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe, read-only behavior. The description adds critical details: deduplication, support ordering, truncation contract with next_commands, scope limitations, and response structure. No contradiction with 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 lengthy but well-structured with clear sections (default behavior, full mode, response contract, mp_system, scope). Every sentence adds useful information, though could be slightly more concise.
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 no output schema, the description fully explains the response format, truncation mechanism, and scope limitations. All 4 parameters are thoroughly addressed with behavioral context. Provides enough 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 parameter descriptions. The description adds value by explaining response_mode modes (minimal/compact/standard/full), the effect of mp_system (accepts name or MP id), and providing query examples. Enhances understanding beyond 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 clearly states the tool returns Mammalian Phenotype annotations for a mouse marker, with specific verb (Return) and resource (MP annotations). It distinguishes from siblings like find_markers_by_phenotype by focusing on marker-to-phenotype direction.
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 context on when to use (get MP annotations for a single marker) and explicitly excludes conditional and multi-genic genotypes. It advises confirming on MGI page for zero results. Does not explicitly name alternatives but scope note is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mp_termGet Mammalian Phenotype TermARead-onlyIdempotent
Return a Mammalian Phenotype (MP) ontology term: id, name, definition, direct parents and children (is_a edges), and the top-level system(s) it rolls up to. Use with find_markers_by_phenotype to go from a phenotype to the mouse genes that model it. Signature: get_mp_term(mp_id).
| Name | Required | Description | Default |
|---|---|---|---|
| mp_id | Yes | A Mammalian Phenotype term id (MP:0005367). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe read-only, idempotent behavior. The description adds detail about the return structure (parents, children, top-level systems) and input format, which provides useful behavioral context 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?
The description is two sentences plus a signature line, every sentence adds value. It is front-loaded with the primary action and details are efficiently presented.
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 complexity of an ontology term lookup, the description fully specifies the return fields and how to use the output with sibling tools. No output schema is present, but the description provides sufficient structural context.
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 clear description and examples. The description adds little beyond restating the parameter name and format, providing no additional semantic depth.
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 specifically states the action 'Return a Mammalian Phenotype (MP) ontology term' and lists exact fields returned (id, name, definition, parents, children, top-level systems). It clearly distinguishes from sibling tools like find_markers_by_phenotype by specifying the output.
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 explicitly recommends chaining with find_markers_by_phenotype and provides the function signature. Although it does not list when not to use it, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_phenotype_overviewGet Phenotype Overview GridARead-onlyIdempotent
Return a per-system phenotype overview grid: for each top-level MP system annotated for the marker (adipose tissue, cardiovascular system, renal/urinary system, nervous system, neoplasm, vision/eye, ...), the distinct annotated MP terms rolled up via the MP ontology. Use this for the system-level overview, then get_marker_phenotypes(mp_system=) to drill into one system. SCOPE: built from single-locus, NON-conditional genotypes (MGI_GenePheno); conditional/Cre-driven and multi-genic genotypes are EXCLUDED (see the response 'scope'/'scope_note'), so this grid is NOT a full mirror of the MGI gene page and a system may be absent here while the gene page shows it. Signature: get_phenotype_overview(query).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A mouse marker symbol (current or synonym, case-insensitive), an MGI id (MGI:98968 or 98968), or a human gene symbol / HGNC id for the ortholog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint. Description adds valuable context about scope (single-locus, non-conditional genotypes), source (MGI_GenePheno), and potential absence of systems, which goes beyond annotations. No 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?
Description is a single paragraph but well-structured, front-loading the core purpose and then adding usage guidance and scope details. Could be slightly more concise, but no unnecessary 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?
Given no output schema, description adequately explains what the grid contains (top-level MP systems, distinct MP terms rolled up via ontology) and its limitations. References response fields ('scope'/'scope_note') for further detail. Complete for a single-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with description for query. Description adds meaning by clarifying that query can be mouse symbol, MGI id, or human gene symbol/HGNC id, which is not explicit in schema. Also mentions case-insensitivity and synonyms.
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?
Description clearly states 'Return a per-system phenotype overview grid' with specific resource (phenotype overview for marker) and verb ('return'). Distinguishes from sibling tool get_marker_phenotypes by stating it provides system-level overview and then drills into one system.
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 says 'Use this for the system-level overview, then get_marker_phenotypes(mp_system=) to drill into one system.' Also specifies exclusion criteria (conditional/Cre-driven, multi-genic genotypes) and notes that not being a full mirror of MGI gene page, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_capabilitiesGet Server CapabilitiesARead-onlyIdempotent
Return the mgi-link discovery surface. detail='summary' (default) is light: identity/build/MGI release, the tool list WITH call signatures, accepted argument aliases, response modes, recommended workflows, error taxonomy, and limits. detail='full' adds vocabularies (allele types, marker types, match types) and the ortholog field catalogue. Call this first in a cold session, or read mgi://tools / mgi://capabilities. Signature: get_server_capabilities(detail=).
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | summary (default, light) or full (adds vocabularies). | summary |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, etc.), but the description adds behavioral details: the content of each detail level and the fact that it serves as an entry point for discovery, which goes beyond mere annotation replication.
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 but well-structured, front-loading the primary purpose, then detailing levels. The 'Signature:' line is slightly redundant with schema but not harmful. Could be trimmed, but overall efficient.
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 no output schema, the description thoroughly covers return content for both detail levels, mentions alternative discovery methods, and provides session context. Nothing essential is missing for an agent to understand and use 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?
While schema provides enum descriptions, the description adds substantial meaning: it explains what 'summary' and 'full' return (e.g., identity, tool list, vocabularies), significantly enhancing utility beyond the schema's terse 'summary (default, light) or full (adds vocabularies).'
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 returns the mgi-link discovery surface, specifying two detail levels (summary and full) and their contents. It distinguishes itself from sibling tools, which are primarily query tools for markers, phenotypes, etc.
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 instructs to call this first in a cold session or read mgi://tools / mgi://capabilities, providing clear when-to-use guidance without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_markerResolve Mouse MarkerARead-onlyIdempotent
Resolve any mouse marker reference to its canonical MGI record. Accepts a mouse symbol (current or synonym, case-insensitive), an MGI id (MGI:98968 or 98968), OR a human gene symbol / HGNC id (resolved to the mouse ortholog). Returns {mgi_id, symbol, name, marker_type, match_type (mgi_id|current|synonym|ortholog)}. An ambiguous symbol returns an ambiguous_query error with the candidate list (not silently picked). A human symbol identical to the mouse symbol resolves as match_type=current (case collision) rather than ortholog; the marker is the same. Signature: resolve_marker(query, response_mode=).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A mouse marker symbol (current or synonym, case-insensitive), an MGI id (MGI:98968 or 98968), or a human gene symbol / HGNC id for the ortholog. | |
| response_mode | No | Verbosity: minimal | compact | standard | full (default compact). | compact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations (readOnly, idempotent) by detailing return fields, ambiguous query error behavior with candidate list, and human-mouse symbol collision resolution. The case-insensitivity and MGI ID format acceptance are also disclosed.
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 well-structured, front-loaded with core purpose, and includes key details efficiently. Some sentences are dense but not overly verbose; it could be slightly tighter.
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 no output schema, the description fully specifies return fields and covers edge cases (ambiguous symbols, ortholog collisions). It also explains the response_mode parameter. Given the tool's simplicity, it is complete.
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%, providing baseline. The description adds value by explaining input types for query, case-insensitivity, and example formats like 'MGI:98968'. For response_mode, it lists enum options and default, enriching understanding.
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 it resolves mouse marker references to canonical MGI records, specifying three input types (mouse symbol, MGI ID, human ortholog). It distinguishes from siblings like get_marker and get_marker_ortholog by explicitly covering ortholog resolution and ambiguous handling.
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 explains what inputs it accepts and what it returns, providing clear context for use. However, it does not explicitly tell when to use this tool versus alternatives like get_marker or search_markers, limiting guidance on exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_markersSearch MarkersARead-onlyIdempotent
Free-text search over mouse marker symbols, names, and synonyms (FTS, relevance-ranked). Returns ranked {mgi_id, symbol, name, marker_type, score, match} summaries. Exact symbol/synonym hits are PINNED first (match: exact_symbol|exact_synonym|fts) so an exact gene is never buried under transgenes or lncRNAs. Returns a truncation contract {total, returned, limit, truncated}; when truncated, next_commands includes a widen step. marker_type optionally restricts to a type (e.g. 'Gene'). Nomenclature-only: no phenotype semantics — use search_phenotype_terms + find_markers_by_phenotype for phenotype-driven discovery, or resolve_marker for an exact symbol/id. Signature: search_markers(query, marker_type=, limit=, response_mode=).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max hits (default 25). | |
| query | Yes | Free-text query (symbol fragment, name, synonym). | |
| marker_type | No | Optional exact marker-type filter (case-insensitive). One of the MGI marker types; an unrecognised value is rejected with invalid_input. | |
| response_mode | No | Verbosity: minimal | compact | standard | full (default compact). | compact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description's job is to add operational details. It does so by explaining exact-match pinning, truncation contracts with next_commands, and relevance ranking. This adds significant transparency beyond annotations, though it could mention response_mode behavior more explicitly.
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, using only a few sentences to convey purpose, behavior, exclusions, and signature. It is front-loaded with the core function and efficiently uses space without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully describes the return format (ranked summaries and truncation contract) and the effect of the marker_type filter. It also mentions response_mode verbosity. Combined with rich annotations, the description is complete for agent understanding.
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%, but the description adds substantial meaning beyond schema: it explains the pinning behavior based on query, the truncation contract, the marker_type filter effect, and lists the response fields. It also provides the function signature, making parameter usage very clear.
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 performs free-text search over mouse marker symbols, names, and synonyms with relevance ranking and pinning of exact matches. It distinguishes from sibling tools by specifying it is nomenclature-only, explicitly naming alternatives like search_phenotype_terms and resolve_marker for phenotype and exact lookups.
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 explicitly states when to use (free-text nomenclature search) and when not to use (no phenotype semantics), providing alternative tool names and their purposes. This gives clear guidance against misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_phenotype_termsSearch Mammalian Phenotype TermsARead-onlyIdempotent
Free-text search over Mammalian Phenotype (MP) term names and definitions (FTS, relevance-ranked). Returns {mp_id, name, definition, score} plus a truncation contract {total, returned, limit, truncated} (widen step in next_commands when truncated). Use this to resolve a phenotype description to an MP id, then find_markers_by_phenotype or get_mp_term. Signature: search_phenotype_terms(query, limit=).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max hits (default 25). | |
| query | Yes | Free-text phenotype query (e.g. 'small kidney'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations (readOnlyHint, idempotentHint, etc.): it discloses that the search is FTS, relevance-ranked, and includes a truncation contract with next_commands. This transparency helps the agent understand search behavior and pagination without contradictions.
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 (4 sentences), front-loaded with the main purpose, and every sentence adds value (usage guidance, truncation details, signature). No redundant or unclear text.
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?
Despite no output schema, the description lists return fields ({mp_id, name, definition, score}) and explains the truncation contract, making the tool's behavior fully understandable. Combined with clear usage guidance and parameter docs, it is contextually complete for an AI agent.
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 clear parameter descriptions. The description reiterates the parameter meaning (e.g., 'query' as free-text) and mentions the default limit, but does not add new semantic information beyond what the schema already provides. Thus, baseline score of 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 a specific verb 'Free-text search' over 'Mammalian Phenotype (MP) term names and definitions', indicating the resource and action. It distinguishes from sibling tools like find_markers_by_phenotype by explicitly stating the use case and subsequent steps.
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 guidance: 'Use this to resolve a phenotype description to an MP id' and suggests subsequent tools (find_markers_by_phenotype, get_mp_term). It also mentions the signature and default limit, leaving no ambiguity about when to invoke this tool.
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.
14 tool updates
v0.6.0- Changed
find_markers_by_phenotype1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "error_code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "include_descendants": { - "type": "boolean" - }, - "limit": { - "type": "integer" - }, - "markers": { - "type": "array" - }, - "message": { - "type": "string" - }, - "mp_id": { - "type": "string" - }, - "mp_term": { - "type": "string" - }, - "recovery_action": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "returned": { - "type": "integer" - }, - "success": { - "type": "boolean" - }, - "total": { - "type": "integer" - }, - "truncated": { - "type": "boolean" - } - }, - "type": "object" -}New value: +null
- Added
get_diagnostics - Changed
get_marker1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "chromosome": { - "type": [ - "string", - "null" - ] - }, - "ensembl_gene_id": { - "type": [ - "string", - "null" - ] - }, - "entrez_id": { - "type": [ - "string", - "null" - ] - }, - "error_code": { - "type": "string" - }, - "feature_type": { - "type": [ - "string", - "null" - ] - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "human_ortholog": { - "additionalProperties": true, - "type": "object" - }, - "location": { - "type": [ - "string", - "null" - ] - }, - "marker_type": { - "type": [ - "string", - "null" - ] - }, - "match_type": { - "type": "string" - }, - "message": { - "type": "string" - }, - "mgi_id": { - "type": "string" - }, - "name": { - "type": [ - "string", - "null" - ] - }, - "recovery_action": { - "type": "string" - }, - "requested_query": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "success": { - "type": "boolean" - }, - "summary": { - "additionalProperties": true, - "type": "object" - }, - "symbol": { - "type": "string" - }, - "synonyms": { - "type": "array" - } - }, - "type": "object" -}New value: +null
- Changed
get_marker_alleles4 fields changed- changed
Input schema / properties / allele_type / descriptionPrevious value: -"Optional allele-type filter (e.g. 'Targeted', 'knockout', 'crispr')."New value: +"Optional generation-method filter. Accepts a canonical MGI allele type or a friendly token (knockout, crispr, cre, enu); an unrecognised value is rejected with invalid_input." - added
Input schema / properties / allele_type / enumAdded value: +[ + "Chemically and radiation induced", + "Chemically induced (ENU)", + "Chemically induced (other)", + "Endonuclease-mediated", + "Gene trapped", + "Not Applicable", + "Not Specified", + "Other", + "QTL", + "Radiation induced", + "Spontaneous", + "Targeted", + "Targeted (Recombinase)", + "Transgenic", + "Transposon induced", + "chemical", + "chemically-induced", + "cre", + "crispr", + "endonuclease", + "endonuclease-mediated", + "enu", + "gene-trap", + "genetrap", + "knockout", + "ko", + "qtl", + "radiation", + "recombinase", + "spontaneous", + "targeted", + "transgene", + "transgenic", + "transposon", + "trapped" +] - added
Input schema / properties / allele_type / examplesAdded value: +[ + "Targeted", + "knockout", + "crispr" +] - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allele_type_filter": { - "type": [ - "string", - "null" - ] - }, - "alleles": { - "type": "array" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "category_counts": { - "additionalProperties": true, - "type": "object" - }, - "error_code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "message": { - "type": "string" - }, - "mgi_id": { - "type": "string" - }, - "recovery_action": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "returned": { - "type": "integer" - }, - "success": { - "type": "boolean" - }, - "symbol": { - "type": "string" - }, - "total": { - "type": "integer" - }, - "total_alleles": { - "type": "integer" - }, - "truncated": { - "type": "boolean" - } - }, - "type": "object" -}New value: +null
- Changed
get_marker_diseases1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "count": { - "type": "integer" - }, - "diseases": { - "type": "array" - }, - "error_code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "message": { - "type": "string" - }, - "mgi_id": { - "type": "string" - }, - "recovery_action": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "success": { - "type": "boolean" - }, - "symbol": { - "type": "string" - } - }, - "type": "object" -}New value: +null
- Changed
get_marker_ortholog1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "error_code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "has_ortholog": { - "type": "boolean" - }, - "hint": { - "type": "string" - }, - "match_type": { - "type": "string" - }, - "message": { - "type": "string" - }, - "mgi_id": { - "type": "string" - }, - "mouse_symbol": { - "type": "string" - }, - "ortholog": { - "additionalProperties": true, - "type": "object" - }, - "recovery_action": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "success": { - "type": "boolean" - } - }, - "type": "object" -}New value: +null
- Changed
get_marker_phenotypes1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "annotations": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "error_code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "message": { - "type": "string" - }, - "mgi_id": { - "type": "string" - }, - "mp_system_filter": { - "type": [ - "string", - "null" - ] - }, - "recovery_action": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "returned": { - "type": "integer" - }, - "success": { - "type": "boolean" - }, - "summary": { - "additionalProperties": true, - "type": "object" - }, - "symbol": { - "type": "string" - }, - "total": { - "type": "integer" - }, - "truncated": { - "type": "boolean" - }, - "view": { - "type": "string" - } - }, - "type": "object" -}New value: +null
- Removed
get_mgi_diagnostics - Changed
get_mp_term1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "children": { - "type": "array" - }, - "definition": { - "type": [ - "string", - "null" - ] - }, - "error_code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "message": { - "type": "string" - }, - "mp_id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "parents": { - "type": "array" - }, - "recovery_action": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "success": { - "type": "boolean" - }, - "top_level_systems": { - "type": "array" - } - }, - "type": "object" -}New value: +null
- Changed
get_phenotype_overview1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "error_code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "message": { - "type": "string" - }, - "mgi_id": { - "type": "string" - }, - "recovery_action": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "success": { - "type": "boolean" - }, - "summary": { - "additionalProperties": true, - "type": "object" - }, - "symbol": { - "type": "string" - }, - "system_count": { - "type": "integer" - }, - "systems": { - "type": "array" - } - }, - "type": "object" -}New value: +null
- Changed
get_server_capabilities1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "error_code": { - "type": "string" - }, - "error_codes": { - "type": "array" - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "message": { - "type": "string" - }, - "mgi_release": { - "type": "string" - }, - "recovery_action": { - "type": "string" - }, - "response_modes": { - "type": "array" - }, - "retryable": { - "type": "boolean" - }, - "server": { - "type": "string" - }, - "server_version": { - "type": "string" - }, - "success": { - "type": "boolean" - }, - "tools": { - "type": "array" - } - }, - "type": "object" -}New value: +null
- Changed
resolve_marker1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "error_code": { - "type": "string" - }, - "feature_type": { - "type": [ - "string", - "null" - ] - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "location": { - "type": [ - "string", - "null" - ] - }, - "marker_type": { - "type": [ - "string", - "null" - ] - }, - "match_type": { - "type": [ - "string", - "null" - ] - }, - "message": { - "type": "string" - }, - "mgi_id": { - "type": [ - "string", - "null" - ] - }, - "name": { - "type": [ - "string", - "null" - ] - }, - "query": { - "type": "string" - }, - "recovery_action": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "success": { - "type": "boolean" - }, - "symbol": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" -}New value: +null
- Changed
search_markers5 fields changed- changed
Input schema / properties / marker_type / descriptionPrevious value: -"Optional marker type filter, e.g. 'Gene'."New value: +"Optional exact marker-type filter (case-insensitive). One of the MGI marker types; an unrecognised value is rejected with invalid_input." - added
Input schema / properties / marker_type / enumAdded value: +[ + "Gene", + "Pseudogene", + "DNA Segment", + "QTL", + "Cytogenetic Marker", + "BAC/YAC end", + "Complex/Cluster/Region", + "Transgene", + "Other Genome Feature", + "GeneModel" +] - added
Input schema / properties / marker_type / examplesAdded value: +[ + "Gene", + "Pseudogene" +] - added
Input schema / properties / query / examplesAdded value: +[ + "Pax6", + "kidney", + "Hox" +] - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "error_code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "marker_type": { - "type": [ - "string", - "null" - ] - }, - "message": { - "type": "string" - }, - "query": { - "type": "string" - }, - "recovery_action": { - "type": "string" - }, - "results": { - "type": "array" - }, - "retryable": { - "type": "boolean" - }, - "returned": { - "type": "integer" - }, - "success": { - "type": "boolean" - }, - "total": { - "type": "integer" - }, - "truncated": { - "type": "boolean" - } - }, - "type": "object" -}New value: +null
- Changed
search_phenotype_terms2 fields changed- added
Input schema / properties / query / examplesAdded value: +[ + "small kidney", + "seizures", + "hydronephrosis" +] - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "properties": { - "_meta": { - "additionalProperties": true, - "type": "object" - }, - "allowed_values": { - "type": "array" - }, - "candidates": { - "type": "array" - }, - "error_code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "hint": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "message": { - "type": "string" - }, - "query": { - "type": "string" - }, - "recovery_action": { - "type": "string" - }, - "results": { - "type": "array" - }, - "retryable": { - "type": "boolean" - }, - "returned": { - "type": "integer" - }, - "success": { - "type": "boolean" - }, - "total": { - "type": "integer" - }, - "truncated": { - "type": "boolean" - } - }, - "type": "object" -}New value: +null
13 tool updates
v0.1.0- First observed
find_markers_by_phenotype - First observed
get_marker - First observed
get_marker_alleles - First observed
get_marker_diseases - First observed
get_marker_ortholog - First observed
get_marker_phenotypes - First observed
get_mgi_diagnostics - First observed
get_mp_term - First observed
get_phenotype_overview - First observed
get_server_capabilities - First observed
resolve_marker - First observed
search_markers - First observed
search_phenotype_terms
TDQS
Scored across 13 tools
Each tool has a clearly distinct purpose: marker retrieval, allele lookup, phenotype annotations, disease associations, ortholog mapping, ontology term search, and server diagnostics. No two tools overlap in function.
All tool names follow a consistent verb_noun pattern (e.g., get_marker, search_phenotype_terms, resolve_marker). The convention is uniform and predictable.
With 13 tools covering marker resolution, alleles, phenotypes, diseases, orthologs, ontology, and diagnostics, the count is well-scoped for the domain. No tool seems redundant or missing.
The tool surface covers the core MGI data: markers, alleles, phenotypes, diseases, orthologs, and ontology. Some advanced features (e.g., conditional genotypes, expression data) are excluded, but the stated scope is honest and the set is complete for the primary use case.
Maintenance
Related MCP Connectors
MCP server for querying BrainKB, a knowledge base for neuroscience knowledge graphs.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Token-free MCP server for structured RevoGrid Core, Pro, and Enterprise knowledge retrieval.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that provides access to Monarch Initiative's biomedical data through the Biolink API, enabling agents to query biological entities, associations, and knowledge graphs using natural language.-
- AlicenseAqualityAmaintenanceA high-performance MCP server that gives LLMs access to 25 biomedical tools federated across 50+ upstream APIs for genes, variants, drugs, diseases, literature, clinical trials, and structural biology.41775 npm12Apache 2.0
- AlicenseAqualityAmaintenanceAn MCP server that gives AI assistants access to biological and biomedical RDF databases via SPARQL at the RDF Portal, as well as selected REST APIs (NCBI E-utilities, UniProt, ChEMBL, PDB, Reactome, Rhea, MeSH, and more).2913MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server for MARRVEL that enables AI agents to access genetics databases and variant analysis tools for rare disease research.19-