Browse the docs Open

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. 1.whoami confirms the token works and reads the credit balance.
  2. 2.list-templates finds a template and its id.
  3. 3.get-template-details reads the layer keys to override.
  4. 4.preview-snap renders a free, watermarked preview. Iterate here until it looks right.
  5. 5.create-snap spends 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 message can 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_key right 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.