Kinds and limits
Storage accepts all three kinds, but publishing is image-only today.
Publishing a post with a video or document attached fails with
publishing_video_not_supported_yet. Per-platform image ceilings still apply:
9 for LinkedIn, 4 for X.Three ways to upload
Upload session
create_upload_session returns a browser link. The user drags files in — any
size, no client-side plumbing. Best when a human is in the loop.Presigned PUT
request_asset_upload returns a signed URL. PUT the raw bytes, then
attach_asset. Best for large files and clients that can do HTTP.Inline base64
upload_asset_inline takes the bytes in the tool call. Capped at 5 MB. Best
when the client can’t make its own HTTP requests.Lifecycle
pending until its bytes are confirmed, then ready. attach_asset
does that confirmation: it checks the bytes actually landed, enforces the size
limit, and enforces the per-post count. Only ready assets are published.
detach_asset removes an asset from a post but keeps the stored file, so you can
re-attach it to another post.
Expiry
Both are re-mintable — call the tool again for a fresh link.