media_compose_graphic
Compose a graphic that has WORDS on it: render one of the four committed HTML layouts to PNG in a sandbox with headless Chromium, in the brand kit's real palette, fonts, and type scale. Use this for an Open Graph card (`og`, 1200×630), an X header (`x-header`, 1500×500), a square post (`post-square`, 1080×1080), or a portrait post (`post-portrait`, 1080×1350) — anything where misspelled text would be visible. Image models garble text, so a card with copy is never generated as an image; generate a text-free `background` with `media_generate_image` and pass its asset id as `backgroundAssetId`, or omit it to use the brand's background colour. Returns immediately with a signed URL into Putty's own storage; the provider's URL is never exposed. Costs 0 credits — the background, if you want one, is charged to its own asset.
Compose a graphic that has WORDS on it: render one of the four committed HTML layouts to PNG in a sandbox with headless Chromium, in the brand kit's real palette, fonts, and type scale.
Input
The tool takes a single JSON object. Every field, its type, and an example are on the generated reference at GET /mcp/tools, under this tool's name.
Calling it
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "media_compose_graphic", "arguments": {} }
}Put your arguments in place of the empty object. A call that fails comes back as a normal result carrying isError: true and a message naming what went wrong, not as a JSON-RPC protocol error.
Notes
Use this for an Open Graph card (og, 1200×630), an X header (x-header, 1500×500), a square post (post-square, 1080×1080), or a portrait post (post-portrait, 1080×1350) — anything where misspelled text would be visible. Image models garble text, so a card with copy is never generated as an image; generate a text-free background with media_generate_image and pass its asset id as backgroundAssetId, or omit it to use the brand's background colour. Returns immediately with a signed URL into Putty's own storage; the provider's URL is never exposed. Costs 0 credits — the background, if you want one, is charged to its own asset.
The full request and response shape, and a live playground, live on the generated reference at GET /mcp/tools.
media_generate_video
Animate a still image you own into a short video, with a mandatory cost confirmation. Call it WITHOUT `confirm` first: the tool prices the job, creates a tracked asset in `needs_confirmation`, and submits nothing. Show the user the quoted `credits` and duration. Call it AGAIN with `confirm: true` to spend them; only then does the video enter the media queue. The source image is read from Putty's own storage and the result is copied back into it, so no third-party URL is exposed, and `media_status` returns a signed URL once the render completes. A video is the most expensive job in this category and runs on a shared subscription, which is why confirmation is always required.
media_vectorize_logo
Turn a generated logo raster into an SVG so it stays sharp at every size a brand kit is used at — a favicon, a 512×512 token logo, a print run. Pass the asset id of a `completed` image the caller owns (one from `media_generate_image` with `kind: "logo"`, or any uploaded mark); another user's asset is a plain not-found. The source is left untouched and the SVG comes back as a new tracked asset, so a poor trace costs one job and not the original. Returns immediately with a `queued` asset id and the work runs on the media queue; `media_status` gives the signed URL once it completes. Refuses a source that is not a logo, and refuses source images asking for a real brand's mark.