Skip to main content
Glama

smithsonian-mcp-server

Server Details

Search 14.5M Smithsonian Open Access objects, get CC0 images, find cross-collection connections.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/smithsonian-mcp-server
GitHub Stars
2
Server Listing
@cyanheads/smithsonian-mcp-server

Available Tools

6 tools
smithsonian_browse_categoryBrowse Smithsonian by CategoryA
Read-onlyIdempotent
Inspect

Browse Smithsonian objects within one exact category — a single museum (mode "museum"), culture, indexed date term (mode "period"), object type (mode "medium"), or subject term (mode "topic"). The value must be an exact indexed category term, not free text: resolve museum, culture, period, and topic vocabulary with smithsonian_list_terms first (object_type is not enumerable there — harvest it from smithsonian_search_objects results, and treat each casing as its own category, since a harvested object_type covers only the casing it was written in). Returns the category total count, a page of matching objects, and a museum breakdown of that page; page the full category with start and rows. For open-ended or topic discovery, start with smithsonian_search_objects instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesBrowse dimension: "museum" (by unit code), "culture" (by culture term), "period" (by indexed date term like "1940s" or "500-1500"), "medium" (by object type like "Paintings"), "topic" (by subject term like "Quilts").
rowsNoNumber of sample objects to return (default 10, max 50).
startNoPagination offset — 0-indexed. Page contiguously with start = page × rows.
valueYesCategory value appropriate to the mode. museum: a unit code like "NASM", "SAAM", or "NMNHBIRDS", matched literally and case-sensitively — not a museum name. culture: term, often plural or qualified ("Aztecs", "Plains Indian"). period: an indexed date term — commonly a decade ("1940s", "1860s"), but year ranges ("500-1500"), century terms ("21st century"), and BCE forms ("-2500", "BCE 1000s") are indexed too. medium: object type, usually plural ("Paintings", "Aircraft"). topic: subject term ("Quilts", "Aviation"). Smithsonian uses a controlled vocabulary — for museum (unit_code), culture, period (date), and topic, call smithsonian_list_terms to find exact terms; medium (object_type) is not enumerable there, so harvest it from smithsonian_search_objects results. Every mode matches its value exactly and case-sensitively, and for medium that split is load-bearing: casing variants are indexed as SEPARATE categories, each reporting its own total_count ("button" and "Button" are different categories, and neither casing is reliably the larger), so browse the variants of a harvested value rather than assuming one covers the concept.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe rows cap that was applied.
modeNoBrowse dimension used for this request (one of "museum", "culture", "period", "medium", "topic").
errorNoPresent when the call failed. Absent on success.
shownNoNumber of sample objects returned.
valueNoCategory value queried, as provided in the request.
noticeNoGuidance naming the input that retrieves the objects this page omitted.
truncatedNoTrue when matching objects remain past this page. False on a terminal or past-the-end page, where nothing is being withheld.
total_countNoTotal number of Smithsonian objects matching this category.
sample_objectsNoThe requested page of objects matching the category, in upstream order. Empty when start is past the end of the category.
museum_breakdownNoWhen mode is not "museum": top contributing museums from the sample, helping plan museum-focused follow-up searches.
truncationCeilingNoTotal matching objects (upper bound for omitted items).

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnly/openWorld/idempotent hints, the description discloses exact case-sensitive matching, emphasizes that medium casing variants are separate categories with independent totals, and states the return shape (total count, page, museum breakdown) plus pagination semantics. No contradictions 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 dense but every sentence contributes: it opens with the core purpose, then flow constraints, then return and pagination, then the alternative tool. No filler; the structure flows logically from what→how→when-not.

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 complex 4-parameter tool with five modes, the description fully specifies required vocabulary resolution, exact matching behavior, the casing split, return contents, pagination, and routing to sibling tools. An output schema exists to cover return details, so nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100%, but the description adds substantial practical meaning: it explains each mode's value format with concrete examples (unit codes, decade terms, BCE forms), the casing sensitivity trap for medium, and how to obtain valid values. This goes well beyond the schema's descriptions and is critical for correct invocation.

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 states a specific action ('browse Smithsonian objects') and scope ('within one exact category'), enumerates the five modes, and explicitly contrasts with the open-ended smithsonian_search_objects. This clearly delineates its purpose from siblings and gives the agent a precise mental model.

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 gives explicit when-to-use instructions: resolve museum/culture/period/topic via smithsonian_list_terms, harvest medium from smithsonian_search_objects, and 'For open-ended or topic discovery, start with smithsonian_search_objects instead.' It also warns against free-text values, making the usage constraints unambiguous.

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

smithsonian_get_mediaGet Smithsonian Object MediaA
Read-onlyIdempotent
Inspect

Return every CC0 (open-access) image for a Smithsonian object at multiple resolutions. The tool never returns an empty list — it names the reason instead: an object with nothing digitized, an object whose media is entirely non-image (scanned books, 3D models, sound recordings), and an object whose images are entirely non-CC0 each fail with their own reason. Each image entry includes thumbnail (~120px), screen-size (~800px), and high-resolution JPEG/TIFF URLs with pixel dimensions. The cc0_only filter on smithsonian_search_objects surfaces objects that have downloadable CC0 images.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesrecord_id of the object (e.g. "nasm_A19670093000") from smithsonian_search_objects or smithsonian_get_object.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
titleNoObject title from the catalog record.
imagesNoCC0-licensed images for this object.
is_cc0NoTrue when the object-level metadata is CC0. The Open Access corpus is CC0 throughout, so this rarely varies; the per-image is_cc0 flag is what gates delivery.
record_idNoSmithsonian catalog record ID for the object.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover readOnly, idempotent, and openWorld hints. The description goes beyond these by disclosing the never-empty-list guarantee and explaining the three distinct failure reasons (nothing digitized, non-image media, non-CC0 images). It also describes the output structure (thumbnail, screen-size, high-res URLs with pixel dimensions), providing meaningful behavioral context without contradicting 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 reasonably concise given the amount of behavioral detail it conveys. It front-loads the core purpose, then efficiently covers edge cases and output structure. Each sentence contributes information, though it could be slightly tightened without loss. Overall it is well structured and not padded.

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 single-parameter, read-only tool with an existing output schema and annotations covering safety, the description provides complete operational context. It covers the main behavior, failure modes, output characteristics, and even cross-references a sibling tool's filter for workflow integration. Nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'id' parameter, including a format example and source references. The description does not add additional semantic detail about the parameter beyond what the schema already provides, so the baseline of 3 is appropriate.

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 states a specific verb ('Return'), a specific resource ('every CC0 image for a Smithsonian object'), and the scope ('at multiple resolutions'). It clearly distinguishes itself from sibling tools that handle search, browsing, or related-objects, and the mention of the cc0_only filter on smithsonian_search_objects further differentiates the workflow.

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 a clear usage hint by pointing to the cc0_only filter on smithsonian_search_objects, implying the agent should search first to find objects with downloadable CC0 images and then call this tool with the record_id. However, it does not explicitly state when *not* to use this tool or list alternatives for other scenarios, so it lacks full exclusion guidance.

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

smithsonian_get_objectGet Smithsonian ObjectA
Read-onlyIdempotent
Inspect

Fetch a normalized catalog metadata projection for a Smithsonian object by its record_id (from smithsonian_search_objects results). Returns the exposed catalog fields — title, dates, description, makers, materials, dimensions, places, cultures, topics, exhibitions, credit line, identifiers, rights, and a media summary. The media summary is a count; full image URLs come from smithsonian_get_media.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesObject record_id from smithsonian_search_objects results (e.g. "nasm_A19670093000").

Output Schema

