# Rijksmuseum MCP

> Rijksmuseum MCP Server provides direct access to Dutch art history data. Use this server to search Rembrandt's works, retrieve high-resolution image metadata via IIIF, and query deep bibliographic records from the museum's research library. It handles complex standards like OAI-PMH and Linked Data Event Streams (LDES), letting your AI client pull structured information across multiple formats.

## Overview
- **Category:** knowledge-management
- **Price:** Free
- **Tags:** art-history, museum-api, linked-data, iiif, cultural-heritage

## Description

**Rijksmuseum MCP Server provides straight access to Dutch art data and deep historical records.** You're connecting your AI client directly to the museum's core collection, research library, and high-resolution image metadata. This isn't surface-level searching; it handles complex standards like OAI-PMH and Linked Data Event Streams (LDES), letting your agent pull structured information across multiple formats.

**Searching for Artworks by Criteria**

The `search_collection` tool lets you filter the museum's massive holdings. You input parameters—like creator, material type, or a specific time period—and it returns objects matching those criteria. For instance, if you need all of Rembrandt’s works painted in oil between 1630 and 1645, you run `search_collection` with those filters.

If you're unsure about an object ID or a name, use the `resolve_pid` tool. It takes a Persistent Identifier (PID) and resolves it instantly, guaranteeing your agent gets the most current and accurate metadata record for that artwork.

To query academic records specifically, run `search_library`. This tool works against the Research Library's bibliographic data using Contextual Query Language (CQL) syntax. You can ask detailed questions—like 'Show me all sources mentioning Vermeer and light refraction'—and it pulls those structured library results for you.

**Handling High-Resolution Image Details**

The `get_iiif_image_info` tool fetches the technical metadata for any IIIF image. When you run this, you get details on its resolution and what formats are available. You'll know if it supports 4K or if it's restricted to JPG/PNG. It tells you exactly what kind of asset you're working with.

To see *how* that high-resolution object can be viewed online, use `get_iiif_manifest`. This tool retrieves the full IIIF presentation manifest for an object. That manifest isn't just a link; it defines every step needed to display the high-res asset correctly in a viewer.

**Bulk and Structured Data Harvesting**

For pulling massive amounts of metadata, you use `oai_pmh_request`. This tool harvests data in bulk by making requests through the Open Archives Initiative Protocol (OAI-PMH). You specify what collection or date range you want, and it pulls hundreds of records at once.

When dealing with evolving datasets, Linked Data Event Streams (LDES) are key. Start by running `get_ldes_collection` to fetch metadata streams for an entire LDES collection. This gives you the roadmap for the data. Then, use `get_ldes_dataset`. You feed it a specific dataset identifier, and it pulls those defined records directly. It’s how your agent digs into complex, structured streams of information.

You don't need to write any boilerplate code or worry about API keys; you just tell your AI client what data you need—a Rembrandt search, the IIIF manifest for a specific object, or bulk metadata via OAI-PMH—and it handles routing the query through the appropriate tool. It’s straight access to museum history.

## Tools

### get_iiif_image_info
Gets the technical metadata for an IIIF image, detailing its resolution and format capabilities.

### get_iiif_manifest
Retrieves the full IIIF presentation manifest which defines how to display a specific high-resolution object online.

### get_ldes_collection
Fetches metadata streams for an entire Linked Data Event Stream (LDES) collection.

### get_ldes_dataset
Retrieves specific data records from a defined LDES dataset using its identifier.

### oai_pmh_request
Harvests metadata in bulk by making requests to the Open Archives Initiative Protocol (OAI-PMH).

### resolve_pid
Takes a Persistent Identifier and resolves it to ensure you have the current, accurate object record.

### search_collection
Searches for objects within the museum's collection using various filters like creator or material type.

### search_library
Queries bibliographic records from the Research Library using Contextual Query Language (CQL).

## Prompt Examples

**Prompt:** 
```
Search the Rijksmuseum collection for paintings by Johannes Vermeer.
```

**Response:** 
```
I've found several works by Johannes Vermeer, including 'The Milkmaid' (SK-A-2344) and 'The Love Letter' (SK-A-1595). Would you like to see the detailed description or IIIF manifest for any of these?
```

**Prompt:** 
```
Find books about the restoration of 'The Night Watch' in the research library.
```

**Response:** 
```
Searching the library records... I found several bibliographic entries related to the restoration of Rembrandt's 'Night Watch', including technical reports and exhibition catalogs. Here are the top results...
```

**Prompt:** 
```
Get the IIIF image info for the identifier 'SK-C-5'.
```

**Response:** 
```
Retrieving IIIF metadata for 'The Night Watch' (SK-C-5)... The image is available at a maximum resolution of 12000x10000 pixels with support for multiple zoom levels and formats. You can access the tiles via the following base URL...
```

## Capabilities

### Search Artworks by Criteria
You can use `search_collection` to filter the museum's vast holdings based on parameters like creator, material, or time period.

