Skip to main content
Glama
mikechao

Met Museum MCP Server

by mikechao

테마 로고

메트로폴리탄 박물관 MCP 서버

자연어 상호작용을 통해 메트로폴리탄 미술관 소장품에 접근할 수 있는 모델 컨텍스트 프로토콜(MCP) 서버입니다. 이 서버를 통해 AI 모델은 메트로폴리탄 미술관 소장품을 검색하고, 해당 작품을 리소스로 이용할 수 있습니다.

특징

이 서버는 AI 모델에 The Met의 미술 컬렉션과 상호 작용할 수 있는 다음 도구를 제공합니다.

1. 부서 목록(list-departments)

The Met의 모든 유효한 부서를 나열합니다.

  • 입력:

    • 없음

  • 산출:

    지엑스피1

2. 박물관 유물 검색(search-museum-objects)

입력 내용을 바탕으로 The Met에서 다양한 물건을 검색해 보세요.

  • 입력:

    • q (문자열): 검색어 예: 해바라기

    • hasImages (부울, 선택 사항, 기본값: false): 이미지가 있는 객체만 검색합니다.

    • title (부울, 선택 사항, 기본값: false): 쿼리와 일치하는 객체를 반환하며, 특히 title 필드에서 객체를 검색합니다.

    • departmentId (숫자, 선택 사항): 특정 부서에 속하는 객체를 반환합니다.

  • 출력:

    Total objects found: 54
    Object IDs: 436532, 789578, 436840, 438722,...

3. 박물관 물건 가져오기(get-museum-object)

The Met에서 해당 객체에 대한 모든 오픈 액세스 데이터와 객체의 이미지(이미지가 오픈 액세스로 제공되는 경우)를 포함하는 특정 객체를 가져옵니다.

이미지가 있는 경우 객체의 제목을 통해 서버의 리소스에 추가됩니다.

  • 입력:

    • objectId (숫자): 검색할 객체의 ID

    • returnImage (boolean, 선택 사항, 기본값: true): 객체의 이미지(사용 가능한 경우)를 반환하고 서버 리소스에 추가할지 여부

  • 출력:

    Title: Self-Portrait with a Straw Hat (obverse: The Potato Peeler)
    Artist: Vincent van Gogh
    Artist Bio: Dutch, Zundert 1853–1890 Auvers-sur-Oise
    Department: European Paintings
    Credit Line: Bequest of Miss Adelaide Milton de Groot (1876-1967), 1967
    Medium: Oil on canvas
    Dimensions: 16 x 12 1/2 in. (40.6 x 31.8 cm)
    Primary Image URL: https://images.metmuseum.org/CRDImages/ep/original/DT1502_cropped2.jpg
    Tags: Men, Self-portraits

    returnImage가 true이면

    **base64 encoding of jpeg image**

Claude Desktop과 함께 사용

claude_desktop_config.json 에 다음을 추가하세요:

{
  "mcp-servers": {
    "met-museum": {
      "command": "npx",
      "args": [
        "-y",
        "metmuseum-mcp"
      ]
    }
  }
}

LibreChat과 함께 사용

librechat.yaml 에 다음을 추가하세요.

mcpServers:
  metmuseum:
    command: npx
    args:
      - -y
      - metmuseum-mcp

Related MCP server: mcp-va-museum

예제 쿼리

이 서버가 연결되면 AI 모델에 다음과 같은 질문을 할 수 있습니다.

Can you show me a few painting from the Asian Art department?
Can you find the painting titled "Corridor in the Asylum"?
Can you find any art that has "cat" in the title or features "cats"?

기여하다

기여를 환영합니다! 풀 리퀘스트를 제출해 주세요.

특허

이 MCP 서버는 MIT 라이선스에 따라 라이선스가 부여됩니다. 즉, MIT 라이선스의 조건에 따라 소프트웨어를 자유롭게 사용, 수정 및 배포할 수 있습니다. 자세한 내용은 프로젝트 저장소의 LICENSE 파일을 참조하세요.

부인 성명

