Pod

Available as Markdown and JSON. Pod is also available over MCP.

Reported issues for cdc-health-mcp-server

Pod holds 18 of 18 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 cdc-health-mcp-server.

Most discussed

bug(cdc_query_wonder): relational input errors bypass consistent recovery

Server version

0.9.1

mcp-ts-core version

0.13.6

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

OS

macOS 26.1

Description

Three errors that can be caught from the input alone slip past cdc_query_wonder's declared invalid_query contract:

Read the thread · 2026-08-11 · closed · 3 comments

bug(cdc_query_wonder): caveat and message links lose their destinations

Server version

0.9.1

mcp-ts-core version

0.13.6

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

OS

macOS 27.0

Description

CDC WONDER caveats and messages end in a "More information." link to the methodology behind them. cleanText() in xml-parser.ts strips every tag before decoding, so the anchor text survives and the href is gone from both structuredContent and content[]. On a D158 response, 7 of 8 caveats and the "Totals…

Read the thread · 2026-08-11 · closed · 3 comments

feat(cdc_get_dataset_schema): make wide schemas selectively retrievable

Use case

A caller needs the schema to construct a SoQL query, but some CDC datasets expose hundreds of columns. cdc_get_dataset_schema and cdc://datasets/{datasetId} currently return every column and description in one response, with no selector or continuation path.

For ua7e-t2fy (Weekly Hospital Respiratory Data), the live schema holds 322 columns. Replaying the tool's own transform against that live payload measures ≈104,214 bytes of structuredContent and ≈92,650 bytes of…

Read the thread · 2026-08-11 · closed · 3 comments

bug(cdc_query_dataset): an offset past the end reads as a filter or spelling problem

Server version

0.9.0

mcp-ts-core version

0.13.6

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

An empty page at offset > 0 gets the same notice as a query that matched nothing: check spelling, check filter types, broaden the WHERE clause. format() renders the same suggestions into content[]. A caller who paged past the end of a real result set is sent after a filter problem that does not exist. The SODA data endpoint…

Read the thread · 2026-09-20 · closed · 2 comments

feat(cdc_query_wonder): age_groups cannot select the Not Stated group WONDER returns

age_groups on cdc_query_wonder exposes the eleven ten-year groups (1 … 85+) but omits NS (Not Stated), the twelfth value the ten-year-age variable accepts. Deaths whose age was not recorded therefore cannot be included in a filtered query, and there is no way to ask for them on their own.

The value is present on every mortality database the tool reaches — the .V5 option list is identical across all five:

*All*, 1, 1-4, 5-14, 15-24, 25-34, 35-44, 45-54, 55-64, 65-74, 75-84,…

