Skip to content

DocsReference

Marketing MCP server

Connect Claude, ChatGPT, Cursor or Codex to the OpenPromo marketing MCP server: OAuth or an API key, a setup prompt, and skills for posts and reels.

OpenPromo is a marketing MCP server: AI agents such as Claude, ChatGPT, Cursor, Codex and Gemini can read your brand profile, write post ideas, make images, carousels, reels and videos, and render them. Skills add ready-made marketing workflows on top. Setup takes a couple of minutes.

Connection details
SettingValue
Endpointhttps://api.openpromo.gg/mcp
TransportStreamable HTTP (stateless, POST only)
Sign-inOAuth, or the header Authorization: Bearer opro_…
Tools18, listed in MCP tools

ChatGPT and Claude: sign in with OpenPromo

ChatGPT and Claude (on the web and in the desktop app) connect through a custom connector and sign in with your OpenPromo account. No API key needed.

  1. Add a connector

    ChatGPT: Settings, Apps & Connectors, Advanced settings, turn on Developer mode, then Create. Claude: Settings, Connectors, Add custom connector.

  2. Point it at OpenPromo

    Name it OpenPromo, set the server URL to https://api.openpromo.gg/mcp, and choose OAuth as the authentication. Leave the client ID and secret empty: the connector registers itself.

  3. Sign in and allow

    A window opens on OpenPromo. Sign in if you need to, check what the connector will be able to do, and click Allow. You are sent back and the tools appear.

Connected apps are listed in Settings and usage in OpenPromo, where you can disconnect them at once. The connector never sees your password or keys. Developer mode and custom connectors depend on your ChatGPT or Claude plan.

Other agents: a setup prompt

  1. Create an API key

    In the app, open Settings and usage and create an API key under API keys. It starts with opro_ and is shown once. Treat it like a password.

  2. Put it in an environment variable

    Terminal
    # macOS and Linux: add to ~/.zshrc or ~/.bashrc
    export OPENPROMO_API_KEY="opro_..."
    
    # Windows (PowerShell), saved for new terminals
    setx OPENPROMO_API_KEY "opro_..."

    The prompt below never asks for the key in chat, so it stays out of your conversation history.

  3. Paste the setup prompt into your agent

    The agent works out what it is, adds the OpenPromo server its own way, asks you to reload if needed, and checks the connection with two free calls. It does not create anything or spend during setup. The prompt in Settings in the app is already filled in with your install's address.

    Setup prompt
    Connect yourself to OpenPromo, an open-source promo media studio, over MCP. Work through these steps in order and stop at any step that needs me.
    
    1. Check first. Work out which agent you are (for example Claude Code, Claude Desktop, Cursor, VS Code, Codex, Gemini CLI, OpenCode or Windsurf) and whether an MCP server named "openpromo" is already set up. If it is and its tools work, go to step 5.
       If you are ChatGPT, or Claude on the web or in the desktop app, you cannot add servers yourself: tell me to add a custom connector in your settings with the URL https://api.openpromo.gg/mcp and OAuth sign-in, which needs no API key, then stop.
    
    2. The key. The connection needs an OpenPromo API key, which starts with opro_. Ask me to create one in the OpenPromo app under Settings, API keys, and to store it in an environment variable named OPENPROMO_API_KEY. Never ask me to paste the key into this chat, and never write it into a file inside a code repository.
    
    3. Add the server. Add a remote MCP server named "openpromo" with:
       - URL: https://api.openpromo.gg/mcp
       - Transport: streamable HTTP
       - Header: Authorization: Bearer <value of OPENPROMO_API_KEY>
       Use your own supported way of adding MCP servers, and read the key from the environment variable. If you cannot change your own configuration, tell me exactly what to add and where. Instructions for each agent: https://openpromo.gg/docs/mcp
    
    4. Reload. If the openpromo tools are not available yet, tell me how to restart or reload you, and stop.
    
    5. Verify, for free. Call whoami and list_projects. Both are free. During setup, do not run any paid generation, create projects or change settings.
    
    6. Report back in under 120 words: what you set up, whether whoami worked, the projects you found, and three things I could ask you next. Mention that paid generations show their price first, and that I can give you a spending limit for any request.

Claude marketing skills and plugin

Skills are written marketing workflows your agent follows, built on the MCP tools. Each one says the likely price before a paid step and asks before it renders.

OpenPromo skills
SkillWhat it does
brand-checkRead your website and tidy up the brand profile every tool builds from.
content-planA month of post ideas from your selling points, with captions.
social-postsOn-brand images and carousels for Instagram, LinkedIn and ads.
promo-reelA short vertical video with voiceover and captions for Reels, TikTok and Shorts.
tutorial-videoA getting-started walkthrough of your product, narrated.

In Claude Code, the plugin installs the MCP server and all the skills together. It reads your key from OPENPROMO_API_KEY and connects to https://api.openpromo.gg/mcp; set OPENPROMO_MCP_URL to use a self-hosted install instead.

