# Reported issues for openfda-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 [openfda-mcp-server](/mcp/openfda-mcp-server).

## Most discussed

### feat(drug_profile): accept drug_name as an alias of drug

### Use case

`openfda_drug_profile` takes the drug as `drug`. A caller that sends `{ "drug_name": "aspirin" }` gets `-32602` (`drug: expected string, received undefined, Unrecognized key: "drug_name"`). `drug_name` is the name a model reaches for first, its meaning is not in doubt, and the tool has only the one parameter it could map to.

### Proposed behavior

Accept `drug_name` (and `name`) as aliases of `drug`, so the call succeeds instead of costing a retry. The advertised schema keeps…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/53) · 2026-09-18 · closed · 2 comments

### bug(count_values): uncountable fields lead to a suffix-toggle recovery loop

### Server version

0.7.7

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

Some advertised fields cannot be aggregated by `openfda_count_values` in either bare or `.exact` form. The bare field answers a 5xx `illegal_argument_exception`, and `.exact` answers `404 Nothing to count`. Each `not_aggregatable` message suggests the other form, then falls back to `openfda_describe_fields`. That tool lists these…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/49) · 2026-08-11 · closed · 2 comments

### bug(get_drug_label): selected table sections return raw SPL markup

### Server version

0.7.8

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`openfda_get_drug_label` writes SPL `*_table` sections into `content[]` as raw SPL table markup with encoded entities. `format()` joins every section value verbatim, so a caller that selects a table section (or follows an outline that recommends one) must parse `<table>`, `<content styleCode>`, `colspan`/`rowspan`, and `&#x2020;`…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/45) · 2026-08-11 · closed · 2 comments

### bug(search_recalls): staged device/recall rows drop identity and status columns

### Server version

0.7.8

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`openfda_search_recalls` with `stage: true` stages rows against `RECALLS_CANVAS_SCHEMA`, which lists only enforcement fields. The canvas ignores fields outside the schema, so staged `device/recall` rows lose their identity (`product_res_number`), status (`recall_status`), `root_cause_description`, and `event_date_*` columns. SQL…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/59) · 2026-09-22 · closed · 1 comment

### bug(count_values): "Nothing to count" on a countable field reports not_aggregatable

### Server version

0.7.7

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

`openfda_count_values` reports `not_aggregatable` for a countable field when the search matches only records that lack the field. openFDA answers that case with `404 Nothing to count`, which `classifyError` maps to `not_aggregatable` with a "drop .exact" correction. The field counts fine; the matched set simply carries no values for it, so the…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/57) · 2026-09-22 · closed · 1 comment

### bug(canvas): staging search tools don't declare canvas_not_found or canvas_capacity_exhausted

### Server version

0.7.5

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

The eight search tools that stage to DataCanvas (`openfda_search_*`, `openfda_lookup_ndc`) accept a `canvas_id`, but their `errors[]` contracts omit the two failures `canvas.acquire()` raises: `canvas_not_found` (a well-formed id that expired or never existed) and `canvas_capacity_exhausted` (minting a canvas at the tenant cap). Both reach the…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/54) · 2026-09-22 · closed · 1 comment

### feat(canvas): staged responses never name openfda_dataframe_describe

### Use case

Every openFDA search tool that stages to a DataCanvas hands back a `canvas_id` pointing only at `openfda_dataframe_query` — `openfda_dataframe_describe` is never named, in the enrichment notice, `content[]`, the output-field descriptions, or any tool's own `description`. An agent holding the handle has the table name but no route to the column names, so it writes SQL against a schema it hasn't seen — a field the inline preview renders out of a JSON block…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/50) · 2026-08-13 · closed · 1 comment

### bug(pagination): exhausted pages reset known totals to zero

### Server version

0.7.7

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

A search page requested past the end of its result set returns `totalResults: 0`. openFDA answers any `skip` at or beyond the match count with the same `404 No matches found!` it uses for a zero-match query, and `OpenFdaService.classifyError` turns that 404 into `meta.total: 0` without recovering the real total. The response then…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/47) · 2026-08-11 · closed · 1 comment

