Skip to main content
Glama
kintopp

rijksmuseum-mcp+

by kintopp

Get Artwork Details

get_artwork_details
Read-onlyIdempotent

Fetch full metadata for one artwork by object number or Linked Art URI: creator, dates, materials, provenance, inscriptions, related objects. Use after search or with known object number.

Instructions

Full metadata for ONE artwork by objectNumber. Covers creator, dates, materials, provenance, inscriptions, related objects. Typically follows a search_artwork / semantic_search / find_similar result, or a user-named objectNumber. Provide exactly one of objectNumber (e.g. 'SK-C-5' for The Night Watch) or uri (a Linked Art URI from relatedObjects).

Returns metadata including titles (primary plus the full set of variants with language and qualifier — Dutch/English brief/full/display/former), creator, date, dateDisplay (free-text form), description, curatorial narrative, dimensions (text + structured: height/width/depth/weight/diameter where present), extentText, materials, object type, production details (with creator life dates, gender, and Wikidata ID where available), provenance, credit line, inscriptions, license, related objects (each carrying objectNumber + iiifId for in-viewer navigation), themes, exhibitions, attributionMarks (signature/inscription counts), externalIds (handle + other), location (museum room when on display, as { roomId, floor, roomName }), recordCreated/recordModified timestamps, plus collection sets and reference metadata. Authority IDs appear at two levels: work-level under externalIds (handle + other), and entity-level under equivalents[] arrays on objectTypes, materials, production entries, subjects.depictedPersons / subjects.depictedPlaces, collectionSetLabels and themes — each entry a { authority, id, uri } triple (VIAF/ULAN/RKD/Getty TGN+AAT/GeoNames/Wikidata), and one entity can carry several, so read every entry (iconclass terms have none). The relatedObjects field carries each peer's objectNumber (canonical handle) plus a Linked Art objectUri; pass either form back here, objectNumber preferred.

