About betterimage.io
betterimage.io provides social-card and Open Graph image tools for AI assistants and MCP clients. It renders images deterministically from designed templates and also checks link previews and generates metadata tags.
Key features
- 01Generate social cards from page URLs
- 02Browse and preview 100 starter designs
- 03Check link previews across platforms
- 04Generate Open Graph and Twitter tags
- 05Save templates and render images
Use cases
- 01Create social-sharing images for pages
- 02Preview custom text in a template
- 03Check how links appear on social platforms
- 04Generate Open Graph tags for a page
MCP support
The hosted MCP server exposes card generation, template browsing, link-preview checks, and metadata tools. Account tools are available through OAuth or an API key.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://betterimage.io/mcpclaude mcp add --transport http io-betterimage-betterimage https://betterimage.io/mcp{"mcpServers":{"io-betterimage-betterimage":{"type":"http","url":"https://betterimage.io/mcp"}}}Open in Cursor{"servers":{"io-betterimage-betterimage":{"type":"http","url":"https://betterimage.io/mcp"}}}Open in VS Code{"mcpServers":{"io-betterimage-betterimage":{"type":"http","url":"https://betterimage.io/mcp"}}}{"mcpServers":{"io-betterimage-betterimage":{"serverUrl":"https://betterimage.io/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
10| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | The page URL, e.g. https://example.com/blog/my-post. |
| size | enum | No | Output canvas: og (1200x630), youtube (1280x720), square (1080x1080), portrait (1080x1350), story (1080x1920), pinterest (1000x1500). Defaults to the template's own size, usually og (1200x630, the link preview size). Layouts restack automatically on square and vertical canvases.og | youtube | square | portrait | story | pinterest |
| fields | object | No | What to put on the card. Text fields replace the template's text; the *_url fields replace its pictures, fetched server-side. Omit a field to keep what the template has. Design - colours, fonts, layout, crop framing - never changes. |
| fields.tag | string | No | Short label above the headline, e.g. "NEW POST" (up to 30 characters). The company on Testimonial. |
| fields.badge | string | No | Sale sticker in a corner of the card, Product cards only: "-30%", "SALE", "2 FOR 1" (up to 18 characters). |
| fields.price | string | No | Price headline under the pitch, Product cards only. Free text so it can read "$29", "49 PLN" or "Free" (up to 16 characters). |
| fields.title | string | No | Headline. Up to 220 characters; long titles auto-shrink to fit. On Profile cards this is the person's name, on Testimonial cards the role, on Product cards the product's name. |
| fields.author | string | No | Byline (up to 50 characters). The handle on Profile, the reviewer's name on Testimonial. |
| fields.footer | string | No | Tagline in the corner, typically the domain (up to 60 characters). |
| fields.rating | integer | No | Star rating, Testimonial and Product cards only. |
| fields.logo_url | string | No | Absolute https URL of the corner logo, pinned above the text. Drawn by every card kind except Profile, whose own picture is the avatar. |
| fields.image_url | string | No | Absolute https URL of the picture for the card's image slot - the product photo, the screenshot inside the frame, or the avatar on a Profile card. PNG, JPEG or WebP, up to 5 MB. Omit it to keep the template's own picture. Minimal cards have no image slot. |
| fields.price_was | string | No | The price this one replaces, drawn struck through beside it, Product cards only (up to 16 characters). |
| fields.image2_url | string | No | Absolute https URL of the second capture, used only by the Product card's window-and-phone frame (the phone over the browser window's corner). It needs image_url too: on its own there is no window for the phone to sit over and nothing is drawn. |
| fields.price_note | string | No | Small print beside the price, Product cards only: a billing period, a former price or a shipping note (up to 40 characters). |
| fields.description | string | No | Support line under the headline (up to 220 characters). The bio on Profile, the quote on Testimonial. Not drawn by Minimal templates. |
| fields.background_url | string | No | Absolute https URL of the background photo, on a template whose background is a photo. Works on every card kind. |
| preset | string | No | Preset key from list_presets. Omit it to let Jev pick the design that fits the page (the result names the pick and its runners-up). Fallback when no pick is possible: og-essay-light. |
Details
From the project READMEbetterimage.io MCP server
Social cards and OG images for your AI assistant. Give Claude, Cursor, VS Code or any MCP client a page URL and get back a link-preview card on a design picked to fit the page; browse 100 starter designs, preview them with your own text, check how a link previews on X, LinkedIn, Slack and Discord, generate Open Graph and Twitter tags, and with an account save templates, render clean images and get signed og:image URLs that need no hosting.
Every image is rendered from a designed template by a deterministic renderer: the text changes, layout, fonts and colours stay on-brand. No generative image model is involved.
This repository holds the public distribution files for the hosted server (install manifests, registry metadata). The server itself runs at https://betterimage.io/mcp and is documented at https://betterimage.io/mcp.
Endpoints
| URL | Auth | Use |
|---|---|---|
https://betterimage.io/mcp | none (optional API key) | Free tools work with no account. Pass Authorization: Bearer <api key> to unlock the account tools. |
https://betterimage.io/mcp/account | OAuth 2.1 | Same server; an unauthenticated call answers 401 and starts the sign-in flow in claude.ai, Claude Desktop, Claude Code and other OAuth-capable clients. |
Transport: Streamable HTTP. Protocol revisions 2024-11-05 through 2026-07-28.
Install
Claude Code
# free tools, no account
claude mcp add --transport http betterimage https://betterimage.io/mcp
# your own templates: sign in once (run /mcp in a session, pick betterimage, Authenticate)
claude mcp add --scope user --transport http betterimage https://betterimage.io/mcp/account
claude.ai / Claude Desktop: Settings > Connectors > Add custom connector, URL https://betterimage.io/mcp/account.
Cursor: one-click install button on https://betterimage.io/mcp, or add to mcp.json:
{
"mcpServers": {
"betterimage": { "url": "https://betterimage.io/mcp" }
}
}
VS Code: one-click install button on https://betterimage.io/mcp, or add to .vscode/mcp.json:
{
"servers": {
"betterimage": { "type": "http", "url": "https://betterimage.io/mcp" }
}
}
Gemini CLI: gemini extensions install https://github.com/mfundakowski/betterimage-mcp, or add to settings.json:
{
"mcpServers": {
"betterimage": { "httpUrl": "https://betterimage.io/mcp" }
}
}
ChatGPT (Plus/Pro, Developer mode): Settings > Apps & Connectors > Create, URL https://betterimage.io/mcp, no authentication.
Any other client: point it at https://betterimage.io/mcp over Streamable HTTP.
Tools
No account needed:
card_from_url: a social card for an existing page, in one call. Fetches the page like a crawler, picks the design that fits it, returns the image (watermarked preview).list_presets: the 100 starter designs with key, size, categories and preview image.preview_card: render a preset with your text (watermarked preview, no quota).check_link_preview: what X, Facebook, LinkedIn, Slack and Discord will show for a URL, with concrete fixes.generate_meta_tags: the complete<head>block with Open Graph and Twitter tags.
With an account (OAuth or API key):
list_templates,save_template: your saved designs.render_card: a clean PNG from a saved template (paid plans; watermarked on the free tier).og_image_url: a signed og:image URL rendered on first fetch and cached at the edge, so every page gets its own card with no hosting.get_usage: plan, watermark status and monthly quota.
Every render tool's fields object also takes the card's pictures by URL -
image_url, image2_url, logo_url and background_url - fetched
server-side and drawn in the slot the design already lays out. That is what
turns one saved template into a whole catalogue: one card per product, same
colours, fonts and crop framing. PNG, JPEG or WebP up to 5 MB, decided by the
bytes rather than the URL; the fetch is SSRF-hardened and a URL pointing back
at betterimage.io is refused.
Every tool carries a title and readOnlyHint/destructiveHint annotations; the two write tools are save_template and render_card.
Registries
- Official MCP Registry:
io.betterimage/betterimage(server.jsonin this repo) - Smithery:
@matfun93/betterimage
Cursor plugin
.cursor-plugin/plugin.json and mcp.json make this repository installable as a Cursor plugin; the plugin only registers the hosted server.
In JavaScript
For code rather than an assistant, @betterimage/cards builds the same signed image URLs from Node, Bun, Deno or an edge runtime, with no dependencies.
Links
- Documentation: https://betterimage.io/mcp
- Privacy: https://betterimage.io/privacy
- Terms: https://betterimage.io/terms
- Support: [email protected]
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.