# Changelog

> Changes to the MCP tools and the API that can change what your calls make or cost.

> Index of these docs: https://wavegrain.com/developers/llms.txt

Changes that can change what your calls make or cost, newest first.

## 2026-10-29: save images, group notes, ideas with reasons

- New tool `save_images`: keep up to 20 of the user's images in their Media library and, optionally, an existing or new collection, in one call. Upload each file with `create_upload` first.
- `generate_slideshow`, `estimate_cost` and `suggest_topics` take an optional `groupId`. Wavegrain then writes with that account group's notes and words to avoid on top of the brand voice, and plans the slideshow for that group.
- `suggest_topics` also returns `ideas`, each with a number, format and a one-line reason, and `performance`, a line on the brand's measured posts. `topics` is unchanged.
- `list_accounts` shows each group's `notes` and `avoid`.

## 2026-10-29: pricing needs only read, links on every slideshow

- `estimate_cost` now needs the `read` permission instead of `generate`, because it spends nothing.
  A key without spending can tell its user what a slideshow would cost.
- `list_slideshows` and `get_slideshow` give each slideshow a `link` that opens it in Wavegrain.
  Give your user that link; do not build one.
- `get_slideshow` links the inline slide viewer for normal slideshows too, and sends each slide as a small JPEG in the result's `_meta` (`wavegrain/slidePreviews`) for it.
  Hosts that show MCP Apps draw the slides inline; other clients ignore `_meta` and keep the one preview image.

## 2026-10-28: generate_slideshow answers at once, photos only, topic ideas

`generate_slideshow` now answers within a second with a `jobId` and `status: "writing"`, instead of waiting for the script.
Writing a script can take one to two minutes, longer than many MCP hosts wait for a tool.

- Call `get_generation_status` with the `jobId` about every 20 seconds.
  It answers `writing`, `making_images`, `ready` or `failed`, with the `slideshowId` once the script is written and the credits it cost.
- `generate_slideshow` no longer returns `slideshowId`, `slideCount` or `creditsCharged`; `get_generation_status` does.
- `photosOnly: true` on `generate_slideshow` and `estimate_cost` makes no AI image at all, so only the script costs credits.
  A slide no photo fits stays empty; `get_generation_status` names it in `emptySlides`, and `search_images` with `set_slide_image` fills it for free.
- New tool `suggest_topics`: topic ideas for a brand from its voice, its recent topics and proven hooks in the Inspiration library.
  It is free and shares the app's limit of 20 an hour per account.

## 2026-10-28: photos first for every slideshow

`generate_slideshow` now aims every slide at a photo.
It uses your saved photos first, then runs an image search for each slide, then tries your brand's own website photos and a close fit.
A slide gets an AI image only when none of these fits it.

- Photo slides cost no credits, so a slideshow usually costs less than before.
  `estimate_cost` and `maxCredits` still name the most a slideshow can cost, as if every slide were an AI image.
- A saved format keeps its own image setting.
- `POST /api/generate` with no image setting now means photos first too.
  Send `libraryMixRatio: 0` (or `libraryMix: false`) for AI images only.
  `libraryMix: true` still means about half photos.
