Skip to main content
Glama

smithsonian-mcp-server

Get Smithsonian Object Media

smithsonian_get_media
Read-onlyIdempotent

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 (3D models, scanned books, documents), 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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "id": "<id>"
    },
    "name": "smithsonian_get_media"
  }
}

Input Schema

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

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
titleNoObject title from the catalog record.
imagesNoCC0-licensed images for this object.
is_cc0NoTrue when the object-level metadata is CC0. The Open Access corpus is CC0 throughout, so this rarely varies; the per-image is_cc0 flag is what gates delivery.
sourcesNoWhere this answer came from. A page served from oa_mirror lists its rows in mirror order, not the live API's, and its notice names the snapshot date. Present only on a server that keeps a mirror.
record_idNoSmithsonian catalog record ID for the object.
mirror_snapshotNoPublication time (ISO 8601) of the Open Access snapshot the mirror held; what came from oa_mirror reflects the catalog as of then. Present when part of this answer came from oa_mirror.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"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."New value: +"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 3D models, scanned books, or documents. `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."
    • addedOutput schema / properties / mirror_snapshot
      Added value: +{
      +  "description": "Publication time (ISO 8601) of the Open Access snapshot the mirror held; what came from oa_mirror reflects the catalog as of then. Present when part of this answer came from oa_mirror.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / sources
      Added value: +{
      +  "description": "Where this answer came from. A page served from oa_mirror lists its rows in mirror order, not the live API's, and its notice names the snapshot date. Present only on a server that keeps a mirror.",
      +  "items": {
      +    "description": "oa_mirror: the server's local copy of the Smithsonian Open Access bulk metadata. edan_api: the live Smithsonian API.",
      +    "enum": [
      +      "oa_mirror",
      +      "edan_api"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  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",
      +      "is_cc0",
      +      "images"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `not_found`: No object with the given ID exists in the Smithsonian catalog. `no_media`: The object exists but has no digitized online media. `no_images`: The object has digitized media, but none of it is an image — the media is entirely non-image types such as scanned books, 3D models, or sound recordings. `not_cc0`: The object has media but none of its images are CC0 open access. `invalid_id`: The ID is empty or contains only whitespace. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "not_found",
      +            "no_media",
      +            "no_images",
      +            "not_cc0",
      +            "invalid_id"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "record_id",
      -  "title",
      -  "is_cc0",
      -  "images"
      -]
  3. Changed2 schema fields changed
    • changedOutput schema / properties / images / items / properties / is_cc0 / description
      Previous value: -"True when this specific image is CC0 (may differ from the object-level flag)."New value: +"True when this specific image is CC0 (may differ from the object-level flag). Always true on returned images — non-CC0 images are filtered out before the response."
    • changedOutput schema / properties / is_cc0 / description
      Previous value: -"True when the object-level metadata is CC0."New value: +"True when the object-level metadata is CC0. The Open Access corpus is CC0 throughout, so this rarely varies; the per-image is_cc0 flag is what gates delivery."
  4. Changed1 schema field changed
    • changedInput schema / properties / id / description
      Previous value: -"record_id of the object (e.g. \"nasm_A19670093000\") from smithsonian_search or smithsonian_get_object."New value: +"record_id of the object (e.g. \"nasm_A19670093000\") from smithsonian_search_objects or smithsonian_get_object."
  5. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent and openWorld, but the description adds substantial behavior beyond them: it never returns an empty list, it enumerates three distinct failure reasons (nothing digitized, non-image media such as 3D models or scanned books, all-non-CC0 images), and it specifies the resolutions returned per image entry. That is exactly the kind of disclosure an agent needs before committing to a call.

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

Conciseness4/5

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

The lead sentence front-loads the resource and resolution scope, and every following sentence carries information (failure reasons, per-entry URL tiers, routing hint). The second sentence is somewhat long due to its triple parallel clause, which is mildly heavy but not wasteful.

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

Completeness4/5

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

With an output schema present, the description need not document return shape, yet it adds the meaningful part — why the call may 'fail' with a named reason rather than an empty list, plus the resolution tiers per image. Only authentication and rate-limit context are absent, which is minor for a single-parameter read-only tool.

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?

There is only one parameter and schema coverage is 100%, and the schema itself explains that the id is the record_id from smithsonian_search_objects or smithsonian_get_object. The description adds no further constraint or format detail about the id, so 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: return CC0 open-access images for a Smithsonian object at multiple resolutions. It also distinguishes itself from the sibling search path by pointing at the cc0_only filter on smithsonian_search_objects, so an agent can tell which tool retrieves media versus which finds objects.

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

Usage Guidelines4/5

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

The closing sentence routes the agent usefully: use smithsonian_search_objects with cc0_only to surface objects that have downloadable images, then call this tool. It gives clear context but never states an explicit exclusion (e.g. do not use for non-CC0 media or 3D objects), so it stops short of full when/when-not 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.