Skip to main content
Glama

smithsonian-mcp-server

List Valid Filter Terms

smithsonian_list_terms
Read-onlyIdempotent

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.

Input Schema

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

Output Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / terms / items / description
      Previous value: -"A term value — pass directly as the filter value in smithsonian_search_objects or smithsonian_browse_category."New value: +"A term value for the corresponding smithsonian_search_objects filter. online_media_type values feed search only; browse_category supports museum (unit_code), culture, period (date), medium (object_type), and topic, with no media-type or place mode."
  2. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "field",
      +      "terms",
      +      "total"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `no_terms`: The field returned no indexed terms. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "no_terms"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "field",
      -  "terms",
      -  "total"
      -]
  3. Changed2 schema fields changed
    • changedInput schema / properties / field / description
      Previous value: -"Indexed field to enumerate. Choices: unit_code (museum codes like \"NASM\"), culture (e.g. \"Aztecs\"), place (geographic terms), date (decade/era values like \"1920s\"), online_media_type (media formats like \"Images\", \"3D Models\")."New value: +"Indexed field to enumerate. Choices: unit_code (museum codes like \"NASM\"), culture (e.g. \"Aztecs\"), place (geographic terms), date (decade/era values like \"1920s\"), online_media_type (media formats like \"Images\", \"3D Models\"), topic (subject terms like \"Quilts\" — 133k terms, so pair it with contains)."
    • changedInput schema / properties / field / enum
      Previous value: -[
      -  "unit_code",
      -  "culture",
      -  "place",
      -  "date",
      -  "online_media_type"
      -]New value: +[
      +  "unit_code",
      +  "culture",
      +  "place",
      +  "date",
      +  "online_media_type",
      +  "topic"
      +]
  4. Changed2 schema fields changed
    • changedInput schema / properties / contains / description
      Previous value: -"Case-insensitive substring filter on the term vocabulary — resolve a filter value (e.g. \"greek\") to its exact controlled-vocabulary term(s)."New value: +"Case-insensitive substring filter on the term vocabulary — resolve a filter value (e.g. \"greek\") to its exact controlled-vocabulary term(s). For unit_code the substring also matches each code's museum name, so \"National Air and Space\" resolves to \"NASM\"."
    • addedOutput schema / properties / labels
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "description": "Museum name for each unit_code on this page that has one — present only when field is \"unit_code\". A few rarely-indexed archive sub-unit codes have no mapped name and are absent from this map; their term is still returned in terms.",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • changedOutput schema / properties / terms / items / description
      Previous value: -"A term value — pass directly as the filter value in smithsonian_search or smithsonian_explore."New value: +"A term value — pass directly as the filter value in smithsonian_search_objects or smithsonian_browse_category."
  6. Changed2 schema fields changed
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when a contains filter matched no terms — how to broaden or drop the filter."New value: +"Guidance naming the input that retrieves the terms this page omitted, or how to broaden a contains filter that matched nothing."
    • changedOutput schema / properties / truncated / description
      Previous value: -"True when the term list was capped by the rows parameter."New value: +"True when matching terms remain past this page. False on a terminal or past-the-end page, where nothing is being withheld."
  7. Changed3 schema fields changed
    • addedInput schema / properties / contains
      Added value: +{
      +  "description": "Case-insensitive substring filter on the term vocabulary — resolve a filter value (e.g. \"greek\") to its exact controlled-vocabulary term(s).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance when a contains filter matched no terms — how to broaden or drop the filter.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / truncationCeiling / description
      Previous value: -"Total distinct terms for the field (upper bound for omitted items)."New value: +"Distinct terms available for this query (the full vocabulary, or the contains-match count) — upper bound for omitted items."
  8. Changed10 schema fields changed
    • changedInput schema / properties / field / description
      Previous value: -"Indexed field to enumerate. Common choices: unit_code (museum codes like \"NASM\"), object_type (artifact categories like \"Aircraft\"), culture (e.g. \"Aztec\"), place (geographic terms), date (decade values like \"1920s\")."New value: +"Indexed field to enumerate. Choices: unit_code (museum codes like \"NASM\"), culture (e.g. \"Aztecs\"), place (geographic terms), date (decade/era values like \"1920s\"), online_media_type (media formats like \"Images\", \"3D Models\")."
    • changedInput schema / properties / field / enum
      Previous value: -[
      -  "unit_code",
      -  "object_type",
      -  "culture",
      -  "place",
      -  "date",
      -  "media_usage",
      -  "online_media_type"
      -]New value: +[
      +  "unit_code",
      +  "culture",
      +  "place",
      +  "date",
      +  "online_media_type"
      +]
    • changedOutput schema / properties / terms / description
      Previous value: -"Valid term vocabulary for the field, sorted by count descending."New value: +"The field's distinct term values for this page, in the Smithsonian index's native order. No per-term object counts are available upstream."
    • removedOutput schema / properties / terms / items / additionalProperties
      Removed value: -false
    • changedOutput schema / properties / terms / items / description
      Previous value: -"A single term entry with its object count."New value: +"A term value — pass directly as the filter value in smithsonian_search or smithsonian_explore."
    • removedOutput schema / properties / terms / items / properties
      Removed value: -{
      -  "count": {
      -    "description": "Number of Smithsonian objects indexed under this term.",
      -    "type": "number"
      -  },
      -  "value": {
      -    "description": "Term string — pass directly as the filter value in smithsonian_search or smithsonian_explore.",
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / terms / items / required
      Removed value: -[
      -  "value",
      -  "count"
      -]
    • changedOutput schema / properties / terms / items / type
      Previous value: -"object"New value: +"string"
    • changedOutput schema / properties / total / description
      Previous value: -"Total number of distinct terms for this field in the Smithsonian index."New value: +"Total number of distinct terms for this field (the full vocabulary size; terms is one page of it)."
    • changedOutput schema / required
      Previous value: -[
      -  "field",
      -  "terms",
      -  "total",
      -  "truncated",
      -  "shown",
      -  "cap"
      -]New value: +[
      +  "field",
      +  "terms",
      +  "total"
      +]
  9. Changed5 schema fields changed
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The rows cap that was applied.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of terms returned in this page.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when the term list was capped by the rows parameter.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / truncationCeiling
      Added value: +{
      +  "description": "Total distinct terms for the field (upper bound for omitted items).",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "field",
      -  "terms",
      -  "total"
      -]New value: +[
      +  "field",
      +  "terms",
      +  "total",
      +  "truncated",
      +  "shown",
      +  "cap"
      +]
  10. Added

TDQS

A4.3/5.0
Behavior4/5

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

Goes well beyond the readOnly/idempotent/openWorld annotations by disclosing that terms are plural/qualified controlled vocabulary, that vocabularies are huge (topic 133k, place 114k) and page via start/rows, and that unit_code results include museum names that match on contains. No auth, rate-limit, or ordering behavior is mentioned, but the operational traits are substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose and field enum, then escalating to scale/paging and the unit_code special case. Every sentence adds a fact an agent needs; nothing is filler.

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

Completeness5/5

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

Given an existing output schema (return values need not be explained) and safety annotations already covering read-only semantics, the description supplies exactly the missing pieces: vocabulary quirks, vocabulary sizes, pagination, and unit_code name-to-code resolution. Nothing required for correct invocation is absent.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented, and the description largely restates the same field list, contains semantics and paging mechanics. The only genuinely additive parameter hint is pairing topic with contains; baseline 3 applies when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Enumerate") and resource ("valid term vocabulary for an indexed Smithsonian filter field") plus the exact field set. An agent can distinguish this vocabulary-lookup tool from smithsonian_search_objects or smithsonian_get_object without opening any schema.

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

Usage Guidelines4/5

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

Gives a clear use condition: resolve guessed filter values that "tend to return nothing" into exact controlled-vocabulary terms before searching. It does not explicitly name the sibling it feeds into (e.g. smithsonian_search_objects) or say when not to call it, so it stops short of full routing guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.