ParametersJSON Schema
NameRequiredDescription
datesNoAll date fields in the catalog record.
errorNoPresent when the call failed. Absent on success.
placeNoGeographic place associations.
titleNoObject title.
is_cc0NoTrue when the object metadata is CC0 (open access). The Smithsonian Open Access corpus is CC0 throughout, so this flag rarely varies — read media_summary.has_cc0_images to predict whether smithsonian_get_media returns images.
makersNoAll named parties associated with this object.
topicsNoSubject and topic terms.
cultureNoCulture associations.
materialsNoPhysical material descriptions.
record_idNoUnique object identifier.
unit_codeNoMuseum unit code.
dimensionsNoDimension and measurement strings.
credit_lineNoAttribution or credit string.
descriptionNoBest available prose description (Summary, Physical Description, or Brief Description notes).
exhibitionsNoExhibition history.
identifiersNoAll accession and catalog identifiers.
museum_nameNoFull museum name. A few rarely-indexed archive sub-unit codes have no mapped name and fall back to the raw unit code.
record_linkNoCanonical Smithsonian Institution URL for this object.
media_summaryNoMedia availability summary. Call smithsonian_get_media for full image URLs.
object_rightsNoRights statement from the catalog.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value by specifying the return is a 'normalized catalog metadata projection' with a list of exposed fields and that the media summary is a count, which is beyond what annotations convey. No contradictions 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 two sentences with zero fluff. The core purpose is front-loaded, and the note about media summary and smithsonian_get_media is logically placed. Every sentence earns its place.

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

Completeness4/5

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

Given the tool is a simple read-only fetch with a single parameter and has an output schema (not explicitly provided but declared), the description covers the essential context. It lists the returned fields and clarifies the media summary behavior. Minor gaps like error handling or authentication requirements are not critical for a read-only idempotent tool with strong annotations.

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

Parameters3/5

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

Schema description coverage is 100% — the id parameter is described with an example (e.g., 'nasm_A19670093000'). The description reuses 'record_id' from search results, which matches the schema. It doesn't add more detail than the schema already provides, so baseline 3 is appropriate.

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 the tool fetches a normalized catalog metadata projection for a Smithsonian object by record_id, with specific resource and verb. It distinguishes from siblings by noting the media summary is a count and full image URLs come from smithsonian_get_media, so an agent can tell it apart from smithsonian_get_media.

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 explicitly ties this tool to smithsonian_search_objects results, indicating when to use it (after searching). It also mentions that full image URLs come from smithsonian_get_media, implicitly routing away from that sibling. While it doesn't explicitly state when-not to use other tools, the context is clear enough.

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

smithsonian_list_termsList Valid Filter TermsA
Read-onlyIdempotent
Inspect

Enumerate the valid term vocabulary for an indexed Smithsonian filter field (unit_code, culture, place, date, online_media_type, topic). Terms are a controlled vocabulary — often plural or qualified (e.g. "Paintings", not "Painting") — so guessed filter values tend to return nothing. Returns a page of the field's distinct term values; large vocabularies (topic has 133k terms, place 114k) page via start and rows. For unit_code, each code is returned with its museum name and contains matches the name as well as the code, so a museum name resolves to its code in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNoNumber of terms to return per page (default 50, max 100).
fieldYesIndexed field to enumerate. Choices: unit_code (museum codes like "NASM"), culture (e.g. "Aztecs"), place (geographic terms), date (decade/era values like "1920s"), online_media_type (media formats like "Images", "3D Models"), topic (subject terms like "Quilts" — 133k terms, so pair it with contains).
startNoPagination offset (0-indexed). Use with rows to page through large vocabularies.
containsNoCase-insensitive substring filter on the term vocabulary — resolve a filter value (e.g. "greek") to its exact controlled-vocabulary term(s). For unit_code the substring also matches each code's museum name, so "National Air and Space" resolves to "NASM".

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe rows cap that was applied.
errorNoPresent when the call failed. Absent on success.
fieldNoThe enumerated field, as provided in the request.
shownNoNumber of terms returned in this page.
termsNoThe field's distinct term values for this page, in the Smithsonian index's native order. No per-term object counts are available upstream.
totalNoTotal number of distinct terms for this field (the full vocabulary size; terms is one page of it).
labelsNoMuseum name for each unit_code on this page that has one — present only when field is "unit_code". A few rarely-indexed archive sub-unit codes have no mapped name and are absent from this map; their term is still returned in terms.
noticeNoGuidance naming the input that retrieves the terms this page omitted, or how to broaden a contains filter that matched nothing.
truncatedNoTrue when matching terms remain past this page. False on a terminal or past-the-end page, where nothing is being withheld.
truncationCeilingNoDistinct terms available for this query (the full vocabulary, or the contains-match count) — upper bound for omitted items.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description is not burdened with the basic safety profile. It adds valuable behavioral details: pagination through large vocabularies (topic 133k, place 114k), and the special unit_code behavior (returning museum names and matching on them). This goes beyond the schema and annotations, giving the agent a realistic expectation of output and quirks.

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 detailed but every sentence contributes. The purpose is front-loaded, and the vocabulary-size caveat is strategically placed. While it runs longer than typical, the complexity of the tool (multiple fields, pagination, contains behavior) justifies the length. No filler or redundancy.

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

Completeness4/5

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

Given the tool's complexity and that an output schema exists (so return format is covered), the description is thorough. It explains the controlled-vocabulary caveat, pagination needs, and the special unit_code behavior. One minor gap: it does not mention whether results are sorted or whether there are any rate limits, but these are not critical for correct invocation. Overall, complete enough for an agent to use effectively.

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 coverage is 100%, so the baseline is 3. The description enriches the parameters with concrete examples for each field enum (e.g., unit_code 'NASM', topic 'Quilts'), explains the 'contains' parameter's substring behavior including case-insensitivity and unit_code name matching, and clarifies pagination with start/rows. This adds practical value beyond the schema's bare definitions.

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 the verb 'Enumerate' and the resource 'valid term vocabulary for an indexed Smithsonian filter field', listing the specific fields. This unambiguously distinguishes it from the sibling tools like search_objects or browse_category, which handle different operations. The purpose is specific and actionable.

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 explains why this tool is needed (controlled vocabulary means guessed filters often fail) and implies when to use it (before constructing filter queries). It does not explicitly name alternatives or exclusion conditions, but the context is clear enough that an agent would know to use this to resolve valid filter values. Slight deduction for not explicitly contrasting with siblings.

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

smithsonian_search_objectsSearch Smithsonian ObjectsA
Read-onlyIdempotent
Inspect

Recommended first step for open-ended or topic discovery: free-text search across 14.5 million Smithsonian objects, with optional exact filters. Filters narrow by museum unit, object type, indexed date term, culture, geographic place, subject topic, named party, and online/CC0 availability. Returns curated summaries (title, date, museum, thumbnail URL, CC0 flag) with the total match count. The record_id in each result is the identifier for smithsonian_get_object, smithsonian_find_related, and smithsonian_get_media. To browse one exact category — a single museum, culture, date term, object type, or topic — use smithsonian_browse_category instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNoPage size (default 20, max 100).
queryYesFree-text search. Use specific terms for precision ("Tlingit totem pole") or broad terms for browsing ("quilt").
startNoPagination offset — 0-indexed. Use with rows for paging through large result sets.
filtersNoOptional structured filters to narrow the search.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe rows cap that was applied.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of objects returned in this page.
noticeNoGuidance naming the input that retrieves the objects this page omitted.
objectsNoCurated object summaries for the current page.
truncatedNoTrue when matching objects remain past this page. False on a terminal or past-the-end page, where nothing is being withheld.
total_countNoTotal matching objects in the Smithsonian catalog before pagination.
truncationCeilingNoTotal matching objects (upper bound for omitted items).

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile with no contradiction from the description. Beyond that, the description adds substantive behavioral context: it states the return format ('curated summaries (title, date, museum, thumbnail URL, CC0 flag) with the total match count'), the cc0_only filter's media-presence-not-license semantics, online_only's surrogate vocabulary behavior, and the record_id threading to three downstream tools. Even with strong annotations, this description adds real value beyond the structured fields.

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?

