hpo-link

hpo-link

MCP server that provides tools for querying the Human Phenotype Ontology (HPO) including term lookup, hierarchy exploration, cross-ontology mappings, and gene-phenotype-disease associations, all grounded in a local SQLite database for fast offline lookups.

Category
Visit Server

README

hpo-link

MCP/API server that grounds phenotype work in the Human Phenotype Ontology (HPO).

hpo-link builds a local SQLite database from the HPO OBO release and HPOA gene/disease annotation files (served via OBO PURLs and the HPO GitHub releases) and serves a read-only MCP + REST surface for phenotype term lookup, the is_a hierarchy (ancestors/descendants via a transitive closure), cross-ontology mapping, and gene↔phenotype↔disease association queries. There is no live API — the local database is the only source, so lookups are fast and offline.

Every response is grounded in the local database and cites the HPO id + HPO release version. Research use only; not clinical decision support.

Tools

Discovery

Tool Signature
get_server_capabilities get_server_capabilities(detail=) — discovery surface (tools, workflows, error taxonomy, limits).
get_diagnostics get_diagnostics() — database status, loaded HPO release, counts.

Phenotype term lookup

Tool Signature
resolve_term resolve_term(query, response_mode=) — label/synonym/HP id/xref → canonical term + match_type.
search_terms search_terms(query, limit=, include_obsolete=, response_mode=) — FTS over name/synonyms/definition.
get_term get_term(term, response_mode=) — definition, synonyms, grouped xrefs, parents/children, obsolescence.

Hierarchy

Tool Signature
get_term_ancestors get_term_ancestors(term, limit=, response_mode=) — transitive is_a ancestors.
get_term_descendants get_term_descendants(term, limit=, response_mode=) — transitive is_a descendants.
get_term_parents get_term_parents(term, response_mode=) — direct is_a parents.
get_term_children get_term_children(term, response_mode=) — direct is_a children.

Cross-ontology mapping

Tool Signature
resolve_xref resolve_xref(xref_id, limit=, response_mode=) — external CURIE → HP ids, ranked by predicate.
map_cross_ontology map_cross_ontology(term, prefixes=, response_mode=) — an HP term → mappings grouped by prefix.

Gene ↔ Phenotype ↔ Disease associations (HPOA)

Tool Signature
get_phenotypes_for_gene get_phenotypes_for_gene(gene, response_mode=) — HPO terms annotated to a gene.
get_genes_for_phenotype get_genes_for_phenotype(term, response_mode=) — genes annotated to an HPO term.
get_phenotypes_for_disease get_phenotypes_for_disease(disease_id, response_mode=) — HPO terms annotated to a disease.
get_diseases_for_phenotype get_diseases_for_phenotype(term, response_mode=) — diseases annotated to an HPO term.
get_genes_for_disease get_genes_for_disease(disease_id, response_mode=) — genes associated with a disease.
get_diseases_for_gene get_diseases_for_gene(gene, response_mode=) — diseases associated with a gene.

Every response carries _meta.next_commands (ready-to-call follow-ups). Ids are normalised to HP:NNNNNNN. response_mode ∈ minimal | compact | standard | full (default compact).

Tools are unprefixed here (serverInfo.name = hpo-link); the GeneFoundry router applies the canonical gateway namespace token hpo at mount time.

Quickstart

uv sync --group dev           # install dependencies
uv run hpo-link-data build    # download HPO (OBO + HPOA) and build the local database
uv run hpo-link-data status   # print the loaded HPO release + counts
uv run hpo-link-mcp           # stdio MCP server (for Claude Desktop)
uv run hpo-link               # unified REST + MCP server on http://127.0.0.1:8000

Or via make:

make install        # uv sync --group dev
make data           # build the local HPO database
make data-status    # print loaded release + counts
make dev            # unified REST + MCP server
make mcp-serve      # stdio MCP server

MCP client setup

HTTP (unified server exposes /mcp alongside /health):

claude mcp add --transport http hpo-link --scope user http://127.0.0.1:8000/mcp

stdio (Claude Desktop and similar):

make mcp-serve      # runs mcp_server.py on stdio (stdout is reserved for the protocol)

Data provenance

The database is built from:

  • HPO ontology (hp.json) — downloaded from the HPO GitHub releases via the OBO PURL (http://purl.obolibrary.org/obo/hp.json). Contains ~19,800 active phenotype terms (HPO v2026-06-06). Fetched via conditional GET (ETag / Last-Modified); a 304 reuses the local file.
  • HPOA annotations (phenotype.hpoa) — the HPO phenotype-to-disease annotation file linking HPO terms to OMIM/Orphanet/DECIPHER diseases, and gene associations derived from those annotations.

The build is atomic (temp file + os.replace) under a lock, and records provenance in a meta table (HPO release version, source validators, counts). get_diagnostics and get_server_capabilities report the loaded release.

Prebuilt artifact distribution

To skip the build step, set HPO_LINK_DATA__PREBUILT_DB_URL to the URL of a prebuilt SQLite artifact (e.g., from a GitHub Release). The entrypoint will download and verify it before serving. If absent, the server builds from source automatically (HPO_LINK_DATA__AUTO_BOOTSTRAP=true).

Documentation

License & citation

Code: MIT.

Data: HPO is distributed under a custom license for research and educational use. See https://hpo.jax.org/app/license for details. Attribution required.

Citation: Köhler S, Gargano M, Matentzoglu N, et al. The Human Phenotype Ontology in 2021. Nucleic Acids Research 2021;49(D1):D1207–D1217. doi:10.1093/nar/gkaa1043.

For the most recent release cite: Gargano MA, Matentzoglu N, Coleman B, et al. The Human Phenotype Ontology in 2024: phenotypes around the world. Nucleic Acids Research 2024;52(D1):D1333–D1346. doi:10.1093/nar/gkad1005.

Research use only; not for diagnosis, treatment, triage, or patient management.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured