Releases: cyanheads/met-museum-mcp-server
Release list
v0.2.5: content[] field completeness and tightened tool descriptions
content[] field completeness and tightened tool descriptions
Every met_get_object and met_search_collections output field now renders in content[]; all three tools moved to descriptive voice.
Changed:
- Tool and field descriptions across all three tools moved to descriptive voice — dropped imperative coaching and internal mechanics (#8).
- Corrected stale claims: met_list_departments "fetched live on each call" and docs/design.md "no pagination on search results".
Fixed:
- met_get_object format() renders every field with an em-dash placeholder for empty/null/false values, and "Failed fetches: none" for an empty batch (#10).
- met_search_collections marks a non-truncated page (complete).
35 tests pass; bun run devcheck clean.
v0.2.4: met_search_collections pagination, validation, and fail-fast timeout
met_search_collections pagination, validation, and fail-fast timeout
Offset paging and departmentId validation land alongside two bug fixes for the same tool.
Added:
offsetpagination —nextOffset/remainingoutputs; each page re-runs the upstream search and slices locally (#9)departmentIdvalidation — unrecognized IDs throwinvalid_department, pointing tomet_list_departments(#7)
Fixed:
invalid_date_rangenow carries the recovery hint on both throw sites (#6)- Broad
met_search_collectionsqueries fail fast withsearch_timeout(~10s) instead of retrying a deterministic timeout to exhaustion (~48s) (#11)
34 tests pass; bun run devcheck clean.
v0.2.3: met_get_object order fix, mcp-ts-core ^0.10.14 maintenance
met_get_object order fix, mcp-ts-core ^0.10.14 maintenance
Batch results now preserve request order; adopts the framework's Socket install scanner and a release-age hold.
Fixed:
met_get_object(#5):objects[]/failed[]preserve the caller'sobjectIDsorder — an index-addressed cursor replaces the completion-ordered push into a shared array.
Changed:
- Supply-chain hardening: Socket install scanner (
bunfig.toml[install.security]) and a 3-dayminimumReleaseAgehold on new package versions, excluding@cyanheads/mcp-ts-core. - TypeScript 6 (
^5.9.3→^6.0.3). - Docker:
oven/bun:1.3.14pin, BuildKit cache mounts,--ignore-scriptson the build-stage install. - New
.github/SECURITY.md,.gitattributes,.github/FUNDING.yml.
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.9 → ^0.10.14typescript^5.9.3 → ^6.0.3@biomejs/biome^2.5.0 → ^2.5.3@types/node^26.0.0 → ^26.1.1ignore^7.0.5 → ^7.0.6tsc-alias^1.8.17 → ^1.9.1vitest^4.1.9 → ^4.1.10
19 tests pass; bun run devcheck clean.
v0.2.2: mcp-ts-core ^0.10.9 maintenance
mcp-ts-core ^0.10.9 maintenance
Framework-only refresh — no source or behavior changes.
Changed:
- Vendored devcheck scripts re-synced to mcp-ts-core 0.10.7: fresh-scaffold guards on build-changelog/check-framework-antipatterns/check-skill-versions/devcheck; new check-dependency-specifiers step; plugin-manifest checks in lint-packaging (cyanheads/mcp-ts-core#237, #240, #242, #243, #246)
- devcheck.config.json: packaging.pluginManifests: true (cyanheads/mcp-ts-core#240)
- 14 vendored skills//SKILL.md re-synced to their 0.10.7 bodies, incl. git-wrapup v1.4 and orchestrations v1.4 (cyanheads/mcp-ts-core#238)
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9@biomejs/biome^2.4.16 → ^2.5.0 (dev)@types/node^25.9.3 → ^26.0.0 (dev)vitest^4.1.8 → ^4.1.9 (dev)
17 tests pass; bun run devcheck clean.
v0.2.1: mcp-ts-core ^0.10.6 adoption
mcp-ts-core ^0.10.6 adoption
Maintenance release: framework upgrade, dependency refresh, and synced vendored skills, plus a few framework-driven follow-ons.
Changed:
- invalid_date_range on met_search_collections now classifies as ValidationError (was InvalidParams)
- bundle script cleans dev deps and vendored agent docs from the .mcpb via scripts/clean-mcpb.ts
Added:
- explicit name/title (met-museum-mcp-server) on createApp for stable display identity
- Docker HEALTHCHECK on /healthz and org.opencontainers.image.version OCI label
Dependency bumps:
- @cyanheads/mcp-ts-core ^0.9.19 → ^0.10.6
- @biomejs/biome ^2.4.7 → ^2.4.16 (dev)
- @types/node ^25.9.2 → ^25.9.3 (dev)
- tsc-alias ^1.8.16 → ^1.8.17 (dev)
17 tests pass; bun run devcheck clean.
v0.2.0: rename met_search → met_search_collections; add isOnView filter
rename met_search → met_search_collections; add isOnView filter
BREAKING: met_search renamed to met_search_collections. Replace met_search with met_search_collections in all tool call sites.
Added:
- met_search_collections gains optional isOnView boolean filter — restricts results to objects currently on display in a Met gallery (#3). Rembrandt: 1096→117 results.
Changed:
- met_search renamed to met_search_collections (#4). Clients calling met_search must update. No change to inputs, outputs, or behavior.
Dependency bumps:
- @types/node 25.9.1 → 25.9.2
17 tests pass; bun run devcheck clean.
v0.1.3: BREAKING: hasImages → hasCC0Image rename; all_not_found error
BREAKING: hasImages → hasCC0Image rename; all_not_found error
BREAKING: met_get_object renames the hasImages output field to hasCC0Image. Consumers reading result.objects[].hasImages must update to result.objects[].hasCC0Image. Value semantics are unchanged — true when a CC0 open-access image URL is available.
Changed:
hasImages→hasCC0Imageonmet_get_objectoutput (#1) — clarifies the field signals a CC0 image, distinct frommet_search'shasImagesfilter (which matches copyrighted works too)
Added:
all_not_founderror onmet_get_object(#2) — fires when every objectID returns HTTP 404, with recovery hint to verify IDs viamet_search; previously all-failure paths threwall_failedregardless of causekinddiscriminator on internalFailItemtype for 404-vs-network classification
16 tests pass; bun run devcheck clean.
v0.1.2: Hosted endpoint at met-museum.caseyjhand.com/mcp
Hosted endpoint at met-museum.caseyjhand.com/mcp
Public Streamable HTTP endpoint deployed and registered in server.json remotes.
Added:
server.jsonremotes —https://met-museum.caseyjhand.com/mcp(Streamable HTTP); MCP Registry now surfaces the hosted instance.- README hosted-server link block and Public Hosted Instance Getting Started subsection.
Changed:
devcheck.config.jsonoutdated allowlist —@cyanheads/mcp-ts-coreheld at^0.9.19.- README
mcpServerskey renamed from"met-museum"to"met-museum-mcp-server"in config examples.
14 tests pass; bun run devcheck clean.
v0.1.1: Public launch — Met Museum collection search, object fetch, and department listing
Public launch — Met Museum collection search, object fetch, and department listing
MCP server for browsing and fetching Metropolitan Museum of Art collection data (500K+ artworks) with no API key required.
Added:
- met_search — keyword search with filters: hasImages, isPublicDomain, isHighlight, medium, departmentId, geoLocation, dateBegin/dateEnd
- met_get_object — batch fetch full artwork records (title, artist, dates, medium, dimensions, provenance, image URLs) for up to 20 IDs per call
- met_list_departments — return all 19 curatorial departments with numeric IDs for met_search departmentId filters
- README — install badges (Claude Desktop .mcpb, Cursor, VS Code), tool reference table, usage examples
Changed:
- server.json runtimeHint corrected from 'node' to 'bun' on both package entries
- server.json name updated to reverse-DNS format io.github.cyanheads/met-museum-mcp-server
- Collection count updated to 500K+ across all descriptive text
Fixed:
- ctx.recoveryFor() spread pattern removed; argument passed directly as the API expects
- Optional filter fields no longer double-wrapped with ?? undefined in met_search
- Duplicate isTimelineWork_duplicate field removed from RawObjectRecord
14 tests pass; bun run devcheck clean.