PopNow API

io.github.popnow-ai由 GitHub 账号 popnow-ai 发布v0.3.0更新于 Nov 3, 2026

Developer MCP for PopNow: run any AI image, video and audio model with an API key, billed in USD.

已验证Streamable HTTP可网页运行媒体与设计AI 与机器学习

概览

AI 生成的概览

托管式 PopNow MCP 服务器,让助手通过付费 AI 模型生成和编辑图片、视频、音乐与语音,费用以美元从 API 余额中扣除。

可以做什么
  • 创建与编辑图片:生成、改图、放大、去背景、擦除物体、扩图、重打光、换姿势或视角、拆分图层
  • 创建与编辑视频和音频:文生视频、视频编辑、延长、动作迁移、音效、音乐、语音、转写,以及免费合成为单个 MP4
  • 用 create_task 按精确 API ID 调用任意模型,并列出模型及其输入参数
  • 跟踪任务:查询运行中的任务、列出近期作品、查看 API 余额
  • 使用已保存的配方、画布工作流和智能体技能,包括查找并安装技能
适用场景
适合希望助手在对话中直接产出或修改媒体(图片、短片、音乐、配音)的场景,也适合用一个连接访问多种图像、视频和音频模型,并在每次调用前获得美元报价与确认。
运行要求
需要 PopNow API 密钥(sk-popnow-...,来自 API 控制台),以 Authorization Bearer 头或 POPNOW_API_KEY 环境变量提供;付费调用需账户有余额。远程端点无需安装;仅支持本地 stdio 的客户端可用 npx 运行 @popnow/mcp 桥接,需 Node.js 18 或更高版本。POPNOW_MCP_URL 可覆盖端点地址。
安装前请注意
付费工具会真实扣费;每次付费调用都需在用户确认后带上 max_usd 再次调用,没有自动批准阈值。API 密钥属于机密,勿写入会被提交的文件,建议使用设有低消费上限的专用密钥。结果以会过期的签名链接返回,任务会记录在 API 控制台日志中。没有工具会删除数据。

安装

在 SourceWeft 中

  1. 打开 控制台中的 PopNow API,将其添加到工作区。
  2. 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.popnow-ai%2Fpopnow-api-mcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。

{
  "mcpServers": {
    "popnow-api": {
      "type": "http",
      "url": "https://api.popnow.ai/api/v1/mcp"
    }
  }
}

README

[PopNow]

PopNow Developer MCP Server: call any AI image, video and audio model from Claude Code, Cursor, Codex and your own code

[MIT License] [MCP Streamable HTTP] [npm] [Docs]

The PopNow Developer MCP Server is a hosted Model Context Protocol server at https://api.popnow.ai/api/v1/mcp for developers. Add it to Claude Code, Cursor, Codex, VS Code or your own MCP client with a PopNow API key, and your agent can create images, videos, music and voiceovers, run any model by its API ID, follow tasks and install agent skills over one connection.

There is nothing to host. Every paid call is quoted in USD first and charged to your API balance only after you approve it. The key's model allow-list, IP allow-list and spend caps apply exactly as on the PopNow REST API.

This repository contains the setup guide, copy-paste client configs in examples/, an MCP registry manifest, and @popnow/mcp, a small stdio bridge for clients that only start local servers.

Want PopNow inside the ChatGPT or Claude apps with your PopNow account and website credits? Use popnow-mcp and popnow.ai/mcp instead.

Contents

At a glance

Endpointhttps://api.popnow.ai/api/v1/mcp
TransportStreamable HTTP, stateless (POST; GET and DELETE return 405)
AuthenticationAuthorization: Bearer sk-popnow-... with a key from the API console. There is no OAuth sign-in on this endpoint
BillingUSD from your API balance. Every paid call returns a quote first and runs only with max_usd
Key rulesThe key's model allow-list, IP allow-list and daily, monthly and lifetime spend caps
ToolsMedia tools, create_task for any model ID, tasks, balance, saved recipes and agent skills (full list)
Server namepopnow-api

