Skip to content

genomoncology/biomcp

MCP Data & Storage

A unified biomedical query tool that lets researchers and clinicians search across PubTator, Europe PMC, gene databases, drug registries, and local study data using a single command grammar.

Rust Latest v0.8.22 · 1mo ago Security brief →

Features

  • Search literature via `search article` across PubTator3 and Europe PMC with identifier deduplication
  • Pivot seamlessly between genes, variants, drugs, diseases, pathways, proteins, articles, trials, diagnostics, adverse events, PGx, and GWAS using the same command syntax
  • Get suggested playbooks for biomedical questions with `biomcp suggest "<question>"`
  • Run local study analytics (`study` commands) producing terminal tables, SVGs, and PNG charts from cBioPortal‑style datasets
  • Enrich gene lists via built‑in g:Profiler enrichment (`enrich`) and batch multiple entity lookups (`batch`)

Recent releases

View all 48 releases →
v0.8.22 New feature
Notable features
  • Extended WHO Prequalification drug coverage to include active pharmaceutical ingredients (APIs) via `search drug --region who --product-type api`
  • Added CDC CVX/MVX vaccine identity bridge and VAERS adverse‑event source for default/EU vaccine searches
  • Introduced local GTR‑backed `diagnostic` entity with multi‑source WHO IVD support, FDA 510(k)/PMA overlays, gene/disease pivots, clinical features from MedlinePlus/HPO, offline routing via `biomcp suggest`, workflow ladder sidecars, article full‑text fallback, and DDInter drug‑interaction workflows
Full changelog

0.8.22 — 2026-04-30

New features

  • Extended WHO Prequalification drug coverage to include active pharmaceutical
    ingredients (APIs) alongside finished pharmaceutical products;
    search drug --region who --product-type api filters explicit WHO searches
    to API rows. (232)
  • Added the CDC CVX/MVX vaccine identity bridge for default and EU/all
    vaccine-brand drug search, backed by local CDC bundle downloads and explicit
    refresh via biomcp cvx sync. (233)
  • Added CDC WONDER VAERS as the aggregate vaccine adverse-event source for
    search adverse-event --source <faers|vaers|all>, including combined
    vaccine search, health visibility, and source inventory/docs surfaces. (235)
  • Added the local GTR-backed diagnostic entity with search/get diagnostic,
    first-use bundle refresh, explicit biomcp gtr sync, and the supporting
    health/docs/spec contract. (236)
  • Expanded diagnostic into a local multi-source surface with WHO Prequalified IVD
    infectious-disease products, source-aware search/get behavior, and explicit
    biomcp who-ivd sync. (237)
  • Added FDA 510(k) and PMA regulatory overlays to
    get diagnostic <id> regulatory, rendering source-aware FDA device status
    when records match and a truthful empty regulatory section when they do not.
    (238)
  • Added opt-in diagnostic pivots to gene and disease cards with
    get gene <symbol> diagnostics and get disease <name_or_id> diagnostics,
    backed by local GTR and WHO IVD diagnostic search. (239)
  • Extended article search follow-up guidance with cross-entity keyword hints:
    JSON _meta.next_commands now includes gene and drug pivots for recognizable
    keyword patterns, while markdown See also: adds discover and
    get disease recovery paths for short disease-like phrases. (242)
  • Added opt-in clinical_features disease output backed by MedlinePlus
    clinical summaries, reviewed HPO phenotype mapping, source-native evidence
    URLs, and unsupported-disease empty states via
    get disease <name> clinical_features. (252, 253, 254)
  • Added offline routing via biomcp suggest <question> so worked-example
    prompts can resolve to structured _meta.workflow guidance without requiring
    a live tool call. (279)
  • Added workflow-ladder sidecars and schema-backed _meta.ladder[] payloads
    so routed workflows can carry explicit ladder steps across the CLI/MCP
    contract. (282)
  • Added richer CLI help examples for batch/variant-limit usage and preserved
    the parser-level skill uninstall contract through current help and MCP guard
    surfaces. (217, 224)
  • Added opt-in article fulltext source-boundary coverage and PDF fallback so
    article retrieval can truthfully report source limits while recovering PDF
    text when structured fulltext is unavailable. (255, 256)
  • Added DDInter-backed drug-drug interaction workflows with
    biomcp drug interactions <name>, get drug <name> interactions, local
    bundle health, source-scoped empty wording, and biomcp ddinter sync.
    (303)

