# OgForge > Open Graph (social preview) image API: 1200x630 PNG cards from 5 templates via a single GET URL, for og:image and twitter:image tags. Public JSON/image API plus a remote MCP server for AI agents. No account, no key. ## For AI agents - [MCP server](https://ogforge.mike-tusa.workers.dev/mcp): remote MCP over Streamable HTTP (POST only, stateless, JSON responses). Protocol versions: 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Tools: `create_og_image` (title, template, subtitle, label, site, author, emoji, logo, theme, bg, fg, accent, include_image). Read-only. Client config (most MCP clients accept this; some use a different format, for example VS Code uses a `servers` key): `{"mcpServers":{"ogforge":{"type":"http","url":"https://ogforge.mike-tusa.workers.dev/mcp"}}}` - [OpenAPI 3.1 spec](https://ogforge.mike-tusa.workers.dev/openapi.json): machine-readable description of the API - [Docs](https://ogforge.mike-tusa.workers.dev/docs): human-readable docs, every parameter and error code - [Playground](https://ogforge.mike-tusa.workers.dev/playground): build an image URL and meta tags in the browser ## Image API - `GET https://ogforge.mike-tusa.workers.dev/api/og?template=blog&title=Hello` (alias `/og.png`) returns image/png 1200x630. Params: template (blog, launch, docs, minimal, gradient), title (max 120), subtitle (200), label (40), site (60), author (60), emoji (one), logo (https PNG/JPEG/SVG URL, max 512 chars), theme (light/dark), bg/fg/accent (hex). Query string max 2000 characters. Longer text is truncated with "…" (X-OgForge-Truncated header). - Cached for a year (immutable, ETag, 304 on If-None-Match). Headers: X-OgForge-Cache (MISS, HIT-MEMORY, HIT-EDGE, REVALIDATED), X-OgForge-Tier, X-OgForge-Warning (e.g. logo_fetch_failed). - Errors: { "error": { "code", "message" } } with 400 (invalid_template, invalid_theme, invalid_color, invalid_emoji, invalid_logo, param_too_long), 403 (blocked_content), 404 (not_found), 405 (method_not_allowed), 414 (query_too_long), 429 (rate_limited or busy, with Retry-After), 500 (render_failed, internal_error). - `GET https://ogforge.mike-tusa.workers.dev/api/templates`: templates and text limits (JSON). `GET https://ogforge.mike-tusa.workers.dev/api/health`: version. ## Limits, keys and pricing - Free tier, no key: about 120 image requests and 20 new (uncached) renders per minute per IP, and about 60 new renders per minute for the whole service (approximate, per Cloudflare location). Cached images don't count toward the render limit. Free renders carry a small "ogforge" badge. The MCP endpoint uses the same counters: each `create_og_image` call is one /api/og request. Non-call MCP messages don't count as renders, but are capped at about 120/min per IP (HTTP 429 + Retry-After). Max MCP body 65536 bytes. - [Pricing](https://ogforge.mike-tusa.workers.dev/pricing): Free only today. Pro is coming soon; nothing is for sale and API keys are not available yet (a sent key is ignored and the free tier applies). ## Optional - [Privacy](https://ogforge.mike-tusa.workers.dev/#privacy): no request logs, cookies or analytics. A salted, daily-rotating hash of your network is kept for up to 9 days to count unique visitors per day; no IP address is stored. - Acceptable use: no impersonation, phishing or illegal content (403 blocked_content). - Contact: digitalpromohub.support@gmail.com