Quickstart

  1. Create an API key in the API console. Giving your agent a key of its own with a low daily cap is a good habit: you can revoke it without touching your other integrations. If your API balance is $0, add funds in API billing.
  2. Put the key in your environment. The configs below read it from POPNOW_API_KEY, so it stays out of files you commit:
    bash
    export POPNOW_API_KEY="sk-popnow-..."
  3. Add the server. In Claude Code it is one command:
    bash
    claude mcp add --transport http popnow-api https://api.popnow.ai/api/v1/mcp \  --header "Authorization: Bearer $POPNOW_API_KEY"
  4. Ask for something. Ask your agent for an image, a clip or a soundtrack. It picks a PopNow tool, shows you the USD price and runs it once you approve.

Connect your client

Every client below talks to the same remote server with an API key. Ready-made files are in examples/.

Claude Code

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

Your shell fills in $POPNOW_API_KEY when you run the command, and Claude Code stores the header in your local MCP settings. To share the server with a team through a project's .mcp.json, use the generic config instead: Claude Code expands ${POPNOW_API_KEY} from each person's environment.

Cursor

Add PopNow to .cursor/mcp.json in your project, or to ~/.cursor/mcp.json for every project (examples/cursor.mcp.json):

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

VS Code

VS Code names the top-level key servers. This config asks for the key once and stores it securely (examples/vscode.mcp.json):

json
{  "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}" }    }  }}

Windsurf

Remote servers use serverUrl in ~/.codeium/windsurf/mcp_config.json (examples/windsurf.mcp_config.json). Press Refresh in the MCP panel after saving.

json
{  "mcpServers": {    "popnow-api": {      "serverUrl": "https://api.popnow.ai/api/v1/mcp",      "headers": { "Authorization": "Bearer ${env:POPNOW_API_KEY}" }    }  }}

Codex

Edit ~/.codex/config.toml (examples/codex.config.toml); bearer_token_env_var reads the key from your environment:

toml
[mcp_servers.popnow-api]url = "https://api.popnow.ai/api/v1/mcp"bearer_token_env_var = "POPNOW_API_KEY"

Cline

Open MCP Servers → Configure and add PopNow to cline_mcp_settings.json. Set type to streamableHttp explicitly; without it Cline falls back to the legacy SSE transport (examples/cline_mcp_settings.json):

json
{  "mcpServers": {    "popnow-api": {      "type": "streamableHttp",      "url": "https://api.popnow.ai/api/v1/mcp",      "headers": { "Authorization": "Bearer sk-popnow-..." },      "disabled": false,      "autoApprove": []    }  }}

Claude Desktop and stdio-only clients

Clients that can only start local stdio servers can run the @popnow/mcp bridge with npx. From version 0.2.0 it connects to the developer endpoint by default. In Claude Desktop, edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json, Windows: %APPDATA%\Claude\claude_desktop_config.json) and restart the app (examples/claude-desktop.json):

json
{  "mcpServers": {    "popnow-api": {      "command": "npx",      "args": ["-y", "@popnow/mcp"],      "env": { "POPNOW_API_KEY": "sk-popnow-..." }    }  }}

The bridge needs Node.js 18 or newer.

Other clients

Most clients that support remote MCP servers accept this shape. It is also the format of a Claude Code project .mcp.json (examples/generic.json). Check how your client reads environment variables before you paste a key into a file that is committed anywhere.

json
{  "mcpServers": {    "popnow-api": {      "type": "http",      "url": "https://api.popnow.ai/api/v1/mcp",      "headers": { "Authorization": "Bearer ${POPNOW_API_KEY}" }    }  }}

From your own code

With the official Python SDK (pip install mcp):

python
import asyncio, os
from mcp import ClientSessionfrom mcp.client.streamable_http import streamablehttp_client
async def main():    headers = {"Authorization": f"Bearer {os.environ['POPNOW_API_KEY']}"}    async with streamablehttp_client("https://api.popnow.ai/api/v1/mcp", headers=headers) as (read, write, _):        async with ClientSession(read, write) as session:            await session.initialize()            result = await session.call_tool("check_balance", {})            for part in result.content:                print(part.type, getattr(part, "text", ""))
asyncio.run(main())

With the official TypeScript SDK (npm install @modelcontextprotocol/sdk):

