Skip to main content
Glama

Upload Media

upload_media
Destructive

Upload images, videos or documents to AdaptlyPost storage and return public URLs for the mediaUrls of create_post, update_post, or bulk_schedule_posts. Two sources, combinable in one call: urls (public https URLs the server streams straight into storage; private, internal and non-https addresses are refused, and the source must send a Content-Length) and files (base64 data, for media attached in the conversation; 30 MB decoded per call in total). Omitting both returns an error. Accepts JPEG, PNG, WebP, MP4 and QuickTime, plus PDF, PPT, PPTX, DOC and DOCX for LinkedIn DOCUMENT posts, checked by file content (and, for Office files, the extension, so keep it in the name or URL); 50 MB per image, 100 MB per document, 250 MB per URL download. Stored files are public immediately, post or no post, so only upload media the user supplied or asked for. For inline files over 30 MB use get_upload_urls and PUT the bytes yourself. Returns uploaded ({ publicUrl, key } per file) and mediaUrls; pass mediaUrls straight into the post. One publicUrl may be reused across any number of posts; the file is kept until the last post referencing it has published, so upload once and reuse rather than re-uploading per post.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlsNoPublic https URLs of images, videos or documents to upload (e.g. ["https://example.com/photo.jpg", "https://example.com/deck.pdf"])
filesNoDirect file uploads as base64, 30 MB decoded per call in total. Use this when the user attaches/pastes an image, video or document in the conversation
workspaceIdNoWorkspace to act in: an id from list_workspaces. Omit to act in the workspace list_workspaces marks current. Use the same workspaceId for every call about the same workspace, since ids from one workspace (accounts, posts, uploads) do not exist in another

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultNoAn object with uploaded (array of { publicUrl, key } per file) and mediaUrls (the public URLs ready to pass to create_post).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  2. Changed1 schema field changed
    • changedInput schema / properties / workspaceId / description
      Previous value: -"Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace (accounts, posts, uploads) do not exist in another"New value: +"Workspace to act in: an id from list_workspaces. Omit to act in the workspace list_workspaces marks current. Use the same workspaceId for every call about the same workspace, since ids from one workspace (accounts, posts, uploads) do not exist in another"
  3. Changed1 schema field changed
    • addedInput schema / properties / workspaceId
      Added value: +{
      +  "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace (accounts, posts, uploads) do not exist in another",
      +  "type": "string"
      +}
  4. Changed4 schema fields changed
    • changedInput schema / properties / files / description
      Previous value: -"Direct file uploads as base64, 30 MB decoded per call in total. Use this when the user attaches/pastes an image or video in the conversation"New value: +"Direct file uploads as base64, 30 MB decoded per call in total. Use this when the user attaches/pastes an image, video or document in the conversation"
    • changedInput schema / properties / files / items / properties / fileName / description
      Previous value: -"File name with extension (e.g. \"photo.jpg\")"New value: +"File name with extension (e.g. \"photo.jpg\" or \"deck.pptx\")"
    • changedInput schema / properties / files / items / properties / mimeType / enum
      Previous value: -[
      -  "image/jpeg",
      -  "image/png",
      -  "image/webp",
      -  "video/mp4",
      -  "video/quicktime"
      -]New value: +[
      +  "image/jpeg",
      +  "image/png",
      +  "image/webp",
      +  "video/mp4",
      +  "video/quicktime",
      +  "application/pdf",
      +  "application/vnd.ms-powerpoint",
      +  "application/vnd.openxmlformats-officedocument.presentationml.presentation",
      +  "application/msword",
      +  "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
      +]
    • changedInput schema / properties / urls / description
      Previous value: -"Public https URLs of images or videos to upload (e.g. [\"https://example.com/photo.jpg\"])"New value: +"Public https URLs of images, videos or documents to upload (e.g. [\"https://example.com/photo.jpg\", \"https://example.com/deck.pdf\"])"
  5. Changed1 schema field changed
    • changedInput schema / properties / files / description
      Previous value: -"Direct file uploads as base64. Use this when the user attaches/pastes an image or video in the conversation"New value: +"Direct file uploads as base64, 30 MB decoded per call in total. Use this when the user attaches/pastes an image or video in the conversation"
  6. Changed1 schema field changed
    • changedInput schema / properties / urls / description
      Previous value: -"Public URLs of images or videos to upload (e.g. [\"https://example.com/photo.jpg\"])"New value: +"Public https URLs of images or videos to upload (e.g. [\"https://example.com/photo.jpg\"])"
  7. 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 write/openWorld/destructive; the description adds the genuinely useful behavioral facts: files become public immediately even with no post, retention lasts until the last referencing post publishes, source URLs must be https and send a Content-Length, private/internal addresses are refused, and validation is by file content plus extension for Office files. These are exactly the side effects and constraints an agent needs before calling a write tool.

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 purpose and usage, and nearly every clause carries operational information (limits, validation, rejection rules, reuse). It is a long single block, and a few asides (e.g. the repeated Office-extension note) could be tightened, but density is high rather than padded.

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 write tool with an output schema, everything an agent needs is covered: sources, limits, validation, refusal conditions, public-visibility warning, retention semantics, and the escape hatch for oversized files. Return values are given anyway, and the output schema covers the rest.

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 baseline is 3, but the description goes beyond it: it explains the https/Content-Length/private-address constraints on urls, the 30 MB decoded ceiling on files, and the 50/100/250 MB per-type limits. workspaceId is left to the schema, so the add is substantial but not exhaustive.

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 ('Upload images, videos or documents to AdaptlyPost storage') and states the output (public URLs for mediaUrls). It explicitly routes into sibling tools (create_post, update_post, bulk_schedule_posts) and names get_upload_urls as the alternative path, so an agent can distinguish it from siblings without reading schemas.

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 for both sources ('urls' for public https links the server streams, 'files' for media attached in the conversation), states they are combinable, states that omitting both errors, tells when to use the alternative (inline files over 30 MB → get_upload_urls), and advises upload-once/reuse-across-posts. This is about as complete as usage guidance gets.

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