Skip to main content
Glama
kintopp

rijksmuseum-mcp+

by kintopp

Search Artwork

search_artwork
Read-onlyIdempotent

Search Rijksmuseum artworks with structured filters (subject, creator, material, technique, date, place) to find pieces meeting all criteria. Returns summaries with titles, creators, dates, and total results count.

Instructions

Structured filter search — artworks matching ALL given filters (subject, material, technique, date, place, person). Returns artwork summaries with titles, creators, and dates; every response includes totalResults (exact match count, not just the returned page). Not for free-text concept queries — use semantic_search for those. Not for artwork-to-artwork similarity — use find_similar with an objectNumber. For demographic person queries (gender, born/died, profession, birth/death place), use search_persons first to get a vocabId, then pass it as creator here. For provenance text and ownership history, use search_provenance. For aggregate counts and distributions, prefer collection_stats — one call vs compact=true loops.

Ranking: relevance (BM25) when text search (description, title, etc.) or geographic proximity is used; otherwise importance (image availability, curatorial attention, metadata richness). For concept-ranked results, use semantic_search.

At least one filter is required. There is no full-text search across all metadata. For concept or thematic searches (e.g. 'winter landscape', 'smell', 'crucifixion'), ALWAYS start with subject — it searches ~832K artworks tagged with structured Iconclass vocabulary and has by far the highest recall for conceptual queries. Use description for cataloguer observations (compositional details, specific motifs); use curatorialNarrative for curatorial interpretation and art-historical context. These three corpora can return complementary results. For broader concept discovery beyond structured vocabulary, use semantic_search — but combine it with search_artwork(type: 'painting', …) for painting queries since paintings are underrepresented there.

