Skip to main content
Glama
posterly-mcp-server

posterly-mcp-server

by awpthorp

create_signed_upload

Generate signed upload URLs for 1–20 large images, videos, or PDFs so you can upload raw bytes, then use each public URL in social posts.

Instructions

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). Pinning is available per request with pin_content_type: true, which locks each slot to the content_type you declare (a PUT with any other Content-Type then fails with 403). posterly may turn it on by default in the future, so 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. First observedv0.55.1

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false), the description discloses the real behavioral contract: PUT raw bytes to upload_url with the returned headers, 15-minute slot expiry, 403 on Content-Type mismatch under pinning, per-file in-place failure reporting, HEIC rejection, and the 50MB ceiling. These are exactly the operational facts an agent cannot derive from structured fields.

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, limits and formats are front-loaded, and the dense paragraph is almost entirely load-bearing operational detail. Minor waste exists — the pin_content_type 403 behavior appears both in the description and in the schema parameter text — and the block would scan better as short sentences or lines.

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 6-parameter tool with no output schema, the description supplies the full round trip: accepted formats, size cap, slot semantics, the PUT step with headers, expiry window, and how the resulting public_url feeds create_post for both regular media and LinkedIn documents. Nothing essential to a correct first invocation is missing.

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; the description still adds meaning by framing filename/content_type/size and files as mutually exclusive modes ("omit when using files" / "use instead of") and by explaining that the files array yields one slot per entry with failures reported in place. It restates the pin_content_type 403 rule already in the schema, which caps it below 5.

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 opens with a specific verb+resource ("Create signed upload URLs") and immediately scopes it by asset class ("larger images, videos or PDFs") and batch size. It also names the downstream consumers (create_post / create_posts_batch), so an agent can place the tool in the workflow 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the two calling modes (single-file fields vs. files array) and the post-call next step, including the PDF-specific path (post_type document). It does not explicitly compare against sibling media tools like upload_media or create_media_drop, so the agent must infer why this exists beyond "larger" files — that keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.