# Reported issues for met-museum-mcp-server

Pod holds 10 of 10 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 [met-museum-mcp-server](/mcp/met-museum-mcp-server).

## Most discussed

### bug(met_search_collections): search filters return objects that do not match the query

### Server version

0.5.0

### mcp-ts-core version

0.12.8

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

Adding any filter to `met_search_collections` makes the upstream Met Search index return a fixed set of objects that do not match `q`. The filtered result set is the union of the genuine keyword matches and that query-independent floor, not a subset of the same search run unfiltered. A query that matches nothing still comes back as…

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

### feat(met_search_collections): name isPublicDomain in the no_results recovery when it zeroed the query

### Use case

When `met_search_collections` returns `no_results` because `isPublicDomain: true` zeroed out an otherwise-matching query, the generic recovery hint ("broaden the query, remove filters…") doesn't name the filter responsible, so callers retry with different keywords against the same filter set and fail identically.

Related: #12

### Proposed behavior

When the `no_results` throw fires and `input.isPublicDomain === true`, override the recovery hint at the `ctx.fail('no_results', …)`…

[Read the thread](https://github.com/cyanheads/met-museum-mcp-server/issues/20) · 2026-08-21 · closed · 1 comment

### bug(met_get_object): nullable tag URLs fail output validation

### Server version

0.3.0

### mcp-ts-core version

0.12.8

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### OS

Linux (containerized)

### Description

`met_get_object` passes tag URLs through from the Collection API, but the upstream fields can be null while `RawTag`, `ObjectRecord`, and `TagSchema` require strings. A single sparse tag therefore invalidates the entire object response after the batch fetch succeeds.

`normalizeObject` in…

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

### feat(format): escape upstream text in Markdown output

### Use case

Met catalog text is interpolated directly into Markdown headings, bold labels, and link-adjacent text in `content[]`. Real titles already contain complete Markdown sequences — object `288322`'s title (confirmed live) is `[Group of 122 Stereograph Views of Egypt, the Holy Lands, and the Middle East, Including Palestine and Jerusalem]`, and this is not a one-off: the Met's cataloging convention wraps a cataloger-supplied (non-artist) title in square brackets for anonymous photograph…

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

### bug(met_search_collections): distinguish exhausted offset pages

### Server version

0.2.6

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### Description

An offset at or beyond `total` intentionally returns an empty page rather than an error (decided in #9, encoded in `tests/services/met/met-service.test.ts` — "an offset at or beyond total returns an empty page, not an error"). This issue is about the response giving no way to tell that case apart from a genuine final page:…

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

### feat(met_get_object): expose research-grade geography and measurements

### Use case

`met_search_collections.geoLocation` searches across place data, but `met_get_object` returns only the top-level `country` and `region` fields. A catalog researcher can find a work by city, state, excavation, or locus and then lose the field that explained the match. Quantitative comparison has the same gap: the detail tool returns a formatted `dimensions` string but drops the Met's structured measurements and units.

Related: #15

Live sampling across three departments (n=8:…

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

### bug(met_get_object): bound full-record batch output

### Server version

0.2.5

### mcp-ts-core version

0.10.14

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### Description

`met_get_object` accepts up to 20 object IDs per call and returns every field, image URL, tag, and constituent for each one — there is no compact view, field selection, overflow signal, or retrieval contract. The per-record cost is not driven by object count but by three unbounded upstream arrays: `constituents`, `tags`, and…

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

### bug(met_get_object): unknown dates render as year zero

### Server version

0.3.0

### mcp-ts-core version

0.12.8

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### Description

The Met's Collection API uses `0`/`0` for `objectBeginDate`/`objectEndDate` when a work's machine-readable date is unavailable — a convention the Met's own [API reference](https://metmuseum.github.io/) does not document: both fields are listed as plain machine-readable years (examples `1867`, `1100`, `-900`) with no reserved value…

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

## Most recent

### bug(met_search_collections): reject blank search inputs

### Server version

0.2.6

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### Description

`met_search_collections` accepts several blank optional-filter shapes without rejecting them, and forwards a whitespace-only `q` straight to the upstream API instead of failing input validation. Two of the four cases are silently dropped and quietly widen the search to an unfiltered query; one is silently accepted and forwarded…

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

### bug(met_search_collections): isPublicDomain=false and isHighlight=false return non-matching objects

### Server version

0.2.6

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### Description

`met_search_collections` exposes `isPublicDomain` and `isHighlight` as ordinary two-valued booleans, but the Met Search API's index is only reliable for the `true` arm of each. `isPublicDomain: false` and `isHighlight: false` both match objects that upstream's own object record contradicts — the server passes the caller's declared…

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

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