Novoads MCP & CLI for any AI
Create winning ads directly from your prompts in any AI tool
- 1
Copy the connector URL
You will paste this into Claude in the next step.
https://novoads.ai/api/mcp - 2
Open Claude connectors
Settings → Connectors → Add custom connector, then paste it in.
- 3
Sign in and start
OAuth, no API key. Approve two permissions, then ask for an ad.
What Claude does with it
Not a protocol diagram. The calls a real run makes, in order, next to what they produced.
You
Here is our black tee. Make a vertical ad in Spanish, someone at home talking to camera. Tell me what it costs before you spend anything.
tee-black.jpgClaude
Pricing it first.
estimate_cost
3.4 credits, checked against your balance. Nothing charged, no job created.
generate_video
Un joven en casa, luz natural de ventana, sostiene la cámara con una mano y habla directo al lente sobre su camiseta negra con el logo circular.
Returns a jobId right away. The render outlives the call, so it does not hold the connection open.
Claude
Here it is. Vertical, native audio in Spanish, ready for Reels or TikTok.
Result
A real ad made with Novoads. The call beside it is the live tool contract: those parameter names and bounds are exactly what the server accepts.
7 tools, and what each one costs you
Two of them spend credits. The rest read, price and report, which is what makes a chain running unattended safe to start.
Prepare
Get your real asset in, and read what is already working in someone else's.
upload_assetSpends nothingReturns a presigned URL for an image or video, plus the assetId that identifies it in every later call.
analyze_adSpends nothingTurns an uploaded ad into a structured read: summary, hook boundary, beats, on-screen text, casting and layout zones.
Create
The two calls that charge. Both validate the prompt before a credit moves.
generate_videoSpends creditsSubmits a video render and returns a jobId immediately. The prompt is validated before any credit is charged.
generate_imageSpends creditsGenerates a static ad image and returns the image URLs and a jobId.
Price and track
Quote before you commit, then follow the job. None of these cost anything to call.
estimate_costSpends nothingWhat a generation would cost, your balance, and whether it covers it. Spends nothing and creates no job.
get_generationSpends nothingStatus, progress and, once finished, a time-limited output URL for one job.
list_generationsSpends nothingYour recent jobs, newest first. The recovery path for when the response carrying the jobId is the thing that got lost.
- Video model
- Seedance 2.0
- Length
- 4 to 15s, up to 7 credits
- Image model
- GPT Image 2, 0.3 credits each
- Formats
- 6 aspect ratios, 11 languages
The server checks the prompt before it charges you
Every rule below was measured on a render that came back wrong, not reasoned from a model card. They are enforced in code, so a rule-breaking prompt costs a round trip instead of a render.
generate_video: 8 rules
Shown for the ugc family, the one an unqualified call gets.
banned_polishRejectedRejected: polish words (cinematic, cinematográfico, perfecto, 8k, masterpiece). A valid prompt names the light source, the surface and the flaw.
back_referenceRejectedRejected: back-references to an earlier shot's actor ("the same woman", "la misma mujer"). Seedance re-casts on every cut, so the actor tag is repeated verbatim.
missing_actor_descriptorRejectedRequired in every shot: an actor descriptor. Established once in 37-53 chars (age band, gender, wardrobe), then repeated as an 11-30 char tag, word for word.
chained_motionRejectedRejected: chained motion ("then", "y luego", "em seguida"). One action per shot; a second beat renders as a smear.
bullety_promptRejectedRejected: bullets and field:value pairs. Seedance reads flowing prose; a labelled list renders as literal on-screen text.
label_without_holdAdvisoryA visible label, package or screen needs the labelHold clause, or its printed text comes back garbled.
no_spoken_lineRejectedRequired: the spoken line in double quotes, or a statement that the shot is silent / b-roll / voiceover. A silent talking head bills in full.
no_aspect_ratioAdvisoryThe aspect ratio belongs at the end. Vertical 9:16 is the format for Reels, TikTok and Stories.
generate_image: 3 rules
Checked before any credit moves, same as video.
banned_polishRejectedRejected: polish words (cinematic, cinematográfico, perfecto, 8k, masterpiece). A valid prompt names the light source, the surface and the flaw.
blank_labelRejectedRejected: unbranded and blank-label products. A valid prompt names the real brand, with its photo passed via upload_asset + referenceAssetIds.
unfilled_placeholderRejectedRejected: unfilled [PLACEHOLDER] tokens left over from a template.
The wording above is exactly what comes back in the error, in English, whatever language your ad is in. Style families (ugc, pixar) change which rules apply: a lead character with no human face cannot satisfy the talking-head ones.
What we built on top of it
Four skills we run in-house, each one a chain over the same seven tools.
novoads-pixar-adOne product in, one stylized 3D animated ad out. Picture and spoken lines from a single generation call.
clone-hookReads a competitor's video hook down to the signal that ends it, then rebuilds that hook with your product and your actor.
clone-static-adReads a static ad's layout zones and copy hierarchy, then rebuilds the structure around your product.
spy-competitor-adsPulls what a competitor is currently running and reports the pattern behind it, not just the files.
These are instructions, not software. The judgement lives in the skill; the rendering happens here, on your account.
Questions a developer actually has
If the answer you need is not here, ask Pablo directly. He answers.
Message us on WhatsApp
Your first ad, today.
Try 3 days for $1. Cancel anytime. No sales calls.
Made in LatAm · WhatsApp support · Commercial rights included.
Rather ask first? Chat with Pablo on WhatsApp