Skip to main content
Glama

Upload media

upload_media

Upload a media file (image, video or document) from a URL or local file path. The file is stored in BulkPublish for use in posts. Supported formats: JPEG, PNG, WebP, GIF, MP4, MOV, WebM, and documents (PDF, Word .doc/.docx, PowerPoint .ppt/.pptx). Max 100MB. A document has no thumbnail or preview and can only be published to LinkedIn, as a document post. Provide either url OR filePath, not both. Use this when the user provides an image, video or document to attach to a post.

Input Schema

NameRequiredDescriptionDefault
urlNoPublic URL of the media file to upload.
fileNoA file provided by the chat host. Leave unset and use url otherwise.
filePathNoAbsolute path to a local file to upload (e.g. /Users/me/photo.png).
filenameNoOptional filename. If omitted, derived from the URL or file path.

Output Schema

NameRequiredDescriptionDefault
idNo
urlNo
fileNo
filenameNo
mimeTypeNo
sizeBytesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / file
      Added value: +{
      +  "description": "A file provided by the chat host. Leave unset and use url otherwise.",
      +  "properties": {
      +    "download_url": {
      +      "description": "Temporary download link for the file.",
      +      "type": "string"
      +    },
      +    "file_id": {
      +      "description": "The file's id.",
      +      "type": "string"
      +    },
      +    "file_name": {
      +      "description": "The file's name, when known.",
      +      "type": "string"
      +    },
      +    "mime_type": {
      +      "description": "The file's type, when known.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "download_url",
      +    "file_id"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "file": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {},
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "filename": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "id": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "string"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "mimeType": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "sizeBytes": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "string"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "url": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, so the write/non-destructive profile is covered. The description adds genuinely non-structural behavior: 100MB size ceiling, accepted formats, and the significant quirk that documents have no thumbnail/preview and can only be published to LinkedIn as a `document` post. It omits retry/idempotency effects and error behavior on unsupported formats.

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 verb and resource, then formats, limits, and the document caveat—every sentence carries information. It is somewhat dense with format enumeration, but nothing is padding.

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?

An output schema exists and annotations cover the safety profile, so the description needn't explain return values. Given that, it covers inputs, constraints, and the document special case adequately; the main gaps are the unmentioned `file` parameter path and any relation to the staged upload siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/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 and the schema already documents url, filePath, filename and the nested file object. The description adds useful semantics (url must be public, url vs filePath are mutually exclusive) but omits the third `file` input mode entirely, so a reader of the description alone would not know a host-provided file option exists.

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 ('Upload a media file') and enumerates what counts as media (image, video, document) plus accepted formats and the 100MB cap. An agent knows exactly what the tool ingests without opening the schema. It does not, however, distinguish itself from the sibling staged-upload pair create_media_upload/finalize_media_upload, which keeps it just short of a perfect sibling-differentiating 5.

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?

Explicitly says 'Use this when the user provides an image, video or document to attach to a post,' giving a clear triggering condition, and adds the mutual-exclusivity rule 'Provide either url OR filePath, not both.' It stops short of naming alternatives (e.g. create_media_upload/finalize_media_upload or composing a post without media), so there is no real when-not guidance.

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