All notable changes to this project. Each entry links to its full per-version file in changelog/.
2.9.3 — 2026-09-02 · 🛡️ Security
A cancelled caller surfaces RequestCancelled instead of being retried or walked one ID at a time; mcp-ts-core ^0.12.5 classifies upstream 500/501 as ServiceUnavailable and closes an SSRF DNS-guard bypass
2.9.2 — 2026-08-21
mcp-ts-core ^0.12.3 (MCP SDK v2 migration); find_eligible/get_study_record nested option bags reject undeclared keys; toolchain refresh clears the last bun audit advisories
2.9.1 — 2026-08-18
nearestPieces field/sort suggestions require a similarity floor instead of always returning three; the blank_value recovery hint leads with the fix that works on required parameters; dead Cloudflare Worker scripts and devDependency removed
2.9.0 — 2026-08-18 · ⚠️ Breaking
clinicaltrials://{nctId} now returns a bounded wrapper instead of the raw study (breaking); get_study_results and find_eligible gain new caps; find_eligible no longer hides an enrollable site behind a closed one; remaining-field labels disambiguate on collision
2.8.7 — 2026-08-18
find_eligible age bounds and the enrollment sentinel filter no longer exclude studies with a missing field; sort rejections reclassified and normalized; query.* parameter descriptions completed; empty-list rejection extended to nctIds and get_field_values
2.8.6 — 2026-08-18
search_studies and get_study_results fixes: array cross-contamination, stale pagination tokens, rate-limit retry storm, and an unreachable error contract; blank-value rejection added across five tools and the analyze_trial_landscape prompt; mcp-ts-core 0.11.5 maintenance
2.8.5 — 2026-07-26
get_study_record and get_study_results format() render leaves structuredContent already carried but text output silently dropped, including the full classes/categories/measurements results tree
2.8.4 — 2026-07-26
get_study_record renders the Locations header and reason on a nearLocation match of zero; find_eligible carries each site's LocationStatus into content[]; get_field_definitions surfaces the pre-cap totalMatches in search mode
2.8.3 — 2026-07-26
throttle() serializes concurrent requests instead of firing them together; search_studies classifies malformed geoFilter/sort by reading the offending parameter from the upstream body; Essie query-parse errors name the actual offending token and correct the bracket-reservation rule; mcp-ts-core ^0.11.0 maintenance
2.8.2 — 2026-07-09
clinicaltrials_get_field_definitions path_not_found recovery hint now names the current mode-based call shape instead of the removed no-args overview; docs/design.md synced to mode/query/path/limit/includeIndexedOnly
2.8.1 — 2026-07-09
search_studies, get_field_values, and find_eligible content-output renders no longer clip long values or cap lists below what structuredContent already carries; find_eligible echoes reproducible upstream query strings; mcp-ts-core ^0.10.14 + Socket/minimumReleaseAge supply-chain guard maintenance
2.8.0 — 2026-06-30 · ⚠️ Breaking · 🛡️ Security
search_studies bounds structuredContent to a compact per-study index by default (breaking) — pass fields or use get_study_record for full leaves; find_eligible re-rank drops shared-word false friends; @cyanheads/mcp-ts-core ^0.10.10 clears a transitive js-yaml DoS advisory
2.7.4 — 2026-06-21
geoFilter searches lead with the matched site (distanceMi), get_field_values flags multi-valued fields, and query parse errors drop the raw Essie grammar dump
2.7.3 — 2026-06-20
mcp-ts-core 0.10.9 maintenance — floating-specifier and plugin-manifest devcheck guards, 14 skill syncs, dependency refresh
2.7.2 — 2026-06-14
Outcome rendering and filter-disclosure correctness — not-reached arms retained in summaries, truncation/cap flags gated on real overflow, empty field lists rejected
2.7.1 — 2026-06-14
toArray tolerates JSON-stringified array arguments from LLM callers — get_field_values fields no longer silently wraps a stringified array into one bogus element
2.7.0 — 2026-06-11
find_eligible condition re-rank; get_study_record referenceLimit; search_studies EnrollmentCount:desc guidance
2.6.6 — 2026-06-11
mcp-ts-core 0.9.21 → 0.10.6: createApp identity pair, bundle clean step, .mcpbignore re-anchoring, truncation enrichment on field-definitions, skills sync
2.6.5 — 2026-06-08
Fix phaseFilter/sort error messages and correct reserved-char docs for free-text query params
2.6.4 — 2026-06-05
Remove local SQLite study mirror (CT_MIRROR_*); fix find_eligible recruitingOnly to exclude NOT_YET_RECRUITING
2.6.3 — 2026-06-04
node-cron declared as direct dep; CT_MIRROR_ENABLED and CT_MIRROR_FALLBACK_LIVE now parse z.stringbool() so "false" disables correctly
2.6.2 — 2026-06-04
Opt-in local SQLite mirror for offline study search and count (CT_MIRROR_* env vars)
2.6.1 — 2026-06-02
get_study_results gains moreInfo section — limitations & caveats, certain-agreement restrictions, results point of contact
2.6.0 — 2026-06-02 · ⚠️ Breaking
typed enum_invalid contract on search/count tools, always-on searchCriteria echo, get_study_count query parity, topEvents in summary mode, channel parity for results and record
2.5.5 — 2026-06-02
adopt @cyanheads/mcp-ts-core 0.9.21: per-request log context fix, fetchWithTimeout secret scrubbing, withRetry fail-fast on non-retryable errors
2.5.4 — 2026-05-30
get-study-results: drop unreachable ids_not_found contract; get-field-values: auto-correct RecruitmentStatus/RecruitingStatus to OverallStatus, ranking favors fields matched tokens cover more fully
2.5.3 — 2026-05-30
Enrichment adoption: search/field/eligibility tools now surface query echoes, result totals, and empty-result guidance in a typed enrichment block reaching both structuredContent and content[] trailer
2.5.2 — 2026-05-28
mcp-ts-core ^0.9.9 → ^0.9.13: 413 body cap, HTTP session-init gate, quieter 401/403/400/404 logging, GET /mcp surfaces keywords; landing.requireAuth explicit; plugin metadata scaffolded
2.5.1 — 2026-05-25
mcp-ts-core ^0.9.6 → ^0.9.9 (git-wrapup skill, release artifact verification, tag annotation format)
2.5.0 — 2026-05-25
get_field_definitions mode discriminator, enum error translation, funnel-aware no-match hints, transport framing removed from get_study_record description
2.4.12 — 2026-05-23
mcp-ts-core ^0.9.1 → ^0.9.6, zod added as direct dep, manifest.json + .mcpbignore scaffolded for MCPB bundle support, install badges added to README.
2.4.11 — 2026-05-21
Description hardening — advancedFilter anchors AREA[FieldName]value with composition examples (#47); path_not_found hint on clinicaltrials_get_field_definitions promotes query mode (#48).
2.4.10 — 2026-05-20
Fix clinicaltrials_get_study_record surface divergence (#46) — locationLimit / outcomeLimit / nearLocation now trim both surfaces identically, defaults flip to no cap, upstream totals surface in filtersApplied.
2.4.9 — 2026-05-20
Auto-normalize case/whitespace field-name mistakes (#44), surface Essie query parse errors with recovery hints (#34, #39), add locationLimit/outcomeLimit/nearLocation render controls on get_study_record (#40), and lift topAnalysis (p-value, CI, method) into get_study_results summary mode (#42).
2.4.8 — 2026-05-16
Framework 0.8.20 → 0.9.1: adopt server-level instructions on createApp (spec orientation text broadcast on initialize), summary cap 250 → 350 chars, bun outdated parser fix for markdown-style rows, skill resyncs including the new portability lint family in api-linter.
2.4.7 — 2026-05-10
Framework 0.8.14 → 0.8.20, engines bumped to Bun ≥1.3 / Node ≥24, search/count format() renders array criteria as [a, b], fuzz coverage for 3 tools, new api-telemetry skill, template-fork dep cleanup.
2.4.6 — 2026-05-04
search_studies fields description hardened against Sponsor/*List hallucinations; three tool descriptions anchor on "clinical trial"; framework bumped to 0.8.14 with skill sync.
2.4.5 — 2026-05-03
find_eligible adds match-prioritized location sort + 3-stage funnel diagnostics; search/count default-filter the EnrollmentCount=99999999 sentinel; search format() lifts truncation cap when fields is explicit.
2.4.4 — 2026-05-03
Polish LLM-facing definition language — flatten clinicaltrials_get_field_definitions description, enrich opaque output schemas in search/get-study/get-study-results, expand landscape prompt to all relevant tools.
2.4.3 — 2026-05-03
Field-name validation cache + did-you-mean suggestions (fixes #35); new query mode in clinicaltrials_get_field_definitions; typed error contracts on every tool/resource; framework 0.7.6 → 0.8.13
2.4.2 — 2026-04-27
Bump @cyanheads/mcp-ts-core 0.7.0 → 0.7.6, resync 7 skills and 1 script (+ 1 new), adopt 0.7.4 form-client safety guidance in CLAUDE.md/AGENTS.md checklist
2.4.1 — 2026-04-24
Bump @cyanheads/mcp-ts-core 0.6.17 → 0.7.0, resync 5 skills and 2 framework scripts, adopt expanded CLAUDE.md/AGENTS.md checklist and Changelog/Agent-skill-dir callouts
2.4.0 — 2026-04-24 · ⚠️ Breaking
Uppercase find_eligible.sex enum (breaking); specific offending-field error on field-values 404; directory-based changelog; new security-pass skill; framework 0.6.17
2.3.5 — 2026-04-23
Adopt rateLimited() error factory; document MCP_PUBLIC_URL; refresh bundled skills from mcp-ts-core 0.6
2.3.4 — 2026-04-21
Fix format()/structuredContent parity across 6 tools via new format-parity linter; sync scripts and skills from mcp-ts-core 0.5.3
2.3.3 — 2026-04-21
Fix format() drop-offs across 4 tools; fall back to per-ID calls when batch rejects on a single bad NCT
2.3.2 — 2026-04-21
Surface nextPageToken in search_studies format() so content[]-only agents can paginate
2.3.1 — 2026-04-21
Stop slicing conditions in format() for search_studies and find_eligible; narrow test-side types under strict tsconfig
2.3.0 — 2026-04-20
Rewrite get_study_record format() for full coverage; harden retry/backoff; consolidate duplicated NCT ID regex
2.2.0 — 2026-04-20
Catch invalid-field-name errors in search_studies with a piece-vs-module hint and pointer to get_field_definitions
2.1.1 — 2026-04-13
Add add-app-tool skill; broad skill refresh (13 updated); tool description rewrites across 4 tools
2.1.0 — 2026-04-04
Shared format-helpers utility (formatRemainingStudyFields); expanded test coverage; mirrored test directory layout
2.0.6 — 2026-03-30
Skill refresh for add-tool/add-resource/design-mcp-server; dependency bumps
2.0.5 — 2026-03-28
Bump @cyanheads/mcp-ts-core 0.2.3 → 0.2.8
2.0.4 — 2026-03-28
Refactor get_study_results format() into dedicated helpers; richer rendering for outcomes, adverse events, flow, and baseline
2.0.3 — 2026-03-28
Add BOOLEAN field support to get_field_values; validate NCT ID format and cap batch at 20 for get_study_results
2.0.2 — 2026-03-28
Batch get_study_results via /studies?filter.ids (single request); lift 5-NCT-ID cap; fix field name references
2.0.1 — 2026-03-28
Rewrite format() for 4 tools to produce full structured markdown reports; expand RawStudyShape
2.0.0 — 2026-03-27 · ⚠️ Breaking
Ground-up rewrite on @cyanheads/mcp-ts-core; 7 redesigned tools, new resource, new prompt, and full test suite