Three sentences with zero waste, and the most decision-relevant fact — role as first discovery step — is front-loaded ahead of the filter list and alternative routing. Every sentence earns its place: purpose, filter capability, return format, cross-tool linkage, and the exclusion are each collapsed into one efficient clause. No redundancy with the schema's own descriptions.

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 complexity (4 top-level params plus a nested 8-field filters object), the presence of an output schema, and strong annotations, the description is complete. The schema exhaustively documents every parameter, the output schema covers return values, and the description positions the tool as a discovery entry point and links it to downstream tools. For a search tool whose safety profile (read-only, idempotent, open-world) is already declared, nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema itself carries exceptionally rich parameter definitions — date-term vocabulary forms, name vocabulary discrepancies, topic hard-constraint counts, object_type case-sensitivity behavior. With coverage above 80%, the baseline of 3 applies: the description carries the load via the schema rather than its own text. The description does add light framing ('optional exact filters' signals exact-match semantics, record_id linkage tells the agent how to thread results), but parameter-level meaning lives almost entirely in the schema, so 3 is the fair score.

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 verb-plus-resource statement — 'free-text search across 14.5 million Smithsonian objects, with optional exact filters' — and immediately frames the tool's role ('Recommended first step for open-ended or topic discovery'). It names the sibling it is not by routing exact-category browsing to smithsonian_browse_category, making the distinction explicit. Nothing about what this tool does is ambiguous.

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?

