MCP server
MCP server for social images
This is the OG Pilot MCP install guide for an OG image MCP server. Add the remote server, approve OAuth, and ask the agent for the first social image. The endpoint is https://ogpilot.com/mcp. Transport is Streamable HTTP. POST JSON-RPC to that URL. GET does not open an SSE stream. There is no stdio binary, no local command, and no API-key header. A client that can only launch a process cannot connect. On WordPress, change the OG image with a featured image, an SEO-plugin field, or generate_og_image. The tag names are the Open Graph protocol. The plugin lander stays at /wordpress.
Auth is OAuth 2.1 with PKCE (S256). The client discovers /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server, registers at /oauth/register when it has no client id, then opens /oauth/authorize. Leave the OAuth client id and secret blank unless the client asks you to paste values from a failed registration. Supported scopes are mcp:generate and offline_access. All four tools use mcp:generate. Access tokens last 1 hour. The token response includes a refresh token that lasts 90 days. Authorization codes last 10 minutes.
On the consent page, choose Allow. A guest connector session can debug, compress, and extract a palette. To generate an image, approve while signed in to an account with an active plan and at least one credit. A trial is not enough. Guests and accounts without that plan get plan_required. The tool does not start a checkout. Plans are on the pricing section.
MCP, the API, or the browser
Use this MCP server when an agent in Claude or ChatGPT already has the page URL. Use the REST API when your application signs a JWT on each render. Required API claims are iss (a verified domain) and sub (the API key prefix). The API allows an active subscription, a past-due subscription, or a trial, and the domain must be verified. A trial can call the API. It cannot call generate_og_image. Use the web generator when you have one URL and will publish the file yourself. MCP generation does not burn domain JWT image quota.
Remote config, for a client that accepts an mcpServers map. Claude and ChatGPT do not read this file. Do not add command, args, or a bearer token.
{
"mcpServers": {
"og-pilot": {
"type": "streamable-http",
"url": "https://ogpilot.com/mcp"
}
}
}
Connect Claude or ChatGPT
In Claude, on Free, Pro, and Max, open Customize, then Connectors, add a custom connector, enter https://ogpilot.com/mcp, and connect. Allow access on the OG Pilot consent page, then enable the connector in the chat menu. On Team and Enterprise, an owner adds the connector under organization settings first. In ChatGPT, turn on developer mode, create a developer-mode app named OG Pilot, set the server URL, choose OAuth, and allow access when the consent page opens. Do not submit the app to a public apps portal. Developer mode is for testing a custom server. The settings label moves. Look under security or advanced permissions. tools/list does not push changes (listChanged is false). Reconnect after a tool update.
Tools
generate_og_image takes a public url and an optional style. Style keys include default, minimalistic, modern, vintage, colorful, abstract, geometric, kawaii, flat, comic, anime, van_gogh, watercolor, ballpoint, pencil, pixel_art, retro_game, halloween, thanksgiving, and xmas. default is auto-detect. The tool uses the same paste-a-URL pipeline as the site, waits up to about 50 seconds for the first preview, and returns a hosted image URL. It does not wait for the second variation. Clients that accept image content also receive the preview bytes when they fit in 1.5 MB. A timeout means that preview was not stored yet. The job keeps running. Retrying the same URL and style within 30 minutes reuses the in-flight or finished generation instead of charging again. Each new image reserves one credit. The limit is 10 MCP generations per hour. Protocol calls and generate_og_image share 60 requests per hour per access token.
debug_open_graph is read-only. It takes a public url and returns a score, score label, meta tags, image details (url, content type, byte size, width, height, aspect ratio), issues, and suggested meta. It finishes in about 12 seconds, stops HTML downloads at 1 MB, and stops the preview image at 4 MB. Private and link-local addresses are rejected. The cap is 30 calls per hour per connector session. The Open Graph debugger is the same inspection in the browser.
compress_image takes a public image URL, not base64, and optional width, height, format, quality, fit, and target bytes. Defaults are 1200 by 630, jpeg, quality 82, and fit cover. Fit can be cover, contain, fill, scale-down, crop, or pad. Width and height max out at 4096. target_bytes is 10 KB to 5 MB. It returns a CDN URL plus size and dimensions, with no image bytes in the response. Downloads stop at 8 MB and 8000 px. The tool finishes within about 15 seconds. The cap is 20 calls per hour. It does not use the browser compressor session. The image compressor is the browser version.
extract_color_palette takes the same kind of public image URL and an optional limit from 1 to 8 colors, default 5. It returns hex colors, swatches, and a text and background pair with a WCAG contrast ratio. Same 8 MB and 8000 px cap. About 12 seconds. 30 calls per hour. The palette extractor is the browser version. generate_og_image does not accept those hex colors. It only accepts a page URL and an optional catalog style.
The three free tools share a separate 40 requests per hour, plus the per-tool caps above, so they cannot spend the generation budget. A failed tool call is a JSON-RPC result with isError true and structuredContent.error_code. It is not an HTTP 500.
Agent workflows
The server takes one URL per call. It does not clone a repository. Ask the agent to call generate_og_image once per public post URL and return image_url. If a call returns timeout, retry that same URL. If it returns plan_required, stop and pick a plan. To debug a LinkedIn preview, call debug_open_graph first. The tool does not clear LinkedIn's cache. If the image is the weak part, compress_image can resize a public image URL, or generate_og_image can draw a new card. To read a brand palette, call extract_color_palette on the logo URL, then generate from the page URL with a style key such as modern. Do not invent a color argument. The brand colors guide shows the API claims that do accept a hex color.
REST API
curl -X POST "https://ogpilot.com/api/v1/images" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"token":"YOUR_JWT_TOKEN"}'
Sign the JWT on your server. The API docs have the claims, templates, and SDK samples. Create an account before you expect an API key or MCP image generation. An Astro site choosing a public/ file, a prerendered endpoint, or this API is covered in Dynamic OG images for Astro. On WordPress, change the OG image with a featured image, an SEO-plugin field, or generate_og_image. The plugin lander stays at /wordpress.
Troubleshooting
POST /mcp without a valid bearer token returns HTTP 401 and invalid_token. Reconnect so the client can refresh or run consent again. A denied consent page returns access_denied. An unknown client id returns invalid_client. A scope other than mcp:generate or offline_access returns invalid_scope.
plan_required means the session is a guest, the account is on a trial, the subscription is not active, or the credit balance is zero. Sign in on the consent page with an active plan, then connect again. The tool will not open checkout.
timeout on generate_og_image means the first preview was not stored within about 50 seconds. Retry the same URL inside 30 minutes to reuse that generation. Debug and palette stop around 12 seconds. Compress stops around 15. rate_limited means you hit 10 images per hour, the shared 60-request protocol bucket, or a free-tool cap. If a tool is missing, reconnect. invalid_url means the address is not a public http(s) URL. compress_image and extract_color_palette reject base64.
Connecting the server stores OAuth metadata, the URLs you submit, and the resulting assets. Details are in the privacy policy.