[Read the thread](https://github.com/cyanheads/cdc-health-mcp-server/issues/35) · 2026-08-09 · closed · 2 comments

### bug(cdc_get_dataset_schema): unescaped column descriptions break the formatted table

### Server version

0.8.0

### mcp-ts-core version

0.10.14

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

The `format()` in `src/mcp-server/tools/definitions/get-dataset-schema.tool.ts` interpolates `col.description` straight into a markdown table cell. Socrata column descriptions carry raw newlines and can carry pipes, so a single such column terminates its table row and everything after it renders as loose text.…

[Read the thread](https://github.com/cyanheads/cdc-health-mcp-server/issues/24) · 2026-08-09 · closed · 2 comments

### bug(cdc_query_dataset): the 200,000-char budget bounds rows once, but the response serializes them twice

### Server version

0.9.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`MAX_ROW_CHARS = 200_000` is charged `JSON.stringify(row)` once, but every row reaches the caller twice: as JSON in `structuredContent` and as a line of the markdown table in `content[]`. The delivered response is roughly 1.5× the documented budget. Truncation disclosure (`truncated`/`shown`/`cap`/`nextOffset`) is correct; the…

[Read the thread](https://github.com/cyanheads/cdc-health-mcp-server/issues/53) · 2026-09-20 · closed · 1 comment

### bug(cdc_discover_datasets): HTML markup consumes the truncated description budget

### Server version

0.8.7

### mcp-ts-core version

0.13.2

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 27.0

### Description

Catalog descriptions arrive as raw HTML and reach both output surfaces untouched. Discovery truncates to 300 characters before the markup is removed, so on a description that opens with a styled block the whole budget goes to tags and inline CSS and the ellipsis lands before the first word about the dataset.…

[Read the thread](https://github.com/cyanheads/cdc-health-mcp-server/issues/51) · 2026-09-20 · closed · 1 comment

## Most recent

### bug(format): literal HTML and Markdown in query values render as markup

### Server version

0.9.2

### mcp-ts-core version

0.13.6

### Runtime

Node.js

### Runtime version

26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

`escapeTableCell` escapes pipes and collapses newlines, but leaves HTML and Markdown syntax active. Literal values survive in `structuredContent` while the rendered surface changes their meaning.

Related: #24

### Steps to reproduce

Call `cdc_query_dataset` with:
```json
{"datasetId":"bi63-dtpu","select":"'<b>literal</b>…

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

### bug(inputs): empty query filters silently become unrestricted requests

### Server version

0.9.2

### mcp-ts-core version

0.13.6

### Runtime

Node.js

### Runtime version

26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Explicit empty query clauses and age lists are accepted, discarded, and returned as successful unrestricted requests. Omission and a supplied empty filter should not silently mean the same thing.

### Steps to reproduce

```json
{"name":"cdc_query_dataset","arguments":{"datasetId":"bi63-dtpu","where":"","select":"","limit":1}}…

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

### bug(cdc_list_catalog_vocabulary): later pages misstate omitted-tag ceiling

### Server version

0.9.2

### mcp-ts-core version

0.13.6

### Runtime

Node.js

### Runtime version

26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

`truncationCeiling` claims to bound every tag not returned, but later pages omit earlier, higher-count tags too.

Related: #50

### Steps to reproduce

1. Call `cdc_list_catalog_vocabulary` with `{"tag_limit":1}`.
2. Call again with `{"tag_limit":1,"tag_offset":50}`.

### Actual behavior

The first page contains `nndss` with 294…

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

### bug(cdc_query_wonder): exhausted pages falsely say no rows matched

### Server version

0.9.2

### mcp-ts-core version

0.13.6

### Runtime

Node.js

### Runtime version

26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

An exhausted page has correct structured guidance but contradictory `content[]`: the main block says no rows matched and recommends broader filters.

Related: #54

### Steps to reproduce

Call `cdc_query_wonder` with:
```json
{"year_range":{"from":2020,"to":2020},"offset":1}

Actual behavior

rowCount: 0, `totalCount:…

Read the thread · 2026-09-30 · open · 0 comments

bug(cdc_query_wonder): advertised Not Stated age combinations fail

Server version

0.9.2

mcp-ts-core version

0.13.6

Runtime

Node.js

Runtime version

26.5.0

Transport

HTTP (Streamable HTTP)

Description

The age_groups input promises a union of listed ages without declaring that NS cannot join a partial known-age selection. CDC documents this restriction; the tool accepts the combination and spends a request that fails.

Related: #35

Steps to reproduce

Call…

Read the thread · 2026-09-30 · open · 0 comments

feat(cdc_query_wonder): bound the response the way cdc_query_dataset does

Use case

limit on cdc_query_wonder has no default, so the whole parsed table comes back. A four-dimension grouping on the default database returns 2,014 rows in one ~480 KB response, enough to swamp a caller's context. The description advises setting limit, but nothing enforces it.

Related: #39

group_by (D76, all years, no limit) rows structuredContent content[] wire
["year","age_group","sex","race"] 2,014 295,952 chars 181,694…

Read the thread · 2026-09-20 · closed · 1 comment

feat(cdc_query_wonder): accept multiple ICD-10 codes in cause_icd10 and mcd_icd10

Use case

Standard cause-of-death definitions are sets of ICD-10 codes. CDC defines drug overdose as X40–X44, X60–X64, X85 and Y10–Y14, the wording WONDER's own caveats use on a 2018–2024 result. cause_icd10 and mcd_icd10 take one value, and WONDER accepts only nodes of its ICD-10 tree: a chapter (V01-Y89), a block (X40-X49), or a code (X40). An arbitrary span like X40-X44 is rejected (Invalid 'ICD-10 Codes' codes were found: 'X40-X44'), so the overdose definition cannot be…

Read the thread · 2026-09-20 · closed · 1 comment

bug(cdc_query_wonder): concurrent calls race the request-spacing gate and one is rate-limited

Server version

0.9.1

mcp-ts-core version

0.13.6

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

OS

macOS 27.0

Description

WonderService.throttle() computes its wait from lastRequestTime, and query() only stamps that value in its finally, after the response. Calls that enter together read the same stamp. On a cold service they all send immediately. On a warm one they all wait the same amount and then send in the same…

Read the thread · 2026-09-20 · closed · 1 comment

bug(cdc_get_dataset_schema): rowCount is a stale cached figure, not the dataset's row count

Server version

0.8.7

mcp-ts-core version

0.13.2

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

OS

macOS 27.0

Description

rowCount is read from cachedContents.count on the first column of the metadata response. Socrata builds that cache once and does not refresh it as rows land, so on actively-updated datasets it understates the real count badly. The field is advertised as "Total number of rows when reported by upstream" with…

Read the thread · 2026-09-20 · closed · 1 comment

bug(cdc_query_dataset): chart and map assets return empty rows as a paginated success

Server version

0.8.7

mcp-ts-core version

0.13.2

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

OS

macOS 27.0

Description

cdc_query_dataset treats a chart or map catalog ID as a queryable dataset. Socrata answers /resource/{id}.json for those assets with HTTP 200 and a body of empty objects, so the handler reports a successful page of rows carrying no fields, plus an invitation to keep paging.

The row shape alone can't…

Read the thread · 2026-09-20 · closed · 1 comment

The remaining reports are on the project's issue tracker.