javascript
import { Client } from '@modelcontextprotocol/sdk/client/index.js';import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const transport = new StreamableHTTPClientTransport(new URL('https://api.popnow.ai/api/v1/mcp'), {  requestInit: { headers: { Authorization: `Bearer ${process.env.POPNOW_API_KEY}` } },});const client = new Client({ name: 'my-app', version: '1.0.0' });await client.connect(transport);
const result = await client.callTool({ name: 'check_balance', arguments: {} });console.log(result.content[0].text);await client.close();

Or with nothing but curl. The server is stateless, so every request stands alone; send both media types in Accept. This call asks for a quote and charges nothing:

bash
curl -X POST "https://api.popnow.ai/api/v1/mcp" \  -H "Authorization: Bearer $POPNOW_API_KEY" \  -H "Content-Type: application/json" \  -H "Accept: application/json, text/event-stream" \  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "create_task", "arguments": {"model": "google/nano-banana-2.1/text-to-image", "input": {"prompt": "A paper boat on a rainy window sill, soft morning light", "aspect_ratio": "4:5"}}}}'

For production code that calls models directly, the REST API gives you more control: webhooks, idempotency keys and per-task retention. SDKs: Python · JavaScript / TypeScript · Go · Java · PHP.

Tools

Typical prices are for the default model and settings, in USD. Every paid tool quotes the exact amount before it runs. The full parameter reference is in the developer MCP docs.

ToolWhat it doesDefaultTypical price
create_imageA new picture from a descriptionNano Banana 2.1, 1K, squareabout $0.048
edit_imageChange a photo with words: style, outfit, background, add or remove thingsNano Banana 2.1about $0.048
create_videoA short video from a description, or a photo brought to lifeMiniMax H3, 768p, 5 secondsabout $0.185
create_musicAn original song or instrumentalSuno v6about $0.072
create_speechText read aloud in many voices and languagesGemini 3.8 Flash TTS, voice Korea fraction of a cent, by length
apply_effectTurn a photo into an effect video or a photo makeoverThe effect's own model$0.125 to $0.34 for video, $0.03 to $0.05 for photos
remove_backgroundCut out the subject as a transparent PNGBackground Remover$0.0048
upscaleMake a photo or a video sharper and biggerPhoto 4K, video 1080pabout $0.012 for a photo; video by length
add_soundSound effects and ambience that match a silent videoThe tool's own modelquoted first
extend_videoContinue a video beyond its last frameminimax-h3quoted first
edit_videoEdit a video with words while keeping its motionkling-o3quoted first
copy_motionAnimate a character picture with motion from a videokling-3-0quoted first
create_video_from_referencesA video that keeps subjects from reference picturesminimax-h3quoted first
transcribe_audioTurn recorded speech into textgrok-sttquoted first
create_sound_effectsSound effects, ambience and spoken lines from a descriptionseed-audio-1-0quoted first
split_layersSeparate a picture into editable transparent PNG layersseedream-5-0-proquoted first
erase_objectRemove an object or person and fill the gapobject-eraser-v1quoted first
expand_imageExtend a photo beyond its edgesimage-expander-v1quoted first
change_camera_angleShow the scene from a different viewpointcamera-angle-changer-v1quoted first
change_poseMatch a person's pose to a reference picturepose-changer-v1quoted first
relight_photoChange the lighting in a photorelight-v1quoted first
remove_shadowRemove harsh shadows from a photoshadow-remover-v1quoted first
anime_to_realTurn an anime or cartoon picture into a photorealistic imageanime-to-real-v1quoted first
compose_videoCut earlier results into one finished MP4 with optional music, narration, captions and a titlefree
get_jobCheck a task that is still running and return it when readyWaits up to 30 sfree
list_my_creationsRecent tasks made with this key, with linksLast 10free
check_balanceAvailable API balance and funds held for running tasks, in USDfree
list_modelsImage, video and audio models with their exact API IDs, or every effect; with model, that model's inputsimagefree

Only tools that expose model accept a model from list_models; omit it to use the default. All tools carry the standard MCP hints (readOnlyHint, destructiveHint, openWorldHint), and no tool deletes anything.

Developer tools. Four tools exist only on this endpoint:

