smithsonian-mcp-server
Server Details
Search 14.5M Smithsonian Open Access objects, get CC0 images, find cross-collection connections.
- 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 toolssmithsonian_browse_categoryBrowse Smithsonian by CategoryARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | 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"). | |
| rows | No | Number of sample objects to return (default 10, max 50). | |
| start | No | Pagination offset — 0-indexed. Page contiguously with start = page × rows. | |
| value | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The rows cap that was applied. |
| mode | No | Browse dimension used for this request (one of "museum", "culture", "period", "medium", "topic"). |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of sample objects returned. |
| value | No | Category value queried, as provided in the request. |
| notice | No | Guidance naming the input that retrieves the objects this page omitted. |
| truncated | No | True when matching objects remain past this page. False on a terminal or past-the-end page, where nothing is being withheld. |
| total_count | No | Total number of Smithsonian objects matching this category. |
| sample_objects | No | The requested page of objects matching the category, in upstream order. Empty when start is past the end of the category. |
| museum_breakdown | No | When mode is not "museum": top contributing museums from the sample, helping plan museum-focused follow-up searches. |
| truncationCeiling | No | Total matching objects (upper bound for omitted items). |
TDQS
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.
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.
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.
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.
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.
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 MediaARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | record_id of the object (e.g. "nasm_A19670093000") from smithsonian_search_objects or smithsonian_get_object. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| title | No | Object title from the catalog record. |
| images | No | CC0-licensed images for this object. |
| is_cc0 | No | 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. |
| record_id | No | Smithsonian catalog record ID for the object. |
TDQS
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.
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.
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.
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.
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.
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 ObjectARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Object record_id from smithsonian_search_objects results (e.g. "nasm_A19670093000"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| dates | No | All date fields in the catalog record. |
| error | No | Present when the call failed. Absent on success. |
| place | No | Geographic place associations. |
| title | No | Object title. |
| is_cc0 | No | 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. |
| makers | No | All named parties associated with this object. |
| topics | No | Subject and topic terms. |
| culture | No | Culture associations. |
| materials | No | Physical material descriptions. |
| record_id | No | Unique object identifier. |
| unit_code | No | Museum unit code. |
| dimensions | No | Dimension and measurement strings. |
| credit_line | No | Attribution or credit string. |
| description | No | Best available prose description (Summary, Physical Description, or Brief Description notes). |
| exhibitions | No | Exhibition history. |
| identifiers | No | All accession and catalog identifiers. |
| museum_name | No | Full museum name. A few rarely-indexed archive sub-unit codes have no mapped name and fall back to the raw unit code. |
| record_link | No | Canonical Smithsonian Institution URL for this object. |
| media_summary | No | Media availability summary. Call smithsonian_get_media for full image URLs. |
| object_rights | No | Rights statement from the catalog. |
TDQS
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.
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.
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.
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.
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.
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 TermsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | Number of terms to return per page (default 50, max 100). | |
| field | Yes | 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). | |
| start | No | Pagination offset (0-indexed). Use with rows to page through large vocabularies. | |
| contains | No | 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". |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The rows cap that was applied. |
| error | No | Present when the call failed. Absent on success. |
| field | No | The enumerated field, as provided in the request. |
| shown | No | Number of terms returned in this page. |
| terms | No | The field's distinct term values for this page, in the Smithsonian index's native order. No per-term object counts are available upstream. |
| total | No | Total number of distinct terms for this field (the full vocabulary size; terms is one page of it). |
| labels | No | 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. |
| notice | No | Guidance naming the input that retrieves the terms this page omitted, or how to broaden a contains filter that matched nothing. |
| truncated | No | True when matching terms remain past this page. False on a terminal or past-the-end page, where nothing is being withheld. |
| truncationCeiling | No | Distinct terms available for this query (the full vocabulary, or the contains-match count) — upper bound for omitted items. |
TDQS
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.
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.
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.
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.
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.
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 ObjectsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | Page size (default 20, max 100). | |
| query | Yes | Free-text search. Use specific terms for precision ("Tlingit totem pole") or broad terms for browsing ("quilt"). | |
| start | No | Pagination offset — 0-indexed. Use with rows for paging through large result sets. | |
| filters | No | Optional structured filters to narrow the search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The rows cap that was applied. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of objects returned in this page. |
| notice | No | Guidance naming the input that retrieves the objects this page omitted. |
| objects | No | Curated object summaries for the current page. |
| truncated | No | True when matching objects remain past this page. False on a terminal or past-the-end page, where nothing is being withheld. |
| total_count | No | Total matching objects in the Smithsonian catalog before pagination. |
| truncationCeiling | No | Total matching objects (upper bound for omitted items). |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
- Changed
smithsonian_browse_category6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "mode", + "value", + "total_count", + "sample_objects", + "museum_breakdown" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "mode", - "value", - "total_count", - "sample_objects", - "museum_breakdown" -]
- Changed
smithsonian_find_related6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "anchor", + "related", + "search_signals_used", + "signals" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "anchor", - "related", - "search_signals_used", - "signals" -]
- Changed
smithsonian_get_media6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "record_id", + "title", + "is_cc0", + "images" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "record_id", - "title", - "is_cc0", - "images" -]
- Changed
smithsonian_get_object6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded 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" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "record_id", - "title", - "unit_code", - "museum_name", - "dates", - "makers", - "materials", - "dimensions", - "place", - "culture", - "topics", - "exhibitions", - "identifiers", - "is_cc0", - "media_summary" -]
- Changed
smithsonian_list_terms6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "field", + "terms", + "total" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "field", - "terms", - "total" -]
- Changed
smithsonian_search_objects6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "objects", + "total_count" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "objects", - "total_count" -]
2 tool updates
- Changed
smithsonian_browse_category1 field changed- changed
Input schema / properties / value / descriptionPrevious 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."
- Changed
smithsonian_search_objects2 fields changed- changed
Input schema / properties / filters / properties / object_type / descriptionPrevious 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." - changed
Output schema / properties / objects / items / properties / object_type / descriptionPrevious 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."
4 tool updates
- Changed
smithsonian_browse_category4 fields changed- changed
Input schema / properties / mode / descriptionPrevious 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\")." - changed
Input schema / properties / mode / enumPrevious value: -[ - "museum", - "culture", - "period", - "medium" -]New value: +[ + "museum", + "culture", + "period", + "medium", + "topic" +] - changed
Input schema / properties / value / descriptionPrevious 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." - changed
Output schema / properties / mode / descriptionPrevious 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\")."
- Changed
smithsonian_find_related2 fields changed- added
Output schema / properties / signals / items / properties / search_continuation / properties / filters / properties / nameAdded value: +{ + "description": "smithsonian_search_objects filters.name value.", + "type": "string" +} - added
Output schema / properties / signals / items / properties / search_continuation / properties / filters / properties / topicAdded value: +{ + "description": "smithsonian_search_objects filters.topic value.", + "type": "string" +}
- Changed
smithsonian_list_terms2 fields changed- changed
Input schema / properties / field / descriptionPrevious 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)." - changed
Input schema / properties / field / enumPrevious value: -[ - "unit_code", - "culture", - "place", - "date", - "online_media_type" -]New value: +[ + "unit_code", + "culture", + "place", + "date", + "online_media_type", + "topic" +]
- Changed
smithsonian_search_objects2 fields changed- added
Input schema / properties / filters / properties / nameAdded 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" +} - added
Input schema / properties / filters / properties / topicAdded 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" +}
5 tool updates
- Changed
smithsonian_browse_category3 fields changed- changed
Input schema / properties / mode / descriptionPrevious 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\")." - changed
Input schema / properties / value / descriptionPrevious 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." - changed
Output schema / properties / sample_objects / items / properties / is_cc0 / descriptionPrevious 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."
- Changed
smithsonian_find_related3 fields changed- changed
Output schema / properties / related / items / properties / is_cc0 / descriptionPrevious 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." - added
Output schema / properties / signals / items / properties / search_continuation / properties / filters / properties / dateAdded value: +{ + "description": "smithsonian_search_objects filters.date value.", + "type": "string" +} - removed
Output schema / properties / signals / items / properties / search_continuation / properties / filters / properties / date_decadeRemoved value: -{ - "description": "smithsonian_search_objects filters.date_decade value.", - "type": "string" -}
- Changed
smithsonian_get_media2 fields changed- changed
Output schema / properties / images / items / properties / is_cc0 / descriptionPrevious 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." - changed
Output schema / properties / is_cc0 / descriptionPrevious 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."
- Changed
smithsonian_get_object1 field changed- changed
Output schema / properties / is_cc0 / descriptionPrevious 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."
- Changed
smithsonian_search_objects5 fields changed- changed
Input schema / properties / filters / properties / cc0_only / descriptionPrevious 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." - added
Input schema / properties / filters / properties / dateAdded 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" +} - removed
Input schema / properties / filters / properties / date_decadeRemoved 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" -} - changed
Output schema / properties / objects / items / properties / date / descriptionPrevious 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." - changed
Output schema / properties / objects / items / properties / is_cc0 / descriptionPrevious 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."
1 tool update
- Changed
smithsonian_list_terms2 fields changed- changed
Input schema / properties / contains / descriptionPrevious 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\"." - added
Output schema / properties / labelsAdded 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" +}
8 tool updates
- Added
smithsonian_browse_category - Removed
smithsonian_explore - Changed
smithsonian_find_related8 fields changed- changed
Input schema / properties / id / descriptionPrevious 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." - changed
Output schema / properties / signals / descriptionPrevious 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." - changed
Output schema / properties / signals / items / properties / search_continuation / descriptionPrevious 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." - changed
Output schema / properties / signals / items / properties / search_continuation / properties / filters / descriptionPrevious 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." - changed
Output schema / properties / signals / items / properties / search_continuation / properties / filters / properties / culture / descriptionPrevious value: -"smithsonian_search filters.culture value."New value: +"smithsonian_search_objects filters.culture value." - changed
Output schema / properties / signals / items / properties / search_continuation / properties / filters / properties / date_decade / descriptionPrevious value: -"smithsonian_search filters.date_decade value."New value: +"smithsonian_search_objects filters.date_decade value." - changed
Output schema / properties / signals / items / properties / search_continuation / properties / filters / properties / object_type / descriptionPrevious value: -"smithsonian_search filters.object_type value."New value: +"smithsonian_search_objects filters.object_type value." - changed
Output schema / properties / signals / items / properties / search_continuation / properties / query / descriptionPrevious 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."
- Changed
smithsonian_get_media1 field changed- changed
Input schema / properties / id / descriptionPrevious 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."
- Changed
smithsonian_get_object1 field changed- changed
Input schema / properties / id / descriptionPrevious 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\")."
- Changed
smithsonian_list_terms1 field changed- changed
Output schema / properties / terms / items / descriptionPrevious 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."
- Removed
smithsonian_search - Added
smithsonian_search_objects
4 tool updates
- Changed
smithsonian_explore5 fields changed- added
Input schema / properties / startAdded value: +{ + "default": 0, + "description": "Pagination offset — 0-indexed. Page contiguously with start = page × rows.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance naming the input that retrieves the objects this page omitted.", + "type": "string" +} - changed
Output schema / properties / sample_objects / descriptionPrevious 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." - changed
Output schema / properties / sample_objects / items / descriptionPrevious value: -"A sample object from the first page of category matches."New value: +"A sample object from the requested page of category matches." - changed
Output schema / properties / truncated / descriptionPrevious 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."
- Changed
smithsonian_find_related4 fields changed- added
Output schema / properties / noticeAdded 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" +} - added
Output schema / properties / signalsAdded 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" +} - changed
Output schema / properties / truncationCeiling / descriptionPrevious 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." - changed
Output schema / requiredPrevious value: -[ - "anchor", - "related", - "search_signals_used" -]New value: +[ + "anchor", + "related", + "search_signals_used", + "signals" +]
- Changed
smithsonian_list_terms2 fields changed- changed
Output schema / properties / notice / descriptionPrevious 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." - changed
Output schema / properties / truncated / descriptionPrevious 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."
- Changed
smithsonian_search2 fields changed- added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance naming the input that retrieves the objects this page omitted.", + "type": "string" +} - changed
Output schema / properties / truncated / descriptionPrevious 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."
4 tool updates
- Changed
smithsonian_explore2 fields changed- changed
Input schema / properties / value / descriptionPrevious 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." - changed
Output schema / properties / museum_breakdown / items / properties / museum_name / descriptionPrevious 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."
- Changed
smithsonian_find_related1 field changed- changed
Output schema / properties / related / items / properties / museum_name / descriptionPrevious 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."
- Changed
smithsonian_get_object1 field changed- changed
Output schema / properties / museum_name / descriptionPrevious 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."
- Changed
smithsonian_search3 fields changed- changed
Input schema / properties / filters / properties / online_only / descriptionPrevious 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." - changed
Output schema / properties / objects / items / properties / has_media / descriptionPrevious 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." - changed
Output schema / properties / objects / items / properties / museum_name / descriptionPrevious 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."
3 tool updates
- Changed
smithsonian_explore5 fields changed- changed
Input schema / properties / mode / descriptionPrevious 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\")." - changed
Input schema / properties / value / descriptionPrevious 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." - changed
Output schema / properties / museum_breakdown / items / properties / unit_code / descriptionPrevious value: -"Smithsonian unit code for this museum (e.g. \"NMNH\", \"SAAM\")."New value: +"Smithsonian unit code for this museum (e.g. \"NMNHPALEO\", \"SAAM\")." - changed
Output schema / properties / sample_objects / descriptionPrevious value: -"Representative objects from the category."New value: +"The first page of objects matching the category, in upstream order." - changed
Output schema / properties / sample_objects / items / descriptionPrevious value: -"A representative sample object from the category."New value: +"A sample object from the first page of category matches."
- Changed
smithsonian_find_related2 fields changed- changed
Input schema / properties / start / descriptionPrevious 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." - changed
Output schema / properties / truncationCeiling / descriptionPrevious 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."
- Changed
smithsonian_search3 fields changed- added
Input schema / properties / filters / properties / date_decade / patternAdded value: +"^\\d{4}s$" - changed
Input schema / properties / filters / properties / unit_code / descriptionPrevious 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\")." - changed
Output schema / properties / objects / items / properties / unit_code / descriptionPrevious 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."
1 tool update
- Changed
smithsonian_find_related2 fields changed- changed
Input schema / properties / start / descriptionPrevious 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." - changed
Output schema / properties / truncationCeiling / descriptionPrevious 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."
1 tool update
- Changed
smithsonian_list_terms3 fields changed- added
Input schema / properties / containsAdded 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" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when a contains filter matched no terms — how to broaden or drop the filter.", + "type": "string" +} - changed
Output schema / properties / truncationCeiling / descriptionPrevious 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."
1 tool update
- Changed
smithsonian_find_related3 fields changed- added
Input schema / properties / startAdded 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" +} - changed
Output schema / properties / truncated / descriptionPrevious 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)." - added
Output schema / properties / truncationCeilingAdded 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" +}
1 tool update
- Changed
smithsonian_search1 field changed- added
Output schema / properties / objects / items / properties / dateAdded 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" +}
1 tool update
- Changed
smithsonian_search4 fields changed- changed
Input schema / properties / filters / properties / culture / descriptionPrevious 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\")." - changed
Input schema / properties / filters / properties / date_decade / descriptionPrevious 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\")." - changed
Input schema / properties / filters / properties / place / descriptionPrevious 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\")." - changed
Input schema / properties / filters / properties / unit_code / descriptionPrevious 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\")."
4 tool updates
- Changed
smithsonian_explore3 fields changed- changed
Input schema / properties / mode / descriptionPrevious 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\")." - changed
Input schema / properties / value / descriptionPrevious 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." - changed
Output schema / requiredPrevious value: -[ - "mode", - "value", - "total_count", - "sample_objects", - "museum_breakdown", - "truncated", - "shown", - "cap" -]New value: +[ + "mode", + "value", + "total_count", + "sample_objects", + "museum_breakdown" +]
- Changed
smithsonian_find_related1 field changed- changed
Output schema / requiredPrevious value: -[ - "anchor", - "related", - "search_signals_used", - "truncated", - "shown", - "cap" -]New value: +[ + "anchor", + "related", + "search_signals_used" +]
- Changed
smithsonian_list_terms10 fields changed- changed
Input schema / properties / field / descriptionPrevious 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\")." - changed
Input schema / properties / field / enumPrevious value: -[ - "unit_code", - "object_type", - "culture", - "place", - "date", - "media_usage", - "online_media_type" -]New value: +[ + "unit_code", + "culture", + "place", + "date", + "online_media_type" +] - changed
Output schema / properties / terms / descriptionPrevious 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." - removed
Output schema / properties / terms / items / additionalPropertiesRemoved value: -false - changed
Output schema / properties / terms / items / descriptionPrevious 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." - removed
Output schema / properties / terms / items / propertiesRemoved 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" - } -} - removed
Output schema / properties / terms / items / requiredRemoved value: -[ - "value", - "count" -] - changed
Output schema / properties / terms / items / typePrevious value: -"object"New value: +"string" - changed
Output schema / properties / total / descriptionPrevious 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)." - changed
Output schema / requiredPrevious value: -[ - "field", - "terms", - "total", - "truncated", - "shown", - "cap" -]New value: +[ + "field", + "terms", + "total" +]
- Changed
smithsonian_search4 fields changed- changed
Input schema / properties / filters / properties / culture / descriptionPrevious 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." - changed
Input schema / properties / filters / properties / object_type / descriptionPrevious 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." - changed
Output schema / properties / objects / items / properties / object_type / descriptionPrevious value: -"Object type term (e.g. \"Aircraft\", \"Painting\", \"Fossil\")."New value: +"Object type term (e.g. \"Aircraft\", \"Paintings\", \"Photographs\")." - changed
Output schema / requiredPrevious value: -[ - "objects", - "total_count", - "truncated", - "shown", - "cap" -]New value: +[ + "objects", + "total_count" +]
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
MET Museum collection via MCP — 500K+ artworks, metadata, provenance, open-access images.
Cleveland Museum of Art Open Access API (~63k artworks, many CC0)
Art MCP — Metropolitan Museum of Art Collection API (free, no auth)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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.3MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and retrieving detailed information about items from the Smithsonian Open Access collection, including metadata and images.13MIT
- AlicenseNot gradedqualityDmaintenanceProvides 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.4710MIT
- AlicenseAqualityBmaintenanceFederated, 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.522910MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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.
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.