Not for filter-based discovery — use search_artwork. Not for similarity discovery — use find_similar. Not for aggregate counts — use collection_stats.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
uriNoA Linked Art URI (e.g. 'https://id.rijksmuseum.nl/200666460')
objectNumberNoThe object number of the artwork (e.g. 'SK-C-5', 'SK-A-3262')
verboseExtentNoInclude the verbose free-text extentText (dcterms:extent). Default false; the structured dimensions[] and physicalDimensions cover the headline measurements.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYes
urlYes
dateYes
typeNoPrimary object type — convenience sugar equal to objectTypes[0]?.label when present. objectTypes[] is the authoritative structured form (label + vocabulary id).
errorNo
titleYes
themesYesCuratorial thematic tags (overseas history, political history, costume, …).
titlesYes
creatorYes
licenseYes
parentsYesParent records (e.g. the sketchbook this folio belongs to). Empty for top-level objects.
childrenYesUp to 25 child records, ordered by object_number. Use search_artwork to enumerate the full set.
locationYesCurrent museum room (resolved via current_location → museum_rooms join). Null if not on display.
subjectsYes
materialsYes
childCountYesTotal number of child records (e.g. folios in a sketchbook). 0 for non-parent objects.
creditLineYes
dimensionsYes
extentTextYesFree-text extent / dimensions string (dcterms:extent). Verbose human-readable form.
productionYes
provenanceYes
dateDisplayYesFree-text Rijksmuseum-formatted display date (e.g. '1642', 'c. 1665-1667'). Use this for prose; date for ISO-shaped output.
descriptionYes
exhibitionsYesExhibitions this artwork has appeared in. Most-recent first.
externalIdsYes
objectTypesYes
inscriptionsYes
objectNumberYes
persistentIdYesHarvested handle.net URI for long-term citation; same value as externalIds.handle. Null for the minority of records with no handle.
recordCreatedYesISO 8601 timestamp of catalogue record creation.
collectionSetsYes
recordModifiedYesISO 8601 timestamp of catalogue record's most recent modification.
relatedObjectsYesRelated-variant peer relations — creator-invariant curator-declared edges ('different example' / 'production stadia' / 'pendant'). Other curator-declared relationships (pair, set, recto|verso, original|reproduction, related object) are exposed via find_similar's Related Object channel rather than here. Capped at 25 entries — see relatedObjectsTotalCount.
provenanceChainYesParsed provenance events derived from the raw `provenance` string via the project's PEG parser. Null when no provenance text is available. Clients can re-derive counts, gaps, year spans, transfer-type histograms, and earliest-known-owner from this array; the text channel renders a summary built from the same data.
attributionMarksYesPresence of signature/inscription marks only — a count, not content. The harvested rows carry no transcribed text and their carrier URIs do not resolve; use parsedInscriptions / search_inscriptions for the actual transcriptions.
themesTotalCountYes
bibliographyCountYesCitation count for this artwork — call get_artwork_bibliography for the entries. Null when bibliography data isn't present in this database.
physicalRelationsYesPhysical-companion objects (the artwork's frame(s) / pedestal). Distinct from relatedObjects (creator-invariant variants) and from find_similar groupings. Capped at the same preview limit — see physicalRelationsTotalCount.
inscriptionSummaryYesPer-artwork rollup over parsedInscriptions — lets a client distinguish 'object bears text' from 'verso collector stamp boilerplate' at a glance.
parsedInscriptionsYesStructured parse of the raw `inscriptions` blob (each physical mark is recorded twice — a detailed Dutch form and an English gloss; both are preserved here losslessly, one entry per segment). This is catalogue-entered inscription/mark data — NOT OCR and NOT an exhaustive transcription of visible text. The field is dominated by verso collector's-mark stamps; the artist-/image-applied text is a real but minority component. Use transcribedText to find what is actually written on the work; use isCollectorMark/isPlaceholder to filter ownership-stamp boilerplate.
physicalDimensionsYesShort reconstructed dimensions string (e.g. "h 379.5 cm × w 453.5 cm") from formatDimensions(height, width). Same value and key the viewer tools (get_artwork_image / remount_viewer) emit. For the full structured measurements use dimensions[]; for verbose cataloguer prose use extentText.
techniqueStatementYes
collectionSetLabelsYes
curatorialNarrativeYes
exhibitionsTotalCountYes
relatedObjectsTotalCountYesTotal related-variant peer-relation count before capping. Equals relatedObjects.length when ≤ 25.
physicalRelationsTotalCountYesTotal physical-companion relation count before capping.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed79 schema fields changedv0.90.1
    • removedOutput schema / properties / creditLine / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / creditLine / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / curatorialNarrative / properties / en / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / curatorialNarrative / properties / en / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / curatorialNarrative / properties / nl / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / curatorialNarrative / properties / nl / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / dateDisplay / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / dateDisplay / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / description / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / description / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / dimensions / items / properties / note / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / dimensions / items / properties / note / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / dimensions / items / properties / value / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • addedOutput schema / properties / dimensions / items / properties / value / type
      Added value: +[
      +  "number",
      +  "string"
      +]
    • removedOutput schema / properties / exhibitions / items / properties / dateEnd / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / exhibitions / items / properties / dateEnd / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / exhibitions / items / properties / dateStart / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / exhibitions / items / properties / dateStart / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / exhibitions / items / properties / titleEn / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / exhibitions / items / properties / titleEn / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / exhibitions / items / properties / titleNl / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / exhibitions / items / properties / titleNl / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / extentText / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / extentText / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / externalIds / properties / handle / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / externalIds / properties / handle / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / license / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / license / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / location / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "floor": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "roomId": {
      -        "type": "string"
      -      },
      -      "roomName": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "roomId",
      -      "floor",
      -      "roomName"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "floor": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "roomId": {
      +        "type": "string"
      +      },
      +      "roomName": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "roomId",
      +      "floor",
      +      "roomName"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / parsedInscriptions / items / properties / normalizedPlacement / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / parsedInscriptions / items / properties / normalizedPlacement / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / parsedInscriptions / items / properties / normalizedTechnique / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / parsedInscriptions / items / properties / normalizedTechnique / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / parsedInscriptions / items / properties / normalizedType / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / parsedInscriptions / items / properties / normalizedType / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / parsedInscriptions / items / properties / placement / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / parsedInscriptions / items / properties / placement / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / parsedInscriptions / items / properties / technique / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / parsedInscriptions / items / properties / technique / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / parsedInscriptions / items / properties / type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / parsedInscriptions / items / properties / type / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / parsedInscriptions / items / properties / value / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / parsedInscriptions / items / properties / value / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / persistentId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / persistentId / description
      Added value: +"Harvested handle.net URI for long-term citation; same value as externalIds.handle. Null for the minority of records with no handle."
    • addedOutput schema / properties / persistentId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / physicalDimensions / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / physicalDimensions / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / physicalRelations / items / properties / iiifId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / physicalRelations / items / properties / iiifId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / physicalRelations / items / properties / objectNumber / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / physicalRelations / items / properties / objectNumber / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / physicalRelations / items / properties / title / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / physicalRelations / items / properties / title / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / production / items / properties / attributionQualifier / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / production / items / properties / attributionQualifier / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / production / items / properties / personInfo / properties / gender / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / production / items / properties / personInfo / properties / gender / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / production / items / properties / personInfo / properties / wikidataId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / production / items / properties / personInfo / properties / wikidataId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / production / items / properties / place / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / production / items / properties / place / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / production / items / properties / role / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / production / items / properties / role / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / provenance / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / provenance / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / provenanceChain / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "date": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": false,
      -              "properties": {
      -                "text": {
      -                  "description": "Original date expression as it appeared in the source.",
      -                  "type": "string"
      -                },
      -                "year": {
      -                  "anyOf": [
      -                    {
      -                      "maximum": 9007199254740991,
      -                      "minimum": -9007199254740991,
      -                      "type": "integer"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Best-effort single year; null if the date couldn't be reduced to a year."
      -                }
      -              },
      -              "required": [
      -                "year",
      -                "text"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "gap": {
      -          "type": "boolean"
      -        },
      -        "location": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "party": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": false,
      -              "properties": {
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "price": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": false,
      -              "properties": {
      -                "amount": {
      -                  "anyOf": [
      -                    {
      -                      "type": "number"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ]
      -                },
      -                "currency": {
      -                  "type": "string"
      -                },
      -                "text": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "currency",
      -                "amount",
      -                "text"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "sequence": {
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        },
      -        "transferType": {
      -          "description": "Normalized transfer type: sale, inheritance, by_descent, widowhood, bequest, commission, confiscation, theft, looting, recuperation, loan, transfer, collection, gift, exchange, deposit, restitution, inventory, or unknown.",
      -          "type": "string"
      -        },
      -        "uncertain": {
      -          "type": "boolean"
      -        }
      -      },
      -      "required": [
      -        "sequence",
      -        "gap",
      -        "uncertain",
      -        "transferType",
      -        "party",
      -        "location",
      -        "date",
      -        "price"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "date": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "text": {
      +                  "description": "Original date expression as it appeared in the source.",
      +                  "type": "string"
      +                },
      +                "year": {
      +                  "anyOf": [
      +                    {
      +                      "maximum": 9007199254740991,
      +                      "minimum": -9007199254740991,
      +                      "type": "integer"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Best-effort single year; null if the date couldn't be reduced to a year."
      +                }
      +              },
      +              "required": [
      +                "year",
      +                "text"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "gap": {
      +          "type": "boolean"
      +        },
      +        "location": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "party": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "price": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "amount": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "currency": {
      +                  "type": "string"
      +                },
      +                "text": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "currency",
      +                "amount",
      +                "text"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "sequence": {
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "transferType": {
      +          "description": "Normalized transfer type: sale, inheritance, by_descent, widowhood, bequest, commission, confiscation, theft, looting, recuperation, loan, transfer, collection, gift, exchange, deposit, restitution, inventory, or unknown.",
      +          "type": "string"
      +        },
      +        "uncertain": {
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "sequence",
      +        "gap",
      +        "uncertain",
      +        "transferType",
      +        "party",
      +        "location",
      +        "date",
      +        "price"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / recordCreated / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / recordCreated / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / recordModified / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / recordModified / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / relatedObjects / items / properties / iiifId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / relatedObjects / items / properties / iiifId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / relatedObjects / items / properties / objectNumber / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / relatedObjects / items / properties / objectNumber / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / relatedObjects / items / properties / title / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / relatedObjects / items / properties / title / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / techniqueStatement / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / techniqueStatement / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. First observedv0.90.0

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint; the description adds substantial behavioral detail beyond those: the two-level authority ID structure, the relatedObjects hand-off via objectNumber/iiifId/objectUri, and the caveat that some entries, like iconclass terms, carry no authority IDs. There is no contradiction with annotations.

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?

The description is long but information-dense and well organized: scope first, then detailed return content, then routing guidance and exclusions. Each sentence earns its place, and the key usage constraint is 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 the output schema, annotations, and parameter descriptions, this tool definition is complete. It covers input requirements, return contents, related-object navigation, authority IDs, and exclusions. There are no significant gaps that would prevent an agent from selecting and invoking it correctly.

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

Parameters5/5

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

Although the schema covers each parameter, the description adds a crucial constraint absent from the schema: exactly one of objectNumber or uri must be supplied, with objectNumber preferred. It also explains verboseExtent's default behavior and how structured dimensions relate to it, resolving ambiguity the schema leaves open.

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 opens with a specific operation: 'Full metadata for ONE artwork by objectNumber,' and clarifies the two accepted identifier forms. It is immediately distinguishable from sibling tools like search_artwork and get_artwork_image.

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?

It explicitly states when to use the tool: after search_artwork, semantic_search, find_similar, or when a user supplies an objectNumber. It also gives clear negatives: not for filter-based discovery, not for similarity discovery, and not for aggregate counts, naming the appropriate alternatives.

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