Raven
UnexploredDesign intelligence for coding agents: audits, design systems, and a taste profile agents consult.
Install
Terminal
$npx -y raven-mcpmcp_config.json
{
"mcpServers": {
"ai-ravenmcp-raven-mcp": {
"args": [
"-y",
"raven-mcp"
],
"command": "npx"
}
}
}Documentation
Raven MCP
Odin's ravens brought back knowledge of the world — Raven brings back design intelligence.
Raven is an MCP server for coding agents. Click any element in the app you have running locally and say what should change — Raven sends the agent the selector, the computed styles, and your design tokens — then audits the result for contrast, tap targets, and typography.
Raven MCP is a personal open-source project by Andrew Cunliffe. It is not endorsed by, affiliated with, or supported by Intuit Inc. or any other company referenced in its source data. See NOTICE for full attribution of upstream sources and their licenses.
What it does
Raven gives Claude access to a comprehensive design knowledge base:
- Principles — Nielsen's 10 Heuristics, all 21 Laws of UX, Gestalt principles, WCAG accessibility, typography rules, color theory, mobile UX, D4D framework, UX writing, service design, brand, color-systems (palette-size discipline), and spacing-systems (base-unit grid + scale limits)
- Patterns — Proven UI patterns for signup flows, pricing pages, navigation, dropdown/select menus, forms, landing pages, dashboards, modals, empty/error/loading states, CTAs, social proof, mobile conversion — plus content patterns (error messages, empty-state copy, notifications, form validation) and service patterns (service blueprinting, human handoff, signup-as-service, omnichannel continuity, moments of truth)
- Content systems — Voice & tone guides: Conversational Product Voice, GOV.UK, Shopify Polaris, and Atlassian
- Research — Qualitative, quantitative, and usability methods with do/don't protocols and checklists. Metrics frameworks: HEART, AARRR/Pirate, North Star Metric, conversion funnel, RICE, OKRs.
- Service design — Service blueprinting (with HTML blueprint generation — current vs. ideal state), human-handoff patterns, signup-as-service, omnichannel continuity, moments of truth / recovery, and the GOV.UK Service Standard
- Brand & visual — Logo usage (clear space, min sizes, variants, placement, restraint), gradient usage (hierarchy, palette, contrast, trend vs signature), imagery (consistency, representation, purpose), visual hierarchy, brand-as-system, and current (2026) visual-design trends
- Business — Monetization models, retention strategies, onboarding optimization, growth mechanics, and product metrics frameworks
- Tokens — Design system tokens for Stripe, Linear, and more
- Creative studio — Local-first brand profiles, asset references, character reference profiles, provider-agnostic image/video/3D/audio generation jobs, campaign plans, and transparent creative scoring. Raven does not ship media-provider credentials; set
RAVEN_CREATIVE_RUNNERto route jobs to your own renderer.
Install
Local stdio (npx / from source) is the full product: 111 tools, including Grab, the pattern library, and the file-backed Taste Engine. Hosted endpoints are smaller subsets — pick one path and stick to it.
| Path | How | Tools | Taste | Grab |
|---|---|---|---|---|
| Local stdio | npx -y raven-mcp (Claude Code, Cursor mcp.json, Codex, Desktop mcpb) | 111 | Yes | Yes |
| Public remote | https://mcp.ravenmcp.ai/api/mcp | ~45 | No | No |
| Auth remote | https://mcp.ravenmcp.ai/api/mcp-user (OAuth) | Taste + audits (no Grab) | Yes | No |
Claude Code — one command
claude mcp add raven -- npx -y raven-mcp
Prefer one Raven entry. If both a local raven and a claude.ai / remote Raven are connected, the agent sees two overlapping toolsets — disable or rename one (e.g. raven-local vs raven-cloud) so it is obvious which product you are talking to.
Manual config (Claude Desktop or team .mcp.json)
{
"mcpServers": {
"raven": {
"command": "npx",
"args": ["-y", "raven-mcp"]
}
}
}
Cursor
Same mcp.json snippet as above (~/.cursor/mcp.json or project .cursor/mcp.json) runs the full local server (Grab + Taste). Hosted options:
- Public:
"url": "https://mcp.ravenmcp.ai/api/mcp"— ~45 stateless tools; no Grab, no Taste. - Authenticated Taste:
"url": "https://mcp.ravenmcp.ai/api/mcp-user"— OAuth; Taste yes, Grab still local-only.
Codex
Add under mcp_servers in config.toml:
[mcp_servers.raven]
command = "npx"
args = ["-y", "raven-mcp"]
Codex may prompt to approve many Raven tools on first use — that is client approval policy, not a smaller Raven.
Claude Desktop — one-click extension
Prefer not to edit JSON? Download raven.mcpb and double-click it. Claude Desktop installs Raven automatically — no Node, no terminal. Package version tracks npm.
From source
git clone https://github.com/rhinocap/raven-mcp.git
cd raven-mcp && npm install && npm run build
Tools
| Tool | Description |
|---|---|
get_principles | Get design principles relevant to a UI context |
get_pattern | Get proven patterns for a specific UI type |
get_business_strategy | Get business/monetization strategies |
evaluate_design | Evaluate a design description against principles. Pass base64 PNG screenshots (before_screenshot/after_screenshot) for a structured before/after pixel diff with fix_confirmed, changed_ratio, and changed region. Pass compact: true to return only scores and violations (drops full principle/pattern bodies) when the full payload is too large. |
search_knowledge | Search across all principles, patterns, and strategies |
get_checklist | Get a pre-publish checklist for a UI type |
get_d4d_framework | Get Design for Delight framework templates |
list_design_systems | Browse available design systems |
get_design_system | Get tokens for a specific design system |
compose_system | Mix tokens from different systems |
get_brand_system | Get a full system styled like a well-known brand |
audit_page | Audit HTML/CSS against Raven's quality standards — pass html for static audit, or url to render headless with optional scroll_settle (step through reveal gates, then return to top) and viewport parameters; containerMaxWidth makes container checks token-aware. Also flags inline SVG icons that hardcode a color instead of using currentColor/a token. Pass compact: true to return only scores, violations, and fix_priority (drops embedded base64 screenshots) when the full payload is too large. |
score_page | Return a per-category (0–10) design score for a page — typography, accessibility, spacing, color, responsive layout, design tokens, structure — derived from the same checks as audit_page, plus the overall score/grade, the weakest category, and categories Raven does not mechanically assess (brand, conversion, motion). URL mode also counts determinate contrast failures while keeping indeterminate rows out of numeric scoring. Pass html and/or url (url capture is local/stdio only; remote rejects url) |
audit_layout | Evaluate visual rhythm, alignment, and optical balance; detects orphan-stretch (a lonely last-row grid/flex card stretching far wider than siblings) |
audit_responsive_visibility | Render a URL at multiple breakpoints and flag content elements that are visible on desktop but hidden on mobile (display:none/opacity:0/zero-size) — categorises each as likely-oversight (content vanishing on mobile) vs intentional (decorative) |
audit_contrast | Compute WCAG contrast for rendered text with tri-state status (pass, fail, indeterminate), effective backdrops, ratio ranges, and delta-to-pass only where the backdrop is determinate |
suggest_contrast_fix | Given failing WCAG color pairs, return the minimal fg/bg change that clears the AA/AAA target — concrete passing values to fix audit_contrast failures |
audit_url | Render a live URL at each viewport×theme, scroll-settle, fire interactions, capture real pixels + DOM, then run the page/contrast/responsive/blank-media checks plus sliced-image edge-symmetry and hover-state white-wash detection over the captures — every finding tagged confirmed/likely-artifact/inconclusive, ranked by severity. Pass compact: true to return only findings and summary (drops per-capture base64 screenshots) when the full payload is too large. |
audit_content | Per-item content verdicts (pass/warn/fail) for headings, prose, CTAs, labels, captions, metrics & outcomes against UX-writing principles + deterministic heuristics (metric needs number+unit; CTA action-led ≤4 words; prose flags passive/jargon/hedging; caption-vs-heading duplication) — with a before→after rewrite suggestion per item. Pure offline |
audit_typography | Typographic-scale report over rendered DOM text nodes (or a supplied snapshot) — detects the dominant modular-scale ratio and flags off-scale sizes, checks line-height consistency vs the body rhythm, and flags weight ladders >4 weights or non-standard values. Goes beyond audit_page's pass/fail typography checks |
audit_tap_targets | WCAG 2.5.5 / Apple 44pt web tap-target audit — enumerates every interactive element (rendered URL or snapshot) and emits a per-element fix table: selector, role, text, measured w/h, per-axis pixel deficit, and a concrete CSS fix, sorted worst-first |
audit_device_frame | Flag cropped content in device-mockup frames — frames (container box + intrinsic media + object-fit, or a DevTools snippet) detects object-fit:cover crop loss when frame AR ≠ media AR; clips (first/last frame PNGs) detects baked-in pan/zoom (Ken Burns); edge_frames (PNGs) flags content truncated at a frame edge |
audit_video_playback | Render a page and observe whether each <video> actually advances — samples currentTime, readyState, error codes, and autoplay-block state, then classifies each clip into playing |
audit_consistency | Corpus/multi-page audit — compares ≥2 pages and flags cross-page divergence in content-container width and hero heading tier, inferring the canonical (modal) value from the corpus when no token is supplied — catching relational defects that single-page audits miss |
audit_swiftui | Audit SwiftUI source against Apple HIG — Dynamic Type, semantic colors, 44pt targets, 4/8pt spacing, AccentColor |
audit_ios_screen | Score a rendered iOS screen from an accessibility/view-hierarchy snapshot — 44pt targets + contrast + rhythm, in points |
audit_ios_privacy | Audit Info.plist (or Expo app.json) /PRIVACY.md/entitlements/source — usage-string honesty, ATS, Android permissions, bundled secrets, undisclosed default data-egress |
audit_rn | Audit React Native / Expo source — touchable a11y labels, 44/48pt+hitSlop targets, font scaling, SafeAreaView, dark mode, against iOS HIG + Android Material |
generate_design_system | Generate a custom design system from a brand color |
list_content_systems | Browse brand voice & tone systems (Conversational Product Voice, GOV.UK, Shopify Polaris, Atlassian) |
get_content_system | Get a brand's voice attributes, tone shifts, vocabulary, grammar, and content patterns |
get_content_principles | Get UX-writing principles — clarity, active voice, error anatomy, inclusive language |
get_content_pattern | Get copy recipes for error messages, empty-state copy, notifications, form validation |
get_research_method | Get qualitative, quantitative, or usability research methods with protocols and checklists |
get_metrics_framework | Get a product-metrics framework — HEART, AARRR, North Star, conversion funnel, RICE, OKRs |
get_service_pattern | Get a service design pattern — blueprinting, human handoff, signup-as-service, omnichannel, moments of truth |
get_service_standard | Get the GOV.UK Service Standard — 14 points for evaluating service quality |
generate_service_blueprint | Render a service blueprint as HTML — current state, or current vs. ideal side-by-side |
get_brand_principles | Get brand/visual principles — logo, gradient, imagery, hierarchy, brand-as-system |
get_brand_trends | Get current (2026) brand and visual-design trends with usage guidance |
list_creative_models | Browse provider-agnostic creative model slots for image, video, 3D, audio, character consistency, and analysis |
list_creative_presets | Browse creative presets: product photoshoot, marketplace cards, UGC ads, TV spots, social packs, storyboards, infographics |
create_brand_profile | Create or update a local brand profile for brand-aware creative jobs |
get_brand_profile | Read a local creative brand profile |
list_brand_profiles | List local creative brand profiles |
register_creative_asset | Register a local path or URL as a creative asset reference — no file bytes are uploaded by Raven |
create_character_profile | Create a local character/identity reference profile from registered assets |
create_generation_job | Create a provider-agnostic image, video, audio, 3D, campaign, or analysis job payload; optionally execute via RAVEN_CREATIVE_RUNNER |
get_generation_job | Read a creative generation job and its provider payload/output state |
list_generation_jobs | List local creative generation jobs |
plan_creative_campaign | Plan a multi-asset campaign and optionally create draft generation jobs |
score_creative | Score a prompt/script/concept for hook, benefit clarity, product signal, CTA, channel fit, audience fit, and brand fit |
create_taste_profile | Create a named taste profile — a portable design-judgment ruleset (rule_id, clause, category, severity, negative prompt, owner) + precedent corpus, from explicit rules and/or a DESIGN.md-style markdown doc — persisted locally under ~/.raven/taste/ (RAVEN_TASTE_HOME override) |
get_taste_profile | Load a stored taste profile's full rule catalog, precedent corpus, and surface bindings |
list_taste_profiles | List locally stored taste profiles with rule/corpus counts |
label_finding | Append a human accept/revise/reject precedent to a profile's corpus — the growth loop; append-only, and accept-verdicts suppress that pattern in future audits |
get_taste_interview | Calibration interview, two modes. kickoff (default, for a NEW project): a deterministic interview built from the profile's voice rules and eleven design dimensions (typography, spacing, color, layout, motion, imagery, entrance/hero animation, loading states, navigation pattern, aesthetic family, specialty libraries — with Next.js suggested as the default build target for sites) — most questions carry plain-language multiple-choice options, the voice question renders the same message in three registers so you pick by ear, a references question invites example URLs/screenshots to be interviewed about, and an open-ended closer captures signature touches (suggesting the ones you chose on other surfaces once it knows them). Every question is skippable (only identity is required). refine (for an ALREADY-bound project you're unhappy with): re-interviews against the stored binding — what fell short, keep/tighten/replace each stored note, voice, optional reject precedent. Answers persist via bind_taste_surface |
bind_taste_surface | Persist a project's surface calibration — surface string, URL hosts, per-rule severity overrides (incl. off), voice note, references — auto-applied by audit_taste via project or a bound url host. Upserts by project; on a re-bind, omitted fields carry forward from the stored binding (reported as carried_forward), while explicit empty values clear them |
record_taste_decision | The learning loop — record a taste/direction/design decision the moment it's made during real work (what was chosen, what was rejected, why, and whether the user directed, approved, or corrected it). Recorded decisions evolve future kickoff interviews: recurring choices return as suggested defaults on their dimension's question, and decision categories no standard question covers become new interview questions |
list_taste_decisions | The decision ledger, filterable by project or dimension |
audit_taste | Judge HTML, copy text, or a live URL against a taste profile — deterministic detectors for gradients, glow/neon, second accent hue, and banned words; pass source_text to verify a content port's visible text verbatim with a deterministic word diff; owner: raven rules route through Raven's existing page/contrast/tap-target engines; every finding cites a rule_id + concrete evidence (undetectable clauses are reported as not_assessed, never guessed); scope-tagged rules activate per surface (skipped elsewhere, warn-only when surface is omitted); pass project to apply a saved surface binding automatically; document_kind:'portrait' skips note-fidelity for documents about a surface (rules still run); data-taste-quote regions are exempt from detectors so a page is never convicted for quoting the law; verdict BLOCK / WARN / PASS |
generate_taste_portrait | Render a bound taste surface as a self-contained designed HTML page (its rules, notes, voice, decisions, and wrong→right corpus) that obeys the surface it describes — art direction routes by the surface's own color permissions; sparse surfaces degrade gracefully. Omit project to render every binding plus a gallery. Every portrait passes audit_taste (document_kind:'portrait') against its own surface |
raven_reflect | Summarize your local Raven usage log to find patterns + gaps |
Decision Graph
The local Decision Graph keeps three node kinds: decisions, evidence, and sources. Five edge types connect them: supersedes, scoped_alongside, supports, contradicts, and derived_from. Decision status is candidate, active, superseded, or contested; nodes are not hard-deleted.
decision_add— add an active decision with its scope, component, rationale, and rejected alternatives.decision_evidence— attach quantitative or qualitative evidence to a decision.decision_get— return one node, its connected neighbors, and attached evidence.decision_list— list active, superseded, contested, or candidate decisions. Candidates are excluded unlessinclude_candidates:trueorstatus:"candidate"is passed.decision_draft— capture a decision before its rationale is confirmed.decision_commit— confirm a rationale and surface similar active decisions for review.decision_supersede— replace a decision while keeping both nodes and their lineage.decision_scope— narrow two active decisions so they can coexist.decision_history— return a supersession lineage from oldest to newest.ingest_transcript— store a Source node and return the extraction prompt for the calling model.decision_import— read local git history and matching decision documents, then return source-bound extraction prompts.ingest_transcript_results— turn extracted JSON into candidate decisions linked withderived_fromedges.gap_scan— rank uncovered components, missing or thin rationales, contested decisions, and derived staleness;digest_only:trueis quiet when no action is needed.
For a cold start: call decision_import → run the returned extraction prompts with a model → pass each result to ingest_transcript_results → review the candidates → call decision_commit for each decision to keep. Candidates remain available through decision_get, but default decision_list and gap_scan ignore them until commit changes their status to active.
Figma comment archives (Markdown files under figma-comments-archive/ whose first line is # Figma comments archive: <label>, with `##
Sourced from the repository README.
More in Design & UX
- Stitch MCP ServerGenerates high-fidelity UI designs, screen variants, and design systems from text descriptions directly into production apps.3,400
- Design ExtractExtract any website's complete design system with one command. DTCG tokens, semantic+primitive+composite, MCP server for Claude Code/Cursor/Windsurf, multi-platform emitters (iOS SwiftUI, Android Compose, Flutter, WordPress), Tailwind v4, Figma variables, shadcn/ui, CSS health audit, WCAG remediation, Chrome extension. MIT, Playwright, Node 20+.3,367
- Impeccable UIMaster frontend design skill for crafting extraordinary, high-performance UI components, layout systems, design tokens, micro-animations, and visual polish.3,200
- Figma MCP ServerThe Figma MCP server brings Figma design context directly into your AI workflow.1,919
- Design IntentCaptures and translates product specifications into clean, implementable visual design tokens, component architecture, and design system contracts.1,840
- docs-mcpRemote MCP server for Tandem docs, install guides, SDKs, workflows, and agent setup help.117