Repository avatar
Search & Data Extraction
v0.2.6
active

biomedmcp

io.github.unibio-intelligence/biomedmcp

Integrated public biomedical research with cited, bounded evidence.

Documentation

biomedmcp

biomedmcp is a Model Context Protocol (MCP) server that retrieves records from biomedical sources, including PubMed, UniProt, ClinicalTrials.gov, ChEMBL, Open Targets and the Genotype-Tissue Expression (GTEx) project. Each result identifies its source records, so an AI agent's answers can be checked against them.

See the BioMed MCP overview for supported tools and access options.

Start with a research question

The following request can be sent from an MCP client:

Build an evidence notebook on LDL-receptor biology and cholesterol lowering. Start with a human LDLR target dossier, inspect tissue expression, then find PCSK9 genetic studies. Separate observations, intervention results and open questions. Cite the records you read and identify any unavailable sources.

Connect to https://biomedmcp.unibiointelligence.com/mcp using Streamable HTTP and sign in when prompted. For a local server, install the Python distribution, run the Docker image below, or build from this checkout; see connection options.

Run the same investigation locally

Use Python 3.13+ in an activated virtual environment:

python -m pip install biomedmcp==0.2.6
UBI_PROFILE=local biomedmcp build_dossier '{"workflow":"target_dossier","focus":"LDLR","species":9606}'

The single Python distribution includes all source adapters. From a source checkout, uv sync --frozen installs the locked environment; prefix commands with uv run --frozen when using it.

The following narrower calls can fill gaps in the notebook:

UBI_PROFILE=local biomedmcp get_record '{"entity":"gene","id":"LDLR","species":9606,"sections":["expression"]}'
UBI_PROFILE=local biomedmcp search_literature '{"query":"PCSK9","filters":{"source":"pubmed","date_from":"2024-01-01"}}'
UBI_PROFILE=local biomedmcp get_variant_evidence '{"id":"PCSK9 R46L"}'

Check each response's source, species and identifiers before combining records; a partial or unavailable section is a gap, not a negative result. Follow the continuation and recovery links in a response to retrieve more than the preview.

Choose the next question

Research taskWhere to start
Separate target observations from causal claimsEvidence investigations
Inspect an allele without conflating transcript or genome buildTyped call examples
Read a paper's accessible text and tablesget_record with entity: "article" and sections: ["fulltext"]
Examine registered studiessearch_trials; inspect each study's submitted record
Reproduce a local analysisSynthetic study walkthrough

Connect a local agent

UBI_PROFILE=local biomedmcp-server --transport http --host 127.0.0.1 --port 8000

Run with Docker

The versioned image is published to GitHub Container Registry for Linux AMD64. Start a local HTTP server with Docker:

docker run --rm --platform linux/amd64 -p 127.0.0.1:8000:8000 ghcr.io/unibio-intelligence/biomedmcp:0.2.6

For an MCP client that starts its server over stdio:

docker run --rm -i --platform linux/amd64 --no-healthcheck ghcr.io/unibio-intelligence/biomedmcp:0.2.6 biomedmcp-server --transport stdio

Use http://127.0.0.1:8000/mcp, or configure a stdio client using the connection guide. The call reference covers exact JSON arguments; result handling explains partial results and evidence boundaries.

Some sources need a key or installed dataset. Run biomedmcp diagnose and consult source access. Keep credentials in environment variables or client secret storage. A failed source does not mean that there is no evidence.

The integration code is licensed under Apache-2.0. Retrieved data retains its source terms. See notices, release notes and contributing.

Acknowledgements

We gratefully acknowledge support from Anthropic's AI for Science rare disease research grants.

PYPI
biomedmcp
Install Command
pip install biomedmcp
Runtime: uvx
OCI
ghcr.io/unibio-intelligence/biomedmcp:0.2.6
Install Command
docker pull ghcr.io/unibio-intelligence/biomedmcp:0.2.6:undefined