---
title: MCP Server
description: Connect RenderOG to Claude Desktop, Claude Code, or Cursor via the Model Context Protocol. Generate OG images directly from your AI agent.
slug: mcp
---

# MCP Server

RenderOG exposes a remote [Model Context Protocol](https://modelcontextprotocol.io) endpoint at `POST /mcp`, so AI agents (Claude Desktop, Claude Code, Cursor, or any MCP client) can generate OG images directly — no code, just a tool call.

It's a stateless Streamable-HTTP endpoint: a single `POST` per request, `Authorization: Bearer sk_live_...` on every call, no session state.

## Setup

Add RenderOG as an MCP server in your client's config, pointing at the deployed endpoint with your API key as a bearer header:

```json
{
  "mcpServers": {
    "renderog": {
      "url": "https://api.renderog.app/mcp",
      "headers": {
        "Authorization": "Bearer sk_live_your_key_here"
      }
    }
  }
}
```

**Claude Desktop** — `Settings → Developer → Edit Config`, add the block above under `mcpServers`, restart.

**Claude Code** — add the same block to your project or user MCP config (`.claude/mcp.json` or the equivalent for your setup).

**Cursor** — `Settings → MCP`, add a new server with the URL and header above.

Get an API key from your [dashboard](https://renderog.app/dashboard) — see the [Quickstart](./quickstart.md) if you don't have one yet.

## Tools

### `generate_og_image`

Generates an OG image and returns a signed URL (valid 24 hours) to it.

| Argument | Type | Required | Notes |
|---|---|---|---|
| `title` | string | yes | Main headline text |
| `subtitle` | string | no | Supporting text under the title |
| `template` | enum | no | `basic` \| `gradient` \| `blog` \| `product` — defaults to `basic` |
| `theme` | enum | no | `light` \| `dark` — defaults to `dark` |
| `format` | enum | no | `png` \| `webp` \| `avif` — defaults to `png` |

Each call renders and logs usage exactly like [`POST /v1/render`](./quickstart.md) — it counts against your plan the same way, and is billed the same way (free tier: never billed; PAYG: billed only on a successful, non-cached render).

**Example call** (from an agent's perspective):
```json
{ "name": "generate_og_image", "arguments": { "title": "Ship It", "template": "gradient", "theme": "dark" } }
```

**Returns:**
```json
{ "content": [{ "type": "text", "text": "https://api.renderog.app/og?template=gradient&title=Ship+It&theme=dark&expires=...&sig=..." }] }
```

### `take_screenshot` — coming soon

Ships once website screenshot capture launches (Cloudflare Browser Rendering — see the [screenshot docs](./screenshot.md)). Not advertised yet, so agents won't discover a tool that can't work.

## Notes

- Authentication is a static `Authorization: Bearer sk_live_...` header — the same API keys as everywhere else in the API, not OAuth.
- An unauthenticated `initialize` call is rejected with `401`.
- Protocol versions `2025-06-18` and `2025-03-26` are both supported; the server assumes `2025-03-26` if you don't send an `MCP-Protocol-Version` header.
- Rate limits are the same as `/v1/*` (60/min free, 600/min paid) — a normal `initialize` → `tools/list` → `tools/call` handshake is well within that.