Docs

  • Added BioASQ-oriented how-to routing rows to skills/SKILL.md for
    gene-disease association, gene localization/protein-function, drug regulatory
    date, and variant clinical-significance workflows, steering agents to
    structured-data shortcuts before article search. (240)
  • Refreshed architecture, source-integration, and current-state docs so the
    shipped architecture and CLI guidance match the post-decomposition repo
    surface. (272, 273, 274, 275)
  • Repaired backtick quoting in the mustmatch study/spec contract, published
    BioASQ benchmark guidance, and made the canonical SKILL.md render/install
    contract explicit for agents and operators. (276, 280, 281)
  • Aligned the public landing-copy contract with the shipped suggest and
    workflow landing bullets so make test-contracts accepts the current README
    and docs homepage feature counts. (286)
  • Refreshed source, licensing, versioning, CLI decomposition, diagnostic,
    clinical-features, API-key, quality-bar, and staging-demo docs to match the
    shipped v0.8.22 surface and current local-runtime key expectations. (222,
    272, 292, 304, 306, 314, 318, 329, 332, 341, 358, 362)

Fixes

  • Changed custom CLI validation failures (BioMcpError::InvalidArgument) to exit
    2, matching clap parser failures and separating bad usage from runtime
    failures. (353)
  • Fixed suggest so resistance-to-drug mechanism questions anchor starter
    commands on the drug instead of filler text. (291)
  • Patched rustls-webpki to the safe release line and made make check enforce
    the cargo-deny advisory gate alongside the existing license gate. (290)
  • Fixed cargo-install compatibility, deterministic EMA freshness checks, OLS4
    smoke routing, WHO drug JSON envelopes, and WHO API cache-limit wording so
    install, health, and explicit WHO/API drug searches stay stable. (218, 220,
    226, 232)
  • Added compact diagnostic rows and capped disease diagnostic pivots so
    gene/disease diagnostic follow-ups stay scannable and bounded. (266, 267)
  • Replaced the stale GTR sample with a live-valid GTR example and added
    zero-result recovery for the local diagnostic surface. (268, 269)
  • Tightened entity-aware article follow-ups with a same-session loop-breaker
    for overlapping suggestions and PubMed ESearch cleanup for bounded
    question-format filler words. (277, 278, 283)
  • Improved sparse drug research-code recovery, relational discover filtering,
    trial help example/flag consistency, and CTGov intervention alias preservation
    so generated follow-up commands stay useful and shell-safe for degraded or
    ambiguous inputs. (302, 310, 313, 338, 339, 340, 342, 351, 357)
  • Repaired the targeted SPEC_SMOKE_ARGS lane so it stores stable smoke
    section IDs and resolves them to current mustmatch pytest item IDs at runtime;
    the quality ratchet now checks collectability before stale line-qualified
    selectors can reach make spec-smoke. (288)
  • Hardened update and machine-readable CLI contracts: biomcp update fails
    closed when checksum sidecars are missing, biomcp --json version documents
    its plain-text exception, biomcp --json list remains parseable, and
    short-literal update ratchets were replaced with structural behavior checks.
    (331, 333, 352, 355)
  • Stabilized MCP stdio no-input guidance, cBioPortal study download idle/stall
    handling, disease clinical-feature specs, OLS4 disease/discover fallback IDs,
    WikiPathways parallel tests, and protein ComplexPortal specs with regression
    coverage. (326, 336, 345, 346, 350, 354, 358)
  • Surfaced Semantic Scholar authentication/degradation status in article search
    and honored Retry-After during authenticated retries so throttled searches
    disclose source health and back off correctly. (364, 365, 366)

Internal

  • Completed release/docs contract cleanup for the 0.8.22 line so the latest
    release notes, ticket inventory, and release metadata stay aligned. (264, 265)
  • Made make check include the public Python/docs contract lane and added
    make release-gate as the named local release-blocking command, so
    release-readiness docs and validation profiles share one contract. (287)
  • Reworked SPEC_SMOKE_ARGS handling around stable smoke inventory and current
    mustmatch pytest item IDs, and cleaned up .march artifact handling for
    repo submission paths. (270, 271)
  • Migrated the release gate to the spec-v2 corpus, made spec-pr self-contained
    for March kickoff, restored release-gate reliability, and kept stable smoke,
    canary, cache-warm, and test-contract lanes aligned with the current shipped
    docs/spec surface. (294, 297, 298, 299, 300, 301, 307, 308, 344)
  • Decomposed oversized CLI modules, absorbed residual line-cap allowlists,
    clarified the benchmark harness as internal, and added runtime-wiring/line-cap
    ratchets so structural cleanup cannot reintroduce public-surface drift. (309,
    319, 320, 321, 322, 323, 324, 325, 334, 335, 343, 347)
  • Strengthened release readiness with gene-all warm-budget coverage, local gate
    uv-build fixes, leaked-artifact cleanup, binary asset attributes, CI wrapper
    stale-binary warnings, Python 3.12/Rust 1.95 CI compatibility, self-contained
    local-data spec fixtures, and final v0.8.22 readiness audits before publish.
    (247, 258, 262, 263, 285, 289, 315, 316, 317, 327, 328, 330, 348, 363, 367)
  • Recorded the diagnostic-entity, HPO clinical-feature, Obsidian vault,
    biomedical news, post-v0.8.21 shipped-surface, and neural-reranking reviews
    as architecture or deferred work unless runtime wiring shipped in the bullets
    above. (230, 243, 244, 245, 246, 284)