이 라이브러리는 뉴욕 메트로폴리탄 미술관과 공식적으로 제휴 관계가 없습니다. 메트로폴리탄 미술관 컬렉션 API를 MCP 서버와 함께 제3자가 구현한 것입니다.

Available Tools

4 tools
get-museum-objectA
Read-onlyIdempotent

Get a museum object by its ID, from the Metropolitan Museum of Art Collection. Use this when the user asks for deeper details on a specific object ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectIdYesThe positive integer ID of the museum object to retrieve
returnImageNoWhether to return the image (if available) of the object

Output Schema

ParametersJSON Schema
NameRequiredDescription
objectYesDetailed object data for the requested object ID

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds no additional behavioral context beyond 'Get' and 'deeper details,' which is consistent but not enriching.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: one for the action and one for usage guidance. Front-loaded and efficient with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple object retrieval tool, the description suffices given the presence of an output schema, annotations, and sibling tools. No missing critical context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters (objectId and returnImage). The description does not add parameter-specific context, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get a museum object by its ID' and specifies source (Metropolitan Museum of Art). It distinguishes from siblings that list, search, or open explorer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this when the user asks for deeper details on a specific object ID,' providing clear when-to-use guidance and implying when not to use (e.g., for listing or searching).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-departmentsA
Read-onlyIdempotent

List all departments in the Metropolitan Museum of Art (Met Museum)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
departmentsYesAn array containing the JSON objects that contain each department's departmentId and display name. The departmentId is to be used as a query parameter on the `/objects` endpoint

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description confirms a read-only list operation but adds no behavioral details beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with key action and resource, no unnecessary words. Perfectly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and the presence of an output schema, the description is complete. It fully conveys the tool's purpose and scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the description does not need to explain them. The baseline for 0 parameters is 4, and the description is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action ('List all departments') and the resource ('Metropolitan Museum of Art'). It distinguishes from sibling tools like 'get-museum-object' and 'search-museum-objects' by focusing on departments rather than objects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving all departments but provides no explicit guidance on when to use this tool versus alternatives or any conditions/limitations. It is functional but lacks contextual direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open-met-explorerA
Read-onlyIdempotent

Open the interactive Met Explorer app for browsing and filtering objects. For exploration intents, pass q so the app can run a live search on open. After opening, keep your chat handoff short and UI-focused. For deeper details on a specific object ID, prefer get-museum-object.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoOptional initial search query to seed the explorer. If provided, the app automatically executes the search on launch
hasImagesNoWhether the initial search should prioritize objects with images
titleNoWhether the initial query should search only object titles
departmentIdNoOptional department id to pre-select in the explorer

Output Schema

ParametersJSON Schema
NameRequiredDescription
initialStateYesInitial app launch state for the Met Explorer UI

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds value beyond annotations by describing post-opening behavior ('keep your chat handoff short and UI-focused'). Annotations already provide readOnlyHint, destructiveHint, idempotentHint, openWorldHint; description does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each purposeful: defines the tool, instructs on query parameter, advises post-opening behavior, and mentions alternative tool. No wasted words, front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given interactive nature, output schema existence, and annotations, description covers all necessary aspects: purpose, usage, alternative, and post-behavior. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description adds context like recommending 'q' for live search and default behavior of hasImages. Baseline is 3, and the description provides helpful but not critical additional insight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Open', resource 'interactive Met Explorer app', and purpose 'browsing and filtering objects'. Distinguishes from sibling get-museum-object by specifying alternative use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to pass 'q' for exploration intents, instructs to keep chat handoff short and UI-focused after opening, and directs users to get-museum-object for deeper details on a specific object ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search-museum-objectsA
Read-onlyIdempotent