Claude Code
/plugin install openpromo --marketplace duckduckdeploy/openpromo

# On older Claude Code versions, in two steps:
/plugin marketplace add duckduckdeploy/openpromo
/plugin install openpromo@openpromo

Then try /openpromo:promo-reel. For other agents, connect the server as below and add the skills with the skills command, or copy the folders from plugins/openpromo/skills in the repository into your agent's skills folder.

Terminal
# Any agent that reads SKILL.md files (Claude Code, Codex, OpenCode and others)
npx skills add duckduckdeploy/openpromo/plugins/openpromo/skills

How you start a skill depends on the agent: a slash command in some, or just asking ("run the content-plan skill") in others.

Set it up by hand

Every client needs the same three things: the URL https://api.openpromo.gg/mcp, the streamable HTTP transport, and the header Authorization: Bearer followed by your key. Field names differ by client:

Claude Code

Terminal
claude mcp add --transport http openpromo https://api.openpromo.gg/mcp \
  --header "Authorization: Bearer $OPENPROMO_API_KEY"

Or install the plugin below, which adds the server and the skills together.

Claude Desktop

claude_desktop_config.json (Settings, Developer, Edit config)
{
  "mcpServers": {
    "openpromo": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.openpromo.gg/mcp",
               "--header", "Authorization:Bearer ${OPENPROMO_API_KEY}"],
      "env": { "OPENPROMO_API_KEY": "opro_..." }
    }
  }
}

Claude Desktop reaches remote servers with keys through the mcp-remote bridge, which needs Node.js. Restart Claude Desktop afterwards.

Cursor

~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
  "mcpServers": {
    "openpromo": {
      "url": "https://api.openpromo.gg/mcp",
      "headers": { "Authorization": "Bearer ${env:OPENPROMO_API_KEY}" }
    }
  }
}

VS Code (Copilot agent mode)

.vscode/mcp.json, or MCP: Open User Configuration
{
  "inputs": [
    { "type": "promptString", "id": "openpromo-key", "description": "OpenPromo API key", "password": true }
  ],
  "servers": {
    "openpromo": {
      "type": "http",
      "url": "https://api.openpromo.gg/mcp",
      "headers": { "Authorization": "Bearer ${input:openpromo-key}" }
    }
  }
}

VS Code asks for the key once and stores it securely.

Codex

~/.codex/config.toml
[mcp_servers.openpromo]
url = "https://api.openpromo.gg/mcp"
bearer_token_env_var = "OPENPROMO_API_KEY"

Gemini CLI

~/.gemini/settings.json
{
  "mcpServers": {
    "openpromo": {
      "httpUrl": "https://api.openpromo.gg/mcp",
      "headers": { "Authorization": "Bearer $OPENPROMO_API_KEY" }
    }
  }
}

OpenCode

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "openpromo": {
      "type": "remote",
      "url": "https://api.openpromo.gg/mcp",
      "headers": { "Authorization": "Bearer {env:OPENPROMO_API_KEY}" }
    }
  }
}

Windsurf

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "openpromo": {
      "serverUrl": "https://api.openpromo.gg/mcp",
      "headers": { "Authorization": "Bearer ${env:OPENPROMO_API_KEY}" }
    }
  }
}

Self-hosting? Use your own API address, for example http://localhost:4100/mcp on your computer. See Self-hosting.

Check it works

Ask your agent to call whoami and list_projects. Both are free. If they work, the agent sees all 18 tools, listed with their prices in MCP tools.

Updating

Claude Code
/plugin marketplace update openpromo
/reload-plugins

For skills added with the skills command, run npx skills update. Copied folders: replace them with the latest from the repository. The MCP connection itself never needs updating: new tools appear on their own.

Troubleshooting

Common problems
ProblemWhat to do
401 or "Send an OpenPromo API key"The header is missing or the key is wrong or revoked. Check the variable is set in the environment the agent starts from, and that the header reads Bearer, a space, then the key.
The agent does not see the toolsRestart or reload the agent after adding the server; most read their MCP configuration only at start.
405 Method not allowedThe server is stateless and only answers POST. Choose the streamable HTTP transport, not SSE.
Variables are not expandedSome clients start without your shell environment. Put the key in the client’s own env setting, or restart it from a terminal where the variable is set.
ChatGPT says the URL is unsafeUse the full https:// address, and a server reachable from the internet; ChatGPT cannot reach localhost. Self-hosted installs need HTTPS on a public domain.
The sign-in window says the request expiredRequests last ten minutes and work once. Start the connection again from the app.
A connected app stopped workingIf a refresh token is ever used twice, OpenPromo ends that connection for safety. Disconnect it in Settings and connect again.
budget_reachedThe call would cross your monthly spending limit. Raise the limit in Settings and usage, or wait for next month.

REST API

The same key works with the REST API, for scripts and your own tools. Send it in the same Authorization header.