v0.8.21 New feature
Notable features
  • Article date-range filtering (--date-from/--date-to, --year-min/--year-max)
  • EMA regulatory region support (--region eu)
  • Entity-aware HATEOAS suggestions in search output
Full changelog

0.8.21 — 2026-04-16

New features

  • Added article date-range filtering (--date-from/--date-to and
    --year-min/--year-max aliases) to search article. (182)
  • Added EMA regulatory region (--region eu) to search drug and get drug,
    backed by local EMA human-medicine feeds; data auto-downloads on first use via
    biomcp ema sync. (203)
  • Added entity-aware HATEOAS suggestions (_meta.next_commands) to article
    search JSON output; gene-anchored and keyword searches return contextually
    appropriate follow-up commands. (195, 202)
  • Added article search fallback suggestions when discover resolves no entities,
    so dead-end queries get recovery paths. (204)
  • Surfaced EuropePMC and PubMed first_index_date per article in
    search article --json; null for sources that do not expose index dates. (196)
  • Expanded trial search with drug alias union so searches match trials registered
    under any approved drug name variant. (198)
  • Surfaced opt-in section hints (More: block) in gene and disease base card
    responses; get gene <symbol> and get disease <name> now show funding
    and survival opt-in hints. (209)

Fixes

  • Fixed search all --counts-only --json so sections correctly omit results,
    links, and total fields per the counts-only contract. (206)
  • Disambiguated FAERS 404 (drug not in post-marketing database) from "found but
    no matching events"; added ClinicalTrials.gov fallback for adverse-event
    lookups when FAERS returns 404. (197)
  • Improved error messages for study download 403/404 (actionable, with
    --list recovery hint) and DisGeNET 403 (env var name and docs URL). (212)
  • Added study subcommand help descriptions and a regression test so help
    completeness is enforced going forward. (210)

Docs

  • Refreshed architecture docs to the post-decomposition state: source map,
    modes prose, and MCP allowlist contract. (213)
  • Fixed documentation drift: README source count, CHANGELOG WHO entry, and
    root help command count. (211)
  • Published two blog posts on biomcp.org: daraxonrasib six-commands workflow
    article and a follow-up that removes biomcp-python references. (200, 201)

Internal

  • Added mustmatch lint for spec bash blocks so spec sections that silently
    skip due to a missing pipe are now caught. (221)
  • Untracked .march build artifacts from git so worktree state stays clean. (193)
  • Added Compact Approval Fields spec block for EMA and EU regulatory data
    contract assertions. (194)
  • Consolidated EnvVarGuard and TempDirGuard into a central test_support
    module shared across all test crates. (199)
  • Added docs-only validation profile so make docs can run without triggering
    the full build gate. (205)
  • Updated tar and rustls-webpki for active RustSec advisories. (207)
  • Fixed 7 make test-contracts failures from assertion drift after the
    decomposition batch. (208)
v0.8.20 Security relevant
Security fixes
  • Remove partial API key from health output
  • Harden MCP allowlist for mutating study download paths
Notable features
  • Cross-entity See-also links
  • Multiple BioASQ product gap fixes
  • Disease definitions, phenotypes, protein isoforms improvements
Full changelog

0.8.20 — 2026-03-30

Security

  • Remove partial API key from health output (067)
  • Harden MCP allowlist for mutating study download paths (068)

Fixes

  • batch --json always includes _meta contract field (069)
  • Harden GWAS variant section against live decode failures (070)
  • Fix gene-to-PGx and disease-to-drug See-also routing (077)
  • Fix large PMC OA full-text downloads timing out (080)

