Skip to main content

MCP server for social cards and OG images

Add one URL to Claude, Cursor or VS Code and ask for the image in plain words: a card from 100 designs, a link preview check, the meta tags. With an API key, clean renders and signed og:image URLs from your own templates.

Connect it

https://betterimage.io/mcp

Try asking: Make an OG image for my latest blog post.

Free without an account. An API key unlocks your saved templates and, on a paid plan, images without the watermark. See all the tools

How it works

1

Add the server URL

One line in your client's MCP settings: https://betterimage.io/mcp. Nothing to install, nothing to run.

2

Ask in plain words

"Make a launch card for our new pricing page", "why does this link look broken on LinkedIn", "give every blog post an og:image". The assistant picks the tool.

3

See the card in the chat

Previews come back as images in the conversation. Signed URLs and meta tags come back as text ready to paste into your code.

Add it to your client

The server speaks MCP over HTTP at https://betterimage.io/mcp. Add it with no key to use the free tools. For your own templates there are two doors: https://betterimage.io/mcp/account, which asks you to sign in to betterimage.io in the browser once (Claude.ai, Claude Desktop, Claude Code, Cursor, VS Code and Windsurf all support it), or an API key from Account settings > API sent as an Authorization: Bearer header, for scripts and CI. Each client below shows both.

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

# or, for scripts and CI, an API key instead of signing in:
claude mcp add --scope user --transport http betterimage https://betterimage.io/mcp \
  --header "Authorization: Bearer bi_a1b2c3d4e5_XxYyZz..."

Cursor

Install in Cursor with one click for the free tools. For your own templates either use the /mcp/account URL and sign in when Cursor asks, or add this to ~/.cursor/mcp.json with a key (the global file; a project-level .cursor/mcp.json ends up in the repository together with the key):

{
  "mcpServers": {
    "betterimage": {
      "url": "https://betterimage.io/mcp",
      "headers": { "Authorization": "Bearer bi_a1b2c3d4e5_XxYyZz..." }
    }
  }
}

VS Code (GitHub Copilot)

Install in VS Code with one click for the free tools. For your own templates either use the /mcp/account URL and sign in when VS Code asks, or add this to .vscode/mcp.json with a key. VS Code asks for the key once and keeps it in its secret store, so the file itself holds no secret:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "betterimage-key",
      "description": "betterimage.io API key (leave empty for the free tools)",
      "password": true
    }
  ],
  "servers": {
    "betterimage": {
      "type": "http",
      "url": "https://betterimage.io/mcp",
      "headers": { "Authorization": "Bearer ${input:betterimage-key}" }
    }
  }
}

Claude.ai and Claude Desktop

On a paid Claude plan, open Settings > Connectors, choose "Add custom connector", and paste the account URL. Claude opens a betterimage.io sign-in, you click Allow, and your saved templates, clean renders and signed og:image URLs are available in the chat. No key to copy anywhere.

Settings > Connectors > Add custom connector
Name: betterimage
URL:  https://betterimage.io/mcp/account

Prefer no account at all? Add https://betterimage.io/mcp instead: the design browser, previews, the link checker and the meta tag generator work without signing in. The account URL also works in Claude Code, Cursor and VS Code, which run the same sign-in in your browser. You can disconnect an app any time under Account settings > API.

Windsurf and other clients

Any client that supports remote MCP servers over Streamable HTTP works. Windsurf's mcp_config.json takes the server as serverUrl:

{
  "mcpServers": {
    "betterimage": {
      "serverUrl": "https://betterimage.io/mcp",
      "headers": { "Authorization": "Bearer bi_a1b2c3d4e5_XxYyZz..." }
    }
  }
}

If you use a key, it lives in the client's config file. Treat that file like any other secret: keep it out of shared repositories and revoke the key under Account settings > API if it leaks. Signing in instead stores no secret on your machine beyond the client's own token, and the connection shows up under Connected apps, where one click disconnects it. Either way the access can render your templates against your quota and save new ones from presets; it cannot edit or delete templates, touch billing, or change anything else on the account.

