Skip to main content
Glama

create_signed_upload

Create signed upload URLs for larger images, videos or PDFs, 1 to 20 files per call. Accepts JPEG, PNG, GIF, WebP, MP4, MOV, WebM, and PDF up to 50MB (a PDF is for LinkedIn document posts); HEIC is not accepted. For one file pass filename, content_type and size. For several pass files: [{filename, content_type, size}] and get one slot per file, with any file that fails reported in place. PUT the raw bytes of each file to its upload_url (object storage) with the returned headers, then pass public_url to create_post / create_posts_batch. For a PDF, create the post with post_type document, media_url set to that public_url and a document_title in settings (LinkedIn only). pin_content_type: true locks each slot to the declared content_type. Always send the Content-Type header returned with the slot. Slots expire in 15 minutes.

Input Schema

NameRequiredDescriptionDefault
sizeNoSingle file: size in bytes. Omit when using files.
filesNoBatch: 1 to 20 {filename, content_type, size}. Use instead of the single-file fields.
filenameNoSingle file: filename with extension, e.g. launch-video.mp4. Omit when using files.
content_typeNoSingle file: MIME type, e.g. video/mp4. Omit when using files.
workspace_idNoOptional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces.
pin_content_typeNoOptional. true locks each slot to the declared content_type; a PUT with any other Content-Type fails with 403.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / files / description
      Previous value: -"Batch: 1 to 20 files, each with filename, content_type and size. Use instead of the single-file fields."New value: +"Batch: 1 to 20 {filename, content_type, size}. Use instead of the single-file fields."
    • changedInput schema / properties / pin_content_type / description
      Previous value: -"Optional. true locks each slot to the declared content_type so a PUT with any other Content-Type fails with 403. Send the returned Content-Type header exactly."New value: +"Optional. true locks each slot to the declared content_type; a PUT with any other Content-Type fails with 403."
  2. Changed1 schema field changed
    • addedInput schema / properties / pin_content_type
      Added value: +{
      +  "description": "Optional. true locks each slot to the declared content_type so a PUT with any other Content-Type fails with 403. Send the returned Content-Type header exactly.",
      +  "type": "boolean"
      +}
  3. Changed5 schema fields changed
    • addedInput schema / properties / content_type / description
      Added value: +"Single file: MIME type, e.g. video/mp4. Omit when using files."
    • addedInput schema / properties / filename / description
      Added value: +"Single file: filename with extension, e.g. launch-video.mp4. Omit when using files."
    • addedInput schema / properties / files
      Added value: +{
      +  "description": "Batch: 1 to 20 files, each with filename, content_type and size. Use instead of the single-file fields.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "content_type": {
      +        "description": "MIME type, e.g. video/mp4",
      +        "type": "string"
      +      },
      +      "filename": {
      +        "description": "Filename with extension, e.g. launch-video.mp4",
      +        "type": "string"
      +      },
      +      "size": {
      +        "description": "File size in bytes",
      +        "minimum": 1,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "filename",
      +      "content_type",
      +      "size"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 20,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / size / description
      Added value: +"Single file: size in bytes. Omit when using files."
    • removedInput schema / required
      Removed value: -[
      -  "filename",
      -  "content_type",
      -  "size"
      -]
  4. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond annotations: accepted formats, 50MB limit, HEIC rejection, PDF/LinkedIn document post handling, per-file failure reporting, pin_content_type locking, mandatory Content-Type header, and 15-minute slot expiry. These are exactly the operational traits an agent needs for a non-idempotent, open-world creation 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 formats, then walks through single-file, batch, upload workflow, and PDF-specific handling in a logical order. It is dense and slightly run-on, but nearly every sentence carries actionable 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?

For a complex upload tool with no output schema, it covers formats, size, batch behavior, the PUT workflow, returned headers/upload_url/public_url, and expiry. Combined with full schema coverage, an agent has enough to call it correctly.

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 coverage is 100%, so the schema already documents filename, content_type, size, files, workspace_id, and pin_content_type. The description mainly restates the single-file vs. files usage pattern and pin_content_type behavior that the schema descriptions already cover, adding little new parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Create signed upload URLs' for images, videos, and PDFs, with batch size and media type limits. It implies a distinction from upload_media via 'larger' files, but never names the sibling alternatives, so an agent must infer the boundary.

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?

Clear usage context: use single-file fields for one file, `files` for 1–20, and then PUT bytes and pass public_url to create_post / create_posts_batch. It does not explicitly say when to choose this over upload_media or create_media_drop, leaving the 'larger files' implication implicit.

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