Dali MCP
Dali MCP is an AI prompt optimization server that scores, analyzes, enhances, and benchmarks creative prompts for image and video generation models — helping you avoid wasted generation credits by optimizing prompts before inference.
Core Prompt Evaluation
score_prompt— Score a prompt 0–100 with a letter grade (A–F), per-dimension breakdown, detected anti-patterns, missing elements, and a verdict on whether it's safe to generateenhance_prompt— Get a structured rewrite brief (camera language, structure template, priority fixes, length targets) tailored to the target modelscore_and_enhance— Combine scoring and enhancement in one round-trip, returning the original score, enhanced prompt, and new score for comparisonanalyze_intent— Parse a prompt into structured dimensions: camera, motion, lighting, style, mood, gaps, and best-fit model suggestions
Comparison & Selection
score_variations— Rank 2–10 prompt variants for the same model, returned highest to lowest scoresuggest_generator— Recommend the best generation model for a creative concept given requirements and budget, with rationale and cost estimatescommunity_benchmark— Compare your prompt against community top-scorers, identify absent A-grade patterns, and see potential score gains
Community & History
creative_patterns— Browse community-sourced high-performing prompt patterns for a specific modeltrack_enhancement— Log before/after prompt pairs to train the community graphmy_story— View your personal scoring history, grade distribution, model breakdown, and creative DNA insights (requires login)
Utility
list_models— List all supported generation models with medium, creator, and core strengthdali_version— Check the current server version and changelogMCP Resources — Access model-specific guides via
creative://URIs
Supported Models
Video: veo3, seedance, kling, runway, wan, minimax, higgsfield, sora
Image: flux, midjourney, ideogram, firefly, imagen
Provides prompt scoring and enhancement for ByteDance's Seedance video model, optimized for UGC and social media content.
Supports prompt scoring and enhancement for Google's Veo 3.1 (and legacy Imagen) video/image models.
Supports prompt scoring and enhancement for OpenAI's Sora 2 video model (API shutdown September 24, 2026).
Provides prompt scoring and enhancement for models hosted on Replicate, including Seedance, Wan, and Minimax.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Dali MCPscore my prompt 'a flying cat' for veo3"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Dali by Lulu
Score your creative against what's actually winning in the ad market — before you spend the credit.
Most AI generation failures are predictable. A weak prompt, an off-formula creative — you can't tell until after you've burned the token. Dali scores it first, and it doesn't grade against opinions or generic "prompt tips." It grades against a real, living corpus of proven-winning ads — creatives still running in the market months after launch, scraped, embedded, and ranked. Two jobs:
score_prompt— judge the prompt before you generate (craft: camera, motion, lighting, model-native language).score_creative— judge the actual image against proven winners (does it look like what converts, and what's missing).
Every wasted generation has a real cost — a Seedance retry is ~$6. The live dashboard tracks what the community has saved by catching bad creatives before they burned a credit.
You: "make a video ad for our glass serum bottle"
dali::score_prompt(prompt, "veo3")
→ 8/100 Grade: F
→ no camera move · no motion · no lighting · 8 words
→ Verdict: Generic stock footage guaranteed. Enhance first.
→ enhancement_brief included (score < 70):
① lead with camera — Veo 3's #1 lever: "Slow dolly", "Orbital push"
② describe physics: "a drop falls", "liquid ripples", "glass refracts"
③ lighting type + quality: "warm backlight", "rim-lit edges"
↳ [Camera]. [Subject + motion]. [Lighting]. [Mood]. [No text.]
✦ YOUR LLM rewrites using the brief:
"Slow orbital push around a glass serum bottle on white marble. A single
amber drop falls in extreme slow motion, catching warm backlight. Macro:
liquid gold ripples outward from impact. Rim-lit edges, soft studio
diffusion. Premium, clinical. No text."
dali::score_prompt(enhanced, "veo3")
→ 91/100 Grade: A ✓ Safe to generate.The real winning data layer
This is what makes Dali more than a prompt linter. The scores are grounded in real ads that are actually winning, not hand-written rules.
How the corpus is built — longevity is the outcome signal. We scrape the public Meta Ad Library. An ad still running months after it launched is one the advertiser keeps paying for — a proven winner. That "still-running-after-N-days" longevity is a market-validated label you can't fake, and it's the spine of the whole dataset.
What's in it, today:
Ads ingested | 10,204 (14,100 raw archive) |
Proven winners (long-running) | 3,808 |
Distinct advertisers | 4,121 |
Verticals | 8 — beauty, wellness, supplements, fitness, food, apparel, tech, pets |
Winner creatives embedded | 800 (1408-dim, balanced ~100/vertical) |
Longest-running winner seen | 2,431 days (6.6 years live) |
The pipeline (offline → serving). The tools never scrape or embed on the fly — they read pre-built stores:
scrape Meta Ad Library → proven winners (longevity label)
→ Gemini vision → creative attributes (lighting, format, before/after, offer…)
→ prevalence SQL → winning-pattern lift per vertical (winners vs baseline)
→ Vertex embeddings → BigQuery VECTOR_SEARCH (nearest proven winners, cosine)
→ graph edges (Memgraph) → (:Pattern)-[:WINS_IN {lift, n}]->(:Category)So when score_creative runs, it embeds your image and finds the actual winning ads it most resembles by full visual signature — then tells you which winning attributes you're missing. When enhance_prompt runs with a category, the rewrite brief is backed by real market lift ("before/after shows up in 78% of winning wellness ads, 4× baseline"), not craft opinion.
Honest scope. The winner label is longevity (a strong market-validated proxy), not per-ad conversion rate — measured CVR validation is in progress. The corpus grows on a schedule, so coverage per vertical keeps deepening. What you get today: your creative scored against what's demonstrably surviving in the live market.
dali::score_creative(image_url, "beauty")
→ score 62/100 — partial resemblance to proven winners
→ looks_like: Frøya Organics (ran 411d), tashportcosmetics (884d), Face Reality (346d)
→ what_to_change: winners use "before/after" 4× more · offer-visible 1.8× more
→ defects: none
→ Verdict: Partial — strong resemblance, but add the high-lift attributes before spending.Related MCP server: Prompt Auto-Optimizer MCP
Contents
Install
Hosted MCP — connect once, scores every prompt and creative:
# Claude Code
claude mcp add --transport http dali https://dali.getlulu.dev/mcp// Cursor / Windsurf — .cursor/mcp.json or windsurf settings
{
"mcpServers": {
"dali": { "url": "https://dali.getlulu.dev/mcp" }
}
}// stdio-only clients — npx wrapper around the hosted server, no Python needed
{
"mcpServers": {
"dali": { "command": "npx", "args": ["-y", "dali-mcp"] }
}
}→ Full install guide with all clients
Self-hosted — local, no auth required:
pip install dali-mcp
claude mcp add dali -- python -m dali.serverThe self-hosted package exposes the prompt-scoring tools locally. The creative-scoring tools (
score_creative,analyze_winning_formula) and the winning-ad corpus run on the hosted server — connect via the hosted MCP to use them.
Tools
Score the creative — against real winners
Tool | What it does |
| Score an actual ad image. Embedding similarity to proven winners is the headline score; also returns the winners it resembles, which winning attributes it's missing, and generation defects — in one call |
| Score an image you're looking at (pasted/attached in the chat) — no URL. The model reads the creative's attributes and Dali scores them against the winning corpus (verdict + what to change). Use for images shared in-conversation; |
| Paste your own ads export (creative URL + CPA/CTR/ROAS) → your winning formula vs your losers, plus how you compare to the industry median |
Score the prompt — before you generate
Tool | What it does |
| Grade 0–100 with a per-dimension breakdown and verdict. When the score is weak, the rewrite brief is returned in the same call. Reads intent with the conversation LLM (understands negation, any language) |
| Returns a structured rewrite brief — YOUR LLM writes the enhanced prompt. With a category, the brief is backed by real winning-ad lift |
| Record a before/after pair in the graph brain — trains community patterns |
| Rank a list of prompt variants in one call — highest to lowest |
| Pick the best model for your concept + budget |
The graph brain & meta
Tool | What it does |
| Community top patterns for this model from the graph |
| Compare your prompt against community top scorers |
| Find A/B-grade prompts that share your patterns (score the prompt first, so its patterns are in the graph) |
| Parse dimensions: camera, motion, lighting, style, mood, gaps |
| Your scoring history, model stats, grade distribution |
| All supported models with medium and core strength |
| Server version + changelog |
Supported models
Video
Model | Platforms | Best for | Prompt style |
| Higgsfield, Google AI Studio ( | Cinematic brand films, narrative ads, photorealistic motion | Camera move → Subject → Action → Location → Lighting → Mood |
| Higgsfield, fal.ai ( | UGC, social-native content, TikTok/Reels performance ads | Natural language, motion-first, authentic feel |
| Higgsfield ( | Character animation, product showcases, facial performance | Scene → Characters → Action → Camera → Style; multi-shot labels |
| Runway ( | VFX, character performance, cinematic motion | Motion-first — describe what moves, not what exists |
| fal.ai ( | 4K, 20-second clips, native audio, open-source workflows | Scene → Motion → Sound → Duration → Mood |
| fal.ai ( | Cinematic storytelling, character animation | Natural language + |
| Higgsfield (native model) | Physics-driven motion — cloth, hair, fluid, particles | Describe materials in motion, not motion abstractly |
Sora 2 (OpenAI): API shutdown September 24, 2026. Do not build new dependencies on it — use Runway or Kling instead.
Image
Model | Platforms | Best for | Prompt style |
| BFL API ( | Photorealism, technical photography, product shots | 30–80 words; camera body + lens specs; front-load subject |
| Midjourney (v8.1) | Artistic depth, editorial, stylized illustration | Prose + params appended: |
| Ideogram API ( | Typography, logos, text-in-image, graphic design | Describe text exactly in quotes inside the prompt |
| Adobe Firefly 5 (enterprise) | IP-indemnified commercial assets, 4MP brand content | Natural language + |
Imagen 4 (Google): deprecated — use
gemini-3.5-flashwith image output. Dali still scores legacy Imagen prompts via theimagenmodel key but don't build new things on it.
Platform supersets
Higgsfield and Runway are aggregator platforms — they proxy multiple underlying models under one API. The model you pick matters more than the platform name:
Platform | Model selector | Underlying model |
Higgsfield |
| Google Veo 3.1 |
Higgsfield |
| ByteDance Seedance 2.0 |
Higgsfield |
| Kling 3 |
Higgsfield |
| Wan 2.7 |
Higgsfield |
| Higgsfield native |
Runway |
| Google Veo 3.1 |
Runway |
| Runway Gen 4.5 |
Runway |
| ByteDance Seedance 2.0 |
Dali scores for the underlying model's native prompt language, not the platform wrapper. Pass the model name (veo3, kling, seedance…), not the platform name.
Why model-specific?
Generic prompt optimizers don't know that:
Veo 3.1 needs camera movement specified above everything else
Kling 3 supports multi-shot scene labels natively in the prompt
Flux responds to camera body and lens names like a photographer (
"Sony A7 IV, 85mm f/1.4")Midjourney V8.1 reads prose + parameters, not keyword lists
Higgsfield simulates physics — you describe materials in motion, not motion abstractly
Minimax uses
[Pan left]bracket syntax for camera moves — plain text camera commands are ignoredIdeogram V4 needs text quoted exactly in the prompt for typography accuracy
Wan 2.7 generates native audio — include sound descriptions alongside visuals
Dali has a separate scoring rubric and rewrite brief for each model. Your LLM does the creative rewriting — Dali provides the intelligence.
MCP resources
creative://guide/veo3 → Veo 3.1 camera language guide
creative://guide/seedance → Seedance UGC motion guide
creative://guide/kling → Kling multi-shot + expression guide
creative://guide/runway → Runway motion-first guide
creative://guide/wan → Wan 2.7 audio + motion guide
creative://guide/minimax → Minimax bracket camera guide
creative://guide/higgsfield → Higgsfield physics-motion guide
creative://guide/sora → Sora 2 guide (API shutdown Sep 24, 2026)
creative://guide/flux → Flux photography brief guide
creative://guide/midjourney → Midjourney V8.1 + parameters guide
creative://guide/ideogram → Ideogram V4 typography guide
creative://guide/firefly → Firefly 5 commercial content guide
creative://guide/imagen → Imagen 4 guide (deprecated Aug 17, 2026)
creative://models → All models overviewContributing
Model guides live in dali/data/guides/{model}.json on the hosted server. Found practitioner patterns that consistently produce high-grade results? Open an issue with the model, the pattern, and a sample prompt + result. The best contributions come from Reddit, Discord, and YouTube — real practitioners, not official docs.
→ Prompt best practices by model — cheat sheets, do/don't tables, top patterns per model → Dali creative flow skill — install this skill so your LLM follows the score → enhance → generate workflow automatically
MIT License · Built by Lulu · dali.getlulu.dev
Maintenance
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Lulu-The-Narwhal/dali-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server