## Most recent

### feat(search_recalls): retain affected-lot codes in enforcement staging

### Use case

A pharmacist analyzing staged drug recalls needs to identify affected lots and expiry dates. Enforcement records return `code_info`, but the staged table discards it, so that step cannot be completed through SQL.

### Proposed behavior

Add nullable `code_info` to the enforcement staging schema in `openfda_search_recalls` and expose it through `openfda_dataframe_describe`.

Example: stage `{"category":"drug","search":"openfda.generic_name:\"METFORMIN HYDROCHLORIDE\"","limit":2}`.…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/69) · 2026-09-30 · open · 0 comments

### feat(search): bounded retrieval for oversized single records

### Use case

An exploratory `openfda_search_adverse_events` call can return a single 100 KB record even with `limit:1`. Reducing the page size cannot help a client that needs a bounded view of that report.

Related: #39

### Proposed behavior

Add selective record-field retrieval or an outline for an oversized single record, retaining its identity and a concrete re-call route. Keep both response surfaces aligned and never render a real match as an empty page. Always disclose an over-budget…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/66) · 2026-09-30 · open · 0 comments

### bug(search_animal_events): masked brands break the advertised search

### Server version

0.7.9

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

`openfda_search_animal_events` advertises `drug.brand_name:"Bravecto"`, but the provider masks veterinary brands as `MSK`. Empty-result recovery recommends the same masked field and does not explain the limitation.

### Steps to reproduce

1. Search `animal.species:"Dog" AND drug.brand_name:"Bravecto"`: zero reports.
2. Count…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/65) · 2026-09-30 · open · 0 comments

### bug(sort): unsupported directions silently return unsorted results

### Server version

0.7.9

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

The shared sort pattern accepts unsupported directions. openFDA returns success while ignoring the requested ordering; HTTP 200 does not establish that sorting worked.

Related: #38

### Steps to reproduce

Call `openfda_search_recalls` with:

```json
{"category":"drug","search":"openfda.generic_name:\"METFORMIN…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/64) · 2026-09-30 · open · 0 comments

### bug(drug_profile): total excludes reports without seriousness

### Server version

0.7.9

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

`openfda_drug_profile` computes `adverse_events.total` by summing `serious` count buckets, silently excluding reports without that field.

### Steps to reproduce

1. Call `openfda_drug_profile` with `{"drug":"metformin"}`.
2. Search adverse events with…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/63) · 2026-09-30 · open · 0 comments

### bug(field-catalog): correct outcome codes and date/identifier meanings

### Server version

0.7.9

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

`openfda_describe_fields` supplies incorrect field meanings that can misdirect queries and interpretation.

### Steps to reproduce

Call the tool for `drug/event`, `drug/shortages`, and `drug/ndc`.

### Actual behavior

- `patient.reaction.reactionoutcome`: `4=fatal, 5=unknown`; code 6 is omitted.
- Shortage date notes say YYYYMMDD,…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/62) · 2026-09-30 · open · 0 comments

### bug(search_recalls): device recalls render enforcement fields as N/A

### Server version

0.7.3

### mcp-ts-core version

0.11.1

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### Description

`openfda_search_recalls` formats `device/recall` records with `device/enforcement`'s field names. `device/recall` has no `recall_number`, `status`, `voluntary_mandated`, or hazard-classification field — identity is `product_res_number`, status is `recall_status`, and `openfda.device_class` is a distinct device-class rating, not…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/46) · 2026-08-11 · closed · 1 comment

### bug(count_values): exact-limit result sets report false truncation

### Server version

0.7.7

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`openfda_count_values` marks every response whose row count equals `limit` as truncated, even when the result set is exhaustive. A binary field then claims that more distinct values may exist when both values are already present.

Related: #7

### Steps to reproduce

1. Call `openfda_count_values` with `{ "endpoint": "drug/event",…

[Read the thread](https://github.com/cyanheads/openfda-mcp-server/issues/44) · 2026-08-11 · closed · 1 comment

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