media_edit_image
Edit an existing image you own with a text instruction, and return a new tracked asset id. The source asset is left untouched — the edit is a new asset, so the original stays downloadable and a bad edit costs one job rather than the picture. The asset must be `completed`; poll `media_status` until it is. The source image is fetched from Putty's own storage and the result is copied back into it, so no third-party URL is ever exposed. Refuses prompts asking for a real brand's logo or a real person's likeness. Returns immediately with a `queued` asset id; the work happens on the media queue.
Edit an existing image you own with a text instruction, and return a new tracked asset id. The source asset is left untouched — the edit is a new asset, so the original stays downloadable and a bad edit costs one job rather than the picture.
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_edit_image", "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
The asset must be completed; poll media_status until it is. The source image is fetched from Putty's own storage and the result is copied back into it, so no third-party URL is ever exposed. Refuses prompts asking for a real brand's logo or a real person's likeness. Returns immediately with a queued asset id; the work happens on the media queue.
The full request and response shape, and a live playground, live on the generated reference at GET /mcp/tools.
media_generate_image
Generate a new image from a text prompt and return tracked asset ids. `kind` picks the model (`logo`, `illustration`, `photo`, `background`) — it is a job kind, not a model id, so the underlying model can change without your call changing. The call returns immediately with `queued` asset ids; the work runs on the media queue and the file lands in Putty's own storage, so poll `media_status` for the signed URL. Never returns a third-party URL. Refuses prompts asking for a real brand's logo or a real person's likeness, and explains why. For anything with WORDS on it — an OG card, an X header, a launch post — use `media_compose_graphic` instead: image models garble text, so a card with copy is an HTML layout rendered to PNG over a background this tool generates.
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.