New features

  • Cross-entity See-also links: drug→PGx, gene→PGx, disease→study, zero-result→discover (076)
  • Quality ratchet in make check: mustmatch lint, MCP allowlist, source-registry drift (075)
  • Study top-mutated helper and disease literature fallback

BioASQ product gap fixes

  • Disease definitions: show full "characterized by..." text instead of truncating (080)
  • Disease phenotypes: distinguish defining features from comprehensive HPO list with ranked key-feature summaries (081)
  • Protein isoforms: surface UniProt isoforms in gene protein section (082)
  • Drug target families: show family name (e.g., "PARP") alongside individual targets (083)
  • Protein legacy names: show legacy names alongside current gene symbols (084)
  • Variant legacy nomenclature: show legacy names alongside HGVS (085)
  • Drug mechanism labels: improve purine-analog mechanism coverage (086)
  • Protein function truncation: gene-level protein view now shows full function text (087)
  • Variant-specific targets: drug targets now show variant-specific entries from CIViC (087)

Improvements

  • Reworked CLI help and skill catalog for self-teaching agent navigation (072-074)
  • Replaced in-shell mustmatch shim with packaged mustmatch lint entrypoint (088)

Docs

  • Architecture contract docs for See-also, discover grammar, CI, post-tag proof (078)
  • Documentation consistency audit across public docs surface
  • Repo cleanup for layout, example paths, tracked artifacts (079)

Full changelog: https://github.com/genomoncology/biomcp/compare/v0.8.19...v0.8.20

v0.8.19 New feature
Notable features
  • 4 new chart types (pie, heatmap, stacked bar, scatter) plus waterfall
  • Chart dimension flags (--cols, --rows, --width, --height, --scale)
  • EMA data auto-downloads on first use
Full changelog

What's New

Charts

  • Added 4 new chart types: pie, heatmap, stacked bar, and scatter (now 12 total) (041, 062)
  • Added waterfall chart for mutation burden visualization (062)
  • Added --cols/--rows flags for terminal chart dimensions (062)
  • Added --width/--height flags for SVG/PNG canvas size (062)
  • Added --scale flag for PNG DPI control (062)

EMA (European Medicines Agency)

  • EU drug data now auto-downloads on first use (~9 MB) — no manual setup required (057)
  • Data refreshes automatically after 72 hours; biomcp ema sync for manual refresh
  • search drug, get drug regulatory/safety/shortage all support --region us|eu|all

Semantic Scholar

  • Cleaned up health display for unauthenticated users (055)

CI

  • Moved EMA-backed specs out of PR-blocking gate (056)

Docs

  • Refreshed README and docs index with marketing voice (061)
  • Added 18 per-source SEO landing pages (059, 060)
  • Added 3 new blog posts: agent skills, article search, cancer genomics charts

Known CI issue

  • spec/03-variant.md::GWAS Supporting PMIDs failed with "error decoding response body" — this is a transient GWAS Catalog API issue, not a BioMCP bug. The test passes when the upstream API is healthy.

Full Changelog: https://github.com/genomoncology/biomcp/compare/v0.8.18...v0.8.19

v0.8.18 New feature
Notable features
  • EMA regional drug coverage with --region us|eu|all
  • BioASQ benchmark module with datasets and reference
  • Semantic Scholar optional auth (1 req/2sec unauthenticated)
Full changelog

0.8.18 — 2026-03-25

New sources

  • Added EMA regional drug coverage backed by local EMA human-medicine feeds,
    so search drug, get drug, and get drug shortage support
    --region us|eu|all across EU regulatory status, DHPCs, referrals, PSUSAs,
    shortages, and the existing US label surface. (043, 044)
  • Added the BioASQ benchmark module with benchmarks/bioasq/ingest_public.py,
    dataset and validity manifests, and the published BioASQ benchmark
    reference at docs/reference/bioasq-benchmark.md. (045, 046)

Improvements

  • search drug now defaults to --region all, get drug --region is
    surfaced in help, OpenFDA label fallback prefers exact brand-name matches,
    and OpenTargets drug-indication lookups are corrected for mixed US/EU
    workflows. (043, 044)
  • S2_API_KEY is now optional for Semantic Scholar-backed article
    enrichment and helpers: unauthenticated calls use the shared Semantic
    Scholar pool at 1 req/2sec, while authenticated calls keep the 1 req/sec
    quota with retry backoff. (047)

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
519
Forks
105
Languages
Rust Python Jinja

Install & Platforms

Install via
shell-script pip

Beta — feedback welcome: [email protected]