Skip to main content
Glama

create_media_upload

Get presigned upload URLs for media you generated locally (e.g. rendered carousel slides or a video) that is too large to inline as base64Images. Returns one uploadUrl per file -- HTTP PUT each file's raw bytes to its uploadUrl with the matching "Content-Type" header (no auth header), then call finalize_media_upload with the returned uploadId. A batch is EITHER up to 10 images (one carousel, kept in order) OR exactly one video. Images: jpeg/png/webp/gif, max 25MB each. Video: max 512MB. Upload URLs expire in 1 hour. This is for media YOU produced; if the USER uploaded media in the Socialync app, use list_media instead. If the PUT can't connect (a sandbox network block, a proxy 403, "host not allowed", a DNS failure), do not retry it and do not call finalize_media_upload. Tell the user plainly that their AI app can't reach Socialync's upload server, then offer the two ways forward: (1) they add the file in Socialync (socialync.io: start a post and add the file, no need to finish it), come back, and you find it with list_media; or (2) they allow the upload host in their AI app's code or network settings and you try again. Images up to 8MB each can also go inline as base64Images instead.

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": {
      "files": "<files>"
    },
    "name": "create_media_upload"
  }
}

Input Schema

NameRequiredDescriptionDefault
filesYesThe files to upload. EITHER 1..10 images (a carousel, in order) OR exactly one video.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnly=false/destructive=false/openWorld=false; the description adds substantial context beyond that — URLs expire in 1 hour, the PUT needs no auth header but must carry Content-Type, batch shape is either 10 ordered images or exactly one video, and size caps of 25MB/image and 512MB/video. It also discloses the failure mode (sandbox block, proxy 403, DNS) and the required user-facing recovery, which no annotation conveys.

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, then the mechanics, then the fallback. Every clause earns its place, though the recovery paragraph is long enough that the description runs dense and could be tightened without losing the essential routing signal.

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 multi-step upload flow with no output schema, it supplies the missing contract: one uploadUrl per file, PUT raw bytes, then call finalize_media_upload with the returned uploadId. Failure handling and the inline-image alternative close the remaining gaps an agent would otherwise have to guess at.

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 100%, so the baseline is 3, but the description adds semantics the schema doesn't: the mutual exclusivity of the two batch shapes ('EITHER up to 10 images ... OR exactly one video'), the ordering guarantee for carousels, and MIME/size limits. It does not clarify sizeBytes' role since the schema already does that.

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+resource ('Get presigned upload URLs') and immediately scopes it to locally generated media too large for base64. It also names the two adjacent siblings it must not be confused with — finalize_media_upload as the required follow-up and list_media for user-supplied media.

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 routing rules: use this for media YOU produced, use list_media if the USER uploaded in the app, and use inline base64Images for images under 8MB. It also gives a concrete when-not/escalation path for the case where the PUT cannot connect, including a 'do not retry and do not call finalize' instruction.

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.