Array values are AND-combined (e.g. subject: ['landscape', 'seascape'] finds artworks with both). If many results share an object-number prefix (e.g. multiple folios of one sketchbook), a warnings note flags it; narrow with type/material filters or treat the shared prefix as the unit. Each result carries an objectNumber for follow-up calls to get_artwork_details (full metadata) or get_artwork_image (deep-zoom viewer — only when the user asks to see, show, or view an artwork; do not open the viewer for list/count/summary requests).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sortNoOrder results by a column (with optional direction). Forms: 'height', 'height:desc' (default), 'dateEarliest:asc'. Overrides BM25 (text-match) and geo-proximity ordering when set. Cannot be used alone — needs at least one substantive filter. Columns: 'height' / 'width' (cm — 95% / 94% coverage; 0.0 sentinels are folded to NULL and ordered last), 'dateEarliest' / 'dateLatest' (year — 99.9% coverage; bracket the dating range, useful for hedged datings like 'c. 1660–1665'), 'recordModified' (ISO date — 62% coverage; ~7 implausibly future-dated rows lead a 'desc' sort, ~2K pre-1990 rows lead an 'asc' sort). Direction defaults to 'desc'. NULLs always sort last regardless of direction. Examples: largest paintings → 'height:desc'; earliest works → 'dateEarliest:asc'; most recently catalogued → 'recordModified:desc'.
typeNoFilter by object type: 'painting', 'print', 'drawing', etc.
queryNoSearch by artwork title — matches against all title variants (brief, full, former × EN/NL). Note: only ~4% of artworks have an English title (~35K of 833K). For non-title text, use the specific field parameters (description, inscription, curatorialNarrative, creator, subject, etc.).
facetsNoFacet dimensions to compute when results are truncated. Pass an array of dimension names (e.g. ["theme", "rights"]) to compute only those, or true for all dimensions. Available: type, material, technique, century, rights, imageAvailable, creator, depictedPerson, depictedPlace, productionPlace, theme, sourceType. Dimensions already filtered on are excluded automatically and reported in `warnings`.
offsetNoSkip this many results (for pagination). Use with maxResults.
compactNoIf true, returns only total count and IDs without resolving details (faster).
creatorNoSearch by artist name (e.g. 'Rembrandt van Rijn'), or pass a vocabId from search_persons (e.g. '210169673') for an exact match to that one person — preferred over the name when you have it, since shared names can match multiple distinct artists.
groupByNoCollapse component records under their parent (sketchbook folios, album pages, print-series leaves). When 'parent' is set, any child record that appears in the result alongside its parent is dropped, and the parent gains a `groupedChildCount`. Only collapses when both child and parent match the query — children whose parent isn't a hit remain in the result. Applied after the BM25 page is selected, so a parent that ranks below the maxResults cutoff won't pull its children in. Closes #28.
materialNoFilter by material: 'canvas', 'paper', 'wood', etc.
dateMatchNoHow creationDate matches artwork date ranges. "overlaps" (default): artwork range overlaps query range — inclusive, but objects with broad ranges appear in multiple bins. "within": artwork range falls entirely within query range — exclusive bins, but drops broadly-dated objects (~43% of collection spans >1 decade). "midpoint": assigns each artwork to one bin by midpoint of its date range — every object counted exactly once with no data loss. Best for statistical comparisons and charts.
techniqueNoFilter by technique: 'oil painting', 'etching', etc.
aboutActorNoSearch for artworks depicting or about a person (not the creator). E.g. 'Willem van Oranje'. Broader recall than depictedPerson — searches both subject and creator vocabulary, tolerant of cross-language name forms (e.g. 'Louis XIV' finds 'Lodewijk XIV'). Combinable with all other filters. depictedPerson is usually the better first choice (precise, depicted persons only); use aboutActor for broader person matching across depicted persons and creators.
facetLimitNoMaximum entries per facet dimension (1–50, default 5).
maxResultsNoMaximum results to return (1-50, default 25). All results include full metadata.
descriptionNoFull-text search on artwork descriptions (~510K artworks, 61% coverage). Cataloguer observations including compositional details, motifs, physical condition, and attribution remarks. Exact word matching, no stemming.
creationDateNoFilter by creation date. Exact year ('1642') or wildcard ('16*' for 1600s, '164*' for 1640s).
objectNumberNoFilter by object number. Exact match by default (e.g. 'SK-C-5' for The Night Watch). Supports wildcards: '*' matches any run of characters, '?' matches a single character — e.g. 'SK-C-5*' for the Night Watch group, 'RP-P-1906-*' for a print-acquisition series, 'BK-NM-*'. Case-sensitive (object numbers are predominantly uppercase). A wildcard pattern needs at least 2 literal characters.
hasProvenanceNoIf true, only return artworks that have parsed provenance records (~48K of 832K). Combine with other filters for cross-domain queries (e.g. type='painting' + hasProvenance=true). Cannot be used alone — combine with at least one other filter.
imageAvailableNoFilter by digitisation: true = only artworks with a digital image, false = only artworks lacking one (e.g. un-photographed works on paper). Cannot be used alone — combine with at least one other filter.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idsNoObject numbers (compact mode).
errorNo
facetsNoCounts per dimension (configurable via facetLimit, default top-5). Computed when results are truncated and facets is set.
sourceNo
resultsNoArtwork summaries. Absent when compact=true.
warningsNo
totalResultsNoTotal matching artworks (always present when vocabulary DB is available). Use with compact=true for efficient counting.
referencePlaceNo
Behavior5/5

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

Annotations already indicate readOnly, idempotent, non-destructive. The description adds substantial behavioral context: requires at least one filter, no full-text search, AND-combined arrays, warnings for shared object-number prefixes, ranking behavior, and follow-up calls. 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.

Conciseness4/5

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

The description is well-structured with clear sections and front-loaded purpose. While somewhat lengthy, every sentence adds value given the tool's complexity. Could be slightly more concise but remains organized and informative.

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 (19 parameters, output schema exists), the description covers all essential aspects: when to use, filtering semantics, ranking, warnings, follow-up calls, and relationships to sibling tools. It is comprehensive and leaves no significant 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 description coverage is 100%, so baseline is 3. The description adds value beyond the schema by explaining overall parameter interaction (e.g., sort vs BM25, groupBy behavior, combining filters) and providing best practices for using certain parameters like subject and description.

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 states it is a 'Structured filter search' for artworks matching all given filters, returning summaries with totalResults. It explicitly distinguishes from siblings by specifying not for free-text concept queries (use semantic_search), not for artwork similarity (use find_similar), etc.

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?

The description provides comprehensive guidance on when to use this tool versus alternatives, including search_persons, search_provenance, collection_stats, semantic_search, and find_similar. It also explains when to prefer subject over description and gives specific usage scenarios.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kintopp/rijksmuseum-mcp-plus'

If you have feedback or need assistance with the MCP directory API, please join our Discord server