Browse the docs Open Close
MCP server
let your assistant place the order
Snapsbrew speaks the Model Context Protocol, so any MCP client (Claude, Cursor, your own agent) can talk to your account directly. The assistant can browse your templates, preview a snap for free, and render the final image once you say yes. It uses the same API token as the rest of the API, and it works the moment you point a client at the server.
Previews are free and watermarked. Only
create-snap spends a credit, and only
after you approve a preview. Nothing is billed by surprise.
Connect
| Endpoint | https://snapsbrew.com/mcp |
| Transport | Streamable HTTP |
| Auth |
Two ways. A client that supports OAuth 2.0 finds the server on its
own: give it the URL, and it opens a browser page where you approve
the connection. Everything else sends a bearer token with the
api_requests ability, the same
key the REST API takes.
|
| Rate limit | 30 requests per minute. |
A client that runs OAuth needs the URL and nothing else. It reads
/.well-known/oauth-protected-resource,
registers itself, and sends you to a page that names the application and
what it will be able to do. Approve it there and the client holds its own
token. You never paste a key, and you can end the connection later without
changing the key your other tools use.
Every other client takes a name, a URL, and a header. Here is the shape of a typical config:
{
"mcpServers": {
"snapsbrew": {
"url": "https://snapsbrew.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
How a render goes
The server nudges the assistant toward the same habit every time: look before you spend. A typical run goes like this.
- 1.
whoamiconfirms the token works and reads the credit balance. - 2.
list-templatesfinds a template and its id. - 3.
get-template-detailsreads the layer keys to override. - 4.
preview-snaprenders a free, watermarked preview. Iterate here until it looks right. - 5.
create-snapspends 1 credit and returns the clean, final image, once you approve.
Tools
| Tool | Cost | What it does |
|---|---|---|
whoami |
Free | Returns your account and the credits left this period. |
list-templates |
Free | Lists your templates with their ids, sizes, and editable layers. |
get-template-details |
Free | Returns one template's layer keys and the overrides each layer accepts. |
list-variant-properties |
Free | The full catalog of overrides you can apply in variants, with value types and examples. |
preview-template |
Free | Renders a watermarked preview of a template, with optional overrides. |
preview-snap |
Free | Renders a watermarked preview of the snap you are about to create. |
create-snap |
1 credit | Renders the final, un-watermarked snap and charges 1 credit. |
describe-layers |
Free | The layer object shape and property vocabulary for building or editing templates. |
design-guide |
Free | How to compose layers well on any canvas — layer order, typography, colour, and composition recipes. |
platform-guide |
Free | What a platform does to your image after upload: the size to start from, how it crops, the UI safe zones over Stories, Reels, TikTok and banners, and the file limits. |
image-purpose-guide |
Free | The rules for what the image is for — link preview (with the meta tags), carousel, feed post, avatar, banner, thumbnail, ad, product shot, email header, blog hero, slide. |
list-template-sizes |
Free | Every canvas size preset — Instagram, Facebook, X, LinkedIn, Threads, Pinterest, TikTok, YouTube, Snapchat, WhatsApp, web and email, display ads, and print — with its dimensions, aspect ratio, and safe margin. |
create-template |
Free | Creates a new template from a title, a size preset (or explicit dimensions), and layers. |
edit-template |
Free | Updates a template you own. Existing snaps depend on it, so use it deliberately. |
publish-template |
Free | Makes a template draft live. An edit does not reach new snaps until you publish it. |
Overrides
You customize a snap by passing variants:
an array of objects, each one targeting a layer by its key with a single
change.
[
{ "layer": "headline", "text": "Summer sale" },
{ "layer": "logo", "image_url": "https://example.com/logo.png" },
{ "layer": "backdrop", "background_color": "#ff5a36" },
{ "layer": "ticket", "qr_content": "https://example.com/rsvp" },
{ "layer": "ribbon", "hidden": true }
]
Run list-variant-properties for the
full override catalog, and get-template-details
for the layer keys on a specific template.
Errors
An agent reads an error to decide what to call next, so every tool that fails answers with the same JSON object instead of a sentence.
{
"error": {
"code": "template_not_found",
"message": "No template with id `a1b2` exists in your account.",
"fix": "Call `list-templates` to read the template ids in your account. Then call this tool again with an id from that list.",
"retryable": false,
"details": { "template_id": "a1b2" }
}
}
code- A stable identifier. Branch on this. The wording of
messagecan change; the code cannot. message- What went wrong, for the person the agent reports to.
fix- The next call to make, in the imperative. It names the tool to call and what to change.
retryable- Whether the identical call can succeed later. Only a
request that holds your
idempotency_keyright now reads true. Stop a retry loop on every other error. details- The values you sent, and the choices you can pick from, when they help build the next call. Absent when there is nothing to add.