Skip to content

Releases: genomoncology/biomcp

BioMCP v0.8.22

01 May 18:17

Choose a tag to compare

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

16 Apr 20:18

Choose a tag to compare

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

30 Mar 20:27

Choose a tag to compare

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: v0.8.19...v0.8.20

v0.8.19

27 Mar 00:03
3ada44f

Choose a tag to compare

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: v0.8.18...v0.8.19

v0.8.18

26 Mar 04:39
34366f1

Choose a tag to compare

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)

v0.8.17

23 Mar 23:45
f701dde

Choose a tag to compare

New sources

  • WikiPathways as a third pathway source alongside Reactome and KEGG
  • KEGG pathway integration
  • Semantic Scholar search leg for search article (when S2_API_KEY is set), with directness-first merged ranking across PubTator3, Europe PMC, and Semantic Scholar
  • gnomAD constraint metrics for variant-interpretation context
  • Human Protein Atlas tissue expression in gene output
  • ComplexPortal protein complex data
  • DisGeNET gene-disease association scores

New commands

  • biomcp discover <query> — free-text concept resolution via OLS4, with optional UMLS crosswalks and MedlinePlus context
  • biomcp article batch <id>... — compact multi-article summary cards with parallel fetch (limit 20)

Improvements

  • Pathway progressive disclosure and exact-title-first ranking across sources
  • Source labels and evidence URLs across all entity detail outputs (Markdown and JSON)
  • get gene / get drug misses now return discovery-backed canonical suggestions instead of dead-end errors
  • Typed variant retrieval accepts shorthand forms and long-form protein notation (e.g. AKT2 p.Pro50Thr)
  • search all cross-routing stays inside controlled typed fallback rules
  • Compact answer-bearing summaries for approvals, population frequencies, and disease/variant evidence
  • Deepened OpenTargets integration with tractability and genetic-association sections
  • JATS-aware PMC full-text extraction for article detail views
  • MCP chart responses return SVG inline as base64 image payload
  • --debug-plan routing metadata for search all / search article
  • Paper/reproducibility artifacts: paper/, CONTRIBUTING.md, CODE_OF_CONDUCT.md, .zenodo.json

Fixes

  • Fixed drug interaction output returning empty for supported drugs
  • Fixed g:Profiler enrichment timeouts
  • Fixed DisGeNET template crash on sparse/null payloads
  • Fixed default article retraction filtering (only confirmed retractions excluded)
  • Fixed OpenTargets knownDrugsdrugAndClinicalCandidates upstream API migration

Full Changelog: v0.8.16...v0.8.17

v0.8.16

17 Mar 23:45
c3c85f1

Choose a tag to compare

What's Changed

  • ci: add contracts job to PR CI and make test-contracts local target by @imaurer in #193
  • demo: upgrade Streamable HTTP client to BRAF V600E end-to-end workflow by @imaurer in #194
  • Fix stable totals for age-filtered clinical trial search by @imaurer in #195
  • Rename MCP tool from shell to biomcp by @imaurer in #196
  • fix: use TypeAlias for Python 3.11 compatibility in streamable HTTP demo by @imaurer in #197
  • demo: polish Streamable HTTP demo with README, CLI args, and coherent BRAF/melanoma scenario by @imaurer in #198
  • Fix trial age filtering for sub-year units and stabilize CTGov cursor across page boundaries by @imaurer in #199
  • ci: add version-sync check to catch manifest drift by @imaurer in #200
  • Fix federated article search offset/sort semantics and add correctness spec by @imaurer in #201
  • Simplify streamable HTTP demo script by @imaurer in #202
  • Add parser-level validity gate for generated next_commands by @imaurer in #203
  • Support fractional age values for trial eligibility filtering by @imaurer in #204
  • Remove tracked .climb scratch files and add CI guardrail by @imaurer in #205
  • Add protein entity spec coverage by @imaurer in #207
  • Add CITATION.cff and citation pointers by @imaurer in #206
  • Add WARN_PAGE_THRESHOLD constant, next_commands property tests, and improved article error copy by @imaurer in #208
  • Add spec suite gate to PR CI by @imaurer in #209
  • Move age filter to cheap CTGov path and add traversal page cap by @imaurer in #210
  • Centralize CTGov search parameter construction by @imaurer in #211
  • Fix retraction filter bypass and leading-NOT eligibility parsing by @imaurer in #212
  • Clarify trial filter help: facility modes, phase 1/2 semantics, sex all no-op by @imaurer in #213
  • Split volatile live-network specs out of PR CI gate by @imaurer in #214
  • Add native chart rendering to study commands via kuva by @imaurer in #215
  • Build contracts CI against branch biomcp binary by @imaurer in #216
  • Signal approximate totals for age-only trial count searches by @imaurer in #217
  • Upgrade quinn-proto and PyJWT to fix security vulnerabilities by @imaurer in #218
  • Add guide workflows page to public docs by @imaurer in #219
  • Add cross-entity pivot workflow guide by @imaurer in #221
  • Add search all workflow guide by @imaurer in #222
  • Add Semantic Scholar article enrichment, citation graph, and recommendations by @imaurer in #223
  • Release v0.8.16 by @imaurer in #224

Full Changelog: v0.8.15...v0.8.16

v0.8.15

11 Mar 14:09
2ec932d

Choose a tag to compare

0.8.15 — 2026-03-11

  • Fixed the planning-docs CI path regression so release validation uses the
    repo-local planning fixtures by default instead of an Ian-local absolute
    path. This is the fix from PR #191 that unblocks release packaging on
    GitHub Actions.
  • Refreshed the public discovery docs so search all is taught as the unified
    cross-entity entry point in the README and docs index. This is the docs
    alignment from PR #190.

v0.8.14 — Streamable HTTP docs, demo, and release polish

10 Mar 21:42
bd15482

Choose a tag to compare

What's new in v0.8.14

  • Newcomer docs: new getting-started guide for remote Streamable HTTP clients — how to start biomcp serve-http, use /mcp, and check /health and /readyz
  • Runnable demo: demo/streamable_http_client.py — a self-contained PEP 723 script using the official Python MCP SDK, runnable with uv run --script
  • Docs home: remote HTTP server section added to docs/index.md so the transport is visible from first visit
  • README: updated with remote HTTP quick-start and demo reference
  • serve-sse migration guidance: kept visible for users still on the legacy SSE path

See the CHANGELOG for full details.

v0.8.13

09 Mar 17:50
3640c27

Choose a tag to compare

See CHANGELOG.md for full details.