Skip to main content
Glama

Upload media

upload_media

Upload one image or video for later scheduling from a public HTTPS URL, data URI, base64 bytes, or a file the user attached in the chat. In ChatGPT, pass an attached image or video in file. URL ingestion depends on the source host allowing automated access. Files that exist only in your client (sandbox paths, local disk) are unreachable as url or data: use file where supported, send their bytes as a data URI or base64, or ask the user for a public HTTPS link, such as a Canva download or share link. Success is confirmed only by the returned publicUrl. Returns a public media URL. API documentation: https://www.narrareach.com/api-docs.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoPublic HTTPS media URL.
dataNoData URI or raw base64 media bytes; blob:, file:, and sandbox: references are unsupported. Use only when the client sends the exact file bytes: base64 written out or reconstructed by the assistant arrives cut short or altered, and an incomplete image is rejected.
fileNoA file the user attached in the chat, passed by the client (ChatGPT). Use instead of url or data for attachments.
kindYes
fileNameNoOptional original file name for storage diagnostics.
mimeTypeNoRequired for raw base64. Example: image/png.
sourceTypeNoOptional. Inferred from data/url when omitted.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
kindYes
sizeYes
sha256Yes
uploadedYes
publicUrlYes
contentTypeYes
connectedAccountNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / data / description
      Previous value: -"Data URI or raw base64 media bytes; blob:, file:, and sandbox: references are unsupported."New value: +"Data URI or raw base64 media bytes; blob:, file:, and sandbox: references are unsupported. Use only when the client sends the exact file bytes: base64 written out or reconstructed by the assistant arrives cut short or altered, and an incomplete image is rejected."
  2. Changed1 schema field changed
    • addedInput schema / properties / file
      Added value: +{
      +  "description": "A file the user attached in the chat, passed by the client (ChatGPT). Use instead of url or data for attachments.",
      +  "properties": {
      +    "download_url": {
      +      "type": "string"
      +    },
      +    "file_id": {
      +      "type": "string"
      +    },
      +    "file_name": {
      +      "type": "string"
      +    },
      +    "mime_type": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "download_url",
      +    "file_id"
      +  ],
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / data / description
      Previous value: -"Data URI or raw base64 media bytes; blob: and file: URLs are unsupported."New value: +"Data URI or raw base64 media bytes; blob:, file:, and sandbox: references are unsupported."
  4. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare the safety profile (readOnly=false, openWorld=true, idempotent=false, destructive=false), so the description is free to add ingestion behavior instead of repeating it. It does so usefully: URL ingestion fails if the source host blocks automated access, truncated or altered base64 is rejected, and success is confirmed only by the returned publicUrl. Missing auth/permission and size/rate-limit context keeps it from a 5.

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?

Purpose and the ingestion options are front-loaded, and every sentence carries routing or failure information. The only waste is mild redundancy at the end, where 'Success is confirmed only by the returned publicUrl' and 'Returns a public media URL' say nearly the same thing.

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 an output schema present, the description needn't explain return values, and it correctly points to the success signal anyway. For a 7-parameter tool with nested objects and two enums, it covers ingestion modes, client-specific behavior, and failure conditions completely enough to call correctly.

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 high (86%), so the baseline is 3, but the description adds real value beyond the schema: it prescribes which input mode fits which situation (ChatGPT attachments via 'file', client-local paths unusable as url/data) and warns that reconstructed base64 arrives cut short. It does not restate the enum values or nested file fields, which the schema already carries.

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?

The description states a specific verb and resource ('Upload one image or video') plus scope ('for later scheduling'), and it is clearly distinguished from every sibling, none of which ingest media. An agent can identify the operation without opening the schema.

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?

It gives explicit routing rules across the mutually exclusive inputs: use 'file' for chat attachments, 'url' only for public HTTPS sources, and 'data' only when exact bytes are available. It also names the fallback when none apply (ask the user for a public HTTPS link such as a Canva share link) and states the URL-host access precondition.

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