archival-imagery-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@archival-imagery-mcpSearch the Met for Renaissance paintings of dogs."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
archival-imagery-mcp
An MCP server for browsing and downloading open-licensed imagery from six major museum and archive APIs. Built for editorial projects that need authored, archival visual material instead of AI-generated stock.
What this is
When Claude or any other MCP-compatible client needs imagery for an editorial project — a service site, a long-form article, a brand book, a deck — generating images from scratch usually produces something that reads as AI. For brands with editorial bona fides, that signal is fatal.
This server gives the assistant a different option: search the world's open-access museum collections for authored, attributed, often-centuries-old imagery and download it straight into the project's public/ folder. Most results are CC0, CC-BY, or Public Domain Mark — usable with no licensing friction.
Related MCP server: IIIF MCP Server
Sources
Source | Coverage | API Key | License Defaults |
Wellcome Collection | UK. Medical, scientific, esoteric, astrological history. ~250k items. | No | CC-BY / PDM |
Met Museum | US. Open Access program. ~470k objects, all CC0 when public domain. | No | CC0 |
Library of Congress | US. Photos, manuscripts, maps, prints, newspapers, film. ~1M items. | No | Mostly PD |
Smithsonian Open Access | US. 4.5M+ CC0 items across 21 museums. | Free | CC0 |
Europeana | EU aggregator — British Library, Louvre, full Rijksmuseum collection, plus 4000+ institutions. | Free | Mixed (filterable) |
Note on Rijksmuseum: the Rijksmuseum's REST API was deprecated in 2024 in favour of OAI-PMH (an XML harvesting protocol designed for institutional bulk-download, not query-by-keyword). Rather than re-implement on a less query-friendly protocol, this server intentionally omits direct Rijksmuseum support. Europeana fully indexes the Rijksmuseum collection — query it via
europeana_searchwithprovider="Rijksmuseum".
Installation
From npm (recommended)
No install step needed if you have Node 18+ — just point your MCP client at npx:
{
"mcpServers": {
"archival-imagery": {
"type": "stdio",
"command": "npx",
"args": ["-y", "archival-imagery-mcp"],
"env": {
"SMITHSONIAN_API_KEY": "your-key-here-or-omit",
"EUROPEANA_API_KEY": "your-key-here-or-omit"
}
}
}
}Or install once globally:
npm install -g archival-imagery-mcpThen use "command": "archival-imagery-mcp" (no args needed) in your config.
API keys are all optional — Wellcome, Met, and Library of Congress work without keys. Smithsonian and Europeana tools return a helpful error message with the signup URL if their key is missing.
From source (for development / custom builds)
git clone https://github.com/chandhoke/archival-imagery-mcp.git
cd archival-imagery-mcp
npm installThen point your MCP config at the local path:
{
"mcpServers": {
"archival-imagery": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/archival-imagery-mcp/index.mjs"]
}
}
}Getting the optional API keys
All free, all take under 2 minutes:
Smithsonian: api.data.gov/signup/ — email confirmation. The same key works for NASA, NOAA, FCC, and most US government APIs.
Europeana: pro.europeana.eu/page/get-api — instant. Covers British Library, Rijksmuseum, Louvre, and 4000+ other institutions in one endpoint.
Tools (12 total)
Search & retrieval
Tool | Source | Needs Key |
| Wellcome | — |
| Wellcome | — |
| Wellcome (utility) | — |
| Met | — |
| Met | — |
| Library of Congress | — |
| Library of Congress | — |
| Smithsonian | ✓ |
| Smithsonian | ✓ |
| Europeana | ✓ |
| Europeana | ✓ |
Shared utility
Tool | Purpose |
| Save any image URL (from any of the above) to a local path. Creates parent dirs automatically. |
Usage examples (natural language)
Once installed, just describe what you want and the assistant picks the right tool:
"Find Indian astrology pieces at the Met that we could use on /method — show me 5."
"Search Wellcome for nakshatra diagrams and save the best two to my project's public/brand/ folder."
"Use Europeana with provider='Rijksmuseum' to find Vermeer paintings — I want a portrait for the about page."
"Use Europeana to find anything from the British Library tagged 'Sanskrit manuscript' — only CC0/CC-BY please."
Attribution
When using imagery from any of these sources in published work, always check the per-item license (returned with every result) and follow its attribution requirements. Most CC-BY items only need a short credit line:
Imagery courtesy of [Source] (CC BY 4.0).CC0 / Public Domain Mark items have no attribution requirement but crediting the source is good practice.
Architecture
Single-file MCP server (
index.mjs), ~400 linesNative
fetch(Node 18+), no HTTP library dependencyOnly one dependency:
@modelcontextprotocol/sdkNo telemetry, no persistent state, no auth required for the server itself
Stateless — every tool call hits the upstream API fresh
Extending
To add another source (e.g. New York Public Library Digital Collections, DPLA, Gallica):
Add a section under
// =========================================================================withxyzSearch,xyzGetObjectfunctionsAdd an env-var helper if it needs a key (use the existing
requireKeypattern)Add entries to the
TOOLSarray with clear descriptionsAdd entries to the
HANDLERSmap
~50 lines per new source.
License
MIT © Harpreet Chandhoke
This server is a client for third-party APIs. Each source has its own terms — respect them in your usage. The MIT license applies only to this server code, not to the content retrieved.
Available Tools
12 toolsdownload_imageA
Download any image URL to a local file path. Parent directories are created automatically. Works with images returned from any of the above sources.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| savePath | Yes | Absolute local path, e.g. 'C:/path/to/project/public/brand/asset.jpg' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does disclose a useful side-effect (parent directories are created automatically) and broad source compatibility, but does not mention return values, error handling, or whether existing files are overwritten. It is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no wasted words. The primary purpose is front-loaded, and each sentence adds a distinct piece of information (what, side-effect, source compatibility).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but because there is no output schema and no annotations, the description should explain what the tool returns or how success/failure is indicated. It does not mention the return value or error scenarios, leaving a gap. The description is clear but not fully complete for an agent to invoke without assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with only savePath having a description. The description clarifies the overall function (url to local file path) but does not add specific details about the URL format or constraints beyond what is already implied by the tool name and schema. It compensates partially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads any image URL to a local file path, using a specific verb and resource. It also distinguishes itself from the sibling search/get tools by noting it works with images returned from those sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating it works with images from any of the above sources, which guides the agent to use this tool when a URL is available. However, it does not explicitly state when not to use it or name alternative tools for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
europeana_get_recordA
Fetch a Europeana record by ID (e.g. '/2048128/618580'). Requires EUROPEANA_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| recordId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the API key requirement and gives an example ID, but does not mention return format, error handling, or whether the operation is read-only. For a fetch tool this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the verb and resource. The API key note is concise and relevant. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, no output schema, and no annotations, the description covers the core purpose, required auth, and an ID example. It lacks explicit return-value details, but for a fetch operation the return is implied. Overall, it's sufficient but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for recordId (0% coverage), but the description provides an example value ('/2048128/618580') that clarifies the expected format. This adds meaning beyond the schema's bare type string, though it could further explain where to find the ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Fetch') on a specific resource ('a Europeana record by ID'), with an example ID format. This distinguishes it from the sibling europeana_search tool, which is for searching rather than fetching by ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a known record by ID, which contrasts with the search tool. It also notes the API key requirement, which is a prerequisite. However, it doesn't explicitly state 'use this when you have an ID' or mention alternatives, so it's clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
europeana_searchA
Search Europeana (EU aggregator covering British Library, Rijksmuseum, Louvre, and 4000+ other institutions). Defaults to open-licensed media only. Requires EUROPEANA_API_KEY env var (free, sign up at pro.europeana.eu).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| onlyOpen | No | Restrict to truly open licenses (CC0, CC-BY, PD). | |
| pageSize | No | ||
| provider | No | Optional. e.g. 'The British Library', 'Rijksmuseum'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It reveals a critical prerequisite (EUROPEANA_API_KEY env var) and a behavioral default (open-licensed media only), but does not describe what the search returns, pagination behavior, rate limits, or error handling. The default is also already visible in the schema, so the description adds less unique value here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with zero fluff. It front-loads the core purpose, then supplies the default behavior and the API key requirement. Every clause earns its place and the structure is ideal for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema and annotations, the description covers the essential facts for invoking the tool: what it searches, the default open-license filter, and the required environment variable. It does not describe the return shape, but that is not critical for correct invocation. The inclusion of example institutions helps with the provider parameter. It is complete enough for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (onlyOpen and provider have descriptions). The description does not clarify the semantics of 'query' or 'pageSize', though these are self-explanatory from names. It provides helpful context about provider examples by naming institutions, but overall it adds limited value beyond the schema for the remaining parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: 'Search Europeana', a specific verb and resource. It also names the aggregator and examples of included institutions, which clearly distinguishes this search tool from sibling tools like wellcome_search or met_search, and from europeana_get_record which is for retrieving a specific record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool is for searching a broad EU cultural heritage aggregator. While it does not explicitly say 'use X instead', the scope and examples implicitly signal when this tool is appropriate versus siblings. It lacks explicit exclusions or alternative tool mentions, but the context is strong enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loc_get_itemA
Fetch a Library of Congress item by full URL (e.g. 'https://www.loc.gov/item/2003663891/'). Returns metadata and all image file URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| itemUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states what the tool returns ('metadata and all image file URLs') and gives an example URL format, but does not disclose potential error behaviors, URL validity requirements, or any side effects. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences. The verb 'Fetch' starts the description, and the example URL provides concrete guidance without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description is largely complete: it states the purpose, input format, and return payload. However, it would be stronger if it noted behavior for invalid URLs or explicitly linked to the download_image sibling for handling returned image URLs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description effectively documents the single parameter by defining it as a 'full URL' and providing an explicit example. This gives the agent enough semantic understanding to construct a valid itemUrl value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Fetch') and resource ('a Library of Congress item'), and specifies the key input method (by full URL). The example URL further disambiguates the tool, distinguishing it from sibling search tools like loc_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the agent has a full item URL, which provides clear context. However, it does not explicitly mention alternatives or exclusions, such as 'use loc_search when you only have a query'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loc_searchB
Search the Library of Congress (US). Massive collection across photos, manuscripts, prints, maps, newspapers, films. No API key. Use the category param to restrict (e.g. 'photos', 'maps', 'manuscripts').
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| category | No | Optional: 'photos', 'maps', 'manuscripts', 'newspapers', 'film-and-videos', etc. | |
| pageSize | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that no API key is needed and that the category parameter can restrict the search, which is useful behavioral context. However, it doesn't describe return format, pagination, rate limits, or other operational traits, leaving significant gaps for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the resource and purpose, and keeps extra details short. Every sentence earns its place, though the ordering of 'no API key' before the category instruction could be slightly improved. Overall it's concise and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema, the description doesn't explain what results look like or how to use related tools like loc_get_item. It mentions collection scope but lacks details on pagination, query syntax, or integration with siblings. The description provides a basic foundation but is incomplete for practical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only category has a description). The description reinforces category usage with examples but fails to explain 'query' (the required parameter) or 'pageSize' (with a default). Since coverage is low, the description should compensate more, but it does the bare minimum for category only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a search for the Library of Congress, using the verb 'Search' and a specific resource. It also lists the collection types, which adds useful scope. However, it doesn't explicitly contrast with sibling search tools, so it falls short of fully distinguishing itself beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives some usage context: it notes there is no API key and hints at using the category parameter to restrict results. But it doesn't explicitly state when to use this tool over other museum search tools (e.g., wellcome_search, met_search) or mention exclusion scenarios. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
met_get_objectA
Fetch a Met object by numeric ID with all image URLs (primary + additionals) and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| objectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It does mention the return content (all image URLs and metadata), but it does not address read-only safety, error handling, or potential limitations. This is a simple fetch operation, so the risk is low, but more transparency could be provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no fluff. It efficiently conveys the core action, resource, and return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (single parameter, no output schema), the description adequately explains the return content. However, it omits usage context and edge-case behavior, which prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description only says 'numeric ID', which merely echoes the schema's type 'number'. It does not name the parameter 'objectId' or add constraints, ranges, or examples, failing to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a Met object by numeric ID, listing the return content (image URLs and metadata). This distinguishes it from sibling tools like met_search (search vs. fetch) and other museum get tools (specific to the Met).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or scenarios where another tool (e.g., met_search) would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
met_searchA
Search the Met Museum (US). Defaults filter to hasImages + isPublicDomain (CC0), so every result is freely usable. 470k+ objects; narrow queries help. No API key.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| pageSize | No | ||
| hasImages | No | ||
| departmentId | No | Optional. 16 = Asian Art, 11 = European Paintings, etc. | |
| isPublicDomain | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains the default filters for hasImages and isPublicDomain, the CC0 licensing of results, and the lack of an API key requirement. It also mentions the large object count and advises narrowing queries, which sets expectations about search performance. However, it does not describe the output format or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short sentences, each contributing important information: purpose, default filters, dataset scale, and API key requirement. It is front-loaded with the core action and contains no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters, no output schema, and no annotations, the description covers the core search behavior and key defaults, but it does not mention what the search returns (e.g., object IDs) or indicate that met_get_object is needed to fetch full details. This missing workflow context makes it less complete for an agent planning multi-step interactions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (only departmentId is described). The description adds meaning to hasImages and isPublicDomain by explaining the default filters and that results are freely usable, and it advises narrow queries for the query parameter. However, it does not clarify pageSize semantics or further detail query matching behavior, leaving gaps that the description could have filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search the Met Museum (US)', which is a specific verb and resource. It also mentions unique default filters for hasImages and isPublicDomain, distinguishing it from sibling museum search tools. This makes the tool's purpose immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful usage context: defaults filter to freely usable CC0 results, there are 470k+ objects, narrow queries are recommended, and no API key is needed. It does not explicitly exclude alternatives or say 'use this when searching the Met', but the description and name clearly imply that. It offers guidance on how to query effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
smithsonian_get_objectB
Fetch a Smithsonian object by ID with all image URLs and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses what the tool returns (image URLs and metadata), but does not mention authentication, rate limits, error handling, or any other behavioral constraints. Basic operational facts are present, but no deeper transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that conveys the essential purpose and output without any wasted words. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, no output schema), the description covers the core purpose and main output, but lacks caveats about missing IDs, authentication requirements, or possible response limitations. It's minimally viable but leaves some context gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines 'id' as a string, and the description adds no additional meaning beyond restating 'by ID'. There is no guidance on the format, source, or examples of the ID, which is a significant gap given 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Fetch), the resource (Smithsonian object), and the method (by ID), while also noting the included content (all image URLs and metadata). This distinguishes it from search tools and other museum-specific get tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool is used when you have an ID and need full object details, but it does not explicitly say to use search first or provide any when/when-not alternatives. The usage context is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
smithsonian_searchA
Search the Smithsonian Open Access (US). 4.5M+ items, defaults to CC0-only images. Requires SMITHSONIAN_API_KEY env var (free, sign up at api.data.gov).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| onlyCC0 | No | ||
| pageSize | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It reveals that the search defaults to CC0-only images and requires an API key, which is valuable. Missing are details about return format, pagination, error handling, or what happens without a valid key, so behavioral disclosure is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, followed by essential details on default behavior and prerequisites. Every word earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with one required parameter and no output schema, the description covers scope and authentication, but lacks return value expectations, parameter detail, and pagination/error behavior. This leaves the agent with moderate completeness; it is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It only hints at 'onlyCC0' via 'defaults to CC0-only images' and implies 'query' from the act of searching. 'pageSize' receives no explanation, and there is no explicit mapping of parameters to behavior, leaving the agent with limited semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Smithsonian Open Access with a specific verb ('Search') and resource ('Smithsonian Open Access'), distinguishing it from sibling museum search tools (e.g., wellcome_search, met_search). The item count (4.5M+) adds useful context without confusing the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that this tool is for Smithsonian Open Access searches, which implicitly steers usage away from sibling tools for other institutions. It also mentions a required API key, an important precondition. However, it does not explicitly state when to use it vs alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellcome_get_workA
Fetch a Wellcome work by ID with all associated IIIF image URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that this is a fetch (read-only) operation and that the response includes all associated IIIF image URLs. However, it does not describe error behavior, response format validity, or any potential rate limits, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word adds value in specifying the action, resource, and key output detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema), the description covers the primary purpose and the notable return behavior (IIIF image URLs). It does not explain error cases or full response structure, but these are secondary for a straightforward fetch operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by indicating that the 'id' parameter is the Wellcome work identifier, but it lacks examples or format details. For a single parameter, this is adequate but minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Fetch'), the target resource ('Wellcome work'), and the unique distinguishing feature (includes IIIF image URLs). This clearly differentiates it from sibling tools like wellcome_search and wellcome_image_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you have a Wellcome work ID and need the work with its IIIF image URLs. It provides no explicit exclusions or comparisons to alternatives like wellcome_search or wellcome_image_url, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellcome_image_urlA
Build a direct Wellcome IIIF image URL at any IIIF Image API size ('1200,', ',900', 'full', etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | 1200, | |
| iiifId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral transparency burden. It discloses that the tool accepts arbitrary IIIF size strings and builds a direct URL. It does not detail error handling or return type, but for a simple pure URL builder, the main behavior is clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence containing all essential information, with practical examples inline. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, no annotations, and no output schema, the description covers the primary function and size options. However, it omits explicit clarification of what 'iiifId' should be and does not state the output is a URL string, though implied. This gap prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero per-property descriptions (0% coverage), so the description must compensate. It thoroughly explains the 'size' parameter with examples, but leaves 'iiifId' undefined, relying on the parameter name and tool context. This partial coverage warrants a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the imperative verb 'Build' and the specific resource 'direct Wellcome IIIF image URL', making the function unambiguous. It also includes concrete size examples, and it is clearly distinct from sibling metadata/search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: construct a direct image URL for the Wellcome IIIF API. It does not explicitly mention alternatives like download_image or wellcome_get_work, but the context makes it clear this is for URL generation. No exclusions or when-not-to-use guidance is provided, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellcome_searchA
Search the Wellcome Collection catalogue (UK). kind='works' for catalogue entries, kind='images' for direct IIIF image hits. Rich in medical/scientific/esoteric/astrological history; mostly CC-BY or Public Domain Mark. No API key.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | works | |
| query | Yes | Search query, e.g. 'jyotish', 'yantra', 'anatomy' | |
| pageSize | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds valuable context: 'No API key' (access requirement), 'mostly CC-BY or Public Domain Mark' (licensing behavior), and mentions that 'images' mode returns 'direct IIIF image hits' (output format). However, it does not explicitly state read-only behavior, rate limits, pagination, or error handling, leaving some gaps for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The first sentence front-loads the main purpose, the second efficiently delivers parameter guidance and contextual notes. Every clause earns its place, making it concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description gives a reasonably complete picture: the target collection, content focus, access requirement (no API key), and the two result kinds. It does not specify response schema or pagination, but for a simple search tool with three parameters, this is adequate. It also distinguishes from siblings through the UK-specific collection context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%), but the description compensates by explaining the 'kind' parameter clearly: kind='works' for catalogue entries and kind='images' for IIIF image hits. This adds meaning beyond the bare enum. pageSize is not discussed, but its name and default make it self-explanatory; overall, the description provides meaningful parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Search the Wellcome Collection catalogue (UK)' – a specific verb and resource that immediately identifies the tool's function and scope. It further distinguishes from sibling search tools by naming the unique collection and explicitly dividing searches into 'works' and 'images' modes, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it explains the meaning of the 'kind' parameter with concrete examples ('works' vs 'images') and notes that no API key is required, which sets expectations. It also hints at content relevance ('medical/scientific/esoteric/astrological history'). However, it does not explicitly compare with alternatives like europeana_search or wellcome_get_work, so it stops short of a 5.
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.
12 tool updates
v0.2.1- First observed
download_image - First observed
europeana_get_record - First observed
europeana_search - First observed
loc_get_item - First observed
loc_search - First observed
met_get_object - First observed
met_search - First observed
smithsonian_get_object - First observed
smithsonian_search - First observed
wellcome_get_work - First observed
wellcome_image_url - First observed
wellcome_search
TDQS
Scored across 12 tools
Each tool is clearly scoped to a specific institution and action (search vs. fetch vs. utility). The institution prefixes make it immediately clear which API a tool targets, and search/fetch pairs within each institution are unambiguous. Even the generic download_image is distinct as a utility.
The naming follows a predictable {institution}_{search|get_*} pattern for the source-specific tools, with snake_case throughout. The only deviation is wellcome_image_url, which uses a noun phrase instead of a verb, but it is still recognizable and consistent in style.
12 tools is well-scoped for a multi-institution archival imagery server. Each institution has at least a search and a fetch tool, plus a generic download utility and a IIIF URL builder. No tool feels redundant or unnecessary.
The server covers the complete lifecycle for the domain: search each institution's collections, retrieve detailed metadata and image URLs, and download images. All included institutions have both search and fetch capabilities, so there are no dead ends or obvious missing operations.
Maintenance
Related MCP Connectors
Art MCP — Metropolitan Museum of Art Collection API (free, no auth)
MCP server for searching Airweave collections with natural language queries.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
MCP server for Open Archives: Dutch genealogical records and historical page transcriptions.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that enables searching and fetching openly-licensed images from Openverse with features like filtering by license type, getting image details, and finding essay-specific illustrations.528 npm18MIT
- AlicenseAqualityDmaintenanceMCP server for IIIF integration, enabling image fetching, manifest exploration, annotation search, and authentication support for cultural heritage resources.112MIT
- AlicenseNot gradedqualityBmaintenanceA Python MCP server for searching, downloading, extracting, inspecting, and previewing game assets from multiple public sources.1MIT
- AlicenseAqualityDmaintenanceMCP server for searching museum collections and viewing artwork images and metadata from multiple museums, including the Met, Art Institute of Chicago, Rijksmuseum, and more.248 npm2MIT