Skip to main content
Glama

mgi-link

Python 3.12+ CI Conformance License: MIT

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.

IMPORTANT

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/mcp

Locally (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 server
claude mcp add mgi-link -- uv run mgi-link-mcp   # stdio

Deploying behind a reverse proxy? MGI_LINK_ALLOWED_HOSTS must list the public hostname — see configuration.md.

Tools

Tool

Purpose

resolve_marker

Resolve a mouse symbol / MGI id / human ortholog → canonical marker

get_marker

Full marker record: location, xrefs, ortholog, summary counts

search_markers

Full-text search over marker symbol / name / synonyms

get_marker_alleles

Mutations & Alleles + generation-method category counts

get_marker_phenotypes

MP annotations (allelic composition, background, PubMed) + summary

get_phenotype_overview

The 27-system MGI Phenotype Overview grid

get_marker_diseases

Human–mouse disease models (DO/OMIM)

get_marker_ortholog

Mouse ↔ human ortholog (HGNC/Entrez/Ensembl/OMIM)

get_mp_term

Mammalian Phenotype ontology term (parents/children/systems)

search_phenotype_terms

Full-text search over MP terms

find_markers_by_phenotype

Reverse lookup: MP term → mouse genes (descendants included)

get_server_capabilities

Discovery: the tool surface, vocabularies, limits, citation

get_diagnostics

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 tools
find_markers_by_phenotypeFind Markers by PhenotypeA
Read-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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax markers (default 100).
mp_idYesA Mammalian Phenotype term id (MP:0005367).
include_descendantsNoAlso include child (more specific) MP terms (default true).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 DiagnosticsA
Read-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().

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 RecordA
Read-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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesA 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_modeNoVerbosity: minimal | compact | standard | full (default compact).compact

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 & MutationsA
Read-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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax alleles returned (default 200).
queryYesA 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_typeNoOptional 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_modeNoVerbosity: minimal | compact | standard | full (default compact).compact

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ModelsA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesA 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

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 OrthologA
Read-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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesA 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_modeNoVerbosity: minimal | compact | standard | full (default compact).compact

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 PhenotypesA
Read-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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows — distinct terms, or genotype rows in full mode (default 250).
queryYesA 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_systemNoOptional top-level MP system filter (name or MP id).
response_modeNoVerbosity: minimal | compact | standard | full (default compact).compact

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 TermA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
mp_idYesA Mammalian Phenotype term id (MP:0005367).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 GridA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesA 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

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 CapabilitiesA
Read-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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNosummary (default, light) or full (adds vocabularies).summary

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 MarkerA
Read-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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesA 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_modeNoVerbosity: minimal | compact | standard | full (default compact).compact

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 MarkersA
Read-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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax hits (default 25).
queryYesFree-text query (symbol fragment, name, synonym).
marker_typeNoOptional exact marker-type filter (case-insensitive). One of the MGI marker types; an unrecognised value is rejected with invalid_input.
response_modeNoVerbosity: minimal | compact | standard | full (default compact).compact

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 TermsA
Read-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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax hits (default 25).
queryYesFree-text phenotype query (e.g. 'small kidney').

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 14 tool updatesv0.6.0
    • Changedfind_markers_by_phenotype1 field changed
      • changedOutput 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
    • Addedget_diagnostics
    • Changedget_marker1 field changed
      • changedOutput 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
    • Changedget_marker_alleles4 fields changed
      • changedInput schema / properties / allele_type / description
        Previous 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."
      • addedInput schema / properties / allele_type / enum
        Added 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"
        +]
      • addedInput schema / properties / allele_type / examples
        Added value: +[
        +  "Targeted",
        +  "knockout",
        +  "crispr"
        +]
      • changedOutput 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
    • Changedget_marker_diseases1 field changed
      • changedOutput 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
    • Changedget_marker_ortholog1 field changed
      • changedOutput 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
    • Changedget_marker_phenotypes1 field changed
      • changedOutput 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
    • Removedget_mgi_diagnostics
    • Changedget_mp_term1 field changed
      • changedOutput 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
    • Changedget_phenotype_overview1 field changed
      • changedOutput 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
    • Changedget_server_capabilities1 field changed
      • changedOutput 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
    • Changedresolve_marker1 field changed
      • changedOutput 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
    • Changedsearch_markers5 fields changed
      • changedInput schema / properties / marker_type / description
        Previous 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."
      • addedInput schema / properties / marker_type / enum
        Added value: +[
        +  "Gene",
        +  "Pseudogene",
        +  "DNA Segment",
        +  "QTL",
        +  "Cytogenetic Marker",
        +  "BAC/YAC end",
        +  "Complex/Cluster/Region",
        +  "Transgene",
        +  "Other Genome Feature",
        +  "GeneModel"
        +]
      • addedInput schema / properties / marker_type / examples
        Added value: +[
        +  "Gene",
        +  "Pseudogene"
        +]
      • addedInput schema / properties / query / examples
        Added value: +[
        +  "Pax6",
        +  "kidney",
        +  "Hox"
        +]
      • changedOutput 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
    • Changedsearch_phenotype_terms2 fields changed
      • addedInput schema / properties / query / examples
        Added value: +[
        +  "small kidney",
        +  "seizures",
        +  "hydronephrosis"
        +]
      • changedOutput 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
  2. 13 tool updatesv0.1.0
    • First observedfind_markers_by_phenotype
    • First observedget_marker
    • First observedget_marker_alleles
    • First observedget_marker_diseases
    • First observedget_marker_ortholog
    • First observedget_marker_phenotypes
    • First observedget_mgi_diagnostics
    • First observedget_mp_term
    • First observedget_phenotype_overview
    • First observedget_server_capabilities
    • First observedresolve_marker
    • First observedsearch_markers
    • First observedsearch_phenotype_terms

TDQS

A4.3/5.0

Scored across 13 tools

Disambiguation5/5

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.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., get_marker, search_phenotype_terms, resolve_marker). The convention is uniform and predictable.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    -
  • A
    license
    A
    quality
    A
    maintenance
    A 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.
    41
    775 npm
    12
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    An 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).
    29
    13
    MIT