Skip to main content

Novoads MCP & CLI for any AI

Create winning ads directly from your prompts in any AI tool

3 days for 1 dollar on every model, in Claude and Cursor
  1. 1

    Copy the connector URL

    You will paste this into Claude in the next step.

    https://novoads.ai/api/mcp
  2. 2

    Open Claude connectors

    Settings → Connectors → Add custom connector, then paste it in.

  3. 3

    Sign in and start

    OAuth, no API key. Approve two permissions, then ask for an ad.

Timeline, captions and voice cloning live in the app

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.jpg

Claude

Pricing it first.

estimate_cost

video6sesugc

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.

Seedance 2.09:166ses

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 nothing

Returns a presigned URL for an image or video, plus the assetId that identifies it in every later call.

analyze_adSpends nothing

Turns 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 credits

Submits a video render and returns a jobId immediately. The prompt is validated before any credit is charged.

generate_imageSpends credits

Generates 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 nothing

What a generation would cost, your balance, and whether it covers it. Spends nothing and creates no job.

get_generationSpends nothing

Status, progress and, once finished, a time-limited output URL for one job.

list_generationsSpends nothing

Your 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_polishRejected

    Rejected: polish words (cinematic, cinematográfico, perfecto, 8k, masterpiece). A valid prompt names the light source, the surface and the flaw.

  • back_referenceRejected

    Rejected: 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_descriptorRejected

    Required 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_motionRejected

    Rejected: chained motion ("then", "y luego", "em seguida"). One action per shot; a second beat renders as a smear.

  • bullety_promptRejected

    Rejected: bullets and field:value pairs. Seedance reads flowing prose; a labelled list renders as literal on-screen text.

  • label_without_holdAdvisory

    A visible label, package or screen needs the labelHold clause, or its printed text comes back garbled.

  • no_spoken_lineRejected

    Required: 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_ratioAdvisory

    The 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_polishRejected

    Rejected: polish words (cinematic, cinematográfico, perfecto, 8k, masterpiece). A valid prompt names the light source, the surface and the flaw.

  • blank_labelRejected

    Rejected: unbranded and blank-label products. A valid prompt names the real brand, with its photo passed via upload_asset + referenceAssetIds.

  • unfilled_placeholderRejected

    Rejected: 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-ad

One product in, one stylized 3D animated ad out. Picture and spoken lines from a single generation call.

estimate_costgenerate_imagegenerate_video
clone-hook

Reads a competitor's video hook down to the signal that ends it, then rebuilds that hook with your product and your actor.

upload_assetanalyze_adgenerate_videoget_generation
clone-static-ad

Reads a static ad's layout zones and copy hierarchy, then rebuilds the structure around your product.

upload_assetanalyze_adgenerate_imageget_generation
spy-competitor-ads

Pulls what a competitor is currently running and reports the pattern behind it, not just the files.

analyze_ad

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

Through MCP, the open standard for giving an agent access to external tools. You add one URL as a connector and sign in once. From then on Claude can reach 7 Novoads tools inside any conversation, and the results come back in the chat rather than in a dashboard you have to go check.

Anything that speaks MCP over Streamable HTTP with OAuth. Claude and Claude Code are the two we use daily, and the instructions above are the ones we run ourselves. Other clients take the same URL; the screen you paste it into is the only thing that changes.

No, and there is no key to issue. The connector signs you in with OAuth against the Novoads account you already have. The permissions it asks for are mcp, offline_access, and you can revoke them from your client whenever you want.

Credits from your plan, on the same schedule the app charges. A video at the default length is 3 credits and rises to 7 at 15 seconds; images are 0.3 credits each. estimate_cost quotes the exact figure and reads your balance before anything is charged, and calling it costs nothing.

generate_video returns a jobId immediately instead of holding the connection open, because a render outlives a tool call. Poll get_generation for status and the output URL. If the response carrying the jobId is what got lost, list_generations finds the job anyway, including whether it already completed and charged.

The ad's spoken language is declared per call and 11 are accepted. It is declared rather than guessed from the prose, so a Spanish ad never gets rewritten into English just to satisfy a rule.

Yes. list_generations returns your recent jobs with a time-limited output URL, and upload_asset takes any image or video back in as an assetId you can hand to the next call.

Errors come back structured, with a code and a message written for a person, because running out of credits is a different next step from the provider being down. If the tools never appear in Claude Code, it is almost always the restart in step 3. Anything else, message us and we will look at it.
Pablo, co-founder of Novoads
Pablo, co-founder · I'm here if you need anything

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