Skip to main content
Glama

Get media upload URL

get_upload_url

Get a presigned S3 URL to upload a LOCAL media file (image/video) for a post. Request once per file; for the same unfinished upload, identical postGroupId/fileName/contentType/type reissues the URL with the same mediaId. Use unique fileNames for different files. This reserves a slot but does not upload bytes. Next: HTTP PUT the raw bytes to uploadUrl with the SAME Content-Type, then complete_media with the mediaId and get_post to verify ready before scheduling. If you cannot access bytes or perform PUT, use a public HTTPS mediaUrls URL or upload through Publora. If a slot already exists, inspect get_post and remove only that specific unfinished reservation with delete_media before adding the replacement, only when the user's task authorizes abandoning it. mediaUrls appends attachments and leaves existing slots in place; do not infer abandonment from an upload error.

Input Schema

NameRequiredDescriptionDefault
typeYesMedia type: 'image' or 'video'
fileNameYesFile name, e.g. 'photo.jpg'
contentTypeYesMIME type, e.g. 'image/jpeg' or 'video/mp4'
postGroupIdYesPost group ID to attach media to

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 declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, but the description adds substantial context beyond them: this reserves a slot without uploading bytes, identical postGroupId/fileName/contentType/type reissues the URL with the same mediaId, error handling guidance ('do not infer abandonment from an upload error'), and the required Content-Type match on the subsequent PUT.

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-loads the purpose and the crucial 'reserves a slot but does not upload bytes' caveat, then sequences the instructions with a clear 'Next:' marker. It is dense and long, but nearly every clause carries actionable workflow or safety information.

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?

With no output schema, the description still names the returned artifacts (uploadUrl and mediaId) and describes the full downstream sequence. For a multi-step upload tool this leaves an agent with everything needed to invoke it correctly and safely.

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 description coverage is 100%, so the baseline is 3. The description goes further by explaining how parameters interact (identical postGroupId/fileName/contentType/type reissue the URL) and by advising unique fileNames per file, which adds genuine semantics about the identity of an upload reservation.

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?

States a specific verb and resource: 'Get a presigned S3 URL to upload a LOCAL media file (image/video) for a post.' It immediately distinguishes itself from siblings like attach_media, complete_media, and company_media, and clarifies that it only reserves a slot rather than uploading 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?

Explicitly covers when to call it (once per file, unique fileNames), the alternative paths (public HTTPS mediaUrls URL or upload via Publora when PUT/bytes are unavailable), and the full workflow sequence with complete_media and get_post. It even details when to use delete_media to remove a specific unfinished reservation.

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.