Skip to main content
Glama

Search Images

search_images
Read-onlyIdempotent

Search 200,000+ historical illustrations, emblems, engravings, diagrams, AND 24,000+ artworks (paintings, prints, sculptures). Filter by type, subject, figure, symbol, year. Results interleave two collections: illustrations extracted from book pages (each with a page number and book link) and standalone museum artworks (type: "artwork"). The first few results also return as inline images YOU can see. Hosts that support MCP Apps render an in-chat image gallery for this tool automatically; on other clients images may sit inside the collapsed tool-result view, so never tell the user images are "rendered above" unless the gallery appeared — describe what you see and give each image's url link instead. Every image_url is public and stable — an HTML page that references them directly works in any online browser. If images.length is 0, read the note field — an empty result under a book_id filter means that book has no EXTRACTED images yet, not that the physical book has no plates. A broad query can match tens of thousands (read total): narrow with type/subject/symbol or page with offset instead of raising limit. On museum-artwork results, a title_is_descriptive flag means the title is an AI description of the picture rather than a title the work was published under — cite such a record by its source_record_title, never by the descriptive one (#4288).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
typeNoImage type (woodcut, engraving, emblem, diagram). Best-effort: the medium metadata on museum artworks is unnormalized, so treat results as ranked rather than strictly filtered.
limitNoMax results (default 20, max 50)
queryNoText search (e.g., "ouroboros", "tree of life")
figureNo
offsetNoSkip this many book-illustration results — page through a large result set instead of raising limit. The response echoes offset and returns next_offset while more remain. Offsets > 0 return the gallery lane only (the museum-artwork lane has no pagination and is included only on the first page).
symbolNo
book_idNoOnly return images extracted from this book's pages. Excludes the museum-artwork collection (artworks do not belong to books).
subjectNo
year_toNoSee year_from — same reliability caution applies.
year_fromNoCAUTION: reliable only for book illustrations (source_type "book_illustration"). On museum-artwork records the year field is dirty — some 17th-century works carry ingest years like 2014, and null years bypass the range check entirely — so never draw a chronological conclusion from a year-filtered artwork result (#4288 tracks the cleanup).
include_thumbnail_base64NoEmbed each result's image as a thumbnail_data_uri (data:image/jpeg;base64,…, ~1000px) directly in the JSON. ONLY useful when your harness consumes tool results programmatically (API/SDK agents that can save the bytes without retyping them) — as a chat assistant you CANNOT copy hundreds of KB of base64 into a file, so do not request this for that purpose. To build a self-contained page from chat instead: fetch the public image_url values with your execution sandbox (if egress is blocked, ask the user to allowlist images.sourcelibrary.org in their network settings), or reference the CDN URLs directly — they are public and stable, so the page works in any online browser. First 6 results only; inline image blocks are suppressed in this mode to keep the payload bounded.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • removedInput schema / properties / iconclass
      Removed value: -{
      -  "description": "Filter by Iconclass notation, prefix-matched (\"49\" matches 49G22, 49E39, …). Coverage is SPARSE: only ~2,500 of 206K images carry a notation, so an empty result means the classifier has not run on matching images, NOT that the subject is absent from the corpus — retry with a text query before concluding anything. Book-illustration lane only (artworks are excluded when this filter is set). Matching results return their notations in an iconclass array.",
      -  "type": "string"
      -}
  2. Changed3 schema fields changed
    • addedInput schema / properties / iconclass
      Added value: +{
      +  "description": "Filter by Iconclass notation, prefix-matched (\"49\" matches 49G22, 49E39, …). Coverage is SPARSE: only ~2,500 of 206K images carry a notation, so an empty result means the classifier has not run on matching images, NOT that the subject is absent from the corpus — retry with a text query before concluding anything. Book-illustration lane only (artworks are excluded when this filter is set). Matching results return their notations in an iconclass array.",
      +  "type": "string"
      +}
    • addedInput schema / properties / year_from / description
      Added value: +"CAUTION: reliable only for book illustrations (source_type \"book_illustration\"). On museum-artwork records the year field is dirty — some 17th-century works carry ingest years like 2014, and null years bypass the range check entirely — so never draw a chronological conclusion from a year-filtered artwork result (#4288 tracks the cleanup)."
    • addedInput schema / properties / year_to / description
      Added value: +"See year_from — same reliability caution applies."
  3. Changed1 schema field changed
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "Skip this many book-illustration results — page through a large result set instead of raising limit. The response echoes offset and returns next_offset while more remain. Offsets > 0 return the gallery lane only (the museum-artwork lane has no pagination and is included only on the first page).",
      +  "type": "number"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / include_thumbnail_base64 / description
      Previous value: -"Embed each result's image as a thumbnail_data_uri (data:image/jpeg;base64,…, ~1000px) directly in the JSON — for building self-contained deliverables (HTML decks, artifacts, PDFs) from a sandboxed environment where CDN URLs cannot be fetched. First 6 results only, and inline image blocks are suppressed in this mode to keep the payload bounded. Typical flow: search WITHOUT this flag first to see candidates, then re-call with it (small limit) for the images you chose."New value: +"Embed each result's image as a thumbnail_data_uri (data:image/jpeg;base64,…, ~1000px) directly in the JSON. ONLY useful when your harness consumes tool results programmatically (API/SDK agents that can save the bytes without retyping them) — as a chat assistant you CANNOT copy hundreds of KB of base64 into a file, so do not request this for that purpose. To build a self-contained page from chat instead: fetch the public image_url values with your execution sandbox (if egress is blocked, ask the user to allowlist images.sourcelibrary.org in their network settings), or reference the CDN URLs directly — they are public and stable, so the page works in any online browser. First 6 results only; inline image blocks are suppressed in this mode to keep the payload bounded."
  5. Changed1 schema field changed
    • addedInput schema / properties / include_thumbnail_base64
      Added value: +{
      +  "description": "Embed each result's image as a thumbnail_data_uri (data:image/jpeg;base64,…, ~1000px) directly in the JSON — for building self-contained deliverables (HTML decks, artifacts, PDFs) from a sandboxed environment where CDN URLs cannot be fetched. First 6 results only, and inline image blocks are suppressed in this mode to keep the payload bounded. Typical flow: search WITHOUT this flag first to see candidates, then re-call with it (small limit) for the images you chose.",
      +  "type": "boolean"
      +}
  6. Changed2 schema fields changed
    • addedInput schema / properties / book_id / description
      Added value: +"Only return images extracted from this book's pages. Excludes the museum-artwork collection (artworks do not belong to books)."
    • changedInput schema / properties / type / description
      Previous value: -"Image type (woodcut, engraving, emblem, diagram)"New value: +"Image type (woodcut, engraving, emblem, diagram). Best-effort: the medium metadata on museum artworks is unnormalized, so treat results as ranked rather than strictly filtered."
  7. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool read-only and idempotent, but the description adds extensive behavioral context beyond that: results interleave two collections, first results appear as inline images, gallery rendering varies by client, empty results under book_id mean no extracted images yet, year_from is dirty for artworks, and title_is_descriptive records have AI-generated titles. This is exactly the kind of non-obvious behavior an agent needs.

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 long but front-loaded with the core scope, and each paragraph addresses a distinct operational concern: collections, inline images, stable URLs, empty results, pagination, dirty year data, and base64 mode. Minor redundancy exists (stable public URLs are stated twice), but the density is justified for an 11-parameter tool with no output schema.

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

Completeness5/5

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

For a high-complexity search tool with 11 parameters and no output schema, the description covers the input semantics, result-shape expectations, pagination behavior, empty-result interpretation, client-rendering caveats, and data-quality traps. An agent has enough context to call this tool correctly and interpret its results without additional documentation.

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?

With 73% schema coverage, the description carries significant parameter meaning: type is best-effort and unnormalized on artworks, offset pages only the book-illustration lane and suppresses the artwork lane, book_id excludes artworks, year_from is reliable only for book_illustration source_type, and include_thumbnail_base64 has a detailed warning about when it is genuinely useful. It also clarifies figure/symbol/subject as filter dimensions even though their schema entries are bare.

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?

Opens with a specific verb and resource: 'Search 200,000+ historical illustrations, emblems, engravings, diagrams, AND 24,000+ artworks' and immediately delimits the two collections (book-page illustrations vs museum artworks). This clearly states what the tool does and distinguishes its scope from generic library-search siblings.

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

Usage Guidelines4/5

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

The description gives strong operational guidance: narrow broad queries with type/subject/symbol, page with offset instead of raising limit, don't request thumbnail_data_uri for chat purposes, and treat year filters on artwork results as unreliable. It does not explicitly name an alternative sibling tool, so it stops short of a 5, but the contextual use cases are clear.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.