Reported issues for clinicaltrialsgov-mcp-server
Pod holds 16 of 16 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.
Back to clinicaltrialsgov-mcp-server.
Most discussed
feat(get_field_definitions): validate arguments against the selected mode
Use case
clinicaltrials_get_field_definitions requires an explicit mode (search | drill | overview), but the flat input schema still lets a caller attach fields that don't belong to the selected mode, and lets a whitespace-only query slip past the search-mode required-field check. Both gaps let a malformed call succeed with misleading or empty output instead of failing with an actionable error.
Current behavior
Reproduced against the live API on 2.9.5 (d0f9224):
-…
Read the thread · 2026-05-21 · closed · 5 comments
feat(get_field_definitions): an omitted required argument escapes the typed error contract
clinicaltrials_get_field_definitions has three reachable input-error shapes per mode. Two carry a typed data.reason and a mirrored Recovery: line; the third — the required argument for the selected mode simply omitted — throws a plain validationError and carries neither.
Related: #49
Proposal
Give the two requires throws a declared reason and a recovery hint, so every input rejection on this tool reaches the caller through the same typed contract the other reasons already use.…
Read the thread · 2026-09-12 · closed · 2 comments
bug(search_studies): ID-only searches that match nothing carry no notice
Server version
2.9.5
mcp-ts-core version
0.12.8
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
clinicaltrials_search_studies builds its empty-result notice from hasQuery and hasFilter only — neither includes nctIds. An ID-targeted lookup that matches nothing returns studies: [] with no signal that the ID filter was the reason, on either channel.
Two distinct cases, both unhandled today:
- ID-only (
nctIdsand…
Read the thread · 2026-09-12 · closed · 2 comments
feat(get_study_record): return links to protocol and SAP documents
Use case
A reviewer can discover from clinicaltrials_get_study_record and the clinicaltrials://{nctId} resource that a study has a protocol, statistical analysis plan (SAP), or informed consent form (ICF), but each document entry only carries a bare filename (e.g. Prot_000.pdf). Neither surface provides a URL to actually retrieve the file, so a caller who wants to inspect the protocol has no path from the record to the document.
Proposed behavior
Add a downloadUrl field to…
Read the thread · 2026-09-09 · closed · 2 comments
bug(get_field_values): cardinality ignores repeated ancestor objects
Server version
2.9.3
mcp-ts-core version
0.12.5
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
multiValued is only inferred from a leaf node's own type.endsWith("[]"). A scalar leaf nested inside a repeated (array-typed) ancestor object can also occur several times per study, so geography, intervention, and collaborator statistics lose their cardinality warning even though their counts sum above the study total exactly like…
Read the thread · 2026-09-09 · closed · 2 comments
bug(get_field_values): numeric, date, and longest-string statistics are discarded
Server version
2.9.5
mcp-ts-core version
0.12.8
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
clinicaltrials_get_field_values accepts INTEGER, NUMBER, and DATE fields, but the tool's output Zod schema (get-field-values.tool.ts) never declares their statistics fields. ClinicalTrialsService.getFieldValues returns the raw upstream JSON untouched (fetchJson<FieldValueStats[]> is a plain res.json() cast, no runtime…
Read the thread · 2026-09-09 · closed · 2 comments
bug(get_study_results): shortened arm labels lose measurement identity
Server version
2.9.3
mcp-ts-core version
0.12.5
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
Full results replace measurement group IDs with titles shortened to 40 characters. Different treatment arms can then have the same rendered label, leaving their counts and measurements ambiguous in content[] despite an intact structured response.
Related: #63 (all rows now render; the remaining defect is their association with…
Read the thread · 2026-09-12 · closed · 1 comment
bug(get_study_results): previous NCT IDs return false not-found results
Server version
2.9.3
mcp-ts-core version
0.12.5
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
clinicaltrials_get_study_results reports an existing study as missing when given a previous (alias) NCT ID. Record lookup resolves the same identifier successfully, so following an older citation into posted results gives a false not-found answer.
Root cause confirmed by code and by live upstream calls:…
Read the thread · 2026-09-12 · closed · 1 comment
Most recent
bug(get_study_results): summaries detach values from measurement context
Server version
2.9.3
mcp-ts-core version
0.12.5
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
clinicaltrials_get_study_results summary mode projects one cell of an outcome measure — classes[0].categories[0].measurements — into topStats, and strips the labels and qualifiers that say what those numbers measure. Both channels then print a class- and category-specific value directly under the whole outcome title.
The…
Read the thread · 2026-09-12 · closed · 1 comment
feat(get_study_results): retrieve capped results in bounded pages
Use case
clinicaltrials_get_study_results can bound a large record but cannot resume one. outcomeLimit and adverseEventLimit return a prefix; the only route to the rest is raising the limit or dropping it, which re-expands the whole response. Narrowing sections restarts each list at zero. A reviewer who has read outcomes 1–5 has no way to ask for 6–10 at the same bound.
Related: #97 (the caps shipped in 2.9.0 and work as designed — resumption was never part of them).
Proposed…
Read the thread · 2026-09-09 · closed · 1 comment
feat(search_studies): validate geoFilter shape, ranges, and unit before querying
Use case
clinicaltrials_search_studies's geoFilter schema field (z.string().optional(), search-studies.tool.ts:382) accepts any string. Its .describe() prose says a radius needs a mi/km suffix, but nothing enforces that, and ClinicalTrials.gov itself accepts a bare radius and silently reads it as meters. A caller who forgets the suffix gets an ordinary-looking empty result and "try broadening your search" guidance — not an error — for what is actually an input mistake.…
Read the thread · 2026-09-09 · closed · 1 comment
bug(search_studies): exhausted pages report an empty cohort
Server version
2.9.4
mcp-ts-core version
0.12.8
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
An empty continuation page says No studies matched the search criteria. even after earlier pages returned matching studies. The response omits the incoming cursor or an exhaustion notice, so it misstates pagination completion as a failed search.
Related: #98 (the first-page false-cursor suppression remains fixed).
Steps to…
Read the thread · 2026-09-09 · closed · 1 comment
bug(search_studies): rendered prefixes hide explicitly selected fields
Server version
2.9.3
mcp-ts-core version
0.12.5
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
Explicit field selection still loses data from content[]: SEARCH_RENDERED excludes three whole subtrees (enrollmentInfo, leadSponsor, locations) from the field-dump fallback, but the dedicated renderers that are supposed to cover those subtrees only emit some of their leaves. Every leaf under an excluded prefix that the…
Read the thread · 2026-09-09 · closed · 1 comment
bug(find_eligible): multiword locations silently miss matching trials
Server version
2.9.4
mcp-ts-core version
0.12.8
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
clinicaltrials_find_eligible joins location components into a comma-separated free-text query without quoting each component. Multiword locations can then fail to match a study that explicitly lists the requested site.
The same unquoted, comma-joined string is used for all three consumers in the handler — the main search's…
Read the thread · 2026-09-09 · closed · 1 comment
bug(search): OR advanced filters bypass phaseFilter
Server version
2.9.4
mcp-ts-core version
0.12.8
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
Combining phaseFilter with an advancedFilter expression that carries a top-level OR (or any operator looser than AND) changes the intended cohort. buildAdvancedFilter() (src/mcp-server/tools/utils/query-helpers.ts) joins the phase clause and the caller's advancedFilter with AND but never groups the caller's operand:…
Read the thread · 2026-09-09 · closed · 1 comment
bug(get_study_results): NA medians become false not-reached results
Server version
2.9.3
mcp-ts-core version
0.12.5
Runtime
Bun
Runtime version
1.4.0
Transport
HTTP (Streamable HTTP)
Description
displayMeasurementValue() interprets every NA/NR measurement with paramType: MEDIAN as not reached. A median can be unavailable or inapplicable for reasons unrelated to follow-up duration. Summary mode also discards the measurement comment that explains the missing value.
Related: #76 (retaining missing-value arms was…
Read the thread · 2026-09-09 · closed · 1 comment
The remaining reports are on the project's issue tracker.