ToolWhat it doesParameters
create_taskRun any model by its exact API model ID with the model's own input, like createTask on the REST APImodel (required, for example google/nano-banana-2.1/text-to-image), input, max_usd, currency
get_taskSame as get_job: check a task and collect its resultjob_id (required), wait_seconds (0 to 50, default 30)
list_tasksSame as list_my_creations: recent tasks made with this keykind (image, video, audio), limit (1 to 20, default 10)
install_skillThe agent skill you picked: playbook, short-lived download link and install commands for your agentslug (required), agent

Call list_models with a category to see every model's exact IDs, then with model for that model's inputs. create_task validates input against the model's schema before it quotes, so a missing or unknown field comes back as a message, not a charge.

Saved recipes and skills. list_my_recipes, run_my_recipe, get_recipe_run, resume_recipe_run, list_my_skills and use_my_skill reach the recipes, canvas workflows and skills you saved on popnow.ai, with the same USD quote and approval. See Your recipes, workflows and skills.

Agent skills. find_skills returns a few agent skills that match a request (preview video, cover image and what each needs); install_skill returns the chosen skill's SKILL.md, a package link that works for a few minutes, the install commands for your agent and which PopNow tools make its media. Both are free and read-only. More skills: popnow-skills.

Quotes and approval in USD

  1. Quote. Call a paid tool without max_usd. Nothing starts and nothing is held. The result has needs_confirmation: true, currency: "USD", cost_usd and available_usd.
  2. Approve. Show the price to the user. After they approve, call the tool again with the same arguments plus max_usd set to the quoted cost_usd.
  3. Run. If the current price is within max_usd, the task starts. If it went up, you get a new quote to approve instead; nothing is charged.

max_usd is a nonnegative decimal string with up to nine decimal places, such as "0.012345678". JSON numbers, exponent notation and negative values are rejected. currency is optional and can only be USD. Every paid call needs this approval, including a zero-price quote; there is no automatic approval threshold.

When the balance cannot cover a quote, the tool says "Not enough API balance" with the cost and what is available, and charges nothing. Tasks follow the same rules as REST tasks: the highest possible price is held when a task starts, you pay what it actually used (never more than the hold), and a failed or expired task releases its hold. Identical calls with the same key within ten seconds create one task, so an agent that retries does not pay twice.

text
You:    Make a 9:16 clip of a vintage car cruising along the coast at golden hour, 10 seconds.Agent:  (calls create_video → "Needs confirmation, nothing started yet. This costs $0.37 USD; API balance available: $12.40 USD.")        That's $0.37 from your PopNow API balance. Go ahead?You:    Yes.Agent:  (calls create_video again with max_usd: "0.37" → job_id, then get_task)        Done: coast.mp4. It's in your API logs too.

Results and long jobs

  • Images come back as a preview plus a download link. Videos and audio come back as links.
  • Download links are signed and expire after a while. Each result also has a popnow://g/<job>/<n> link that never expires and can be passed to another tool, so "now animate that picture" just works.
  • A tool waits up to about 40 seconds for the result. Video usually takes longer, so the reply carries a job_id and the agent calls get_task to collect it.
  • Every task is listed in the API console's logs with its key, model and USD amount.

Limits

WhatLimit
Tool calls per account (including get_task polling)240 per minute
New tasks per account20 per minute
find_skills / install_skill per account240 / 120 per hour

A task over the limit is not charged; the tool says how many seconds to wait. The key's spend caps apply to every call. REST API limits are separate and described in Rate limits.

Moving from the old address

Until 1 November 2026, API keys connected to https://api.popnow.ai/mcp. That address keeps accepting API keys until 31 January 2027 (00:00 UTC) and serves the same developer tools, with Deprecation, Sunset and Link headers on every response. After that it answers API keys with 401.

To move, change the URL in your MCP config to https://api.popnow.ai/api/v1/mcp. The key, the tools and USD billing stay the same. If you run the stdio bridge, upgrade to @popnow/mcp 0.2.0 or newer (npx -y @popnow/mcp picks it up), or set POPNOW_MCP_URL to the new address.

The stdio bridge (@popnow/mcp)

packages/popnow-mcp is a minimal TypeScript package (bin popnow-mcp) for MCP clients that can only launch local stdio servers. It connects a StdioServerTransport to a StreamableHTTPClientTransport from the official MCP SDK and forwards every message unchanged, so tools and prices always match the live server. It is published on npm as @popnow/mcp; see Claude Desktop and stdio-only clients for the config.

