Your assistant, with overads tools.
Add one URL to Claude, ChatGPT, Cursor or Codex. It drafts and schedules posts and reads your results.
- 27 toolsOnly the ones you allow.
- Sign in or paste a keyTwo minutes, no code.
- Pro and ScaleFrom $19 a month.
27 tools, grouped by job.
Publish
Draft on brand, add media, schedule.
Approve
See what is waiting for a yes.
Read results
Recaps, winners and post stats.
Ads
Read-only totals by day and window.
Workflows and the assistant
Run workflows, ask the assistant.
Pages you track
Page history and detected changes.
Sign in from the app, or paste a key.
Sign in
ChatGPT, Claude and Claude Code: add the URL, sign in, approve.
Or paste a key
Every other client. Make one in Settings > API.
Included on Pro and Scale
Pro $19 or Scale $49 a month.
See pricing
Pick your client.
Claude
Signs in to overadsA connector on claude.ai, or one command in Claude Code. Sign in to overads and approve.
01On claude.ai
Add overads as a custom connector. No key to copy.
text Customize > Connectors > Add > Add custom connector Name: overads Remote MCP server URL: https://api.overads.io/public/v1/mcp Leave OAuth Client ID and OAuth Client Secret empty Add, then Connect. Sign in to overads, pick a workspace and approve.02In Claude Code
One command in a terminal, then sign in.
bash claude mcp add --transport http overads https://api.overads.io/public/v1/mcp03Claude Code with a key instead
For a machine that cannot open a browser, pass a key on the same command.
bash claude mcp add --transport http overads https://api.overads.io/public/v1/mcp --header "Authorization: Bearer sk_live_YOUR_KEY"
ChatGPT
Signs in to overadsA custom MCP server in ChatGPT's settings. Sign in to overads and approve.
01In ChatGPT
Add the server, choose OAuth, and sign in to overads in the window that opens.
text Settings > Plugins > Add > Add custom MCP server Name: overads MCP server URL: https://api.overads.io/public/v1/mcp Authentication: OAuth Save, then sign in to overads, pick a workspace and approve.
Cursor
Uses an API keyA JSON entry in .cursor/mcp.json with an API key.
01Add to .cursor/mcp.json
Project-level in .cursor/mcp.json, or global in ~/.cursor/mcp.json.
.cursor/mcp.json { "mcpServers": { "overads": { "url": "https://api.overads.io/public/v1/mcp", "headers": { "Authorization": "Bearer sk_live_YOUR_KEY" } } } }
Codex
Uses an API keyA TOML entry in ~/.codex/config.toml with an API key.
01Add to ~/.codex/config.toml
The Codex CLI reads its MCP servers from config.toml.
~/.codex/config.toml [mcp_servers.overads] url = "https://api.overads.io/public/v1/mcp" http_headers = { Authorization = "Bearer sk_live_YOUR_KEY" }
Windsurf
Uses an API keyA JSON entry in Windsurf's mcp_config.json with an API key.
01Add to mcp_config.json
Windsurf > Settings > Cascade > MCP servers, or edit the file directly.
~/.codeium/windsurf/mcp_config.json { "mcpServers": { "overads": { "serverUrl": "https://api.overads.io/public/v1/mcp", "headers": { "Authorization": "Bearer sk_live_YOUR_KEY" } } } }
VS Code
Uses an API keyA JSON entry in .vscode/mcp.json with an API key, for agent mode.
01Add to .vscode/mcp.json
For the agent mode in VS Code.
.vscode/mcp.json { "servers": { "overads": { "type": "http", "url": "https://api.overads.io/public/v1/mcp", "headers": { "Authorization": "Bearer sk_live_YOUR_KEY" } } } }
Any MCP client
Uses an API keyStreamable HTTP with an Authorization header. This curl is the whole handshake.
01From anything that speaks Streamable HTTP
POST initialize with the key in the Authorization header.
bash curl -sS https://api.overads.io/public/v1/mcp \ -H "Authorization: Bearer sk_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
Ask it two things.
List my connected overads accounts.
Your channels, and whether each one still works.
What is waiting for my approval?
Everything waiting, each with a link to approve it.
For AI agents reading this pageThe endpoint, sign-in, and how to verify, in plain prose.
overads exposes its publishing, approval, results and ads surface as an MCP server at https://api.overads.io/public/v1/mcp, transport Streamable HTTP: POST for JSON-RPC, GET for the standalone stream, DELETE to end the session. A session is minted on initialize and returned in the Mcp-Session-Id header; send it on every later request. The setup steps for each client are also served as JSON, no key needed, at https://api.overads.io/public/v1/mcp/setup.
Two ways to authenticate. ChatGPT, Claude and Claude Code connect with OAuth 2.1: add the server URL in the app and leave the OAuth client id and client secret empty. The person then signs in to overads in the window that opens, picks one workspace, chooses which permissions the app gets and approves. Every other client sends an API key as Authorization: Bearer sk_live_... on each request. The person creates the key in Settings > API (the API keys and MCP page), choosing its scopes; it is shown once. In both cases tools/list returns only the tools the connection or key is scoped for. A tool outside those scopes, gated off on the deployment, or that does not exist answers Unknown tool; a missing tool means a missing permission, not a missing feature.
The account, the plan and the approval need the person. Signing up happens at https://overads.io/signup and is the person's own action, and the workspace must be on Pro at $19 a month or Scale at $49 a month, paid from day one; a paused workspace cannot connect. The approval screen is answered by the person: overads never approves a connection on its own and never remembers an approval, so every new connection shows it. Do not create an account, choose a plan or approve a connection on the person's behalf. Ask, and wait for them to confirm.
To verify a connection with one call, call the list_connections tool with no arguments. It needs the connections:read scope and returns the workspace's connected social accounts, each with tokenStatus, lastError and lastSuccessfulPost; an empty list is a working connection in a workspace with nothing connected yet. From a key client without an MCP library, POST initialize to the endpoint with the Authorization header (the curl under Any MCP client above) and read the Mcp-Session-Id header from the response.
Three rules the server states in its initialize instructions. When the workspace requires approval for scheduled posts, create_post and update_post succeed, the post lands with approvalStatus pending and the result carries a warning with code APPROVAL_REQUIRED; it will not publish until a member approves it in the app, so say so, do not retry, and do not call publish now to get around it (it is refused with the same code). Every write tool accepts an optional idempotencyKey: a fresh one per intended write, reused on retry. A counter that is null was not measured, not zero; analytics results carry data and provenance, and provenance is read before a conclusion is drawn from data.
The full reference is at https://overads.io/docs/mcp and https://overads.io/docs/mcp/tools, and the full text of every docs page is at https://overads.io/llms-full.txt.
Every tool, parameter and error code is on the MCP server page and the tools reference. Something not covered? Email hello@overads.io.
