Catalog PyPI
PACKAGE EXPLORERView in registry

adclip

PyPI

MCP server for ad creative generation — copy and static images from a single JSON brief

adsadvertisingclaudecreativellmmcpmeta-dco
Versions collected1
Direct dependencies10From release 0.1.1
Last observed20 Oct, 19:14 UTC

README

Version 0.1.1 documentation

adclip

Ad creative generation — copy and static images — from a single JSON brief. Runs as an MCP server (zero-config under Claude Code) or as a CLI.

Keyless by default. adclip shells out to the claude CLI for LLM calls using your subscription auth, so no ANTHROPIC_API_KEY is needed. Paid third-party APIs (Anthropic direct, fal.ai) are gated behind an explicit opt-in (ADCLIP_ALLOW_LIVE_APIS=1) so a key in your environment doesn't silently bill you.

Install

pipx install adclip

For the optional direct-Anthropic-API provider:

pipx install "adclip[anthropic]"

Requires Python 3.11+ and the claude CLI on $PATH (for the default keyless LLM path).

From source (for contributors)

git clone https://github.com/dreliq9/adclip.git
cd adclip
python3.11 -m venv .venv
.venv/bin/pip install -e ".[dev]"

Two usage paths

Add to your project's .mcp.json (or ~/.claude.json):

{
  "mcpServers": {
    "adclip": {
      "command": "adclip-mcp"
    }
  }
}

Then ask Claude: "Generate ad variants for examples/taichi_brief.json"

Tools exposed:

Brief + inspection

  • adclip_brief_validate — schema check
  • adclip_estimate_cost — LLM + fal cost estimate
  • adclip_list_formats — format catalog
  • adclip_policy_check — policy dry-run on arbitrary copy
  • adclip_campaign_status — manifest, variants, costs, missing-file audit for a campaign dir

Generation

  • adclip_generate_copy — copy pool only (preview/iterate before spending on images)
  • adclip_generate_visuals — given a list of winner copies, produce images + composites
  • adclip_generate_variants — full pipeline (copy → policy → image → compose → render)

Iteration on an existing campaign

  • adclip_render_variant — re-composite one variant (cheap; no LLM, no fal)
  • adclip_regenerate — redo one variant's copy, visual, or both
  • adclip_score_variants — re-rank variants against (possibly edited) brief; heuristic or LLM judge
  • adclip_export_dco — emit Meta DCO modular components (deduped headlines/bodies/ctas + per-aspect images)

2. CLI

adclip formats                              # list format specs
adclip estimate examples/taichi_brief.json  # cost preview
adclip copy examples/taichi_brief.json      # copy only (no images)
adclip run  examples/taichi_brief.json --image fake  # full pipeline, stub images

The CLI also uses claude-cli by default — no key setup needed.

Brief schema

See src/adclip/schema.py for the full AdBrief. Minimal example:

{
  "product": "Taichi crypto trading bot",
  "value_prop": "Paper-trade our signals before risking real cash.",
  "audience": "Skeptical retail crypto traders.",
  "angles": ["credibility", "curiosity"],
  "tone": "confident, dry, no hype",
  "cta": "Start paper trading",
  "formats": ["meta_feed_4x5", "google_rsa"],
  "variants": 2,
  "pool_size": 3,
  "policy_profile": "crypto",
  "must_avoid": ["guaranteed returns"],
  "use_judge": true,
  "heal_violations": 2,
  "output_dir": "/tmp/adclip_out"
}

Formats

NameAspectSizeKind
meta_feed_1x11:11080x1080static
meta_feed_4x54:51080x1350static
google_display_square1:11200x1200static
google_display_landscape1.91:11200x628static
linkedin_single1.91:11200x627static
x_promoted16:91200x675static
google_rsatext—text
stories_reels_9x169:161080x1920video¹
tiktok_9x169:161080x1920video¹
youtube_shorts_9x169:161080x1920video¹

¹ Video formats are declared in the schema but the pipeline does not yet produce video assets (v0.1 is static + text only). They land with a "video formats not yet implemented in pipeline" note in the manifest.

LLM provider modes

ModeKey?Where it runs
default / claude-clinoneSubprocess to the claude CLI; uses your subscription auth.
samplingnoneMCP sampling — asks the calling MCP client to run the LLM. Only works under clients that implement sampling (Claude Code does not today).
anthropicadclip[anthropic] extra + key + ADCLIP_ALLOW_LIVE_APIS=1Direct Anthropic API. ~3x faster per call.
fakenoneDeterministic scripted responses for tests.

Live-API opt-in

ADCLIP_ALLOW_LIVE_APIS=1 must be set to use any paid third-party API. This applies to anthropic and fal.ai (image + video). If a key happens to be in your env but the gate is closed, the provider refuses with a clear error instead of billing you.

For local dev and most MCP work you should never need to set this — the default paths are all keyless.

Self-review loops

  • Judge (use_judge: true): after policy-filtering, an LLM scores each survivor on brand fit, angle fit, and copy quality; top-N by blended score wins. judge_score, judge_rationale, judge_flags land in the manifest.
  • Heal (heal_violations: N): policy-violating candidates are sent back to the LLM with the specific violations and asked to rewrite. Successful heals gain a heal_attempts count and a healed_from snapshot of the original copy.
  • Semantic policy (use_semantic_policy: true): an LLM second-pass flags paraphrases that slip past the literal blocklist (e.g. "printing money" when must_avoid contains "guaranteed returns"). Feeds the same heal loop. Adds one LLM call per candidate — opt-in.

Tests

.venv/bin/python -m pytest

Status

v0.1 (current): static images + text ads, policy + heal + semantic policy loops, full MCP tool surface (12 tools), CLI, claude-cli / sampling / anthropic / fake LLM providers. Meta DCO modular-component export via adclip_export_dco.

Deferred: video pipeline (stories_reels_9x16, tiktok_9x16, youtube_shorts_9x16 are declared but not produced), adversarial critic — see v0.x plan notes in the repo.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.123 Apr 202610

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
dreliq9/adclip

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 19:14 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:c6ea16c81cadfeaa67b87b984336c3edab7cbea69771b26b09fe88371299560f