Skip to main content
Glama

Upload item image

upload_item_image
Destructive

Upload one product photo onto one item, or onto variant rows that should share it. The server compresses the file once to WebP, longest side 512px, and stores that same URL on the sheet photo column for every id. Pass image_base64 with item_id, or item_ids (max 200) for sibling rows such as colors and sizes. You can pass both. Optional column is the photo header name. Visible photo columns are chosen before hidden ones. Every id must belong to this organization and the same sheet. If any id is missing, nothing is written. A barcode column is not used for images. Replacing a photo leaves the stored file in place when any row still uses that URL. Do not invent image URLs. image_base64 and the JSON around it must fit in the 1 MB MCP request body. Base64 is about one third larger than the file, so the image itself must be about 0.75 MB or smaller. A larger request is rejected with "MCP request is too large" and this tool does not run.

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": {
      "image_base64": "<image_base64>"
    },
    "name": "upload_item_image"
  }
}

Input Schema

NameRequiredDescriptionDefault
columnNo
item_idNo
item_idsNo
file_nameNo
image_base64Yes
sheet_numberNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Goes well past the annotations: WebP recompression at 512px longest side, the same URL written to every id, all-or-nothing write semantics ("If any id is missing, nothing is written"), file retention when a URL is still referenced, and the 1 MB request ceiling with the exact error string. For a destructiveHint=true, non-idempotent mutation, that is precisely the context an agent needs, and it is consistent with the annotations rather than contradicting them.

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?

Front-loaded with purpose and the id-targeting model, with constraints following in descending importance. It runs long (roughly eight sentences) and the size-limit discussion takes three of them where two would do, but each sentence carries operational information rather than filler.

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?

Covers the risky parts — atomicity, storage retention on replacement, size limits, and org/sheet scoping — which is the right allocation for a mutation tool with no output schema. It falls short only in not explaining sheet_number (relevant when an item appears on multiple sheets) or file_name, and in not hinting at the response shape after a successful upload.

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

Parameters4/5

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

Schema coverage is 0%, so the description carries the burden and largely does: it explains image_base64, item_id, item_ids (max 200), their mutual combinability, and that "Optional column is the photo header name" with visible columns preferred over hidden ones. Two of the six parameters — file_name and sheet_number — are never mentioned, leaving their purpose inferred from the schema alone.

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?

Opens with a specific verb and resource: "Upload one product photo onto one item, or onto variant rows that should share it." That immediately separates it from sibling uploaders such as upload_customer_logo, upload_label_asset, and add_photo_column, since it names photos, items, and variant rows in one clause.

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 clear operating context: pass image_base64 with item_id for a single item, with item_ids for up to 200 sibling rows, and both are allowed. It also states a negative rule ("A barcode column is not used for images") and "Do not invent image URLs." What's missing is explicit routing versus siblings — nothing says when to use add_photo_column or upload_label_asset instead.

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