Image Generation MCP Server: Real Images for AI Agents
Ask an AI image model to put a real price on a card. You get back $4,299, or $42gg, or a squiggle that was never a number.
An image generation MCP server is a tool your AI agent calls to turn a template plus data into a finished image. The Model Context Protocol is how you hand an agent a skill it did not ship with. Most image MCP servers wrap a diffusion model, so they paint pictures. A template-render server does the opposite: it drops your exact text into HTML and renders it in a browser, so the words come out right.
I build propzapi, a hosted image API with an MCP server, so the code here is ours. But the problem is not ours, and the fix is not specific to us. If your agent needs to produce an image where the text has to be correct, you want a renderer, not a paintbrush.
What is an image generation MCP server?
It is an MCP server that exposes image creation as a callable tool. Your agent connects over the Model Context Protocol, sees a tool like generate_image, calls it with a template and data, and gets an image back. MCP is the same standard that lets an agent read files or query a database. Here the "skill" is rendering.
The protocol matters because it is now everywhere. Anthropic released MCP in November 2024. By 2026 the ecosystem passed 10,000 servers and, per DigitalApplied's 2026 adoption report, 97 million monthly SDK downloads.
So the plumbing is standard. What flows through it is not.
Why can't the agent just draw the image itself?
Because a diffusion model does not read text, it pattern-matches shapes it saw in training. That is fine for a landscape and bad for a headline. As the team at Imagine.art puts it, the model learns the visual look of letters, not their meaning, so exact strings drift. Designer-level in-image text is still shaky in 2026.
This is the part people underestimate. The images improved a lot. The text inside them did not keep up.
And the diffusion options keep shifting under you. OpenAI retired the DALL-E models on May 12, 2026; requests for dall-e-3 now return a 400. The replacement, gpt-image-2, takes different parameters and returns base64. If your agent depended on that exact call, it broke overnight.
A template render has neither problem. Your string goes in as text. It comes out as that text, in the same font, every time.
How do you give a Claude or Cursor agent image generation?
Add the MCP server to your client config, then let the agent call it. For propzapi, add the endpoint https://api.propzapi.com/mcp with a Bearer key. The agent then sees three tools: list_templates to browse, generate_image to render a template with your data, and screenshot_url to capture a live page. No SDK to install, no browser to run.
The config is a few lines. This is the Claude Desktop shape; Cursor, Windsurf, and most clients use the same idea.
{
"mcpServers": {
"propzapi": {
"url": "https://api.propzapi.com/mcp",
"headers": { "Authorization": "Bearer pk_live_…" }
}
}
} Once it is connected, you do not write API calls. You ask. The agent picks the tool and fills in the arguments.
// Your agent calls the generate_image tool the server exposes:
generate_image({
template: "stat-card",
modifications: {
metric: "$48,210",
label: "MRR this month",
context: "Up 12.4% from July across 1,240 paying accounts."
},
verify: ["$48,210", "MRR this month"]
})
// The agent gets the PNG back as an image block it can actually see,
// plus a structured result:
// verified: true
// checks: [ { text: "$48,210", found: true },
// { text: "MRR this month", found: true } ] Two details make this work well with an agent instead of just a script.
First, generate_image returns the actual PNG as an MCP image block, not only a URL. The agent can look at what it made. Most image APIs hand back a link the model cannot open, which is useless when the whole point is for the agent to judge the result.
Second, the templates are yours. propzapi ships 14 built-in ones, and you can create your own from HTML and CSS with {{variable}} placeholders. So your brand, your layout, rendered on demand from the agent's data.
How do you know the agent's image is actually right?
You ask the renderer to check its own output. Pass a verify list of the exact strings that must appear, and the response tells you whether each one rendered as visible text. It runs in the same render pass as a DOM check, not OCR. This is the guarantee a diffusion model cannot give: proof that $48,210 is on the image, not a plausible-looking blur.
Here is the same call over plain REST, so you can run it yourself. I ran this exact request against the live API while writing this.
curl -X POST https://api.propzapi.com/v1/images \
-H "X-API-Key: pk_live_…" -H "Content-Type: application/json" \
-d '{"template":"stat-card",
"modifications":{"metric":"$48,210","label":"MRR this month",
"context":"Up 12.4% from July across 1,240 paying accounts."},
"verify":["$48,210","MRR this month"]}'
# → {
# "url": "https://images.propzapi.com/img_caaca75c….png",
# "width": 1080, "height": 1080, "format": "png", "bytes": 340618,
# "verified": true,
# "checks": [
# { "text": "$48,210", "found": true, "clipped": false, "ok": true },
# { "text": "MRR this month", "found": true, "clipped": false, "ok": true }
# ]
# }
# X-Credits-Cost: 1 (a render that fails costs 0) The check catches three real failures: a value that silently fell back to a system font, text that overflowed and got clipped, and a variable that never got substituted. An agent can read verified and decide to retry or fall back, instead of shipping a broken receipt to a customer.
There is a second proof mode for agents that need a paper trail. Pass receipt: true and the response adds a receipt object: a hash of the exact bytes, the visible text that rendered, the byte size, and how long it took. An agent can log that instead of re-inspecting pixels.
Image generation MCP servers, compared
Most image generation MCP servers are diffusion wrappers, and a few are template renderers. They are not competing for the same job. Diffusion servers are for art you invent. Render servers are for images where your text and numbers have to be exact. Pick by whether the words matter.
The directories are full of the first kind. Servers wrapping gpt-image-2, Google's Imagen, Stable Diffusion, and Midjourney all show up on PulseMCP's image list. They are good at what they do. They just cannot promise a correct string.
| Approach | Example MCP tools | Exact text? | Best for |
|---|---|---|---|
| Diffusion / text-to-image | gpt-image-2, Imagen, Stable Diffusion, Midjourney | No — guesses glyphs | illustration, backgrounds, concept art |
| Template render | propzapi generate_image | Yes — your literal string | OG images, receipts, certificates, dashboards, social cards |
| URL / page capture | propzapi screenshot_url, screenshot MCPs | Yes — whatever the page shows | capturing live dashboards and public pages |
Credit where it is due: propzapi did not get here first. Imejis and several diffusion wrappers shipped MCP servers before us. What we do differently is the mix of your own templates, an image handed back to the agent, and a text check on the result.
What does image generation over MCP cost?
With propzapi it is one credit per rendered image, billed on delivery, and a render that fails costs nothing. Listing templates and previews are free. You start with a one-time 50-image trial with no card, then buy pay-as-you-go packs from $5 for 150 images that never expire, or a monthly plan if volume is steady. No subscription floor to sit idle behind.
The metering fits how agents actually behave. Mine sat quiet for most of a day, then spat out a batch of cards in one burst. Pay-as-you-go means that quiet stretch costs nothing.
One honest limit on speed. This is real headless Chromium, so a warm render lands in about one to two seconds, and the first call after the service has been idle is slower while it wakes. It is built for on-demand generation, not a hot path that needs bytes in single-digit milliseconds. For an agent producing an image on request, that is the right trade.
Frequently asked questions
- Can an AI agent generate an image with correct text on it?
- Not from a diffusion model. Text-to-image models like gpt-image-2 or Imagen paint the shapes of letters, so a price or a name often comes out misspelled. To get exact text, point the agent at a template-rendering MCP server instead. It puts your literal string into an HTML template and renders it in a browser, so $48,210 stays $48,210.
- How do I give Claude image generation with MCP?
- Add an image generation MCP server to your client config, then Claude can call it like any other tool. For propzapi, add https://api.propzapi.com/mcp with a Bearer key. Claude gets three tools: list_templates, generate_image, and screenshot_url. Ask it to make a card and it calls generate_image, then sees the returned PNG inline.
- What is the difference between an image generation MCP server and DALL-E?
- DALL-E and gpt-image-2 are diffusion models that invent a picture from a prompt. A template-render MCP server takes an HTML template plus your data and renders it exactly, in headless Chromium. The first is for art and illustration. The second is for images where the words and numbers have to be right, like OG images, receipts, and dashboards.
- Can an MCP server return the image to the agent, not just a URL?
- Yes. The Model Context Protocol has an image content type, so a tool can hand the picture straight back to the model. propzapi's generate_image returns the rendered PNG as an image block plus a short text line, so the agent sees what it made and can decide whether to use it, instead of trusting a link it cannot look at.
- How much does it cost to generate images over MCP?
- With propzapi it is one credit per rendered image, and a render that fails costs nothing. Listing templates is free. There is a one-time 50-image trial with no card, then pay-as-you-go packs from $5 for 150 images that never expire. No subscription floor, so an agent that renders occasionally is not paying a monthly minimum to sit idle.
- Do I need to host the MCP server myself?
- No. propzapi runs a hosted MCP server at api.propzapi.com/mcp, so you point your agent at a URL and add a key. You can also call the same engine over plain REST at /v1/images. Self-hosting a headless-Chromium renderer is possible with open tools, but you then own the browser crashes, memory, and cold starts.
Give your agent a renderer, not a paintbrush
If your agent makes art, a diffusion MCP server is the right call. If it makes anything with a real price, name, or date on it, point it at a template renderer and read verified before you ship the image. Add the MCP server, ask for one stat card, and check that the number came back exactly as you sent it.