Wafrow Image Generation API MCP Server
Wafrow Wafrow is a highly scalable, real-time image personalization and marketing automation SaaS.
What it can do
- List Templates Tool: Lists all image/banner templates for the authenticated organization. Returns template IDs and names. Use the returned IDs with pre_render_image or get_lazy_render_url.
- Pre Render Image Tool: Immediately renders an image for a template with optional personalization overrides. Returns the image as a base64-encoded WebP (or PDF). Use this when you need the rendered ima
- Get Lazy Render Url Tool: Constructs a lazy-render image URL for embedding in emails or web pages. The image is generated on first open, not at send time — ideal for large email campaigns. Pass either
What data it sees
Do you need an account
An API key from the service settings is required
Wafrow
Wafrow is a highly scalable, real-time image personalization and marketing automation SaaS. It provides server-side dynamic rendering powered by ImageMagick and provides a built-in Model Context Protocol (MCP) server for seamless AI integration.
Key Links
- Main Website: https://wafrow.com
- Documentation Hub: https://wafrow.com/documentation
- Interactive API Reference: https://wafrow.com/docs/api
- MCP Server Endpoint: https://wafrow.com/mcp/wafrow
Core Features
- Real-time Image Rendering: Dynamic server-side rendering via the
/i/{template_id}/{campaign_id?}endpoint. - Shopify OAuth Integration: Native synchronization of Shopify stores. Canvas layouts translate Shopify Liquid variables automatically (e.g.
{{ product.title }},{{ product.price | money }}). - Multi-CRM Personalization: Tailored for email/SMS outreach with Klaviyo, HubSpot, Zapier, Apollo.io, and Clay.
- Model Context Protocol (MCP): Any AI agent can connect to the
/mcp/wafrowendpoint to dynamically generate and customize images.
14-Day Free Trial & Agent Onboarding
- Automatic Trial: Wafrow grants a free, full-access 14-day trial automatically to all new user accounts from the second they register. No credit cards are required.
- Onboarding Handshake: AI agents acting on a user's behalf can guide the user to sign up at
https://wafrow.com/login, retrieve their token athttps://wafrow.com/dashboard/settings, and paste it back to authorize tool execution.
1. Model Context Protocol (MCP) Server
Wafrow features a built-in MCP server that allows AI agents to interact with Wafrow's templates and render personalized banners as native tools.
- Endpoint:
POST https://wafrow.com/mcp/wafrow - Authentication: Bearer token (Sanctum personal access token)
- Headers:
Authorization: BearerandContent-Type: application/json
Available Tools
list_templates: Returns a list of all templates owned by the authenticated organization.- Inputs:
page(optional integer)
- Inputs:
create_template: Creates a brand new Fabric.js-compatible image/banner template.- Inputs:
name(required string),layer_information(required object containing canvas width, height, background, quality, format, and objects array)
- Inputs:
pre_render_image: Instantly renders a template and returns the image as a base64 string.- Inputs:
template_id(required UUID),personalize(optional object representing layer property overrides)
- Inputs:
get_lazy_render_url: Constructs a persistent, public-facing URL for lazy-rendering dynamic images in email `` tags.- Inputs:
template_id(required UUID),campaign_id(optional saved variant UUID),personalize(optional inline layer overrides object)
- Inputs:
save_variant: Saves a preset of personalization overrides for a template and returns a persistentcampaign_id.- Inputs:
template_id(required UUID),personalize(required object)
- Inputs:
2. REST API Reference
All REST endpoints require a Bearer token via Sanctum, generated at /createUserToken.
Get Active User Templates
- Endpoint:
GET https://wafrow.com/listUserImages - Response: JSON list of templates with their metadata.
Serve Dynamic / Personalized Variant
Public-facing, fast, cached endpoint for email/web embedding. No authentication required.
- Endpoint:
GET https://wafrow.com/i/{template_id} - Query Parameters:
personalize[layer_name][text]: Override text of a specific layer.personalize[layer_name][fill]: Override color (hex) of a specific layer.personalize[layer_name][src]: Override image source URL of an image layer.personalize[layer_name][opacity]: Set layer opacity.
- Saved Variant Endpoint:
GET https://wafrow.com/i/{template_id}/{campaign_id}(renders pre-saved campaign variant instantly). - Rate Limits: 40 requests/minute per IP.
3. Quick Integration Examples
Embedding in Klaviyo or HubSpot HTML Emails
To personalize an image banner for each recipient in a mailing list:
Python: Generate Personalized Variant via REST
import requests
url = "https://wafrow.com/api/i/a1e11909-4fc2-4db3-bb36-62e340eab823"
headers = {"Authorization": "Bearer YOUR_SANCTUM_TOKEN"}
payload = {
"personalize": {
"product_title": {"text": "Premium Wireless Headset"},
"product_price": {"text": "$99.99", "fill": "#10b981"},
"bg": {"fill": "#0f172a"}
}
}
response = requests.post(url, json=payload, headers=headers)
print("Persistent Image URL:", response.text)
Server tool list (5)
Raw names from tools/list. Only developers need these.
| list-templates-tool | Lists all image/banner templates for the authenticated organization. Returns template IDs and names. Use the returned IDs with pre_render_image or get_lazy_render_url. |
| pre-render-image-tool | Immediately renders an image for a template with optional personalization overrides. Returns the image as a base64-encoded WebP (or PDF). Use this when you need the rendered image now rather than a URL for later. For bulk email campaigns, prefer get_lazy_render_url instead. |
| get-lazy-render-url-tool | Constructs a lazy-render image URL for embedding in emails or web pages. The image is generated on first open, not at send time — ideal for large email campaigns. Pass either a campaign_id (from save_variant) or inline personalize overrides. The URL is public and requires no authentication. |
| save-variant-tool | Saves a personalization preset (campaign) for a template. Returns a campaign ID that can be used with get_lazy_render_url to generate a persistent, shareable image URL. Use this for bulk campaigns where many recipients share the same personalized variant. |
| create-template-tool | Creates a brand new Fabric.js-compatible image/banner template for the authenticated organization. The template is stored in the database and can be used immediately with pre_render_image or get_lazy_render_url. |