Skip to main content
Glama

HALO Homebridge AI Surfaces

Get live Homebridge product images and videos

get_homebridge_product_media
Read-onlyIdempotent

Read additional public HTTPS Shopify media for an approved product when the shopper requests more pictures or a gallery. Pass the exact SKU for variant-associated media first. An exact SKU may have only one assigned view. Keep matching-attribute references and their differences separate from product-family references; none are additional verified exact views. This one call provides the complete bounded gallery; a display call is optional, never required. Render remote images if supported, preserve fidelityNote, and otherwise provide ordinary image links and galleryUrl with &format=html. Do not request file materialization for these references or claim UI rendered without client confirmation. Creates no commerce state.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
skuNo
limitNo
categoryYes
mediaTypesNo
productHandleYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
mediaYes
productYes
boundariesYes
galleryUrlYes
mediaCountYes
generatedAtYes
schemaVersionYes
dataProvenanceYes
selectedVariantYes
requestedMediaTypesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / media / items / properties / relevance
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "differingAttributes": {
      +      "additionalProperties": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "selected": {
      +            "type": "string"
      +          },
      +          "shown": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "selected",
      +          "shown"
      +        ],
      +        "type": "object"
      +      },
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "evidenceSource": {
      +      "enum": [
      +        "shopify_variant_association",
      +        "shopify_variant_options",
      +        "product_membership"
      +      ],
      +      "type": "string"
      +    },
      +    "group": {
      +      "enum": [
      +        "selected_variant",
      +        "matching_visual_attributes",
      +        "product_family"
      +      ],
      +      "type": "string"
      +    },
      +    "matchedAttributes": {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "reviewedDuplicateGroup": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "group",
      +    "evidenceSource",
      +    "matchedAttributes",
      +    "differingAttributes"
      +  ],
      +  "type": "object"
      +}
  2. Changed12 schema fields changed
    • addedOutput schema / properties / galleryUrl
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / media / items / properties / associatedVariantIds
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / media / items / properties / association
      Added value: +{
      +  "enum": [
      +    "shopify_variant_featured_image",
      +    "shopify_product_media"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / media / items / properties / exactVariantDepictionVerified
      Added value: +{
      +  "const": false,
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / media / items / properties / fidelityNote
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / media / items / properties / height
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / media / items / properties / mimeType
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / media / items / properties / relationship
      Added value: +{
      +  "enum": [
      +    "representative",
      +    "product_family"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / media / items / properties / url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / media / items / properties / width
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / media / items / required
      Previous value: -[
      -  "mediaId",
      -  "type",
      -  "position",
      -  "altText",
      -  "previewImage",
      -  "sources",
      -  "embeddedUrl"
      -]New value: +[
      +  "url",
      +  "mimeType",
      +  "width",
      +  "height",
      +  "relationship",
      +  "association",
      +  "associatedVariantIds",
      +  "exactVariantDepictionVerified",
      +  "fidelityNote",
      +  "mediaId",
      +  "type",
      +  "position",
      +  "altText",
      +  "previewImage",
      +  "sources",
      +  "embeddedUrl"
      +]
    • changedOutput schema / required
      Previous value: -[
      -  "schemaVersion",
      -  "generatedAt",
      -  "product",
      -  "selectedVariant",
      -  "requestedMediaTypes",
      -  "media",
      -  "mediaCount",
      -  "dataProvenance",
      -  "boundaries"
      -]New value: +[
      +  "galleryUrl",
      +  "schemaVersion",
      +  "generatedAt",
      +  "product",
      +  "selectedVariant",
      +  "requestedMediaTypes",
      +  "media",
      +  "mediaCount",
      +  "dataProvenance",
      +  "boundaries"
      +]
  3. First observed

TDQS

A3.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds substantial behavioral context beyond that: it is a read that 'creates no commerce state,' returns a 'complete bounded gallery,' may render remote images or provide ordinary links, and warns against claiming UI rendered without client confirmation. This exceeds what annotations alone provide.

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

Conciseness2/5

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

The description is a dense paragraph with several ambiguous or jargon-heavy clauses such as 'preserve fidelityNote' and 'Keep matching-attribute references and their differences separate from product-family references.' The core purpose is front-loaded, but the wording is not tight and multiple sentences would confuse rather than guide an agent.

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

Completeness3/5

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

The description covers the read-only nature, output behavior (links, galleryUrl, rendering caveat), and the optional display call. However, with five parameters and zero schema descriptions, the missing explanation of required parameters category and productHandle leaves a notable gap. An output schema exists, so return-value shape does not need to be spelled out, but input semantics are not fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the five parameters. It does clarify the optional SKU parameter ('Pass the exact SKU... An exact SKU may have only one assigned view'), but it does not meaningfully explain required parameters like category and productHandle, nor does it clarify limit or mediaTypes behavior. The description adds some SKU semantics but leaves most parameter meaning to inference.

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

Purpose4/5

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

The description opens with a clear verb and resource: 'Read additional public HTTPS Shopify media for an approved product' when a shopper requests more pictures or a gallery. It also distinguishes this from the display sibling by stating 'a display call is optional, never required.' However, later phrases like 'matching-attribute references and their differences' muddy the clarity somewhat.

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

Usage Guidelines4/5

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

The description gives a specific trigger: 'when the shopper requests more pictures or a gallery.' It also instructs to pass the exact SKU first and clarifies that the display sibling is optional, not required. It does not explicitly enumerate when to prefer every sibling, but it provides enough context for appropriate use.

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.

Resources