DEV Community

Studio Notes
Studio Notes

Posted on

Set up PopNow MCP in Claude Code, Cursor or VS Code

Coding agents are good at writing the landing page. They're bad at the parts that aren't code: the hero image, the 5-second product loop, the background track for the demo video. Usually you leave the editor, open three different generator sites, download files, and drag them back into public/.

This tutorial connects PopNow's remote MCP server to your agent so it can make those assets in the same session. There are two official endpoints. Some earlier write-ups sent Claude Code, Cursor or VS Code to the OAuth URL; the current official path for those coding agents is the developer MCP with an API key. Mixing the two up is the usual setup mistake, so this guide starts there.

Disclosure: I work on PopNow. Everything below works with a normal PopNow account. Prices and limits were checked against official docs on 14 November 2026; confirm the live pages if a number matters for production.

Two endpoints, not one

|| | Developer MCP | Claude / ChatGPT connector |
|| --- | --- | --- |
| URL | https://api.popnow.ai/api/v1/mcp | https://api.popnow.ai/mcp |
| Docs | MCP server for developers | PopNow for ChatGPT & Claude |
| Auth | Authorization: Bearer sk-popnow-… from the API console. No OAuth on this endpoint | Sign in with OAuth. You do not paste an API key |
| Billing | USD from your PopNow balance, after a quote and an explicit max_usd approval | Website credits, at the same model rates as popnow.ai |
| Built for | Claude Code, Cursor, Codex, VS Code, Windsurf, or any MCP client that can send a bearer token | Claude (web and desktop) and ChatGPT (web), plus other apps that support a custom connector and sign-in |
| Server name | popnow-api | n/a |

Connecting is free. You pay only for media that actually runs. As of 13 November 2026, official billing docs say this is one account balance, shown in USD in the API console and in credits on the website (1 credit = $0.001). There is no subscription.

Until 1 November 2026, API keys also connected to https://api.popnow.ai/mcp. That address still accepts API keys until 31 January 2027, 00:00 UTC, and then answers them with 401. Change coding-agent configs to https://api.popnow.ai/api/v1/mcp. After the sunset date, https://api.popnow.ai/mcp remains the OAuth connector only.

What you'll have at the end

  • Claude Code, Cursor or VS Code calling the developer MCP with an API key
  • An agent that can call create_image, create_video, create_music and create_speech, after you approve a quoted max_usd
  • A small workflow: "build a landing page and make its hero video" in one session

1. Connect the developer MCP

Create a key in the API console. Official advice is to give the agent a key of its own with a low daily cap, so you can revoke it without touching other integrations. If the balance is $0, add funds in API billing. Keep the key out of git:

export POPNOW_API_KEY="sk-popnow-..."
Enter fullscreen mode Exit fullscreen mode

The key's model allow-list, IP allow-list and spend caps apply exactly as they do on the REST API. Do not put a key in a browser, a mobile app, or any code that runs on someone else's device.

Claude Code

claude mcp add --transport http popnow-api https://api.popnow.ai/api/v1/mcp \
  --header "Authorization: Bearer $POPNOW_API_KEY"
Enter fullscreen mode Exit fullscreen mode

To share the server through a project's .mcp.json, use the JSON config. Claude Code expands ${POPNOW_API_KEY} from each person's environment.

Cursor

Add this to .cursor/mcp.json in the project, or to ~/.cursor/mcp.json for every project:

{
  "mcpServers": {
    "popnow-api": {
      "url": "https://api.popnow.ai/api/v1/mcp",
      "headers": { "Authorization": "Bearer ${env:POPNOW_API_KEY}" }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

VS Code

VS Code names the top-level key servers. This official config asks for the key once and stores it securely:

{
  "inputs": [
    { "type": "promptString", "id": "popnow-api-key", "description": "PopNow API key (sk-popnow-...)", "password": true }
  ],
  "servers": {
    "popnow-api": {
      "type": "http",
      "url": "https://api.popnow.ai/api/v1/mcp",
      "headers": { "Authorization": "Bearer ${input:popnow-api-key}" }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Codex

In ~/.codex/config.toml:

[mcp_servers.popnow-api]
url = "https://api.popnow.ai/api/v1/mcp"
bearer_token_env_var = "POPNOW_API_KEY"
Enter fullscreen mode Exit fullscreen mode

Windsurf and a generic JSON shape are in the developer MCP docs. Clients that can only start local stdio servers can run the open-source bridge:

{
  "mcpServers": {
    "popnow-api": {
      "command": "npx",
      "args": ["-y", "@popnow/mcp"],
      "env": {
        "POPNOW_API_KEY": "sk-popnow-...",
        "POPNOW_MCP_URL": "https://api.popnow.ai/api/v1/mcp"
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

@popnow/mcp 0.2.0 and newer default to the developer endpoint. Set POPNOW_MCP_URL if you might still have an older cached copy.

Transport is Streamable HTTP and stateless: POST only. GET and DELETE return 405. There is nothing else to install for clients that already speak remote MCP.

If a request to /api/v1/mcp comes back 401 with a message that the endpoint takes API keys, you are on the right URL but the bearer token is missing or not a sk-popnow- key. Do not switch that client to the OAuth URL to "fix" it.

2. Quotes and max_usd

Every paid developer tool quotes first and runs only after you approve a budget:

  1. Call the tool without max_usd. Nothing starts and nothing is held. The result has needs_confirmation: true, cost_usd and available_usd.
  2. Show the price to the user.
  3. Call the tool again with the same arguments plus max_usd set to the quoted cost_usd (a nonnegative decimal string, up to nine places).

If the current price is within max_usd, the task starts. If it went up, you get a new quote instead; nothing is charged. Even a zero-price quote needs approval. There is no automatic approval threshold on the developer endpoint.

If the balance cannot cover the quote, the tool says so and charges nothing. Failed or expired tasks release the hold; you pay nothing.

A tool waits up to about 40 seconds for a result. Video usually takes longer, so the reply carries a job_id and the agent should call get_task (or get_job). Download links are signed and expire; results also have a popnow:// link that does not expire and can be passed to another tool in the same session.

Identical calls with the same key within ten seconds create one task, so a retrying agent does not pay twice.

Typical default prices in the 14 November 2026 developer docs (always quote for the settings you actually want):

  • create_image / edit_image: Nano Banana 2.1, about $0.048
  • create_video: MiniMax H3, 768p, 5 seconds, about $0.185
  • create_music: Suno v6, about $0.072

3. First generation

Ask in plain words:

Make a 16:9 picture of a paper boat on a rainy window sill, soft morning light.
Enter fullscreen mode Exit fullscreen mode

The agent should call create_image, show you the quote, and only run it after max_usd is set. Images return a preview plus a download link, and every result also gets a permanent popnow:// link you can feed to the next tool:

Now turn that picture into a 5-second video with a slow push-in.
Enter fullscreen mode Exit fullscreen mode

That's create_video with image_url set to the popnow:// link from the previous step. No downloading and re-uploading.

Useful read-only tools while you explore:

Tool Use
list_models Image, video and audio models with prices (category: image, video, audio, effects)
check_balance Balance, and how much is held for running jobs
list_my_creations Recent results with links
get_task / get_job Collect a result that's still rendering

compose_video, get_job, list_my_creations, check_balance and list_models are free.

4. A real workflow: landing page plus hero video

Here's a prompt that works in Claude Code when scaffolding a marketing page:

Build a single-page landing page for "Driftwood", a note-taking app, in Next.js.
For the hero:
1. Use PopNow create_image to make a 16:9 still of a calm desk by a window, notebook open, morning light.
2. Turn it into a 5-second looping video with create_video (slow push-in, no text).
3. Download both into public/hero/ and use the image as the <video> poster.
4. Make a 30-second calm instrumental with create_music for the demo page and save it to public/audio/.
Show me every quote and only run a tool after I approve max_usd.
Enter fullscreen mode Exit fullscreen mode

What to expect on the default models (14 November 2026 docs; quote before you run):

  1. create_image: about $0.048, returned inline
  2. create_video with the popnow:// link from step 1: about $0.185 for 5 seconds at MiniMax H3, 768p; often returns a job_id that the agent polls
  3. create_music with an instrumental track: about $0.072 on Suno v6

Total: about $0.30, without leaving the editor. On the developer MCP, each paid step still needs max_usd, even when the amount is small.

Tip: tell the agent which model to use when it matters ("use Seedance 2.5 for the video", "use Nano Banana 2.1 for the still"). Every generation tool takes a model id from list_models. Current list prices for a given model and setting are on Pricing and API pricing; the quote is the source of truth for the run itself.

5. Claude and ChatGPT: the OAuth connector

Use this when you want a picture, a clip or a song inside a Claude or ChatGPT conversation, without an API key in a config file.

Setup is on popnow.ai/mcp. As of the 14 November 2026 product changelog, PopNow is not in Claude's or ChatGPT's app directories yet, so you add it by hand. Name it PopNow and paste https://api.popnow.ai/mcp.

  • Claude (web and desktop): Customize → Connectors → Add custom connector, then Connect, sign in and press Allow. Custom connectors work on Claude Free, Pro, Max, Team and Enterprise. A Free account can add one custom connector. On Team and Enterprise, an owner adds it under Organization settings first.
  • ChatGPT (web): chatgpt.com/plugins → Add custom MCP server, choose OAuth, sign in and press Allow. This depends on your ChatGPT plan and workspace settings. PopNow's 17 October 2026 guide Can ChatGPT Make Videos? states that OpenAI's help center (checked that day) limits custom MCP server connections to ChatGPT Business and Enterprise/Edu plans, on the web.

On this OAuth connection, the assistant is supposed to show the price before a run. The same 17 October guide notes that requests above a default 300-credit automatic spending limit wait for confirmation. That threshold is for the chat connector, not for the developer MCP.

What happens during OAuth sign-in

If you are wiring a client to the connector URL, or building your own OAuth MCP server, the discovery steps are worth seeing. You can replay them with curl. This flow is for https://api.popnow.ai/mcp only.

Step 1: the client calls the server without a token and gets a 401.

curl -i -X POST https://api.popnow.ai/mcp \
  -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"}}}'
# HTTP/2 401
# www-authenticate: Bearer resource_metadata="https://api.popnow.ai/.well-known/oauth-protected-resource/mcp", scope="generate read"
Enter fullscreen mode Exit fullscreen mode

Step 2: it follows resource_metadata from that header:

curl -s https://api.popnow.ai/.well-known/oauth-protected-resource/mcp
Enter fullscreen mode Exit fullscreen mode
{
  "resource": "https://api.popnow.ai/mcp",
  "authorization_servers": ["https://api.popnow.ai"],
  "scopes_supported": ["generate", "read"],
  "bearer_methods_supported": ["header"]
}
Enter fullscreen mode Exit fullscreen mode

Step 3: it reads the authorization server metadata:

curl -s https://api.popnow.ai/.well-known/oauth-authorization-server
Enter fullscreen mode Exit fullscreen mode

The parts that matter: registration_endpoint (so the client can register itself, RFC 7591 dynamic client registration), code_challenge_methods_supported: ["S256"] (PKCE is required) and client_id_metadata_document_supported: true.

Step 4: the client registers, opens the authorize page with a PKCE challenge, and swaps the code for a token. From then on every MCP request carries Authorization: Bearer ....

The two scopes are read (balance, history, model list) and generate (spend money). A connection approved without generate can look around but can't charge you.

The developer endpoint does not use this OAuth flow. A POST to https://api.popnow.ai/api/v1/mcp without a key returns 401 and tells you to send Authorization: Bearer sk-popnow-….

Troubleshooting

|| Symptom | Fix |
|| --- | --- |
| 401 on /api/v1/mcp saying the endpoint takes API keys | Add Authorization: Bearer sk-popnow-.... Do not switch this client to /mcp |
| 401 on /mcp | Finish OAuth sign-in, or you sent an API key to the connector URL after the sunset date |
| "Please connect your PopNow account first." | The OAuth tool ran before sign-in finished. Reconnect from the client's MCP / connector settings |
| "This connection wasn't given permission to do that." | You approved the OAuth connector without the generate scope. Disconnect, reconnect, press Allow |
| 405 Method Not Allowed on the developer endpoint | That server is stateless: POST only |
| Cline connects but no tools work | Add "type": "streamableHttp", otherwise Cline falls back to legacy SSE |
| Rate-limit / too many creations | Developer limits include 240 tool calls per minute and 20 new tasks per minute per account. A rejected call is not charged |

Wrap-up

  • For Claude Code, Cursor and VS Code, use https://api.popnow.ai/api/v1/mcp with an API key, spend caps, and max_usd on every paid call.
  • For Claude and ChatGPT chats, use the OAuth connector at https://api.popnow.ai/mcp. Move any remaining API-key configs off that URL before 31 January 2027, 00:00 UTC.
  • Failed and expired tasks are not charged. The quote is a price cap.

Developer setup: popnow.ai/docs/mcp. Chat connector setup: popnow.ai/mcp. Official packages: github.com/popnow-ai.

Top comments (0)