Search the Met collection, browse by department or update date, fetch full records and CC0 images.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Fetch full records for one or more Met Museum object IDs. Fetches up to 20 distinct IDs per call; a list of up to 500 (a full search or list page) is accepted, and the distinct IDs past the first 20 come back unrequested in remainingIDs for a follow-up call. Returns partial success — a single 404 does not fail the whole batch; per-ID failures are reported separately. Object IDs come from met_search_collections (keyword search) or met_list_objects (browse by department or update date). Non-public-domain objects return empty image URLs. The constituents array is null for anonymous or unattributed works; tags and measurements are null when the Met records none. Records are returned whole and never truncated, so a batch of unusually large records may return fewer than requested — any that did not fit are listed in deferred[] with their sizes, to be re-requested in a follow-up call. Set includeImages to also receive the CC0 images of up to 3 returned records as image content a vision-capable model can look at.
One or more Met object IDs to fetch, up to 500 — a full met_search_collections or met_list_objects page. A repeated ID is fetched and returned once, at its first position. The first 20 distinct IDs are fetched; the rest come back unrequested in remainingIDs. Partial failures are reported per ID rather than failing the whole batch.
Also attach the web-display image (primaryImageSmall, about 600 px on the long edge) of the first 3 returned records that have hasCC0Image true, in request order, as image blocks in content[], each after a caption naming its objectID. images[] reports what happened for every returned record. The image bytes ride content[] only, so a client that hands the model only structuredContent will not show the images. Default false: no image is fetched.
Fetch full records for one or more Met Museum object IDs. Fetches up to 20 distinct IDs per call; a list of up to 500 (a full search or list page) is accepted, and the distinct IDs past the first 20 come back unrequested in remainingIDs for a follow-up call. Returns partial success — a single 404 does not fail the whole batch; per-ID failures are reported separately. Object IDs come from met_search_collections (keyword search) or met_list_objects (browse by department or update date). Non-public-domain objects return empty image URLs. The constituents array is null for anonymous or unattributed works; tags and measurements are null when the Met records none. Records are returned whole and never truncated, so a batch of unusually large records may return fewer than requested — any that did not fit are listed in deferred[] with their sizes, to be re-requested in a follow-up call. Set includeImages to also receive the CC0 images of up to 3 returned records as image content a vision-capable model can look at.
| Argument | Type | Description |
|---|---|---|
| objectIDs* | array | One or more Met object IDs to fetch, up to 500 — a full met_search_collections or met_list_objects page. A repeated ID is fetched and returned once, at its first position. The first 20 distinct IDs are fetched; the rest come back unrequested in remainingIDs. Partial failures are reported per ID rather than failing the whole batch. |
| includeImages | boolean | Also attach the web-display image (primaryImageSmall, about 600 px on the long edge) of the first 3 returned records that have hasCC0Image true, in request order, as image blocks in content[], each after a caption naming its objectID. images[] reports what happened for every returned record. The image bytes ride content[] only, so a client that hands the model only structuredContent will not show the images. Default false: no image is fetched. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"objectIDs"
],
"properties": {
"objectIDs": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"description": "A Met object ID from met_search_collections or met_list_objects.",
"exclusiveMinimum": 0
},
"maxItems": 500,
"minItems": 1,
"description": "One or more Met object IDs to fetch, up to 500 — a full met_search_collections or met_list_objects page. A repeated ID is fetched and returned once, at its first position. The first 20 distinct IDs are fetched; the rest come back unrequested in remainingIDs. Partial failures are reported per ID rather than failing the whole batch."
},
"includeImages": {
"type": "boolean",
"default": false,
"description": "Also attach the web-display image (primaryImageSmall, about 600 px on the long edge) of the first 3 returned records that have hasCC0Image true, in request order, as image blocks in content[], each after a caption naming its objectID. images[] reports what happened for every returned record. The image bytes ride content[] only, so a client that hands the model only structuredContent will not show the images. Default false: no image is fetched."
}
},
"additionalProperties": false
}Return the 19 curatorial departments at The Metropolitan Museum of Art, each with its numeric departmentId and display name — the valid values for the departmentId filter on met_search_collections and met_list_objects.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}Browse the Metropolitan Museum of Art collection without a keyword: every object ID in one curatorial department, every object whose record was created or revised on or after a date, or both together. Returns the total count and one page of IDs in ascending order, which met_get_object resolves to full records. With no filter the list is the whole collection (over 500,000 IDs). departmentId takes an ID from met_list_departments; updatedSince takes a YYYY-MM-DD date and answers "what has the Met added or revised since this day". Paging has no depth limit — pass nextOffset to continue. For keyword, classification, place, or object-date filters use met_search_collections instead. A list is cached for up to an hour, so a record revised within the last hour may not appear yet.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of object IDs to return in this page. A page holds at most 500 IDs: a larger value, up to 10,000, reads a 500-ID page and the notice says so — continue from nextOffset. |
| offset | integer | Zero-based index of the first ID to return (default 0); pass the nextOffset from a previous response to continue paging. IDs are in ascending order and every one is reachable; an offset at or past total returns an empty page rather than an error. |
| departmentId | integer | Restrict the list to one curatorial department. Valid IDs come from met_list_departments — the Met exposes a sparse set (roughly 1–21, with gaps); an unrecognized ID is rejected with an invalid_department error rather than answered with an empty list. |
| updatedSince | string | List only objects whose record was created or revised on or after this date, the day itself included, as YYYY-MM-DD (e.g., "2026-09-01") — no time part and no other date format. It compares the UTC date of each record's metadataDate, which met_get_object returns. A date later than the newest update returns an empty list, not an error. |
Search the Metropolitan Museum of Art collection by keyword and optional filters. Returns the total match count and one page of matching object IDs, which met_get_object resolves to full records. Relevance is keyword-based, not semantic; department and geographic filters narrow results more than a longer query. Paging reaches only the first 10,000 matches of any search, so narrow a larger one with filters. The medium parameter takes an object classification as the Met spells it ("Paintings", "Sculpture"), not a material like "Oil on canvas". hasImages also includes copyrighted works; CC0 status is per object, from the isPublicDomain and hasCC0Image fields on met_get_object. isHighlight accepts true only. isOnView restricts results to works currently on display in a Met gallery.
| Argument | Type | Description |
|---|---|---|
| q* | string | Keyword query, matched across title, artist name, culture, medium, tags, and other text fields; matchField narrows the match to titles or tags. Broad terms return large ID sets. "*" matches every object, for a search narrowed by filters alone; paging still reaches only the first 10,000 matches. An accession number (e.g., "29.100.5") ranks its object first, with near-numbered objects after it — confirm the match from accessionNumber on met_get_object. |
| limit | integer | Maximum number of object IDs to return in this page. A page holds at most 500 IDs, the Met search maximum: a larger value, up to 10,000, reads a 500-ID page and the notice says so — continue from nextOffset. Paging reaches only the first 10,000 matches, so a page that would cross 10,000 is cut short there. |
| medium | string | Filter by object classification, case-sensitive and spelled as the Met spells it (e.g., "Paintings", "Drawings", "Prints", "Ceramics", "Sculpture", "Photographs", "Textiles") — "paintings" or "Painting" matches nothing. Maps to the classification field on the object, not the materials text, so a material description like "Oil on canvas" matches nothing either; met_get_object returns an object’s classification. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 10000,
"minimum": 1,
"description": "Maximum number of object IDs to return in this page. A page holds at most 500 IDs: a larger value, up to 10,000, reads a 500-ID page and the notice says so — continue from nextOffset."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based index of the first ID to return (default 0); pass the nextOffset from a previous response to continue paging. IDs are in ascending order and every one is reachable; an offset at or past total returns an empty page rather than an error."
},
"departmentId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Restrict the list to one curatorial department. Valid IDs come from met_list_departments — the Met exposes a sparse set (roughly 1–21, with gaps); an unrecognized ID is rejected with an invalid_department error rather than answered with an empty list."
},
"updatedSince": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "List only objects whose record was created or revised on or after this date, the day itself included, as YYYY-MM-DD (e.g., \"2026-09-01\") — no time part and no other date format. It compares the UTC date of each record's metadataDate, which met_get_object returns. A date later than the newest update returns an empty list, not an error."
}
},
"additionalProperties": false
}| offset | integer | Zero-based index of the first match to return (default 0); pass the nextOffset from a previous response to continue paging. Only the first 10,000 matches are reachable, so an offset at or beyond 10,000, or at or beyond total, returns an empty page rather than an error. Matches with tied relevance can change order between requests, so an ID can occasionally repeat or be skipped at a page boundary. |
| dateEnd | integer | Latest object date (year, inclusive). Negative integers for BCE. Requires dateBegin. |
| isOnView | boolean | When true, restricts results to objects currently on display in a Met gallery; false restricts them to objects not on view. The GalleryNumber field on the met_get_object record identifies the specific gallery. |
| dateBegin | integer | Earliest object date (year, inclusive). Negative integers for BCE (e.g., -500 for 500 BCE). Requires dateEnd. |
| hasImages | boolean | When true, restricts results to objects that have at least one associated image, including copyrighted works whose images cannot be reproduced; false restricts them to objects with none. For freely reusable CC0 images, confirm per object from the isPublicDomain and hasCC0Image fields on met_get_object. |
| matchField | string | Restrict the keyword match to one field: "title" matches object titles only, "tags" matches subject tags only. Omit it to match across all text fields. Combines with every filter. Has no effect when q is "*". |
| geoLocation | array | Filter by geographic origin: one country, region, or city, as a one-element array (e.g., ["France"]). The value is matched broadly against geography fields and artist nationality. Works best with the Egyptian Art, Greek and Roman Art, and similar departments that have well-populated geography fields. |
| isHighlight | boolean | Opt-in filter, true only — omit it rather than passing false, which the search ignores. Selects objects the Met has designated as highlights — major works central to the collection. |
| departmentId | integer | Restrict results to one curatorial department. Valid IDs come from met_list_departments — the Met exposes a sparse set (roughly 1–21, with gaps); an unrecognized ID is rejected with an invalid_department error rather than silently widening the search. Can be combined with other filters. The Met searches 7 (The Cloisters) and 17 (Medieval Art) as one combined result set: for either, objectIDs keeps only the requested department's matches while total and paging count both, so a page can hold fewer than limit IDs while more remain. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"minLength": 1,
"description": "Keyword query, matched across title, artist name, culture, medium, tags, and other text fields; matchField narrows the match to titles or tags. Broad terms return large ID sets. \"*\" matches every object, for a search narrowed by filters alone; paging still reaches only the first 10,000 matches. An accession number (e.g., \"29.100.5\") ranks its object first, with near-numbered objects after it — confirm the match from accessionNumber on met_get_object."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 10000,
"minimum": 1,
"description": "Maximum number of object IDs to return in this page. A page holds at most 500 IDs, the Met search maximum: a larger value, up to 10,000, reads a 500-ID page and the notice says so — continue from nextOffset. Paging reaches only the first 10,000 matches, so a page that would cross 10,000 is cut short there."
},
"medium": {
"type": "string",
"description": "Filter by object classification, case-sensitive and spelled as the Met spells it (e.g., \"Paintings\", \"Drawings\", \"Prints\", \"Ceramics\", \"Sculpture\", \"Photographs\", \"Textiles\") — \"paintings\" or \"Painting\" matches nothing. Maps to the classification field on the object, not the materials text, so a material description like \"Oil on canvas\" matches nothing either; met_get_object returns an object’s classification."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based index of the first match to return (default 0); pass the nextOffset from a previous response to continue paging. Only the first 10,000 matches are reachable, so an offset at or beyond 10,000, or at or beyond total, returns an empty page rather than an error. Matches with tied relevance can change order between requests, so an ID can occasionally repeat or be skipped at a page boundary."
},
"dateEnd": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Latest object date (year, inclusive). Negative integers for BCE. Requires dateBegin."
},
"isOnView": {
"type": "boolean",
"description": "When true, restricts results to objects currently on display in a Met gallery; false restricts them to objects not on view. The GalleryNumber field on the met_get_object record identifies the specific gallery."
},
"dateBegin": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Earliest object date (year, inclusive). Negative integers for BCE (e.g., -500 for 500 BCE). Requires dateEnd."
},
"hasImages": {
"type": "boolean",
"description": "When true, restricts results to objects that have at least one associated image, including copyrighted works whose images cannot be reproduced; false restricts them to objects with none. For freely reusable CC0 images, confirm per object from the isPublicDomain and hasCC0Image fields on met_get_object."
},
"matchField": {
"enum": [
"title",
"tags"
],
"type": "string",
"description": "Restrict the keyword match to one field: \"title\" matches object titles only, \"tags\" matches subject tags only. Omit it to match across all text fields. Combines with every filter. Has no effect when q is \"*\"."
},
"geoLocation": {
"type": "array",
"items": {
"type": "string",
"description": "A country, region, or city (e.g., \"France\", \"Egypt\", \"New York\")."
},
"maxItems": 1,
"description": "Filter by geographic origin: one country, region, or city, as a one-element array (e.g., [\"France\"]). The value is matched broadly against geography fields and artist nationality. Works best with the Egyptian Art, Greek and Roman Art, and similar departments that have well-populated geography fields."
},
"isHighlight": {
"type": "boolean",
"const": true,
"description": "Opt-in filter, true only — omit it rather than passing false, which the search ignores. Selects objects the Met has designated as highlights — major works central to the collection."
},
"departmentId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Restrict results to one curatorial department. Valid IDs come from met_list_departments — the Met exposes a sparse set (roughly 1–21, with gaps); an unrecognized ID is rejected with an invalid_department error rather than silently widening the search. Can be combined with other filters. The Met searches 7 (The Cloisters) and 17 (Medieval Art) as one combined result set: for either, objectIDs keeps only the requested department's matches while total and paging count both, so a page can hold fewer than limit IDs while more remain."
}
},
"additionalProperties": false
}