Explicit when-to-use guidance is front-loaded ('Recommended first step for open-ended or topic discovery') and the when-not-to-use case is stated outright: 'To browse one exact category — a single museum, culture, date term, object type, or topic — use smithsonian_browse_category instead.' The alternative tool is named and the selection condition is concrete, leaving no inference required.

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. Dates show when Glama detected each change.

  1. 6 tool updates
    • Changedsmithsonian_browse_category6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mode",
        +      "value",
        +      "total_count",
        +      "sample_objects",
        +      "museum_breakdown"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_category`: The category value matched no objects — a browse category is an exact indexed facet, so a zero match means the value did not resolve to retrievable objects. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_category"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mode",
        -  "value",
        -  "total_count",
        -  "sample_objects",
        -  "museum_breakdown"
        -]
    • Changedsmithsonian_find_related6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "anchor",
        +      "related",
        +      "search_signals_used",
        +      "signals"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `not_found`: The anchor object ID does not exist in the Smithsonian catalog. `invalid_id`: The ID is empty or contains only whitespace. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "not_found",
        +            "invalid_id"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "anchor",
        -  "related",
        -  "search_signals_used",
        -  "signals"
        -]
    • Changedsmithsonian_get_media6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "record_id",
        +      "title",
        +      "is_cc0",
        +      "images"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `not_found`: No object with the given ID exists in the Smithsonian catalog. `no_media`: The object exists but has no digitized online media. `no_images`: The object has digitized media, but none of it is an image — the media is entirely non-image types such as scanned books, 3D models, or sound recordings. `not_cc0`: The object has media but none of its images are CC0 open access. `invalid_id`: The ID is empty or contains only whitespace. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "not_found",
        +            "no_media",
        +            "no_images",
        +            "not_cc0",
        +            "invalid_id"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "record_id",
        -  "title",
        -  "is_cc0",
        -  "images"
        -]
    • Changedsmithsonian_get_object6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "record_id",
        +      "title",
        +      "unit_code",
        +      "museum_name",
        +      "dates",
        +      "makers",
        +      "materials",
        +      "dimensions",
        +      "place",
        +      "culture",
        +      "topics",
        +      "exhibitions",
        +      "identifiers",
        +      "is_cc0",
        +      "media_summary"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `not_found`: No object with the given ID exists in the Smithsonian catalog. `invalid_id`: The ID format is clearly malformed (empty string, whitespace only). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "not_found",
        +            "invalid_id"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "record_id",
        -  "title",
        -  "unit_code",
        -  "museum_name",
        -  "dates",
        -  "makers",
        -  "materials",
        -  "dimensions",
        -  "place",
        -  "culture",
        -  "topics",
        -  "exhibitions",
        -  "identifiers",
        -  "is_cc0",
        -  "media_summary"
        -]
    • Changedsmithsonian_list_terms6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "field",
        +      "terms",
        +      "total"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_terms`: The field returned no indexed terms. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_terms"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "field",
        -  "terms",
        -  "total"
        -]
    • Changedsmithsonian_search_objects6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "objects",
        +      "total_count"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_results`: An unfiltered query matched no objects. `invalid_filter`: A filtered search matched nothing — most often a filter value outside the Smithsonian controlled vocabulary (e.g. a singular \"Painting\" instead of \"Paintings\"). Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_results",
        +            "invalid_filter"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "objects",
        -  "total_count"
        -]
  2. 2 tool updates
    • Changedsmithsonian_browse_category1 field changed
      • changedInput schema / properties / value / description
        Previous value: -"Category value appropriate to the mode. museum: a unit code like \"NASM\", \"SAAM\", or \"NMNHBIRDS\", matched literally and case-sensitively — not a museum name. culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: an indexed date term — commonly a decade (\"1940s\", \"1860s\"), but year ranges (\"500-1500\"), century terms (\"21st century\"), and BCE forms (\"-2500\", \"BCE 1000s\") are indexed too. medium: object type, usually plural (\"Paintings\", \"Aircraft\"). topic: subject term (\"Quilts\", \"Aviation\"). Smithsonian uses a controlled vocabulary — for museum (unit_code), culture, period (date), and topic, call smithsonian_list_terms to find exact terms; medium (object_type) is not enumerable there, so harvest it from smithsonian_search_objects results."New value: +"Category value appropriate to the mode. museum: a unit code like \"NASM\", \"SAAM\", or \"NMNHBIRDS\", matched literally and case-sensitively — not a museum name. culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: an indexed date term — commonly a decade (\"1940s\", \"1860s\"), but year ranges (\"500-1500\"), century terms (\"21st century\"), and BCE forms (\"-2500\", \"BCE 1000s\") are indexed too. medium: object type, usually plural (\"Paintings\", \"Aircraft\"). topic: subject term (\"Quilts\", \"Aviation\"). Smithsonian uses a controlled vocabulary — for museum (unit_code), culture, period (date), and topic, call smithsonian_list_terms to find exact terms; medium (object_type) is not enumerable there, so harvest it from smithsonian_search_objects results. Every mode matches its value exactly and case-sensitively, and for medium that split is load-bearing: casing variants are indexed as SEPARATE categories, each reporting its own total_count (\"button\" and \"Button\" are different categories, and neither casing is reliably the larger), so browse the variants of a harvested value rather than assuming one covers the concept."
    • Changedsmithsonian_search_objects2 fields changed
      • changedInput schema / properties / filters / properties / object_type / description
        Previous value: -"Object type term from Smithsonian's controlled vocabulary — commonly plural (e.g. \"Paintings\", \"Photographs\", \"Aircraft\"). Singular everyday forms like \"Painting\" usually return nothing. This field is not enumerable via smithsonian_list_terms; harvest valid values from the object_type field in smithsonian_search_objects results."New value: +"Object type term from Smithsonian's controlled vocabulary — commonly plural (e.g. \"Paintings\", \"Photographs\", \"Aircraft\"). Singular everyday forms like \"Painting\" usually return nothing. This field is not enumerable via smithsonian_list_terms; harvest valid values from the object_type field in smithsonian_search_objects results. Matched exactly and case-sensitively, and casing variants are indexed as SEPARATE categories — \"button\" and \"Button\" each hold their own records, and neither casing is reliably the larger — so probe a harvested value's other casings rather than assuming one covers the concept."
      • changedOutput schema / properties / objects / items / properties / object_type / description
        Previous value: -"Object type term (e.g. \"Aircraft\", \"Paintings\", \"Photographs\")."New value: +"Object type term (e.g. \"Aircraft\", \"Paintings\", \"Photographs\"). Harvest it here to filter a later search, but it is case-sensitive and casing variants are separate categories upstream — this row carries one casing of the concept, not all of it."
  3. 4 tool updates
    • Changedsmithsonian_browse_category4 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"Browse dimension: \"museum\" (by unit code), \"culture\" (by culture term), \"period\" (by indexed date term like \"1940s\" or \"500-1500\"), \"medium\" (by object type like \"Paintings\")."New value: +"Browse dimension: \"museum\" (by unit code), \"culture\" (by culture term), \"period\" (by indexed date term like \"1940s\" or \"500-1500\"), \"medium\" (by object type like \"Paintings\"), \"topic\" (by subject term like \"Quilts\")."
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "museum",
        -  "culture",
        -  "period",
        -  "medium"
        -]New value: +[
        +  "museum",
        +  "culture",
        +  "period",
        +  "medium",
        +  "topic"
        +]
      • changedInput schema / properties / value / description
        Previous value: -"Category value appropriate to the mode. museum: a unit code like \"NASM\", \"SAAM\", or \"NMNHBIRDS\", matched literally and case-sensitively — not a museum name. culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: an indexed date term — commonly a decade (\"1940s\", \"1860s\"), but year ranges (\"500-1500\"), century terms (\"21st century\"), and BCE forms (\"-2500\", \"BCE 1000s\") are indexed too. medium: object type, usually plural (\"Paintings\", \"Aircraft\"). Smithsonian uses a controlled vocabulary — for museum (unit_code), culture, and period (date), call smithsonian_list_terms to find exact terms; medium (object_type) is not enumerable there, so harvest it from smithsonian_search_objects results."New value: +"Category value appropriate to the mode. museum: a unit code like \"NASM\", \"SAAM\", or \"NMNHBIRDS\", matched literally and case-sensitively — not a museum name. culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: an indexed date term — commonly a decade (\"1940s\", \"1860s\"), but year ranges (\"500-1500\"), century terms (\"21st century\"), and BCE forms (\"-2500\", \"BCE 1000s\") are indexed too. medium: object type, usually plural (\"Paintings\", \"Aircraft\"). topic: subject term (\"Quilts\", \"Aviation\"). Smithsonian uses a controlled vocabulary — for museum (unit_code), culture, period (date), and topic, call smithsonian_list_terms to find exact terms; medium (object_type) is not enumerable there, so harvest it from smithsonian_search_objects results."
      • changedOutput schema / properties / mode / description
        Previous value: -"Browse dimension used for this request (one of \"museum\", \"culture\", \"period\", \"medium\")."New value: +"Browse dimension used for this request (one of \"museum\", \"culture\", \"period\", \"medium\", \"topic\")."
    • Changedsmithsonian_find_related2 fields changed
      • addedOutput schema / properties / signals / items / properties / search_continuation / properties / filters / properties / name
        Added value: +{
        +  "description": "smithsonian_search_objects filters.name value.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / signals / items / properties / search_continuation / properties / filters / properties / topic
        Added value: +{
        +  "description": "smithsonian_search_objects filters.topic value.",
        +  "type": "string"
        +}
    • Changedsmithsonian_list_terms2 fields changed
      • changedInput schema / properties / field / description
        Previous value: -"Indexed field to enumerate. Choices: unit_code (museum codes like \"NASM\"), culture (e.g. \"Aztecs\"), place (geographic terms), date (decade/era values like \"1920s\"), online_media_type (media formats like \"Images\", \"3D Models\")."New value: +"Indexed field to enumerate. Choices: unit_code (museum codes like \"NASM\"), culture (e.g. \"Aztecs\"), place (geographic terms), date (decade/era values like \"1920s\"), online_media_type (media formats like \"Images\", \"3D Models\"), topic (subject terms like \"Quilts\" — 133k terms, so pair it with contains)."
      • changedInput schema / properties / field / enum
        Previous value: -[
        -  "unit_code",
        -  "culture",
        -  "place",
        -  "date",
        -  "online_media_type"
        -]New value: +[
        +  "unit_code",
        +  "culture",
        +  "place",
        +  "date",
        +  "online_media_type",
        +  "topic"
        +]
    • Changedsmithsonian_search_objects2 fields changed
      • addedInput schema / properties / filters / properties / name
        Added value: +{
        +  "description": "Indexed named party — maker, collector, donor, issuing authority, or any other role the catalog records. Written surname-first (e.g. \"Warhol, Andy\"). This field is not enumerable via smithsonian_list_terms. A smithsonian_find_related name signal carries the indexed form verbatim and is the reliable source; smithsonian_get_object's makers[] is the catalog's free-text form of the same parties and is often written differently (\"Major J. A. L. Möller (Jacob A.L. Möller/Monty Möller), Non-Indian, 1883-1957\" for the indexed \"Möller, Major J. A. L.\"), so treat it as a starting guess.",
        +  "type": "string"
        +}
      • addedInput schema / properties / filters / properties / topic
        Added value: +{
        +  "description": "Subject term from the controlled vocabulary (e.g. \"Quilts\", \"Aviation\"). Matches the topics[] values smithsonian_get_object returns, and is a hard constraint — topic \"Quilts\" matches 1,134 objects where the same word as free text matches 2,677. The full set is enumerable via smithsonian_list_terms (field \"topic\").",
        +  "type": "string"
        +}
  4. 5 tool updates
    • Changedsmithsonian_browse_category3 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"Browse dimension: \"museum\" (by unit code), \"culture\" (by culture term), \"period\" (by decade like \"1940s\"), \"medium\" (by object type like \"Paintings\")."New value: +"Browse dimension: \"museum\" (by unit code), \"culture\" (by culture term), \"period\" (by indexed date term like \"1940s\" or \"500-1500\"), \"medium\" (by object type like \"Paintings\")."
      • changedInput schema / properties / value / description
        Previous value: -"Category value appropriate to the mode. museum: a unit code like \"NASM\", \"SAAM\", or \"NMNHBIRDS\", matched literally and case-sensitively — not a museum name. culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: a decade in \"NNNNs\" form (\"1940s\", \"1860s\"), required for that mode. medium: object type, usually plural (\"Paintings\", \"Aircraft\"). Smithsonian uses a controlled vocabulary — for museum (unit_code), culture, and period (date), call smithsonian_list_terms to find exact terms; medium (object_type) is not enumerable there, so harvest it from smithsonian_search_objects results."New value: +"Category value appropriate to the mode. museum: a unit code like \"NASM\", \"SAAM\", or \"NMNHBIRDS\", matched literally and case-sensitively — not a museum name. culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: an indexed date term — commonly a decade (\"1940s\", \"1860s\"), but year ranges (\"500-1500\"), century terms (\"21st century\"), and BCE forms (\"-2500\", \"BCE 1000s\") are indexed too. medium: object type, usually plural (\"Paintings\", \"Aircraft\"). Smithsonian uses a controlled vocabulary — for museum (unit_code), culture, and period (date), call smithsonian_list_terms to find exact terms; medium (object_type) is not enumerable there, so harvest it from smithsonian_search_objects results."
      • changedOutput schema / properties / sample_objects / items / properties / is_cc0 / description
        Previous value: -"True when the object is CC0 open access."New value: +"True when the object metadata is CC0 (open access). The Smithsonian Open Access corpus is CC0 throughout, so this flag rarely varies and cannot gate an image download — read thumbnail_url for that."
    • Changedsmithsonian_find_related3 fields changed
      • changedOutput schema / properties / related / items / properties / is_cc0 / description
        Previous value: -"True when the object is CC0 open access."New value: +"True when the object metadata is CC0 (open access). The Smithsonian Open Access corpus is CC0 throughout, so this flag rarely varies and cannot gate an image download — read thumbnail_url for that."
      • addedOutput schema / properties / signals / items / properties / search_continuation / properties / filters / properties / date
        Added value: +{
        +  "description": "smithsonian_search_objects filters.date value.",
        +  "type": "string"
        +}
      • removedOutput schema / properties / signals / items / properties / search_continuation / properties / filters / properties / date_decade
        Removed value: -{
        -  "description": "smithsonian_search_objects filters.date_decade value.",
        -  "type": "string"
        -}
    • Changedsmithsonian_get_media2 fields changed
      • changedOutput schema / properties / images / items / properties / is_cc0 / description
        Previous value: -"True when this specific image is CC0 (may differ from the object-level flag)."New value: +"True when this specific image is CC0 (may differ from the object-level flag). Always true on returned images — non-CC0 images are filtered out before the response."
      • changedOutput schema / properties / is_cc0 / description
        Previous value: -"True when the object-level metadata is CC0."New value: +"True when the object-level metadata is CC0. The Open Access corpus is CC0 throughout, so this rarely varies; the per-image is_cc0 flag is what gates delivery."
    • Changedsmithsonian_get_object1 field changed
      • changedOutput schema / properties / is_cc0 / description
        Previous value: -"True when the object metadata is CC0 (open access). Call smithsonian_get_media to get images."New value: +"True when the object metadata is CC0 (open access). The Smithsonian Open Access corpus is CC0 throughout, so this flag rarely varies — read media_summary.has_cc0_images to predict whether smithsonian_get_media returns images."
    • Changedsmithsonian_search_objects5 fields changed
      • changedInput schema / properties / filters / properties / cc0_only / description
        Previous value: -"When true, restrict to CC0 open-access objects. Useful before calling smithsonian_get_media."New value: +"When true, restrict to records that have CC0-licensed media attached (the Lucene term media_usage:CC0). This selects on media presence, not license status — the roughly 9.2M records it excludes are CC0 too, they simply have nothing digitized. Read has_media on each result to decide whether smithsonian_get_media will return anything."
      • addedInput schema / properties / filters / properties / date
        Added value: +{
        +  "description": "Indexed date term. Decades (\"1920s\", \"1960s\") are the most common form, but the vocabulary also carries year ranges (\"500-1500\"), century terms (\"21st century\"), and BCE forms (\"-2500\", \"BCE 1000s\"). The value must be an exact term — the full set is enumerable via smithsonian_list_terms (field \"date\").",
        +  "type": "string"
        +}
      • removedInput schema / properties / filters / properties / date_decade
        Removed value: -{
        -  "description": "Decade filter (e.g. \"1920s\", \"1960s\"). Must match the \"NNNNs\" format exactly. Indexed decades are enumerable via smithsonian_list_terms (field \"date\").",
        -  "pattern": "^\\d{4}s$",
        -  "type": "string"
        -}
      • changedOutput schema / properties / objects / items / properties / date / description
        Previous value: -"Decade-level date the catalog indexes for the object (e.g. \"1960s\"). Sparse — omitted when the record has no indexed date."New value: +"Indexed date term for the object — commonly a decade (\"1960s\"), but the vocabulary also carries year ranges (\"500-1500\"), century terms (\"21st century\"), and BCE forms (\"-2500\", \"BCE 1000s\"). Sparse — omitted when the record has no indexed date."
      • changedOutput schema / properties / objects / items / properties / is_cc0 / description
        Previous value: -"True when the object metadata is CC0 (open access). Use smithsonian_get_media for CC0 image downloads."New value: +"True when the object metadata is CC0 (open access). The Smithsonian Open Access corpus is CC0 throughout, so this flag rarely varies and cannot gate an image download — read has_media for that."
  5. 1 tool update
    • Changedsmithsonian_list_terms2 fields changed
      • changedInput schema / properties / contains / description
        Previous value: -"Case-insensitive substring filter on the term vocabulary — resolve a filter value (e.g. \"greek\") to its exact controlled-vocabulary term(s)."New value: +"Case-insensitive substring filter on the term vocabulary — resolve a filter value (e.g. \"greek\") to its exact controlled-vocabulary term(s). For unit_code the substring also matches each code's museum name, so \"National Air and Space\" resolves to \"NASM\"."
      • addedOutput schema / properties / labels
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "Museum name for each unit_code on this page that has one — present only when field is \"unit_code\". A few rarely-indexed archive sub-unit codes have no mapped name and are absent from this map; their term is still returned in terms.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
  6. 8 tool updates
    • Addedsmithsonian_browse_category
    • Removedsmithsonian_explore
    • Changedsmithsonian_find_related8 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"record_id of the anchor object (e.g. \"nasm_A19670093000\") from smithsonian_search or smithsonian_get_object."New value: +"record_id of the anchor object (e.g. \"nasm_A19670093000\") from smithsonian_search_objects or smithsonian_get_object."
      • changedOutput schema / properties / signals / description
        Previous value: -"Per-signal breakdown of every fan-out that returned. Use search_continuation with smithsonian_search to retrieve a signal's matches past this tool's 5000-per-signal reach. A signal whose upstream call failed is omitted."New value: +"Per-signal breakdown of every fan-out that returned. Use search_continuation with smithsonian_search_objects to retrieve a signal's matches past this tool's 5000-per-signal reach. A signal whose upstream call failed is omitted."
      • changedOutput schema / properties / signals / items / properties / search_continuation / description
        Previous value: -"Exact smithsonian_search input that reproduces this signal's full match set, at any depth."New value: +"Exact smithsonian_search_objects input that reproduces this signal's full match set, at any depth."
      • changedOutput schema / properties / signals / items / properties / search_continuation / properties / filters / description
        Previous value: -"Pass verbatim as smithsonian_search's filters. Omitted when the signal's constraint is already carried entirely by query."New value: +"Pass verbatim as smithsonian_search_objects's filters. Omitted when the signal's constraint is already carried entirely by query."
      • changedOutput schema / properties / signals / items / properties / search_continuation / properties / filters / properties / culture / description
        Previous value: -"smithsonian_search filters.culture value."New value: +"smithsonian_search_objects filters.culture value."
      • changedOutput schema / properties / signals / items / properties / search_continuation / properties / filters / properties / date_decade / description
        Previous value: -"smithsonian_search filters.date_decade value."New value: +"smithsonian_search_objects filters.date_decade value."
      • changedOutput schema / properties / signals / items / properties / search_continuation / properties / filters / properties / object_type / description
        Previous value: -"smithsonian_search filters.object_type value."New value: +"smithsonian_search_objects filters.object_type value."
      • changedOutput schema / properties / signals / items / properties / search_continuation / properties / query / description
        Previous value: -"Pass verbatim as smithsonian_search's query. Empty when the signal is expressed entirely through filters."New value: +"Pass verbatim as smithsonian_search_objects's query. Empty when the signal is expressed entirely through filters."
    • Changedsmithsonian_get_media1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"record_id of the object (e.g. \"nasm_A19670093000\") from smithsonian_search or smithsonian_get_object."New value: +"record_id of the object (e.g. \"nasm_A19670093000\") from smithsonian_search_objects or smithsonian_get_object."
    • Changedsmithsonian_get_object1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Object record_id from smithsonian_search results (e.g. \"nasm_A19670093000\")."New value: +"Object record_id from smithsonian_search_objects results (e.g. \"nasm_A19670093000\")."
    • Changedsmithsonian_list_terms1 field changed
      • changedOutput schema / properties / terms / items / description
        Previous value: -"A term value — pass directly as the filter value in smithsonian_search or smithsonian_explore."New value: +"A term value — pass directly as the filter value in smithsonian_search_objects or smithsonian_browse_category."
    • Removedsmithsonian_search
    • Addedsmithsonian_search_objects
  7. 4 tool updates
    • Changedsmithsonian_explore5 fields changed
      • addedInput schema / properties / start
        Added value: +{
        +  "default": 0,
        +  "description": "Pagination offset — 0-indexed. Page contiguously with start = page × rows.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance naming the input that retrieves the objects this page omitted.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / sample_objects / description
        Previous value: -"The first page of objects matching the category, in upstream order."New value: +"The requested page of objects matching the category, in upstream order. Empty when start is past the end of the category."
      • changedOutput schema / properties / sample_objects / items / description
        Previous value: -"A sample object from the first page of category matches."New value: +"A sample object from the requested page of category matches."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the sample was capped by the rows parameter."New value: +"True when matching objects remain past this page. False on a terminal or past-the-end page, where nothing is being withheld."
    • Changedsmithsonian_find_related4 fields changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance naming the inputs that retrieve the related objects this page omitted — start for the next page, signals[].search_continuation for a signal past this tool's reach.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / signals
        Added value: +{
        +  "description": "Per-signal breakdown of every fan-out that returned. Use search_continuation with smithsonian_search to retrieve a signal's matches past this tool's 5000-per-signal reach. A signal whose upstream call failed is omitted.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One fan-out signal with its true size and its retrieval path.",
        +    "properties": {
        +      "row_count": {
        +        "description": "True upstream match count for this signal, uncapped — it can exceed the 5000-per-signal depth this tool's own paging reaches.",
        +        "type": "number"
        +      },
        +      "search_continuation": {
        +        "additionalProperties": false,
        +        "description": "Exact smithsonian_search input that reproduces this signal's full match set, at any depth.",
        +        "properties": {
        +          "filters": {
        +            "additionalProperties": false,
        +            "description": "Pass verbatim as smithsonian_search's filters. Omitted when the signal's constraint is already carried entirely by query.",
        +            "properties": {
        +              "culture": {
        +                "description": "smithsonian_search filters.culture value.",
        +                "type": "string"
        +              },
        +              "date_decade": {
        +                "description": "smithsonian_search filters.date_decade value.",
        +                "type": "string"
        +              },
        +              "object_type": {
        +                "description": "smithsonian_search filters.object_type value.",
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "query": {
        +            "description": "Pass verbatim as smithsonian_search's query. Empty when the signal is expressed entirely through filters.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "query"
        +        ],
        +        "type": "object"
        +      },
        +      "signal": {
        +        "description": "Matches an entry in search_signals_used and in related[].similarity_signals.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "signal",
        +      "row_count",
        +      "search_continuation"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / truncationCeiling / description
        Previous value: -"Upper bound on the related objects reachable by paging with start. Cross-signal overlaps are not subtracted, so it can overcount."New value: +"Upper bound on the related objects reachable by paging with start. Cross-signal overlaps are not subtracted, so it can overcount. Signals larger than this tool's per-signal reach are counted at that reach — see signals[].row_count for their true size."
      • changedOutput schema / required
        Previous value: -[
        -  "anchor",
        -  "related",
        -  "search_signals_used"
        -]New value: +[
        +  "anchor",
        +  "related",
        +  "search_signals_used",
        +  "signals"
        +]
    • Changedsmithsonian_list_terms2 fields changed
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when a contains filter matched no terms — how to broaden or drop the filter."New value: +"Guidance naming the input that retrieves the terms this page omitted, or how to broaden a contains filter that matched nothing."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the term list was capped by the rows parameter."New value: +"True when matching terms remain past this page. False on a terminal or past-the-end page, where nothing is being withheld."
    • Changedsmithsonian_search2 fields changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance naming the input that retrieves the objects this page omitted.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the result set was capped by the rows parameter."New value: +"True when matching objects remain past this page. False on a terminal or past-the-end page, where nothing is being withheld."
  8. 4 tool updates
    • Changedsmithsonian_explore2 fields changed
      • changedInput schema / properties / value / description
        Previous value: -"Category value appropriate to the mode. museum: a short unit code like \"NASM\" or \"SAAM\". culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: decade (\"1940s\", \"1860s\"). medium: object type, usually plural (\"Paintings\", \"Aircraft\"). Smithsonian uses a controlled vocabulary — for culture, place, or unit_code, call smithsonian_list_terms to find exact terms."New value: +"Category value appropriate to the mode. museum: a unit code like \"NASM\", \"SAAM\", or \"NMNHBIRDS\", matched literally and case-sensitively — not a museum name. culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: decade (\"1940s\", \"1860s\"). medium: object type, usually plural (\"Paintings\", \"Aircraft\"). Smithsonian uses a controlled vocabulary — for culture, place, or unit_code, call smithsonian_list_terms to find exact terms."
      • changedOutput schema / properties / museum_breakdown / items / properties / museum_name / description
        Previous value: -"Full name of the museum."New value: +"Full name of the museum. A few rarely-indexed archive sub-unit codes have no mapped name and fall back to the raw unit code."
    • Changedsmithsonian_find_related1 field changed
      • changedOutput schema / properties / related / items / properties / museum_name / description
        Previous value: -"Full museum name."New value: +"Full museum name. A few rarely-indexed archive sub-unit codes have no mapped name and fall back to the raw unit code."
    • Changedsmithsonian_get_object1 field changed
      • changedOutput schema / properties / museum_name / description
        Previous value: -"Full museum name."New value: +"Full museum name. A few rarely-indexed archive sub-unit codes have no mapped name and fall back to the raw unit code."
    • Changedsmithsonian_search3 fields changed
      • changedInput schema / properties / filters / properties / online_only / description
        Previous value: -"When true, restrict to objects that have any online media."New value: +"When true, restrict to records carrying an indexed online_media_type value. That vocabulary covers digitized surrogates — finding aids, catalog cards, scanned books, full text, electronic resources — alongside images, 3D models, and video, and the surrogate types often have no deliverable media attached, so a match can still report has_media: false. Read has_media on each result to decide whether smithsonian_get_media will return anything."
      • changedOutput schema / properties / objects / items / properties / has_media / description
        Previous value: -"True when the object has any digitized online media."New value: +"True when the object carries deliverable online media items. This is the signal smithsonian_get_media reads, so it — not the online_only filter — predicts whether that call returns anything."
      • changedOutput schema / properties / objects / items / properties / museum_name / description
        Previous value: -"Full museum name for the unit code."New value: +"Full museum name for the unit code. A few rarely-indexed archive sub-unit codes have no mapped name and fall back to the raw unit code."
  9. 3 tool updates
    • Changedsmithsonian_explore5 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"Browse dimension: \"museum\" (by unit code/name), \"culture\" (by culture term), \"period\" (by decade like \"1940s\"), \"medium\" (by object type like \"Paintings\")."New value: +"Browse dimension: \"museum\" (by unit code), \"culture\" (by culture term), \"period\" (by decade like \"1940s\"), \"medium\" (by object type like \"Paintings\")."
      • changedInput schema / properties / value / description
        Previous value: -"Category value appropriate to the mode. museum: unit code (\"NMNH\") or full name (\"National Museum of Natural History\"). culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: decade (\"1940s\", \"1860s\"). medium: object type, usually plural (\"Paintings\", \"Aircraft\"). Smithsonian uses a controlled vocabulary — for culture, place, or unit_code, call smithsonian_list_terms to find exact terms."New value: +"Category value appropriate to the mode. museum: a short unit code like \"NASM\" or \"SAAM\". culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: decade (\"1940s\", \"1860s\"). medium: object type, usually plural (\"Paintings\", \"Aircraft\"). Smithsonian uses a controlled vocabulary — for culture, place, or unit_code, call smithsonian_list_terms to find exact terms."
      • changedOutput schema / properties / museum_breakdown / items / properties / unit_code / description
        Previous value: -"Smithsonian unit code for this museum (e.g. \"NMNH\", \"SAAM\")."New value: +"Smithsonian unit code for this museum (e.g. \"NMNHPALEO\", \"SAAM\")."
      • changedOutput schema / properties / sample_objects / description
        Previous value: -"Representative objects from the category."New value: +"The first page of objects matching the category, in upstream order."
      • changedOutput schema / properties / sample_objects / items / description
        Previous value: -"A representative sample object from the category."New value: +"A sample object from the first page of category matches."
    • Changedsmithsonian_find_related2 fields changed
      • changedInput schema / properties / start / description
        Previous value: -"Pagination offset into the interleaved related-object sequence — 0-indexed. Page contiguously with start = page × limit: page N+1 continues where page N ended. Each contributing signal is reachable to a depth of 5000 objects (fetched in chunks upstream), so deep pages of a broad signal are retrievable. Near a page seam a small, bounded number of objects (up to the active-signal count) can shift by one page when a deeper page surfaces an object that ranks very differently across signals. Beyond 5000 matches for a signal, truncated stays true but deeper pages aren't reachable."New value: +"Pagination offset — 0-indexed. Page contiguously with start = page × limit; each signal is reachable to a depth of 5000 objects, beyond which truncated stays true but deeper pages aren't retrievable."
      • changedOutput schema / properties / truncationCeiling / description
        Previous value: -"Upper bound on the reachable related objects across the contributing signals — each signal’s upstream match count is capped at its per-signal reach before summing, so the ceiling never exceeds what paging with start can actually retrieve. Cross-signal overlaps are not subtracted."New value: +"Upper bound on the related objects reachable by paging with start. Cross-signal overlaps are not subtracted, so it can overcount."
    • Changedsmithsonian_search3 fields changed
      • addedInput schema / properties / filters / properties / date_decade / pattern
        Added value: +"^\\d{4}s$"
      • changedInput schema / properties / filters / properties / unit_code / description
        Previous value: -"Museum unit code (e.g. \"NASM\", \"NMNH\", \"SAAM\", \"NMAH\", \"NMAAHC\", \"NMAI\", \"NPG\", \"CHNDM\", \"SIL\"). The full set is enumerable via smithsonian_list_terms (field \"unit_code\")."New value: +"Museum unit code (e.g. \"NASM\", \"SAAM\", \"NMAH\", \"NMAAHC\", \"NMAI\", \"NPG\", \"CHNDM\", \"SIL\"); the National Museum of Natural History is indexed under discipline sub-units like \"NMNHBIRDS\" and \"NMNHPALEO\", not a bare \"NMNH\". The full set is enumerable via smithsonian_list_terms (field \"unit_code\")."
      • changedOutput schema / properties / objects / items / properties / unit_code / description
        Previous value: -"Museum unit code (e.g. \"NASM\", \"NMNH\", \"SAAM\"). Use as a filter in future searches."New value: +"Museum unit code (e.g. \"NASM\", \"SAAM\", \"NMNHBIRDS\"). Use as a filter in future searches."
  10. 1 tool update
    • Changedsmithsonian_find_related2 fields changed
      • changedInput schema / properties / start / description
        Previous value: -"Pagination offset into the interleaved related-object sequence — 0-indexed. Page contiguously with start = page × limit: page N+1 continues where page N ended, within the first 100 related objects per signal. Near a page seam a small, bounded number of objects (up to the active-signal count) can shift by one page when a deeper page surfaces an object that ranks very differently across signals. Beyond the cap, truncated stays true but deeper pages aren't reachable."New value: +"Pagination offset into the interleaved related-object sequence — 0-indexed. Page contiguously with start = page × limit: page N+1 continues where page N ended. Each contributing signal is reachable to a depth of 5000 objects (fetched in chunks upstream), so deep pages of a broad signal are retrievable. Near a page seam a small, bounded number of objects (up to the active-signal count) can shift by one page when a deeper page surfaces an object that ranks very differently across signals. Beyond 5000 matches for a signal, truncated stays true but deeper pages aren't reachable."
      • changedOutput schema / properties / truncationCeiling / description
        Previous value: -"Upper bound on total related objects across the contributing signals (sum of each fan-out signal’s upstream match count; cross-signal overlaps are not subtracted)."New value: +"Upper bound on the reachable related objects across the contributing signals — each signal’s upstream match count is capped at its per-signal reach before summing, so the ceiling never exceeds what paging with start can actually retrieve. Cross-signal overlaps are not subtracted."
  11. 1 tool update
    • Changedsmithsonian_list_terms3 fields changed
      • addedInput schema / properties / contains
        Added value: +{
        +  "description": "Case-insensitive substring filter on the term vocabulary — resolve a filter value (e.g. \"greek\") to its exact controlled-vocabulary term(s).",
        +  "type": "string"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when a contains filter matched no terms — how to broaden or drop the filter.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / truncationCeiling / description
        Previous value: -"Total distinct terms for the field (upper bound for omitted items)."New value: +"Distinct terms available for this query (the full vocabulary, or the contains-match count) — upper bound for omitted items."
  12. 1 tool update
    • Changedsmithsonian_find_related3 fields changed
      • addedInput schema / properties / start
        Added value: +{
        +  "default": 0,
        +  "description": "Pagination offset into the interleaved related-object sequence — 0-indexed. Page contiguously with start = page × limit: page N+1 continues where page N ended, within the first 100 related objects per signal. Near a page seam a small, bounded number of objects (up to the active-signal count) can shift by one page when a deeper page surfaces an object that ranks very differently across signals. Beyond the cap, truncated stays true but deeper pages aren't reachable.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the related list was capped by the limit parameter."New value: +"True when the related list is incomplete — either capped by the limit or more results exist upstream past the current page (advance start to retrieve them)."
      • addedOutput schema / properties / truncationCeiling
        Added value: +{
        +  "description": "Upper bound on total related objects across the contributing signals (sum of each fan-out signal’s upstream match count; cross-signal overlaps are not subtracted).",
        +  "type": "number"
        +}
  13. 1 tool update
    • Changedsmithsonian_search1 field changed
      • addedOutput schema / properties / objects / items / properties / date
        Added value: +{
        +  "description": "Decade-level date the catalog indexes for the object (e.g. \"1960s\"). Sparse — omitted when the record has no indexed date.",
        +  "type": "string"
        +}
  14. 1 tool update
    • Changedsmithsonian_search4 fields changed
      • changedInput schema / properties / filters / properties / culture / description
        Previous value: -"Culture term from the controlled vocabulary — often plural or qualified (e.g. \"Aztecs\", \"Plains Indian\"). Use smithsonian_list_terms with field \"culture\" to enumerate valid values."New value: +"Culture term from the controlled vocabulary — often plural or qualified (e.g. \"Aztecs\", \"Plains Indian\"). The vocabulary is enumerable via smithsonian_list_terms (field \"culture\")."
      • changedInput schema / properties / filters / properties / date_decade / description
        Previous value: -"Decade filter (e.g. \"1920s\", \"1960s\"). Must match the \"NNNNs\" format exactly. Use smithsonian_list_terms with field \"date\" to see indexed decades."New value: +"Decade filter (e.g. \"1920s\", \"1960s\"). Must match the \"NNNNs\" format exactly. Indexed decades are enumerable via smithsonian_list_terms (field \"date\")."
      • changedInput schema / properties / filters / properties / place / description
        Previous value: -"Geographic place (e.g. \"United States of America\"). Use smithsonian_list_terms with field \"place\" to enumerate valid values."New value: +"Geographic place (e.g. \"United States of America\"). The full set is enumerable via smithsonian_list_terms (field \"place\")."
      • changedInput schema / properties / filters / properties / unit_code / description
        Previous value: -"Museum unit code (e.g. \"NASM\", \"NMNH\", \"SAAM\", \"NMAH\", \"NMAAHC\", \"NMAI\", \"NPG\", \"CHNDM\", \"SIL\"). Use smithsonian_list_terms with field \"unit_code\" to enumerate valid values."New value: +"Museum unit code (e.g. \"NASM\", \"NMNH\", \"SAAM\", \"NMAH\", \"NMAAHC\", \"NMAI\", \"NPG\", \"CHNDM\", \"SIL\"). The full set is enumerable via smithsonian_list_terms (field \"unit_code\")."
  15. 4 tool updates
    • Changedsmithsonian_explore3 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"Browse dimension: \"museum\" (by unit code/name), \"culture\" (by culture term), \"period\" (by decade like \"1940s\"), \"medium\" (by object type like \"Painting\")."New value: +"Browse dimension: \"museum\" (by unit code/name), \"culture\" (by culture term), \"period\" (by decade like \"1940s\"), \"medium\" (by object type like \"Paintings\")."
      • changedInput schema / properties / value / description
        Previous value: -"Category value appropriate to the mode. museum: unit code (\"NMNH\") or full name (\"National Museum of Natural History\"). culture: term (\"Aztec\", \"Sioux\"). period: decade (\"1940s\", \"1860s\"). medium: object type (\"Painting\", \"Aircraft\", \"Fossil\")."New value: +"Category value appropriate to the mode. museum: unit code (\"NMNH\") or full name (\"National Museum of Natural History\"). culture: term, often plural or qualified (\"Aztecs\", \"Plains Indian\"). period: decade (\"1940s\", \"1860s\"). medium: object type, usually plural (\"Paintings\", \"Aircraft\"). Smithsonian uses a controlled vocabulary — for culture, place, or unit_code, call smithsonian_list_terms to find exact terms."
      • changedOutput schema / required
        Previous value: -[
        -  "mode",
        -  "value",
        -  "total_count",
        -  "sample_objects",
        -  "museum_breakdown",
        -  "truncated",
        -  "shown",
        -  "cap"
        -]New value: +[
        +  "mode",
        +  "value",
        +  "total_count",
        +  "sample_objects",
        +  "museum_breakdown"
        +]
    • Changedsmithsonian_find_related1 field changed
      • changedOutput schema / required
        Previous value: -[
        -  "anchor",
        -  "related",
        -  "search_signals_used",
        -  "truncated",
        -  "shown",
        -  "cap"
        -]New value: +[
        +  "anchor",
        +  "related",
        +  "search_signals_used"
        +]
    • Changedsmithsonian_list_terms10 fields changed
      • changedInput schema / properties / field / description
        Previous value: -"Indexed field to enumerate. Common choices: unit_code (museum codes like \"NASM\"), object_type (artifact categories like \"Aircraft\"), culture (e.g. \"Aztec\"), place (geographic terms), date (decade values like \"1920s\")."New value: +"Indexed field to enumerate. Choices: unit_code (museum codes like \"NASM\"), culture (e.g. \"Aztecs\"), place (geographic terms), date (decade/era values like \"1920s\"), online_media_type (media formats like \"Images\", \"3D Models\")."
      • changedInput schema / properties / field / enum
        Previous value: -[
        -  "unit_code",
        -  "object_type",
        -  "culture",
        -  "place",
        -  "date",
        -  "media_usage",
        -  "online_media_type"
        -]New value: +[
        +  "unit_code",
        +  "culture",
        +  "place",
        +  "date",
        +  "online_media_type"
        +]
      • changedOutput schema / properties / terms / description
        Previous value: -"Valid term vocabulary for the field, sorted by count descending."New value: +"The field's distinct term values for this page, in the Smithsonian index's native order. No per-term object counts are available upstream."
      • removedOutput schema / properties / terms / items / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / terms / items / description
        Previous value: -"A single term entry with its object count."New value: +"A term value — pass directly as the filter value in smithsonian_search or smithsonian_explore."
      • removedOutput schema / properties / terms / items / properties
        Removed value: -{
        -  "count": {
        -    "description": "Number of Smithsonian objects indexed under this term.",
        -    "type": "number"
        -  },
        -  "value": {
        -    "description": "Term string — pass directly as the filter value in smithsonian_search or smithsonian_explore.",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / terms / items / required
        Removed value: -[
        -  "value",
        -  "count"
        -]
      • changedOutput schema / properties / terms / items / type
        Previous value: -"object"New value: +"string"
      • changedOutput schema / properties / total / description
        Previous value: -"Total number of distinct terms for this field in the Smithsonian index."New value: +"Total number of distinct terms for this field (the full vocabulary size; terms is one page of it)."
      • changedOutput schema / required
        Previous value: -[
        -  "field",
        -  "terms",
        -  "total",
        -  "truncated",
        -  "shown",
        -  "cap"
        -]New value: +[
        +  "field",
        +  "terms",
        +  "total"
        +]
    • Changedsmithsonian_search4 fields changed
      • changedInput schema / properties / filters / properties / culture / description
        Previous value: -"Culture term (e.g. \"Plains Indian\", \"Aztec\"). Use smithsonian_list_terms with field \"culture\" to enumerate valid values."New value: +"Culture term from the controlled vocabulary — often plural or qualified (e.g. \"Aztecs\", \"Plains Indian\"). Use smithsonian_list_terms with field \"culture\" to enumerate valid values."
      • changedInput schema / properties / filters / properties / object_type / description
        Previous value: -"Object type term (e.g. \"Aircraft\", \"Painting\", \"Fossil\"). Use smithsonian_list_terms with field \"object_type\" to enumerate valid values."New value: +"Object type term from Smithsonian's controlled vocabulary — commonly plural (e.g. \"Paintings\", \"Photographs\", \"Aircraft\"). Singular everyday forms like \"Painting\" usually return nothing. This field is not enumerable via smithsonian_list_terms; harvest valid values from the object_type field in smithsonian_search results."
      • changedOutput schema / properties / objects / items / properties / object_type / description
        Previous value: -"Object type term (e.g. \"Aircraft\", \"Painting\", \"Fossil\")."New value: +"Object type term (e.g. \"Aircraft\", \"Paintings\", \"Photographs\")."
      • changedOutput schema / required
        Previous value: -[
        -  "objects",
        -  "total_count",
        -  "truncated",
        -  "shown",
        -  "cap"
        -]New value: +[
        +  "objects",
        +  "total_count"
        +]

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching and exploring millions of items from the Smithsonian Institution's collections including artifacts, artworks, specimens, photographs, and more, using the Smithsonian Open Access API.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching and retrieving detailed information about items from the Smithsonian Open Access collection, including metadata and images.
    13
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI assistants with access to search, explore, and analyze over 3 million collection objects from the Smithsonian Institution's museums. Enables finding objects currently on exhibit, retrieving detailed metadata, high-resolution images, and 3D models from America's national museums.
    47
    10
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Federated, license-verified search across open-access museum collections — currently The Met, Cleveland, AIC, Wikimedia Commons, and Europeana, with more being added. Strict-default-deny rights gate accepts only CC0 / Public Domain Mark, returning reuse-safe artwork with citations in three styles.
    5
    229
    10
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.6/5.0
Disambiguation5/5

Each tool has a clearly distinct role: browsing an exact category, searching free-text, retrieving object metadata, fetching media, listing vocabulary, and finding related objects. Overlaps like browse_category vs search_objects are well-explained with explicit guidance on when to use each, eliminating ambiguity.

Naming Consistency5/5

All tools follow the same pattern: 'smithsonian_' prefix with lowercase snake_case verb_noun names (e.g., browse_category, get_media, list_terms). The naming is perfectly uniform and intuitive.

Tool Count5/5

Six tools cover the full spectrum of Smithsonian discovery and retrieval without bloat. Each tool addresses a distinct need, and the count is well-scoped for a read-only museum API.

Completeness5/5

The surface covers search, exact-category browsing, term vocabulary enumeration, object metadata retrieval, media access, and related-object discovery. There are no obvious dead ends—record IDs flow from search to other tools, and gaps like non-CC0 media are explicitly handled.