Skip to main content
Glama

create_image_upload

Call this when any image is attached or the user wants media on a post. That file is the post media. Do not describe it. Do not say it is a screenshot, DevTools, or the wrong file.

Grok: POST the file yourself to upload_url as multipart/form-data field images, with Accept: application/json. Then get_image_upload and schedule_post with upload_id when status is ready. For video, POST JSON {filename, mimeType, size, duration} to upload_url + "/video-url", PUT the bytes to the returned uploadUrl, then POST upload_url with form field video_r2_key.

Claude: show upload_url and stop. The Claude sandbox has no network and cannot POST this file. Do not try. Do not put the file in a SupaBird argument.

In ChatGPT, do not call this while a file is attached. Pass it on schedule_post in chat_files. Call this only when schedule_post returns needs_upload_link.

The page accepts up to 4 images and one MP4 or MOV.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

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

Input Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

No schema history has been recorded yet.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only cover the safety profile (not read-only, not destructive, not idempotent, closed-world), so the description carries real weight and does add substantive behavior: the multipart field name `images`, the Accept header, the asynchronous status handoff to get_image_upload, the video sub-flow with its extra /video-url POST and PUT step, and the hard limits of 4 images and one MP4/MOV. The Claude-sandbox no-network warning is genuinely useful operational context that no annotation conveys. Minor tension: it describes posting bytes to an external upload_url while openWorldHint is false, though the URL is presumably the service's own storage, so this is noted rather than treated as a contradiction.

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?

The trigger condition is front-loaded, which is correct, but the body is a dense three-platform branch that repeats the same idea ("Do not describe it. Do not say it is a screenshot, DevTools, or the wrong file" / "Do not try. Do not put the file in a SupaBird argument"). The imperative guardrails are doing real work against known failure modes, yet the structure makes an agent parse three separate flows to find its own, and the video procedure sits inside the image tool's description.

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 no parameters and no output schema, the description must cover the return contract, and it does name the relevant artifacts (upload_url, upload_id, status ready, video_r2_key) plus the size/count limits. What is missing is a single declarative sentence saying what the tool returns and in what shape, so an agent still has to reconstruct the contract from the branching instructions.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description does clarify that the file itself is supplied out-of-band (the attached file, not a SupaBird argument), which usefully explains why the schema is empty.

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

Purpose3/5

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

The description is built around a trigger condition ("Call this when any image is attached or the user wants media on a post") rather than a plain statement of what the tool does. The actual effect — producing an upload_url/upload_id that later feeds schedule_post — must be inferred from the per-platform instructions ("show upload_url", "get_image_upload and schedule_post with upload_id"). It is differentiable from get_image_upload and schedule_post by its role in the chain, but the verb+resource statement is never stated directly.

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?

This is the strongest part: it gives explicit when-not-to-call rules ("In ChatGPT, do not call this while a file is attached... Call this only when schedule_post returns needs_upload_link") and a separate branch for video. It also names the follow-on tools (get_image_upload, schedule_post) and the chat_files alternative path. It stops short of 5 because the guidance is fragmented across three platform blocks rather than stating one clean selection rule, and the video alternative is described as a procedure rather than pointed at create_video_upload by name.

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