Skip to main content
Glama

smithsonian-mcp-server

Get Smithsonian Object

smithsonian_get_object
Read-onlyIdempotent

Fetch a normalized catalog metadata projection for a Smithsonian object by its record_id (from smithsonian_search_objects results). Returns title, dates, description, labeled notes, makers, materials, dimensions, places, cultures, topics, exhibitions, credit line, identifiers, rights, and a media summary. Natural-history records can include scientific_names, taxonomy, and collection coordinates without inferred precision. The media summary is a count; full image URLs come from smithsonian_get_media.

Input Schema

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

Output Schema

NameRequiredDescriptionDefault
datesNoAll date fields in the catalog record.
errorNoPresent when the call failed. Absent on success.
notesNoAll nonempty catalog notes in source order, including repeated labels.
placeNoGeographic place associations.
titleNoObject title.
is_cc0NoTrue when the object metadata is CC0 (open access). The Smithsonian Open Access corpus is CC0 throughout, so this flag rarely varies — read media_summary.has_cc0_images to predict whether smithsonian_get_media returns images.
makersNoAll named parties associated with this object.
topicsNoSubject and topic terms.
cultureNoCulture associations.
taxonomyNoReported taxonomic ranks; absent ranks remain omitted.
materialsNoPhysical material descriptions.
record_idNoUnique object identifier.
unit_codeNoMuseum unit code.
dimensionsNoDimension and measurement strings.
coordinatesNoCollection points without inferred precision or geocoding; empty when no valid decimal pairs exist.
credit_lineNoAttribution or credit string.
descriptionNoBest available prose description from Summary, Physical Description, Brief Description, Description, Description (Brief), or Citation notes. Absent when only administrative notes exist.
exhibitionsNoExhibition history.
identifiersNoAll accession and catalog identifiers.
museum_nameNoFull museum name. A few rarely-indexed archive sub-unit codes have no mapped name and fall back to the raw unit code.
record_linkNoCanonical Smithsonian Institution URL for this object.
media_summaryNoMedia availability summary. Call smithsonian_get_media for full image URLs.
object_rightsNoRights statement from the catalog.
scientific_namesNoAll reported scientific names in source order; no accepted-name inference.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedOutput schema / anyOf
      Previous 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"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "record_id",
      +      "title",
      +      "unit_code",
      +      "museum_name",
      +      "dates",
      +      "notes",
      +      "scientific_names",
      +      "coordinates",
      +      "makers",
      +      "materials",
      +      "dimensions",
      +      "place",
      +      "culture",
      +      "topics",
      +      "exhibitions",
      +      "identifiers",
      +      "is_cc0",
      +      "media_summary"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / coordinates
      Added value: +{
      +  "description": "Collection points without inferred precision or geocoding; empty when no valid decimal pairs exist.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "A valid reported decimal coordinate pair.",
      +    "properties": {
      +      "latitude": {
      +        "description": "Reported decimal latitude in degrees.",
      +        "type": "number"
      +      },
      +      "locality": {
      +        "description": "Locality reported alongside this point.",
      +        "type": "string"
      +      },
      +      "longitude": {
      +        "description": "Reported decimal longitude in degrees.",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "latitude",
      +      "longitude"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / description / description
      Previous value: -"Best available prose description (Summary, Physical Description, or Brief Description notes)."New value: +"Best available prose description from Summary, Physical Description, Brief Description, Description, Description (Brief), or Citation notes. Absent when only administrative notes exist."
    • addedOutput schema / properties / notes
      Added value: +{
      +  "description": "All nonempty catalog notes in source order, including repeated labels.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "A labeled catalog note.",
      +    "properties": {
      +      "content": {
      +        "description": "Plain-text note content.",
      +        "type": "string"
      +      },
      +      "label": {
      +        "description": "Catalog note label, or Note when absent.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "label",
      +      "content"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / scientific_names
      Added value: +{
      +  "description": "All reported scientific names in source order; no accepted-name inference.",
      +  "items": {
      +    "description": "A catalog-reported scientific name.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / taxonomy
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Reported taxonomic ranks; absent ranks remain omitted.",
      +  "properties": {
      +    "class": {
      +      "description": "Reported class values.",
      +      "items": {
      +        "description": "A class value.",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "family": {
      +      "description": "Reported family values.",
      +      "items": {
      +        "description": "A family value.",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "kingdom": {
      +      "description": "Reported kingdom values.",
      +      "items": {
      +        "description": "A kingdom value.",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "order": {
      +      "description": "Reported order values.",
      +      "items": {
      +        "description": "An order value.",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "phylum": {
      +      "description": "Reported phylum values.",
      +      "items": {
      +        "description": "A phylum value.",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  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": [
      +      "record_id",
      +      "title",
      +      "unit_code",
      +      "museum_name",
      +      "dates",
      +      "makers",
      +      "materials",
      +      "dimensions",
      +      "place",
      +      "culture",
      +      "topics",
      +      "exhibitions",
      +      "identifiers",
      +      "is_cc0",
      +      "media_summary"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `not_found`: No object with the given ID exists in the Smithsonian catalog. `invalid_id`: The ID format is clearly malformed (empty string, whitespace only). Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "not_found",
      +            "invalid_id"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "record_id",
      -  "title",
      -  "unit_code",
      -  "museum_name",
      -  "dates",
      -  "makers",
      -  "materials",
      -  "dimensions",
      -  "place",
      -  "culture",
      -  "topics",
      -  "exhibitions",
      -  "identifiers",
      -  "is_cc0",
      -  "media_summary"
      -]
  3. Changed1 schema field changed
    • changedOutput schema / properties / is_cc0 / description
      Previous value: -"True when the object metadata is CC0 (open access). Call smithsonian_get_media to get images."New value: +"True when the object metadata is CC0 (open access). The Smithsonian Open Access corpus is CC0 throughout, so this flag rarely varies — read media_summary.has_cc0_images to predict whether smithsonian_get_media returns images."
  4. Changed1 schema field changed
    • changedInput schema / properties / id / description
      Previous value: -"Object record_id from smithsonian_search results (e.g. \"nasm_A19670093000\")."New value: +"Object record_id from smithsonian_search_objects results (e.g. \"nasm_A19670093000\")."
  5. Changed1 schema field changed
    • changedOutput schema / properties / museum_name / description
      Previous value: -"Full museum name."New value: +"Full museum name. A few rarely-indexed archive sub-unit codes have no mapped name and fall back to the raw unit code."
  6. Changed4 schema fields changed
    • addedOutput schema / properties / media_summary / properties / cc0_image_count
      Added value: +{
      +  "description": "Number of CC0 images smithsonian_get_media returns for this object. Lower than count when the object has non-image media (e.g. 3D models) or non-CC0 images.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / media_summary / properties / count / description
      Previous value: -"Total number of online media items."New value: +"Total number of online media items, across all types (includes non-image media such as 3D models)."
    • changedOutput schema / properties / media_summary / properties / has_cc0_images / description
      Previous value: -"True when at least one image is CC0."New value: +"True when at least one CC0 image is available (cc0_image_count > 0)."
    • changedOutput schema / properties / media_summary / required
      Previous value: -[
      -  "count",
      -  "has_cc0_images"
      -]New value: +[
      +  "count",
      +  "cc0_image_count",
      +  "has_cc0_images"
      +]
  7. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered elsewhere. The description adds real value beyond them: it discloses the returned payload shape, notes that natural-history records include scientific_names/taxonomy/coordinates 'without inferred precision,' and warns that the media summary is only a count rather than URLs.

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

Conciseness4/5

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

Three front-loaded sentences with no filler; the purpose and source of the id come first. The long enumerated list of returned fields is somewhat verbose given an output schema exists, but it is informative rather than padding.

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

Completeness5/5

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

For a single-parameter read tool with annotations and a full output schema, the description covers everything an agent needs: the prerequisite call, the id format, the returned content, the natural-history caveat, and where to get media URLs. Nothing material is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single id parameter is already documented with an example ("nasm_A19670093000") in the schema. The description only restates its origin in search results, adding no syntax or format detail beyond the structured field, so the baseline 3 applies.

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 and resource: 'Fetch a normalized catalog metadata projection for a Smithsonian object by its record_id.' It also distinguishes itself from smithsonian_search_objects (source of the id) and smithsonian_get_media (full image URLs), so an agent can tell it apart from siblings without opening a 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?

Clear context: it must be called with a record_id obtained from smithsonian_search_objects results, and it explicitly routes image-URL needs to smithsonian_get_media. It lacks an explicit 'when not to use' statement, but the prerequisite chain and the media alternative are stated rather than implied.

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.