### Retrieve IIIF Image Details
The `get_iiif_image_info` tool fetches technical metadata for an artwork image, including its maximum resolution and available formats.

### Fetch Presentation Manifests
Use `get_iiif_manifest` to get the full IIIF presentation manifest for an object, detailing how the high-resolution asset can be viewed.

### Query Academic Library Records
`search_library` runs contextual queries against bibliographic records from the Research Library using CQL syntax.

### Harvest Metadata via OAI-PMH
The `oai_pmh_request` tool allows you to pull metadata in bulk by requesting data through the Open Archives Initiative Protocol (OAI-PMH).

### Resolve Object Identifiers
You can run `resolve_pid` to dereference a Persistent Identifier, guaranteeing you have the most current object metadata.

## Use Cases

### Tracking an Artist's Evolution
A curator wants to see how Rembrandt’s style changed over time. They ask the agent to run `search_collection` filtered by 'Rembrandt' and then group results by date range. The agent returns a structured list of works, allowing the user to immediately jump into IIIF details using `get_iiif_image_info` for visual comparison.

### Building a Research Index
A researcher needs academic context for a specific painting. They use `resolve_pid` first to get the definitive ID, then run `search_library` with that ID to pull all related bibliographic records and technical reports.

### Migrating Museum Data
A developer needs to build a new application consuming museum metadata. Instead of manual API calls, they use the `oai_pmh_request` tool to harvest large batches of data in the standard OAI-PMH format for bulk ingestion.

### Analyzing Related Objects
A student is studying a specific period. They run `get_ldes_collection` to gather all related object streams, and then use `search_collection` with the gathered data points to find other objects that fit the same criteria.

## Benefits

- **Cross-Reference Data:** You don't have to run separate queries for images and texts. By linking `search_collection` results with the academic data from `search_library`, you get a single view of an object's provenance.
- **Standardized Image Access:** Getting IIIF manifests is clean. The `get_iiif_manifest` tool gives you the full presentation structure, not just a file link, making it easy for your agent to build a viewer.
- **Bulk Data Handling:** When you need thousands of records, forget manual calls. Using `oai_pmh_request` lets your AI client harvest massive amounts of metadata in one go.
- **Confidence in IDs:** You'll never worry about outdated links again. Running `resolve_pid` first confirms the object ID is current before you try to download any data using other tools.
- **Linked Data Mapping:** For advanced analysis, LDES tools (`get_ldes_collection`, `get_ldes_dataset`) let your agent pull related objects and streams into a structured knowledge graph.

## How It Works

The bottom line is: your agent directs a sequence of calls through specialized tools to pull data from different museum standards into one structured response.

1. Subscribe to the server and supply your Rijksmuseum API Key.
2. First, use `search_collection` or `resolve_pid` to narrow down the target artwork ID or dataset identifier.
3. Next, select the appropriate tool (`get_iiif_manifest`, `search_library`, etc.) based on whether you need image specs, academic records, or raw metadata.

## Frequently Asked Questions

**How do I search for an object by creator?**
You use the `search_collection` tool. You pass the artist's name (e.g., 'Rembrandt') into the appropriate filter parameters to narrow down the results.

**Do I need a PID before using get_iiif_manifest?**
It's best practice to use `resolve_pid` first. This confirms the ID is current and valid, which prevents the manifest request from failing due to an outdated identifier.

**What is the difference between oai_pmh_request and get_ldes_dataset?**
OAI-PMH handles bulk metadata harvesting using a standard protocol. LDES tools are for pulling structured, event-driven streams of related data points.

**Can I search academic papers with search_collection?**
No. Use `search_collection` only for physical works in the museum's inventory. For bibliographic records or research documents, you must use the `search_library` tool.

**What happens if I use `resolve_pid` with an identifier that doesn't exist?**
The tool returns a specific error code indicating no match was found. You must check your source data for typos or outdated identifiers before retrying the call.

**Are there rate limits when running bulk queries using `search_collection`?**
Yes, the server enforces a limit of 100 requests per minute. If you exceed this cap, your agent receives an HTTP 429 error and must wait before retrying.

**How do I authenticate my AI client when calling tools like `get_iiif_manifest`?**
You need to pass your unique Rijksmuseum API Key in the request headers. Authentication is required for all calls and tracks usage against your subscription limits.

**What format does the output from `get_iiif_manifest` come in?**
The manifest arrives as standard JSON, which you'll need to parse with your client language. It contains structured links for image tiles and object metadata.

**How can I find all paintings by a specific artist like Rembrandt?**
You can use the `search_collection` tool and provide the artist's name in the `creator` field. You can also refine the search by setting the `type` to 'painting'.

**Can I search for books and research papers related to an artwork?**
Yes! Use the `search_library` tool to query the Rijksmuseum Research Library. You can search by subject, author, or title using CQL queries.

**How do I access high-resolution image data for a masterpiece?**
Use the `get_iiif_manifest` tool with the object's identifier. This provides a standardized manifest containing image sequences and metadata for high-resolution viewing.