# 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](/mcp/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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/49) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/132) · 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** (`nctIds` and…

[Read the thread](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/130) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/125) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/121) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/119) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/128) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/127) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/126) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/124) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/123) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/122) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/120) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/118) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/117) · 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](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues/116) · 2026-09-09 · closed · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/clinicaltrialsgov-mcp-server/issues).
