# Dali by Lulu (remote · dali.getlulu.dev)

The prediction MCP — score your prompt before you generate, so you never waste a credit.

- Trust score: 54/100 (low)
- Change this week: +7
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `dali.getlulu.dev`: 54/100 (this document), [markdown](https://verifymcp.io/servers/lulu-the-narwhal-dali/dali.md), [page](https://verifymcp.io/servers/lulu-the-narwhal-dali/dali)
- pypi · `dali-mcp`: 13/100, [markdown](https://verifymcp.io/servers/lulu-the-narwhal-dali/dali-mcp.md), [page](https://verifymcp.io/servers/lulu-the-narwhal-dali/dali-mcp)

## Channel facts

- Endpoint: `https://dali.getlulu.dev/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.6.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 16 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 24/100
  - 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (fair).
  - Context-footprint check failed: tool/resource definitions use about 3108 tokens (~172/item across 18 items; 16 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 77/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 21% of tool parameters carry a description.
  - Structured output schemas are declared (94% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### Claude

```bash
claude mcp add --transport http lulu-the-narwhal-dali https://dali.getlulu.dev/mcp
```

### Codex

```toml
[mcp_servers.lulu-the-narwhal-dali]
url = "https://dali.getlulu.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "lulu-the-narwhal-dali": {
      "type": "remote",
      "url": "https://dali.getlulu.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add lulu-the-narwhal-dali --url https://dali.getlulu.dev/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  lulu-the-narwhal-dali:
    url: "https://dali.getlulu.dev/mcp"
```

### Other

```json
{
  "mcpServers": {
    "lulu-the-narwhal-dali": {
      "type": "http",
      "url": "https://dali.getlulu.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 54, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 53, +4)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 49, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 48, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 47, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 47)

First indexed and scored.

## MCP tools (16)

### `analyze_intent` (~32 tokens)

Parse a creative prompt into structured intent dimensions.

Input parameters:

- `medium` (string)
- `prompt` (string, required)

### `score_prompt` (~247 tokens)

Score a prompt for a generation target (0–100) and, if it's weak, return the rewrite brief — in ONE call.

Reads intent with a fast heuristic keyword analyzer, scores the prompt, then:
  • score ≥ 70 (A/B) → returns the scorecard and tells you to proceed.
  • score < 70 (C/D/F) → returns the scorecard PLUS a rewrite brief so you can
    fix it without a second call. Write the enhanced prompt from the brief, then
    call track_enhancement(original, enhanced, generator).

Returns a ScoreCard (overall, grade A–F, per-dimension breakdown, what's missing,
anti-patterns, verdict) plus needs_enhancement, and enhancement_brief when weak.

category (optional): the ad vertical (e.g. "wellness", "beauty") — when set and
conversion priors exist, the brief upgrades to a conversion-justified rewrite.

Supported generators: veo3, higgsfield, midjourney, flux, kling, sora, imagen…

Input parameters:

- `category` (string)
- `generator` (string, required)
- `prompt` (string, required)

### `enhance_prompt` (~169 tokens)

Get a rewrite brief for this prompt + generator. YOU write the enhanced prompt from the brief.

Returns a structured brief with score_before, rewrite_brief, and llm_instructions.

category (optional): the ad vertical (e.g. "wellness", "beauty") if known.
When set and conversion priors exist for it, the brief upgrades from craft
advice to a conversion-justified one, backed by real ad-performance data.

IMPORTANT: After you write the enhanced prompt, you MUST call
track_enhancement(original_prompt, your_enhanced_prompt, generator) immediately.
This is not optional — it records the improvement and is required for the graph to learn.

Input parameters:

- `category` (string)
- `generator` (string, required)
- `prompt` (string, required)

### `track_enhancement` (~103 tokens)

Record an enhancement pair in the Dali graph brain.

Call this AFTER you write an enhanced prompt from score_prompt's brief or enhance_prompt.
This records the before→after improvement so the graph learns which rewrites consistently
push scores up — enriching creative_patterns and community_benchmark over time.

Returns before/after scores so you can confirm the delta.

Input parameters:

- `enhanced_prompt` (string, required)
- `generator` (string, required)
- `original_prompt` (string, required)

### `suggest_generator` (~110 tokens)

Recommend the best generator for your creative concept and per-generation budget.

Analyzes the concept's creative signals (motion, style, subject type, use case)
and matches them to generators within your budget. Returns a ranked list so you
can make an informed choice before scoring the actual prompt.

Input parameters:

- `budget_usd_max` (number): Max USD per generation attempt (default $1.00)
- `concept` (string, required): What you want to make — subject, style, mood, format, use case

### `score_variations` (~105 tokens)

Score 2–8 prompt variations for the same generator and rank them best-to-worst.

Use this when you've drafted multiple versions of a prompt and want to pick the winner
without burning generation credits. Returns a ranked list with per-dimension comparison
so you can see exactly why one variant beats another.

Input parameters:

- `generator` (string, required): Target generator for all variants
- `prompts` (array, required): List of 2–8 prompt variants (same creative intent, different wording)

### `creative_patterns` (~70 tokens)

Community graph: which patterns consistently produce high-grade prompts for this generator?

Powered by the V3 graph brain (Supabase PostgreSQL). Every scored prompt contributes.
Returns top patterns by type, enhancement unlocks, and cross-model universal patterns.

Input parameters:

- `generator` (string, required)
- `grade` (string)

### `community_benchmark` (~52 tokens)

Compare your prompt against community top scorers for this generator.

Returns your score, missing A-grade patterns, and highest-ROI patterns to add.

Input parameters:

- `generator` (string, required)
- `prompt` (string, required)

### `my_story` (~27 tokens)

Your Dali creative report — scoring history, generator stats, recent scorers, creative DNA.

### `prompt_neighbors` (~142 tokens)

Find community A/B-grade prompts structurally similar to yours.

Uses graph traversal (Memgraph) to locate prompts that share the most
creative patterns with your input and scored A or B on the same generator.
Returns what those prompts did right — so you can adopt the same moves.

Use this when:
\- Your prompt scored C or below and you want inspiration
\- You want to see how the community solved the same creative problem
\- You need concrete A-grade examples, not abstract advice

Input parameters:

- `generator` (string, required): The generation model (veo3, midjourney, flux, etc.)
- `prompt` (string, required): The prompt to find neighbors for.

### `enhancement_path` (~160 tokens)

Show the most reliable path from a bad grade to an A on this generator.

Mines the Dali graph for all F/D → A/B enhancement pairs and surfaces
the patterns that appear most consistently in the 'after' side.
These are the highest-ROI moves for this specific generator.

Use this when:
\- A prompt just scored D or F and you're not sure what to fix
\- You want to know which improvements matter most for a specific generator
\- You want to understand generator-specific enhancement strategy

Input parameters:

- `generator` (string, required): The generation model (veo3, seedance, kling, etc.)
- `starting_grade` (string): The grade you're starting from — 'F', 'D', or 'C' (default 'F')

### `dali_version` (~42 tokens)

Current Dali MCP version and changelog.

Check this whenever you want to know what tools are available,
what changed in the latest release, or which version is running.

### `list_generators` (~25 tokens)

List all supported generation targets (providers + models) with medium and core strength.

### `score_creative` (~351 tokens)

Score an actual ad IMAGE (not the text prompt) for conversion — before you spend.

Conversion lives in the pixels, so this scores the real creative and gives you
ONE answer combining two views, in a single call:
  • HEADLINE score = how much it visually resembles PROVEN WINNERS (Vertex
    embedding vs the live winner corpus). The sharpest predictor — it reads the
    whole look and self-solves archetype (a premium ad resembles premium winners,
    not scammy direct-response ones).
  • WHAT TO CHANGE = the specific winning attributes it's missing (Gemini vision
    vs category priors) — the actionable detail.
  • DEFECT GATE = generation defects (extra fingers, garbled text, warped anatomy).

Use it on a generated image, a mockup, or any ad you're about to run.

Returns:
  score              — 0-100 headline: visual similarity to proven winners
  verdict            — one-line looks-like-a-winner / partial / rework call
  looks_like         — the real proven winners it resembles (advertiser, category, days-run)
  what_to_change     — high-lift winning attributes it lacks, each with a fix sentence
  you_already_have   — winning attributes it already has
  has_defect/defects — generation defects to fix before shipping
  detail             — raw numbers {embedding_score, attribute_score} for transparency

category examples: beauty, supplements, wellness, fitness, food, apparel, tech, pets.
Leave category empty for a cross-vertical look-alike match + defect QA.

Input parameters:

- `category` (string)
- `image_url` (string, required)

### `score_creative_from_view` (~449 tokens)

Score an ad creative YOU are looking at (e.g. a pasted/attached image) against
the winning corpus — no URL needed. Use this when the user shares an image in the
conversation: read the creative yourself and fill in what you see, and Dali scores
it against what wins in the category (3,800+ proven winners), returning the
conversion verdict and exactly which winning attributes it's missing.

You (the model) provide the visual read; Dali provides the winning-data scoring.
(For a fetchable image URL, prefer score_creative — it adds the embedding
similarity headline, which needs the real pixels.)

Fill these from looking at the image:
  category         — vertical: beauty, wellness, supplements, fitness, food, apparel, tech, pets
  lighting         — warm lighting | natural light | studio light | dramatic lighting | clinical bright | dark moody | neon
  subject          — single person | group | product only | no person | before after
  subject_age      — young adult | middle age | senior | child | none
  format           — ugc selfie | testimonial | product hero | lifestyle | chart infographic | text meme | comparison
  text_density     — none | light | heavy
  dominant_emotion — calm | excited | trust | fear | aspiration | neutral
  eye_contact      — true if a person looks at camera
  offer_visible    — true if a price/discount/offer is shown
  defects          — list any generation defects (extra fingers, garbled text, warped anatomy); [] if clean

Returns: conversion_score (0-100), verdict, matched (winning attributes it has),
missing (high-lift attributes to add, each with a fix sentence), has_defect/defects.

Input parameters:

- `category` (string, required)
- `defects`
- `dominant_emotion` (string)
- `eye_contact` (boolean)
- `format` (string)
- `lighting` (string)
- `offer_visible` (boolean)
- `subject` (string)
- `subject_age` (string)
- `text_density` (string)

### `analyze_winning_formula` (~235 tokens)

Find YOUR winning ad formula from your own numbers — paste your ads export.

The category prior is a cold-start fallback; the real signal is what wins in
YOUR account. Paste an ads CSV (a creative image-URL column + a performance
column — CPA / CTR / ROAS / purchases) and Dali runs vision on your winners vs
losers and returns the attributes that separate them, plus how your account
compares to the industry median.

If an email is supplied, the formula is saved and emailed with a ready-to-paste
Claude prompt wired to Dali — so scoring the next creative is one step.

Returns:
  formula   — attributes over-represented in your winners (value, winner%/loser%, lift)
  benchmark — your median vs the vertical's industry median (when category given)
  analyzed  — how many winners/losers were read, and the metric direction
  saved     — whether the lead+formula were captured (only when email supplied)

Input parameters:

- `category` (string)
- `csv` (string, required)
- `email` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/lulu-the-narwhal-dali/dali#diagnostics

## Score history

- 2026-08-03: 54
- 2026-08-02: 54
- 2026-08-01: 53
- 2026-07-31: 53
- 2026-07-30: 49
- 2026-07-29: 49
- 2026-07-28: 48
- 2026-07-27: 47
- 2026-07-26: 47

## Links

- Remote endpoint: https://dali.getlulu.dev/mcp
- Repository: https://github.com/Lulu-The-Narwhal/dali-mcp
- Changelog RSS feed: https://verifymcp.io/servers/lulu-the-narwhal-dali/dali/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/lulu-the-narwhal-dali/dali/changelog.json
- HTML version of this page: https://verifymcp.io/servers/lulu-the-narwhal-dali/dali
