Skip to main content
Glama

Create Upload

create_upload
Read-onlyIdempotent

Get the authenticated binary upload endpoint and product/crop headers. Pass productId from list_products for every image. Upload each required image separately; retain the returned IDs in slot order. Crops and resolution checks use that product’s artwork specifications, not a universal 4x6 size. POST the image bytes separately; never put base64 or remote image URLs in MCP. For recoverable uploads, send a stable Idempotency-Key on POST and check GET /api/uploads/{key} after a lost response. Retry the same bytes and options with the same key; never retry payment as an upload recovery step. SDK: https://photoprintagent.com/sdk/photo-upload.mjs. No storage is allocated until upload. JPEG, PNG/APNG, WebP, GIF, HEIC/HEIF, TIFF, AVIF, BMP and self-contained SVG are supported. Read acceptedMimeTypes, acceptedExtensions and imageHandling for frame/page selection, transparency, and limits. Use application/octet-stream when MIME type is unavailable. Unsupported encodings must be converted before upload.

Input Schema

NameRequiredDescriptionDefault
cropNo
productIdNo
guestTokenNoPrivate guest credential; omit when Authorization Bearer is present.

Output Schema

NameRequiredDescriptionDefault
methodYes
artworkNo
headersYes
helpUrlYes
uploadUrlYes
maxFileBytesYes
authorizationYes
imageHandlingYes
maxInputPixelsYes
acceptedMimeTypesYes
responseSchemaUrlYes
acceptedExtensionsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4/5.0
Behavior4/5

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

Goes well beyond the annotations: no storage is allocated until upload, idempotency keys must be stable and reused with identical bytes on retry, and a GET /api/uploads/{key} exists for lost responses. Supported MIME types, octet-stream fallback, and conversion of unsupported encodings are disclosed. It does not clarify the relationship between 'Create Upload' and readOnlyHint=true, leaving the mutation profile slightly ambiguous, which keeps it off a 5.

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

Conciseness3/5

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

Front-loads the core action, but then accumulates a dense run-on of SDK URL, format list, MIME fallback, encoding conversion, and payment-retry caveats in a single block. Each fact is useful to someone, yet the density makes it hard to scan and the SDK link sits awkwardly mid-paragraph.

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?

Given an output schema exists, the description doesn't need to explain return values and instead covers the operational essentials: endpoint/header retrieval, per-image uploads, idempotent recovery, and accepted formats. Only the guestToken/auth relationship and the readOnly-vs-upload semantics are left under-explained.

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 only 33%, so the description must compensate. It adds real meaning for productId (source it from list_products) and for crop (use that product's artwork specs, not a universal 4x6), but guestToken and the crop sub-fields x/y/fit/orientation are never mentioned. Partial but meaningful compensation.

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 first sentence names the concrete resource: an authenticated binary upload endpoint plus product/crop headers, and later sentences make clear this is the per-image upload path. It routes the agent to list_products for the productId, which distinguishes it from the catalog siblings. It is slightly muddied by mixing 'get endpoint' with 'upload each image', so the agent must infer that the tool itself returns the endpoint rather than carrying bytes.

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

Usage Guidelines5/5

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

Explicit when-to-use rules: pass productId from list_products for every image, upload each required image separately, and keep returned IDs in slot order. It also draws a hard boundary against payment flows ('never retry payment as an upload recovery step'), which is exactly the kind of sibling confusion an agent would otherwise hit.

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