Skip to main content
Glama

Upload an image

upload_image
Destructive

Store an image on Sitelas's CDN (resized, WebP, blur placeholder) and return its URL — from url (the normal case), or base64 for a small image you made yourself. Pass image_target to also put it on its spot in the same call; without it, place the URL with patch_nodes or edit_content_item. Local agents with the file on disk use mode: 'link', PUT the bytes, then call again with staging_path. When the PERSON has the photo on their device, this is the wrong tool at any size: call get_editor_link with image_target and give them the one-time photo link.

Input Schema

NameRequiredDescriptionDefault
altNoWhat the image shows, for screen readers. Required for url, base64 and staging_path.
urlNoPublic URL of an image (jpeg/png/webp/gif/svg, under 10MB). The usual source: a photo link the owner pasted, a logo on their old site.
modeNoLocal agents only (Claude Code, Cursor): get a one-hour URL you PUT image bytes from your own disk to, then call upload_image again with staging_path. Not available in hosted chats.
base64NoRaw base64 bytes (no data: prefix) of an image YOU authored — an SVG you wrote, a small generated mark — under ~30KB. Bigger payloads get cut off in transit. Never for the owner's own photo: that goes through get_editor_link with image_target (a one-time photo link).
site_idYes
filenameNoWith mode: 'link': the original filename, optional.
mime_typeNoWith base64: a fallback only; the bytes are sniffed.
image_targetNoAlso place the image, in the draft: { node_id } for an image or a section's background photo (ids from get_page view 'content'), or { content_type, item_slug, field } for a collection item's photo. Omit to just get the URL back.
staging_pathNoAfter mode: 'link' and your PUT: the staging_path it returned. Processes and stores the image.

Schema Changelog

Changes observed during successful MCP inspections.

No schema history has been recorded yet.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint, openWorldHint, and non-idempotency, so the safety bar is lower. The description adds real behavioral detail beyond that: image processing pipeline, the one-hour PUT URL staging flow for local agents, the ~30KB base64 cutoff, and the 10MB URL source limit. It does not state that placing via image_target may overwrite an existing image, which would be the key remaining gap given destructiveHint=true.

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 the core action and return value, then flows into source selection, placement, and the local-agent flow. It is dense with parentheticals and em-dashes, but nearly every clause carries actionable routing information rather than filler.

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 9-parameter, nested-object mutation tool with no output schema, the description covers the return value (a URL), both source paths, the staging-workflow sequencing, and the explicit exclusion case. An agent can choose and invoke it correctly without further reading.

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 89%, so the schema already documents most parameters; the description still adds decision-level semantics, e.g. url is the 'usual source', base64 is for images you authored and is capped in size, and mode 'link' is a multi-call staging flow. The image_target placement tradeoff and the patch_nodes fallback are explained rather than repeated.

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 precise verb+resource and scope: stores an image on Sitelas's CDN with specific processing (resize, WebP, blur placeholder) and returns a URL. It explicitly distinguishes itself from siblings by naming the alternative (get_editor_link) for the case where the person has the photo on their device.

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?

Gives explicit routing rules: use url in the normal case, base64 for small self-authored images, pass image_target to place in the same call, otherwise use patch_nodes or edit_content_item. It also names the wrong-tool case ('when the PERSON has the photo on their device, this is the wrong tool at any size') and redirects to get_editor_link with image_target.

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