Search for objects in the Metropolitan Museum of Art (Met Museum). Will return Total objects found, followed by a paginated list of Object Ids. If the Met Explorer app (open-met-explorer) is open and the user is referring to its existing results, prefer using those results from context instead of calling this tool. The parameter title should be set to true if you want to search for objects by title. The parameter hasImages is false by default, but can be set to true to return only objects with images. Additional optional filters are available for highlights, tags, on-view status, artist/culture match, medium, geographic location, and date range. Use page and pageSize to paginate results.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesThe search query, Returns a listing of all Object IDs for objects that contain the search query within the object's data
hasImagesNoOnly returns objects that have images
titleNoThis should be set to true if you want to search for objects by title
isHighlightNoOnly returns objects designated as highlights
tagsNoOnly returns objects that have subject keyword tags
isOnViewNoOnly returns objects currently on view
artistOrCultureNoWhen true, q is matched against artist or culture
departmentIdNoReturns objects that are in the specified department. The departmentId should come from the 'list-departments' tool.
mediumNoRestricts search to objects with the specified medium
geoLocationNoRestricts search to objects with the specified geographic location
dateBeginNoStart year for a date range filter. Must be provided together with dateEnd.
dateEndNoEnd year for a date range filter. Must be provided together with dateBegin.
pageNo1-based page number for paginated object IDs
pageSizeNoNumber of object IDs to return per page (max 100)

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesTotal number of matching objects across all pages
pageYesCurrent 1-based page number returned by the tool
pageSizeYesNumber of object IDs returned per page
totalPagesYesTotal number of pages available for this query
objectIDsYesPaginated list of object IDs for the current page

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds value by detailing the exact output (total objects found + paginated object IDs) and clarifying default behaviors (e.g., hasImages defaults to false). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six sentences, front-loaded with purpose and return format, logically organized. No fluff; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (14 params, 1 required, output schema exists), the description is complete. It covers main output, alternative usage, parameter details, and cross-tool dependency. The existing output schema complements it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already covers 100% parameters with descriptions and defaults. The description summarizes and adds a cross-reference (departmentId from list-departments), but does not significantly enhance understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: 'Search for objects in the Metropolitan Museum of Art (Met Museum).' It also mentions return type (total count and paginated object IDs). However, it does not explicitly differentiate from sibling tools like get-museum-object, though the name and context imply it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to avoid this tool ('If the Met Explorer app is open... prefer using those results). It also references the list-departments tool for a parameter. However, it does not compare with other search alternatives or mention get-museum-object.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.9.0
    • Changedget-museum-object7 fields changed
      • removedInput schema / properties / __intent
        Removed value: -{
        -  "description": "In ≤ 30 words, describe why you are calling this tool and how its result advances your overall task. Don't use first-person pronouns like \"I\" or \"my\". Make sure to give a gist of the whole task and how this tool fits into it.",
        -  "type": "string"
        -}
      • changedInput schema / properties / objectId / description
        Previous value: -"The ID of the museum object to retrieve"New value: +"The positive integer ID of the museum object to retrieve"
      • addedInput schema / properties / objectId / exclusiveMinimum
        Added value: +0
      • changedInput schema / properties / objectId / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / returnImage / description
        Previous value: -"Whether to return the image (if available) of the object and add it to the server resources"New value: +"Whether to return the image (if available) of the object"
      • changedInput schema / required
        Previous value: -[
        -  "objectId",
        -  "__intent"
        -]New value: +[
        +  "objectId"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "object": {
        +      "additionalProperties": false,
        +      "description": "Detailed object data for the requested object ID",
        +      "properties": {
        +        "GalleryNumber": {
        +          "description": "Gallery number where artwork is located",
        +          "type": "string"
        +        },
        +        "accessionNumber": {
        +          "description": "Identifying number for each artwork (not always unique)",
        +          "type": "string"
        +        },
        +        "accessionYear": {
        +          "description": "Year the artwork was acquired",
        +          "type": "string"
        +        },
        +        "additionalImages": {
        +          "description": "An array containing URLs to the additional images of an object in JPEG format",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "artistAlphaSort": {
        +          "description": "Used to sort artist names alphabetically. Last Name, First Name, Middle Name, Suffix, and Honorific fields",
        +          "type": "string"
        +        },
        +        "artistBeginDate": {
        +          "description": "Year the artist was born",
        +          "type": "string"
        +        },
        +        "artistDisplayBio": {
        +          "description": "Nationality and life dates of an artist, also includes birth and death city when known",
        +          "type": "string"
        +        },
        +        "artistDisplayName": {
        +          "description": "Artist name in the correct order for display",
        +          "type": "string"
        +        },
        +        "artistEndDate": {
        +          "description": "Year the artist died",
        +          "type": "string"
        +        },
        +        "artistGender": {
        +          "description": "Gender of the artist (currently contains female designations only)",
        +          "type": "string"
        +        },
        +        "artistNationality": {
        +          "description": "National, geopolitical, cultural, or ethnic origins or affiliation of the creator",
        +          "type": "string"
        +        },
        +        "artistPrefix": {
        +          "description": "Describes the extent of creation or describes an attribution qualifier to the information given in the artistRole field",
        +          "type": "string"
        +        },
        +        "artistRole": {
        +          "description": "Role of the artist related to the type of artwork or object that was created",
        +          "type": "string"
        +        },
        +        "artistSuffix": {
        +          "description": "Used to record complex information that qualifies the role of a constituent",
        +          "type": "string"
        +        },
        +        "artistULAN_URL": {
        +          "description": "ULAN URL for the artist",
        +          "type": "string"
        +        },
        +        "artistWikidata_URL": {
        +          "description": "Wikidata URL for the artist",
        +          "type": "string"
        +        },
        +        "city": {
        +          "description": "City associated with the artwork's creation",
        +          "type": "string"
        +        },
        +        "classification": {
        +          "description": "General term describing the artwork type",
        +          "type": "string"
        +        },
        +        "constituents": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "constituentID": {
        +                    "type": "number"
        +                  },
        +                  "constituentULAN_URL": {
        +                    "type": "string"
        +                  },
        +                  "constituentWikidata_URL": {
        +                    "type": "string"
        +                  },
        +                  "gender": {
        +                    "type": "string"
        +                  },
        +                  "name": {
        +                    "type": "string"
        +                  },
        +                  "role": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "constituentID",
        +                  "role",
        +                  "name",
        +                  "constituentULAN_URL",
        +                  "constituentWikidata_URL",
        +                  "gender"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "An array containing the constituents associated with an object, with the constituent's role, name, ULAN URL, Wikidata URL, and gender, when available (currently contains female designations only)"
        +        },
        +        "country": {
        +          "description": "Country associated with the artwork's creation",
        +          "type": "string"
        +        },
        +        "county": {
        +          "description": "County associated with the artwork's creation",
        +          "type": "string"
        +        },
        +        "creditLine": {
        +          "description": "Text acknowledging the source or origin of the artwork and the year the object was acquired",
        +          "type": "string"
        +        },
        +        "culture": {
        +          "description": "Information about the culture, or people from which an object was created",
        +          "type": "string"
        +        },
        +        "department": {
        +          "description": "Indicates The Met's curatorial department responsible for the artwork",
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "description": "Size of the artwork or object",
        +          "type": "string"
        +        },
        +        "dynasty": {
        +          "description": "Dynasty (a succession of rulers of the same line or family) under which an object was created",
        +          "type": "string"
        +        },
        +        "excavation": {
        +          "description": "Excavation associated with the artwork",
        +          "type": "string"
        +        },
        +        "geographyType": {
        +          "description": "Type of location related to the artwork (e.g., \"Made in\", \"From\")",
        +          "type": "string"
        +        },
        +        "isHighlight": {
        +          "description": "When \"true\" indicates a popular and important artwork in the collection",
        +          "type": "boolean"
        +        },
        +        "isPublicDomain": {
        +          "description": "When \"true\" indicates the image is in the public domain",
        +          "type": "boolean"
        +        },
        +        "isTimelineWork": {
        +          "description": "Whether the artwork is featured on the Timeline of Art History website",
        +          "type": "boolean"
        +        },
        +        "linkResource": {
        +          "description": "URL to the object's page on metmuseum.org",
        +          "type": "string"
        +        },
        +        "locale": {
        +          "description": "Locale associated with the artwork's creation",
        +          "type": "string"
        +        },
        +        "locus": {
        +          "description": "Locus associated with the artwork's creation",
        +          "type": "string"
        +        },
        +        "measurements": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "elementDescription": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "elementMeasurements": {
        +                    "additionalProperties": {
        +                      "type": "number"
        +                    },
        +                    "type": "object"
        +                  },
        +                  "elementName": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "elementName",
        +                  "elementMeasurements"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Array of elements, each with a name, description, and set of measurements. Spatial measurements are in centimeters; weights are in kg"
        +        },
        +        "medium": {
        +          "description": "Refers to the materials that were used to create the artwork",
        +          "type": "string"
        +        },
        +        "metadataDate": {
        +          "description": "Date metadata was last updated",
        +          "type": "string"
        +        },
        +        "objectBeginDate": {
        +          "description": "Machine readable date indicating the year the artwork was started to be created",
        +          "type": "number"
        +        },
        +        "objectDate": {
        +          "description": "Year, a span of years, or a phrase that describes the specific or approximate date when an artwork was designed or created",
        +          "type": "string"
        +        },
        +        "objectEndDate": {
        +          "description": "Machine readable date indicating the year the artwork was completed",
        +          "type": "number"
        +        },
        +        "objectID": {
        +          "description": "Identifying number for each artwork (unique, can be used as key field)",
        +          "type": "number"
        +        },
        +        "objectName": {
        +          "description": "Describes the physical type of the object",
        +          "type": "string"
        +        },
        +        "objectURL": {
        +          "description": "URL to the object's page on metmuseum.org",
        +          "type": "string"
        +        },
        +        "objectWikidata_URL": {
        +          "description": "Wikidata URL for the object",
        +          "type": "string"
        +        },
        +        "period": {
        +          "description": "Time or time period when an object was created",
        +          "type": "string"
        +        },
        +        "portfolio": {
        +          "description": "A set of works created as a group or published as a series",
        +          "type": "string"
        +        },
        +        "primaryImage": {
        +          "description": "URL to the primary image of an object in JPEG format",
        +          "type": "string"
        +        },
        +        "primaryImageSmall": {
        +          "description": "URL to the lower-res primary image of an object in JPEG format",
        +          "type": "string"
        +        },
        +        "region": {
        +          "description": "Region associated with the artwork's creation",
        +          "type": "string"
        +        },
        +        "reign": {
        +          "description": "Reign of a monarch or ruler under which an object was created",
        +          "type": "string"
        +        },
        +        "repository": {
        +          "description": "Indicates the repository containing the artwork",
        +          "type": "string"
        +        },
        +        "rightsAndReproduction": {
        +          "description": "Credit line for artworks still under copyright",
        +          "type": "string"
        +        },
        +        "river": {
        +          "description": "River associated with the artwork's creation",
        +          "type": "string"
        +        },
        +        "state": {
        +          "description": "State or province associated with the artwork's creation",
        +          "type": "string"
        +        },
        +        "subregion": {
        +          "description": "Subregion associated with the artwork's creation",
        +          "type": "string"
        +        },
        +        "tags": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "AAT_URL": {
        +                    "type": "string"
        +                  },
        +                  "Wikidata_URL": {
        +                    "type": "string"
        +                  },
        +                  "term": {
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "An array of subject keyword tags associated with the object"
        +        },
        +        "title": {
        +          "description": "Title, identifying phrase, or name given to a work of art",
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "object"
        +  ],
        +  "type": "object"
        +}
    • Changedlist-departments3 fields changed
      • removedInput schema / properties / __intent
        Removed value: -{
        -  "description": "In ≤ 30 words, describe why you are calling this tool and how its result advances your overall task. Don't use first-person pronouns like \"I\" or \"my\". Make sure to give a gist of the whole task and how this tool fits into it.",
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "__intent"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "departments": {
        +      "description": "An array containing the JSON objects that contain each department's departmentId and display name. The departmentId is to be used as a query parameter on the `/objects` endpoint",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "departmentId": {
        +            "description": "Department ID as an integer. The departmentId is to be used as a query parameter on the `/objects` endpoint",
        +            "type": "number"
        +          },
        +          "displayName": {
        +            "description": "Display name for a department",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "departmentId",
        +          "displayName"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "departments"
        +  ],
        +  "type": "object"
        +}
    • Addedopen-met-explorer
    • Changedsearch-museum-objects14 fields changed
      • removedInput schema / properties / __intent
        Removed value: -{
        -  "description": "In ≤ 30 words, describe why you are calling this tool and how its result advances your overall task. Don't use first-person pronouns like \"I\" or \"my\". Make sure to give a gist of the whole task and how this tool fits into it.",
        -  "type": "string"
        -}
      • addedInput schema / properties / artistOrCulture
        Added value: +{
        +  "default": false,
        +  "description": "When true, q is matched against artist or culture",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / dateBegin
        Added value: +{
        +  "description": "Start year for a date range filter. Must be provided together with dateEnd.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / dateEnd
        Added value: +{
        +  "description": "End year for a date range filter. Must be provided together with dateBegin.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / geoLocation
        Added value: +{
        +  "description": "Restricts search to objects with the specified geographic location",
        +  "type": "string"
        +}
      • addedInput schema / properties / isHighlight
        Added value: +{
        +  "default": false,
        +  "description": "Only returns objects designated as highlights",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / isOnView
        Added value: +{
        +  "default": false,
        +  "description": "Only returns objects currently on view",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / medium
        Added value: +{
        +  "description": "Restricts search to objects with the specified medium",
        +  "type": "string"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "1-based page number for paginated object IDs",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / pageSize
        Added value: +{
        +  "default": 24,
        +  "description": "Number of object IDs to return per page (max 100)",
        +  "exclusiveMinimum": 0,
        +  "maximum": 100,
        +  "type": "integer"
        +}
      • addedInput schema / properties / q / minLength
        Added value: +1
      • addedInput schema / properties / tags
        Added value: +{
        +  "default": false,
        +  "description": "Only returns objects that have subject keyword tags",
        +  "type": "boolean"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "q",
        -  "__intent"
        -]New value: +[
        +  "q"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "objectIDs": {
        +      "description": "Paginated list of object IDs for the current page",
        +      "items": {
        +        "type": "number"
        +      },
        +      "type": "array"
        +    },
        +    "page": {
        +      "description": "Current 1-based page number returned by the tool",
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    },
        +    "pageSize": {
        +      "description": "Number of object IDs returned per page",
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    },
        +    "total": {
        +      "description": "Total number of matching objects across all pages",
        +      "type": "number"
        +    },
        +    "totalPages": {
        +      "description": "Total number of pages available for this query",
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "page",
        +    "pageSize",
        +    "totalPages",
        +    "objectIDs"
        +  ],
        +  "type": "object"
        +}
  2. 1 tool updatev1.0.0
    • Changedlist-departments1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  3. 3 tool updates
    • First observedget-museum-object
    • First observedlist-departments
    • First observedsearch-museum-objects

TDQS

A4.4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: get-museum-object retrieves details by ID, list-departments lists departments, open-met-explorer launches an interactive app, and search-museum-objects performs filtered searches. There is no ambiguity between them.

Naming Consistency5/5

All tool names follow a consistent verb-noun pattern with lowercase hyphens (e.g., get-museum-object, list-departments). No mixing of styles.

Tool Count5/5

Four tools is an appropriate count for a museum collection server covering search, detail retrieval, department listing, and an interactive explorer. Not too sparse or overwhelming.

Completeness4/5

The tool surface covers key read operations (search, detail, departments) and an interactive explorer. Minor gaps like direct department-based object listing are covered by search filters, so no significant missing functionality.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    A server that provides access to the Art Institute of Chicago Collection through natural language interactions. This server allows AI models to search the Art Institute of Chicago Collection and have art works available as a Resource.
    6
    9 npm
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for querying the Victoria and Albert Museum (V\&A) collections via natural language or direct tool calls.
    5 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for the Solid protocol enabling AI models to read, write, search, and manage resources in Solid pods.
    1
    MIT