Releases: genomoncology/biomcp
Releases · genomoncology/biomcp
BioMCP v0.8.22
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 apifilters 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 viabiomcp 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
diagnosticentity withsearch/get diagnostic,
first-use bundle refresh, explicitbiomcp gtr sync, and the supporting
health/docs/spec contract. (236) - Expanded
diagnosticinto 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> diagnosticsandget 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_commandsnow includes gene and drug pivots for recognizable
keyword patterns, while markdownSee also:addsdiscoverand
get diseaserecovery paths for short disease-like phrases. (242) - Added opt-in
clinical_featuresdisease 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.workflowguidance 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, andbiomcp ddinter sync.
(303)
Docs
- Added BioASQ-oriented how-to routing rows to
skills/SKILL.mdfor
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 canonicalSKILL.mdrender/install
contract explicit for agents and operators. (276, 280, 281) - Aligned the public landing-copy contract with the shipped
suggestand
workflow landing bullets somake test-contractsaccepts 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
suggestso resistance-to-drug mechanism questions anchor starter
commands on the drug instead of filler text. (291) - Patched
rustls-webpkito the safe release line and mademake checkenforce
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
discoverfiltering,
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_ARGSlane 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 reachmake spec-smoke. (288) - Hardened update and machine-readable CLI contracts:
biomcp updatefails
closed when checksum sidecars are missing,biomcp --json versiondocuments
its plain-text exception,biomcp --json listremains 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 honoredRetry-Afterduring 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.22line so the latest
release notes, ticket inventory, and release metadata stay aligned. (264, 265) - Made
make checkinclude the public Python/docs contract lane and added
make release-gateas the named local release-blocking command, so
release-readiness docs and validation profiles share one contract. (287) - Reworked
SPEC_SMOKE_ARGShandling around stable smoke inventory and current
mustmatch pytest item IDs, and cleaned up.marchartifact handling for
repo submission paths. (270, 271) - Migrated the release gate to the spec-v2 corpus, made
spec-prself-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
0.8.21 — 2026-04-16
New features
- Added article date-range filtering (
--date-from/--date-toand
--year-min/--year-maxaliases) tosearch article. (182) - Added EMA regulatory region (
--region eu) tosearch drugandget 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
discoverresolves no entities,
so dead-end queries get recovery paths. (204) - Surfaced EuropePMC and PubMed
first_index_dateper article in
search article --json;nullfor 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>andget disease <name>now showfunding
andsurvivalopt-in hints. (209)
Fixes
- Fixed
search all --counts-only --jsonso sections correctly omitresults,
links, andtotalfields 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 download403/404 (actionable, with
--listrecovery 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 lintfor spec bash blocks so spec sections that silently
skip due to a missing pipe are now caught. (221) - Untracked
.marchbuild 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
EnvVarGuardandTempDirGuardinto a centraltest_support
module shared across all test crates. (199) - Added docs-only validation profile so
make docscan run without triggering
the full build gate. (205) - Updated
tarandrustls-webpkifor active RustSec advisories. (207) - Fixed 7
make test-contractsfailures from assertion drift after the
decomposition batch. (208)
v0.8.20
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 --jsonalways includes_metacontract 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 lintentrypoint (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
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/--rowsflags for terminal chart dimensions (062) - Added
--width/--heightflags for SVG/PNG canvas size (062) - Added
--scaleflag 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 syncfor manual refresh search drug,get drug regulatory/safety/shortageall 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 PMIDsfailed 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
0.8.18 — 2026-03-25
New sources
- Added EMA regional drug coverage backed by local EMA human-medicine feeds,
sosearch drug,get drug, andget drug shortagesupport
--region us|eu|allacross 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 atdocs/reference/bioasq-benchmark.md. (045, 046)
Improvements
search drugnow defaults to--region all,get drug --regionis
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_KEYis 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
New sources
- WikiPathways as a third pathway source alongside Reactome and KEGG
- KEGG pathway integration
- Semantic Scholar search leg for
search article(whenS2_API_KEYis 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 contextbiomcp 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 drugmisses 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 allcross-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-planrouting metadata forsearch 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
knownDrugs→drugAndClinicalCandidatesupstream API migration
Full Changelog: v0.8.16...v0.8.17
v0.8.16
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
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 allis 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
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/healthand/readyz - Runnable demo:
demo/streamable_http_client.py— a self-contained PEP 723 script using the official Python MCP SDK, runnable withuv run --script - Docs home: remote HTTP server section added to
docs/index.mdso 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.