The tools

10 tools, listed here straight from the server. 5 work without a key; the rest need one. Your assistant reads the same descriptions and decides when to call what, so you rarely name a tool yourself.

Tool What it does Needs a key
card_from_url Card from a page URL. Make a social card for a page that already exists, in one call: fetches the page like a crawler, takes its title, description, author, domain and og:image (when it has one), lays them onto a design and returns the image (shown inline, watermarked, free). Use this first when the user gives a URL: "make an OG image for my latest post". Any field you pass overrides what the page says. Pick another design with preset (see list_presets), or a size. No API key needed; one page fetch plus one render per call. No
list_presets List starter designs. Browse the ready-made designs (presets) a card can start from: key, name, template kind, native size, use-case categories, a one-line look description and a preview image URL. Start here when the user wants a social card and has no saved template. Then call preview_card with the chosen key. No API key needed. No
preview_card Preview a card from a preset. Render a preset with the user's text and return the image (shown inline). Free, no API key; the preview carries a small betterimage.io watermark and does not touch any quota. Use it to show the user what their card will look like before they commit. For a clean image: save_template + render_card on a paid API plan, or the one-off clean download in the editor. No
check_link_preview Check how a link previews. Fetch a public page the way X, Facebook, LinkedIn, Slack and Discord crawlers do and report what they will show: the effective title, description and image per platform, the og:image's real format, dimensions and weight, and a list of concrete problems with fixes. Use when a user asks why their link looks wrong when shared, or before publishing. Only http(s) URLs on the public internet; one page fetch plus up to two image fetches per call. No API key needed. No
generate_meta_tags Generate meta tags. Build the complete <head> block for a page: <title>, meta description, canonical, Open Graph and Twitter card tags, with og:image width/height. Returns HTML to paste plus notes on anything worth fixing (title too long, image over http). Use after check_link_preview, or whenever a user needs the tags for a new page. No API key needed; nothing is fetched. No
list_templates List saved templates. The user's saved templates (their own designs, made in the editor or with save_template): slug, name, kind, the fields render_card and og_image_url can override, and when it was last edited. Needs an API key. Call this before render_card or og_image_url when you do not know the slug. Yes
save_template Save a preset as a template. Copy a preset (optionally with the user's text as its new defaults) into the user's account as a saved template, so render_card and og_image_url can use it. Needs an API key. Do this once per design, not per image: afterwards every render only passes the text that changes. Returns the slug to use next and a link to fine-tune the design in the editor. Yes
render_card Render a saved template. Render one of the user's saved templates with the given text and return the PNG (shown inline, at 1x). Needs an API key. On a paid plan the image is clean (no watermark); on the free tier it is watermarked. Each call spends one image of the monthly quota. Use it when the user wants the actual file, e.g. to host it themselves. For an og:image tag that needs no hosting, or for a 2x retina file, prefer og_image_url. Yes
og_image_url Signed og:image URL. Build a signed image URL for a saved template with the given text, ready to put in a page's <meta property="og:image"> tag. Nothing is rendered now: the image is generated when a crawler fetches the URL, cached at the edge for a day, and each uncached fetch spends one image of the monthly quota. Needs an API key. This is the zero-infrastructure way to give every page its own card; use it in page templates, CMS hooks and static site generators. Returns the URL and the ready meta tag. Yes
get_usage Quota and plan. The API key's plan, whether renders are watermarked, and this month's image quota: used, remaining, and the reset date. Needs an API key. Check it before batch renders, or when a render came back watermarked unexpectedly. Yes

Automating og:images with an agent

The tools are built to chain, so an agent can take a site from "no preview images" to "one branded card per page" in a single task. This is the sequence it will follow; each step is one tool call, and the whole thing works from Claude Code, Cursor, or a coding agent running in CI.

  1. Pick a design once. list_presets with a category such as blog-post, then preview_card with a real headline from the site so you can approve the look. Say "darker", "the serif one", "with our domain in the corner" and it renders again.
  2. Save it as your template. save_template copies the preset into your account with your text as defaults and returns a slug. From here on the design is locked; only text changes.
  3. Give every page its URL. For each page the agent calls og_image_url with that page's title and drops the result into the head, or into generateMetadata, a Hugo partial, a CMS hook. No files, no storage, nothing to run: the image renders on the first crawl and is cached at the edge for a day.
  4. Or host the files yourself. render_card returns the PNG; the agent writes it next to the page and points og:image at your own URL. Predictable quota (one render per page, ever) and the same design.
  5. Verify the live page. check_link_preview on a published URL confirms what X, LinkedIn, Slack and Discord will actually show, and get_usage keeps the batch inside the monthly quota.

The signed URLs are the same ones the REST API documents, so what the agent wires in today keeps working with no MCP client in the loop tomorrow. Ready-made signing code for Node, Python, Ruby, Go and PHP is on that page.

Things to ask

  • "Make me a social card for a post called Ten lessons from our migration." The assistant browses the designs, picks one, and shows a preview with your headline. Ask for "something darker" or "the serif one" and it renders again.
  • "Why does my link look bad on LinkedIn?" It fetches the page like the crawlers do, lists what is missing or wrong, then writes the corrected meta tags and a card to go with them. The same checks as the link preview checker and the meta tag generator, without leaving the chat.
  • "Add an og:image to every post on my Next.js blog." With an API key: it saves a design as your template, then builds a signed image URL per page and wires it into generateMetadata. No image files to host.
  • "Render our release card for v2.4 at YouTube and square sizes." Two renders from one template, returned as images you can save.

Free, or with a key

  • Without a key: browse the designs, preview any of them with your text, check link previews, and generate meta tags. Previews carry the small "Made with betterimage.io" mark, the same as the free editor. A one-off clean download of any preview is $4.99 in the editor.
  • Signed in, or a free key: your saved templates, signed URLs and usage, with the same watermark and 25 images a month to build with. Signing in (through the account URL) creates a key named after the app on your account, so both routes share one allowance.
  • Paid plan (from $9/month): clean images from your templates, 500 a month, shared with the REST API and clean downloads in the editor. Every render and every uncached fetch of a signed URL counts as one. Plans and limits are on the API page.

Questions

What is an MCP server?

The Model Context Protocol is an open standard that lets AI assistants call outside tools. An MCP server describes its tools once; the assistant reads those descriptions and calls a tool when a conversation needs it. This server exposes betterimage.io's card rendering, link checker and meta tag generator that way.

Do I need an account?

No. Browsing designs, previews, the link checker and the meta tag generator work with just the URL. Your own saved templates need an account: sign in through the account URL (Claude.ai, Claude Desktop, and any client that supports OAuth) or use an API key as a header. A paid plan removes the watermark.

Is it the same as the API?

Same renderer, same templates, same quota. The REST API is for your code; the MCP server is for your assistant. A key works in both, and renders from either count against the same monthly allowance.

Can the assistant change my templates or account?

It can create a new template from a preset (that is what save_template does) and render or sign URLs for existing ones. It cannot edit, delete or share templates, change billing, or touch anything else on the account. Design changes happen in the editor, and an app you signed in with can be disconnected under Account settings.

Why did a preview come back with a watermark?

Previews of presets always carry it, with or without a key; they are free and do not use quota. Clean images come from render_card on a paid plan, or from the one-off clean download in the editor.

Which clients are supported?

Any MCP client that connects to remote servers over Streamable HTTP: Claude Code, Claude.ai and Claude Desktop, Cursor, VS Code with GitHub Copilot, Windsurf, and others. The server speaks the current protocol revision (2026-07-28, stateless per-request metadata and server/discover) and the earlier initialize-based revisions back to 2024-11-05 on the same URL, so old and new clients both work. There is no local package to install. Sign in with your betterimage account (OAuth) at the account URL, or send an API key as a header; the plain URL needs neither.

Give your assistant a designer

Add the URL once. Every card, preview and meta tag after that is one sentence away.

How to add it