Environment variableRequiredDescription
POPNOW_API_KEYyesPopNow API key (sk-popnow-...), sent as a Bearer token
POPNOW_MCP_URLnoRemote endpoint, default https://api.popnow.ai/api/v1/mcp

To build and run it from source instead (Node.js 18 or newer):

bash
git clone https://github.com/popnow-ai/popnow-api-mcp.gitcd popnow-api-mcpnpm --prefix packages/popnow-mcp installnpm --prefix packages/popnow-mcp test    # builds with tsc, then runs an end-to-end test against a local fake servernode packages/popnow-mcp/dist/cli.js --help

MCP registry manifest

server.json describes the server in the MCP registry format (schema 2025-12-11) as io.github.popnow-ai/popnow-api-mcp: the remote Streamable HTTP endpoint with a required Authorization header, and the @popnow/mcp npm package.

Troubleshooting

You seeWhyFix
401 "This endpoint takes PopNow API keys"No Authorization header, or a sign-in token instead of an API keySend Authorization: Bearer with an active sk-popnow- key
401 "This API key isn't valid"The key is wrong, revoked or expiredCreate a key in the API console
403 or a tool error about the keyThe key's model or IP allow-list blocks the callAdjust the key's restrictions in the API console
Needs confirmation, nothing started yetThe tool is quoting firstApprove, then repeat the call with max_usd
"Not enough API balance"The API balance cannot cover the quoteAdd funds in API billing, or choose a cheaper model or a shorter video
A spend-cap messageThe call would go over one of the key's capsRaise the cap or wait for it to reset
"Too many creations at once. Nothing was charged."More than 20 new tasks in a minuteWait the number of seconds in the message
405 Method Not AllowedGET or DELETE to the endpoint; the server is statelessUse POST
Cline connects but nothing workstype missing, so Cline used legacy SSESet "type": "streamableHttp"

FAQ

Does the MCP server cost extra?

No. Connecting is free, and so are reading tools such as list_models, get_task and find_skills. Media tasks spend your API balance at the same model prices as the REST API, and every one is quoted first.

Can I connect with OAuth instead of an API key?

No. This endpoint only takes API keys, so every call is billed to the API balance and governed by the key's restrictions and caps. To use PopNow in the ChatGPT or Claude apps with your PopNow account, see popnow-mcp.

Which models can I call?

Every image, video and audio model in list_models, including Kling, Seedance, Wan, Vidu, MiniMax, Nano Banana, GPT Image, Flux and Suno. create_task takes any of their exact API IDs with the model's own inputs; the named tools cover the common jobs with sensible defaults.

Is there anything to install?

No. The server is remote; you only add its address. Clients that can only start local stdio servers can run the bridge with npx -y @popnow/mcp.

Where do my results go?

Results come back as links in the tool response. Every task also appears in the API console's logs, and list_tasks lists the recent ones for the key.

Links

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md. For security issues, see SECURITY.md.

License

MIT © PopNow

Model catalog update — 2026-11-03

Model IDs and input fields come from the live PopNow catalog. This release covers the new GPT chat families, Gemini Omni and Veo 3.1 video variants, GPT/Whisper transcription, TTS-1/HD, realtime voice task models, and the updated Tripo, Topaz and editing models. Fetch the selected model schema before submitting; use the normal quote, create and poll flow for task models.

Embedding tasks return output.embeddings.data (input index plus the numeric embedding) and measured output.embeddings.inputTokens, with no media files required. OpenAI-compatible embeddings use POST /v1/embeddings; binary speech uses POST /v1/audio/speech. The API wallet and quotes are in USD.

The remote developer MCP catalog now supports list_models categories chat and utility in addition to media. create_task uses the exact model ID and model-specific input; get_task returns vector data in structured content. Always quote first and confirm max_usd before a paid task. The local package forwards the remote server tools automatically.

来源:README.md,提交 d5991fc

工具

0
该服务器需要登录,因此 SourceWeft 无法在没有账号的情况下读取其工具,也未收录。已连接账号所能看到的内容可能因账号及其权限而异。

版本历史

2
  1. v0.3.0最新Nov 3, 2026
  2. v0.2.0Nov 1, 2026

评分

已满足适用检查项的 85%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分