Raven
NPM · RAVEN-MCP · 2 COMPONENTS · SCANNED SEP 20
Design intelligence for coding agents: audits, design systems, and a taste profile agents consult.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security92
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs a script at install time (postinstall) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does. View diagnostics → Partial
- 33 of 101 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to rhinocap/raven-mcp). View diagnostics → Pass
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 28 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability79
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 21872 tokens (~197/item across 111 items; 111 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
- Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 93% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 112 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Raven MCP server?
Raven runs locally as an npm package, launched with npx -y raven-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · raven-mcp
claude mcp add ai-ravenmcp-raven-mcp -- npx -y raven-mcp
{
"mcpServers": {
"ai-ravenmcp-raven-mcp": {
"command": "npx",
"args": [
"-y",
"raven-mcp"
]
}
}
} {
"servers": {
"ai-ravenmcp-raven-mcp": {
"command": "npx",
"args": [
"-y",
"raven-mcp"
]
}
}
} codex mcp add ai-ravenmcp-raven-mcp -- npx -y raven-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ai-ravenmcp-raven-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"raven-mcp"
],
"enabled": true
}
}
} openclaw mcp add ai-ravenmcp-raven-mcp --command npx --arg -y --arg raven-mcp
mcp_servers:
ai-ravenmcp-raven-mcp:
command: "npx"
args: ["-y", "raven-mcp"] {
"McpServers": {
"ai-ravenmcp-raven-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"raven-mcp"
]
}
}
} assistant mcp add ai-ravenmcp-raven-mcp -t stdio -c npx -a -y raven-mcp
{
"mcpServers": {
"ai-ravenmcp-raven-mcp": {
"command": "npx",
"args": [
"-y",
"raven-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 −2
- Stability: pass → 0.87 functional
- 17 Sept 26 +1
- Stability: 0.97 → pass security
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Sept 26 −2
- Stability: pass → 0.87 functional
- 12 Sept 26 +1
- Stability: 0.97 → pass security
- 10 Sept 26 −1
- Stability: pass → 0.93 functional
- 9 Sept 26 +1
- Stability: 0.97 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/raven-mcp@2.5.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | rhinocap/raven-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/rhinocap/raven-mcp/.github/workflows/release.yml@refs/heads/main |
| Rekor log index | 2568597359 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:72c9fd2348d2fd4e0f65539232d351e4beb5a169db60c2dedd3096f3b087a71f8a69198921abf0211427980bfb9952a5e143ccba98a0c375361d098a7 |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| postinstall | unreviewed | node scripts/postinstall.cjs || true |
Background: Why install scripts are a supply-chain risk →
Dependencies 101 packages
| Packages resolved | 101 |
|---|---|
| Stale | 33 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
audit ~245
Run **all applicable** Raven audits for a target. Detects the surface (web page / iOS screen / React Native / code diff / video) and fans out to the right checks — contrast, tap targets, typography, layout, responsive, and taste for web; the iOS or RN set for native; parity/contract for diffs. **Use this instead of choosing individual audit_* tools.** Pass `project` to judge against bound taste.
| Name | Type | Req | Description |
|---|---|---|---|
| diff | string | – | Unified diff or patch. |
| html | string | – | Static web HTML. |
| intent | string | – | Optional focus such as accessibility, contrast, content, copy, or pre-ship. |
| nodes | – | – | Pre-collected snapshot data for the applicable audits. |
| profile | string | – | Taste profile id for audit_taste. |
| project | string | – | Project identifier for taste binding and project-aware audits. |
| screenshot | string | – | Screenshot input for native/device audits. |
| source | string | – | iOS/SwiftUI or React Native source. |
| surface | string | – | Surface override; otherwise detected from the supplied target. |
| url | string | – | Web page or video URL. |
No output schema declared.
No examples provided.
audit_api_contract ~79
Run adversarial queries against a live endpoint and return per-query verdict (shape-valid / shape-invalid / confident-wrong / uncertain) vs an expected shape schema + per-query expectations. Catches responses that are shape-valid but wrong.
| Name | Type | Req | Description |
|---|---|---|---|
| endpoint_url | string | yes | – |
| expected_shape_schema | object | yes | – |
| queries | array | yes | – |
No output schema declared.
No examples provided.
audit_asset_integrity ~114
Detect PNG exports whose content is sliced/cut off at the bottom edge (e.g. a Figma export that ended mid-form). Dimension/ratio checks cannot catch cut content inside a correctly-sized file; this measures per-pixel luminance variance in the bottom strip — uniform background = clean, high-variance UI content running into the edge = likely-sliced. Accepts filesystem paths to PNGs.
| Name | Type | Req | Description |
|---|---|---|---|
| image_paths | array | yes | Filesystem paths to PNG files to check for sliced/cut-off bottom content. |
No output schema declared.
No examples provided.
audit_consistency ~261
Audit multiple pages for cross-page consistency of content-container width and hero heading tier. Pass ≥2 pages ({name, html}) collected from different routes on the same site. Infers the canonical (modal) value from the corpus when no token is supplied, so you need not know the project's design token in advance. Flags the issue #9 single-blob blind spot: pages that each pass audit_page but silently disagree with each other on container width or hero size class. Returns per-page extraction (container_px, container_classes, hero_classes, signatures), consistency dimensions with reference values, outlier page names, issues[], score (100/50/0 → A/C/D), and a plain-text summary. Pure offline — no browser, no network.
| Name | Type | Req | Description |
|---|---|---|---|
| container_token | number | – | Project's canonical container width in px (e.g. 1152). When supplied, container divergence is measured against this token rather than the corpus modal. |
| hero_token | string | – | Canonical hero heading class signature (e.g. "text-display-xl" or "64"). When supplied, hero divergence is measured against this token rather than the corpus modal. |
| pages | array | yes | At least 2 pages to compare. Each entry is {name, html}. |
No output schema declared.
No examples provided.
audit_content ~220
Evaluate an array of content items (headings, prose, CTAs, labels, captions, metrics, outcomes) against UX-writing principles and deterministic heuristics. Returns a per-item verdict (pass/warn/fail) with matched principle ids, concrete issues grounded in principle text, a before→after rewrite suggestion, and an aggregate summary. Heuristics: metric items must carry a number+unit; cta/label must be action-led and ≤4 words; prose flags passive voice, jargon, and hedging; headings flag filler openers and buzzwords; captions flag duplication of any heading in the batch. Pure offline — no network or browser. Use this instead of evaluate_design when you need per-item content verdicts rather than the principle library.
| Name | Type | Req | Description |
|---|---|---|---|
| goals | array | – | Optional content goals (e.g. ['clarity','conversion']); recorded for traceability. |
| items | array | yes | Array of content items to audit. |
| system | string | – | Optional content-system id (e.g. 'ux-writing'); recorded for traceability. |
No output schema declared.
No examples provided.
audit_contract ~86
Verify a wire contract (token list / field set / schemaVersion) is identical across N independent source files (iOS Swift, proxy JS, Android Kotlin). Flags missing/inconsistent tokens, schemaVersion drift, and prefix-ordering bugs (a contained token matched before the longer one). BLOCK/PASS verdict.
| Name | Type | Req | Description |
|---|---|---|---|
| contract_spec | object | yes | – |
| file_paths | array | yes | – |
No output schema declared.
No examples provided.
audit_contrast ~191
Compute WCAG contrast ratios for every text element on a rendered page (pass url) or from a supplied dom_snapshot. Reports AA (4.5:1 normal, 3:1 large) and AAA pass/fail and surfaces failing pairs with selector, ratio, and delta-to-pass — replacing manual eyedropper + ratio math. dom_snapshot mode returns a row per supplied element; url mode returns counts plus every row that needs action (aa_failures, indeterminate_bg_rows) and OMITS the per-element rows for passing elements, because a real page produces hundreds of thousands of characters of them.
| Name | Type | Req | Description |
|---|---|---|---|
| dom_snapshot | array | – | Pre-collected text elements to score without rendering |
| screenshot | string | – | Optional base64 PNG for caller reference; ratios are computed from the DOM, not pixels |
| url | string | – | URL to render and measure (http/https or file://) |
No output schema declared.
No examples provided.
audit_device_frame ~279
Detect cropped content in device-mockup frames (phone/MacBook screenshots, app-preview clips). Three checks: (1) GEOMETRY — call with `frames` (container box + intrinsic media size + object-fit/position; call with NO args for a DevTools snippet) to flag object-fit:cover crop loss when the frame's aspect ratio ≠ the media's; (2) MOTION — pass `clips` (first/last frame PNG paths) to detect baked-in pan/zoom (Ken Burns) that drifts the composition; (3) EDGE — pass `edge_frames` (PNG paths) to flag content truncated at a frame edge. Catches the exact failure where a 16:9 clip in a 1.82-AR screen cutout silently slices the bottom, or a Ken-Burns-zoomed source crops content.
| Name | Type | Req | Description |
|---|---|---|---|
| clips | array | – | Per-clip first/last frame PNG file paths — detects baked-in pan/zoom (Ken Burns). |
| edge_frames | array | – | Frame PNG file paths to check for content truncated at a frame edge (reuses edge-symmetry). |
| frames | array | – | Device-frame geometry samples (from the DevTools snippet): container box + intrinsic media size + computed object-fit/position. Flags object-fit:cover crop loss. |
No output schema declared.
No examples provided.
audit_ios_a11y ~117
Score an accessibility-enriched iOS element snapshot — missing accessibilityLabel/value/traits, sub-44pt tap targets, per-text WCAG contrast, Dynamic Type clipping, and VoiceOver reading order. Provide {elements:[{label,value,hint,traits,role,rect,fontPt,fgColor,bgColor,dynamicTypeClipped}],viewport}. Capture via the AccessibilitySnapshot XCUITest / ios-capture harness.
| Name | Type | Req | Description |
|---|---|---|---|
| elements | array | yes | – |
| options | object | – | – |
| viewport | object | yes | – |
No output schema declared.
No examples provided.
audit_ios_privacy ~299
Audit an iOS or React Native/Expo app's privacy posture for App Review and user trust. Reads a native Info.plist XML OR an Expo app.json (managed Expo apps have no Info.plist) — plus optional PRIVACY.md, entitlements, and source. Flags: NS*UsageDescription strings that are vague/missing or contradict the code (e.g. a HealthKit write claim the code never fulfills), entitlements/permissions and Android permissions the app doesn't use, ATS cleartext exceptions and non-HTTPS endpoints, secrets/keys shipped in the bundle or app.json, and default data-egress paths not disclosed at the point of choice (a pre-selected 'Recommended' option that silently sends personal data to a server). Same return shape as audit_page.
| Name | Type | Req | Description |
|---|---|---|---|
| app_json | string | – | Expo app.json / app.config JSON (managed RN). Its expo.ios.infoPlist, expo.android.permissions, plugins, and extra are audited. |
| entitlements | string | – | Optional .entitlements XML |
| info_plist | string | – | Raw Info.plist XML (native iOS / bare RN). Provide this OR app_json. |
| privacy_md | string | – | Optional PRIVACY.md / privacy policy text to cross-reference against declared permissions and default behavior |
| source | string | – | Optional concatenated source (Swift or JS/TS) — enables code-vs-declaration contradiction checks and default-egress detection |
No output schema declared.
No examples provided.
audit_ios_screen ~308
Audit a rendered iOS screen from a view-hierarchy/accessibility snapshot (and optional screenshot). Alias of audit_screen with platform:"ios". Call with no arguments for the expected snapshot shape. Call with {elements:[{label,rect:{x,y,w,h},role,fontPt,fgColor,bgColor}],viewport:{w,h}} to score 44×44pt touch targets, contrast (with iOS secondaryLabel/tertiaryLabel treated as platform-standard — warn not fail), and visual rhythm (alignment, gap consistency, optical balance) in points. Same return shape as audit_page.
| Name | Type | Req | Description |
|---|---|---|---|
| elements | array | – | Elements captured from the rendered screen via an accessibility/view-hierarchy snapshot |
| profile | string | – | Taste profile owning the binding. Omit to search all stored profiles for one bound to the project. |
| project | string | – | Project identifier — resolves a saved taste surface binding (see bind_taste_surface). When the binding carries design_notes and a screenshot is passed, the screenshot's pixels verify the color-scheme… |
| screenshot | string | – | Optional base64 PNG of the screen, for the caller's reference. Geometry is scored from the snapshot, not decoded pixels. |
| viewport | object | – | Screen size in pt (iOS) or dp (Android) at capture time, e.g. {w:393,h:852} iPhone 15, {w:412,h:915} Pixel |
No output schema declared.
No examples provided.
audit_layout ~115
Evaluate visual rhythm from a rendered page's geometry. Call with no arguments to get a DevTools snippet to paste into your page — it prints {elements, viewport} JSON. Call again with that JSON to get alignment, gap-rhythm, and optical-balance scores. This is the complement to audit_page for things only visible once rendered.
| Name | Type | Req | Description |
|---|---|---|---|
| elements | array | – | Array of element rects captured from the rendered page via the DevTools snippet |
| viewport | object | – | Viewport dimensions {w,h} at capture time |
No output schema declared.
No examples provided.
audit_page ~479
Audit HTML/CSS against Raven's design quality standards. Checks typography (min 13px, weight 400+, modular-scale heading ratios, line-height consistency), accessibility (WCAG touch targets, alt text, contrast), responsive patterns (flexbox over grid, clamp sizing, max-width containers), style guide compliance (CSS custom properties, no bare hex), and visual rhythm (4/8px spacing grid, tight spacing scale, palette size). Pass containerMaxWidth (your design system's canonical container token, in px) to make the max-width check token-aware — it then flags containers that diverge from your system (too narrow OR too wide) instead of a generic 1200px heuristic. Returns pass/fail per check with specific fix instructions.
| Name | Type | Req | Description |
|---|---|---|---|
| adversarial_verify | boolean | – | After generating findings, independently re-check each against the live DOM/network and tag it confirmed / likely-artifact / inconclusive. Surfaces a debunked_count. |
| compact | boolean | – | Return only the decision-grade signal — score, grade, summary, errors, warnings, fix_priority — and drop the embedded base64 screenshot and the passes list (replaced by passes_count). Default false.… |
| containerMaxWidth | number | – | Your design system's canonical content-container width in px (e.g. 1152). When set, the responsive/max-width check flags divergence from this token instead of using the generic 1200px heuristic. |
| html | string | – | The full HTML content of the page to audit |
| interactions | array | – | Before capturing, fire each interaction in order (hover/click/focus the selector, then wait delay_ms). Captures the resulting dynamic state — e.g. an on-hover theme-toggle wash invisible to a static… |
| scroll_settle | boolean | – | Before capturing, step through the page with short pauses so IntersectionObserver/whileInView reveals fire, then return to the top and settle. Also plays preload=none videos. Prevents blank-section f… |
| strict | boolean | – | Strict mode — also flags warnings as failures. Default: false |
| url | string | – | If set, Raven launches headless chromium, renders the page, and audits the RENDERED DOM. |
| viewport | object | – | – |
No output schema declared.
No examples provided.
audit_parity ~111
Compare iOS vs Android element snapshots against a checklist of named spatial relationships (vertical centering, baseline/left alignment, equal gap/size, presence, truncation) and flag per-relation match/mismatch/uncertain — catches cross-platform layout drift like status text centered on one platform but top-aligned on the other. Provide ios+android {elements,viewport} snapshots and a checklist[].
| Name | Type | Req | Description |
|---|---|---|---|
| android | object | yes | – |
| checklist | array | yes | – |
| ios | object | yes | – |
No output schema declared.
No examples provided.
audit_responsive_visibility ~162
Render a URL at multiple breakpoints and flag content elements that are visible on desktop but hidden on mobile (display:none / opacity:0 / visibility:hidden / zero-size). Categorises each flag as 'likely-oversight' (content that vanishes on mobile — the hidden-on-mobile content bug) vs 'intentional' (decorative). Returns a table of selector / hiding-class / mobile-visible / desktop-visible / category. Requires headless chromium.
| Name | Type | Req | Description |
|---|---|---|---|
| breakpoints | array | – | Viewport widths in px. Default [390, 768, 1440, 2160] |
| url | string | yes | URL to render (http/https or file://) |
| viewportHeight | number | – | Render height in px. Default 900 |
No output schema declared.
No examples provided.
audit_rn ~340
Audit React Native / Expo source (JSX/TSX + StyleSheet) against the iOS HIG + Android Material conventions RN must satisfy. Flags touchables missing accessibilityLabel/accessibilityRole, touchables below 44pt without hitSlop, allowFontScaling={false}, fontSize below ~13, screens without SafeAreaView, and (for multi-mode apps) hardcoded colors with no useColorScheme/Appearance dark-mode handling. Rewards SafeAreaView, hitSlop, Platform-aware code, and a theme. RN-native checks only — no web/CSS or SwiftUI rules. Same return shape as audit_page. (RN renders to native widgets, so audit_ios_screen scores the rendered screen.)
| Name | Type | Req | Description |
|---|---|---|---|
| color_scheme | string | – | The app's declared appearance (Expo app.json userInterfaceStyle). 'light' or 'dark' means single-mode by design — the dark-mode adaptation check is then suppressed. Default: automatic. |
| profile | string | – | Taste profile owning the binding. Omit to search all stored profiles for one bound to the project. |
| project | string | – | Project identifier — resolves a saved taste surface binding (see bind_taste_surface). When the binding carries design_notes, each note is verified against the source (Animated/Reanimated, BlurView, h… |
| source | – | yes | React Native source — a single screen/component as a string, or an array of file contents. Concatenated before analysis. |
| strict | boolean | – | Strict mode — also count warnings as failures for grading. Default: false |
No output schema declared.
No examples provided.
audit_screen ~346
Audit a rendered mobile screen (iOS or Android) from a view-hierarchy/accessibility snapshot. Call with no arguments for the expected snapshot shape and how to capture it. Pass platform:"android" to score against the 48dp Material touch minimum and Material muted roles (onSurfaceVariant/outline = warn not fail); default platform:"ios" scores 44pt and treats secondaryLabel/tertiaryLabel as platform-standard. Both score touch targets, contrast, and visual rhythm (alignment, gap consistency, optical balance). Same return shape as audit_page.
| Name | Type | Req | Description |
|---|---|---|---|
| elements | array | – | Elements captured from the rendered screen via an accessibility/view-hierarchy snapshot |
| platform | string | – | Target platform — 'ios' (default, 44pt minimum, iOS semantic colors) or 'android' (48dp minimum, Material semantic roles) |
| profile | string | – | Taste profile owning the binding. Omit to search all stored profiles for one bound to the project. |
| project | string | – | Project identifier — resolves a saved taste surface binding (see bind_taste_surface). When the binding carries design_notes and a screenshot is passed, the screenshot's pixels verify the color-scheme… |
| screenshot | string | – | Optional base64 PNG of the screen, for the caller's reference. Geometry is scored from the snapshot, not decoded pixels. |
| scroll_settle | boolean | – | – |
| viewport | object | – | Screen size in pt (iOS) or dp (Android) at capture time, e.g. {w:393,h:852} iPhone 15, {w:412,h:915} Pixel |
No output schema declared.
No examples provided.
audit_swiftui ~312
Audit SwiftUI source against Apple's Human Interface Guidelines. Flags hardcoded .font(.system(size:)) below ~13pt and tiny semantic fonts (.caption/.caption2), hardcoded Color(red:green:blue:)/hex instead of asset-catalog or semantic system colors, an empty/undefined AccentColor, interactive frames below 44×44pt, and ad-hoc spacing off the 4/8-pt grid. Rewards semantic Dynamic Type fonts, semantic system colors, SF Symbols, and flexible frames. iOS-native checks only — no web/CSS rules. Returns pass/fail per check with fix instructions.
| Name | Type | Req | Description |
|---|---|---|---|
| accent_color_contents | string | – | Optional raw Contents.json of AccentColor.colorset. When provided, the tool verifies AccentColor actually defines color components (flags an empty/undefined accent color as an error). |
| profile | string | – | Taste profile owning the binding. Omit to search all stored profiles for one bound to the project. |
| project | string | – | Project identifier — resolves a saved taste surface binding (see bind_taste_surface). When the binding carries design_notes, each note is verified against the source (animation/material/haptic/font A… |
| source | – | yes | SwiftUI source — a single file/view as a string, or an array of file contents. Concatenated before analysis. |
| strict | boolean | – | Strict mode — also count warnings as failures for grading. Default: false |
No output schema declared.
No examples provided.
audit_tap_targets ~207
WCAG 2.5.5 / Apple 44pt tap-target audit for the web. Collects every interactive element (a, button, [role=button], input[type=submit/button/checkbox/radio], select, summary, label[for], [onclick], [tabindex>=0]) and emits a PER-ELEMENT fix table for any whose rendered width or height is below the minimum (default 44px): selector, role, visible text, measured w/h, pixel deficit per axis, and a concrete CSS fix. Sorted worst-first. Two modes: pass url (renders in headless chromium, measures real getBoundingClientRect) or pass elements[] snapshot (pure, no browser).
| Name | Type | Req | Description |
|---|---|---|---|
| elements | array | – | Pre-collected interactive elements to score without rendering. |
| minSize | number | – | Minimum tap-target size in px on each axis. Default 44. |
| url | string | – | URL to render and measure. Requires headless chromium. |
No output schema declared.
No examples provided.
audit_taste ~901
Judge a target against a taste profile. Pass html (static page/CSS), text (a copy block), or url (rendered headless; also runs delegated WCAG-contrast/tap-target measurements for owner:raven rules). Pass source_text to deterministically verify that the target's visible text remains verbatim through a content port. owner:taste rules run deterministic detectors — gradients, glow/neon (large-blur colored shadows), second accent hue, banned-word lists from the rule's negative prompt; clauses with no deterministic detector are reported honestly under not_assessed instead of guessed. owner:raven rules route through Raven's existing audit engines (page checks, contrast, tap targets) and fold results in under the delegating rule_id. Every finding cites an existing rule_id + concrete evidence — the engine prefers silence over a speculative nit. accept-verdict corpus precedents suppress previously-approved patterns. When the resolved binding carries design_notes, audit_taste VERIFIES each note against the artifact instead of only echoing it: url mode measures the rendered page's traits (scheme/luminance, canvas+WebGL, animations, scroll effects, text density, fonts, heading scale, loader, backdrop-filter), html mode extracts what it can statically, and every note comes back in note_assessments as present/partial/missing/unverifiable with trait-number evidence — design_notes are ACCEPTANCE CRITERIA for a build, not mood words. Missing notes become fidelity_findings (NOTE-<key>, warn — block when a named library like three.js/gsap/lottie/anime.js or a branded loader is wholly absent), the target is compared against the binding's captured references (REF-* deltas on scheme, density, motion, type scale), and sparse-and-empty pages are flagged (TASTE-restraint-earned: sparseness must be earned by craft density, not achieved by deletion). fidelity_findings count toward the verdict. When a note names an expensive technique (three.js/WebGL, GSAP scroll choreography, anime.js stagger…
| Name | Type | Req | Description |
|---|---|---|---|
| document_kind | string | – | 'artifact' (default): the target is a build OF the surface — design_notes bind it as acceptance criteria (note_assessments/fidelity_findings run). 'portrait': the target is a document ABOUT the surfa… |
| html | string | – | Full HTML/CSS of the page to judge. |
| profile | string | yes | Taste profile name (see list_taste_profiles). |
| project | string | – | Project identifier — resolves a saved surface binding (see get_taste_interview / bind_taste_surface) that supplies the surface and per-rule overrides automatically. url-mode audits also resolve bindi… |
| source_text | string | – | Original source copy for a deterministic word-token fidelity diff against the target's visible text. |
| surface | string | – | What surface is being judged (e.g. 'portfolio', 'product-site', 'deck') — activates/skips scope-tagged rules by token match. Omit if unsure: scoped rules then warn instead of block. |
| text | string | – | A copy/text block to judge (voice/banned-word rules). |
| url | string | – | Live URL — rendered headless with scroll-settle; enables delegated contrast/tap-target measurement. |
No output schema declared.
No examples provided.
audit_typography ~209
Audit the typographic SCALE of a rendered page (pass url) or a pre-collected snapshot of text nodes. Emits a focused report: (a) MODULAR SCALE — detects the dominant ratio (~1.2/1.25/1.333/1.5) across distinct font sizes and flags off-scale outliers; (b) LINE-HEIGHT CONSISTENCY — unitless lh/fs ratio per node, identifies the body rhythm and flags outliers; (c) WEIGHT LADDER — distinct weights, flags >4 weights or non-standard CSS values. Returns scale, line_height, weight_ladder, nodes_analyzed, and findings[{rule,severity,selector,message,fix}]. Goes beyond audit_page's pass/fail typography checks. url mode requires headless chromium.
| Name | Type | Req | Description |
|---|---|---|---|
| nodes | array | – | Pre-collected text nodes to analyze without rendering. |
| url | string | – | URL to render and measure (http/https or file://). Requires headless chromium. |
No output schema declared.
No examples provided.
audit_url ~442
Layer 0 render-and-capture audit: renders a LIVE URL at each viewport×theme, scroll-settles (fires whileInView/IntersectionObserver reveals; plays preload=none videos), optionally fires caller-supplied hover/focus/click interactions, and captures real pixels + the rendered DOM. Then runs the existing audit_page rule engine, per-element WCAG contrast, responsive-visibility (desktop-shown/mobile-hidden), blank-media detection, sliced-image edge symmetry, and hover-state white-wash detection over the captures. Every finding is tagged confirmed | likely-artifact | inconclusive with its evidence, ranked by severity. This is the tool that catches real-world visual nits invisible to HTML-string/geometry audits: cropped images, blank videos, hover white-wash, sliced exports, and hidden-on-mobile content. Requires headless chromium.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | Drop per-capture base64 screenshots; keep findings, counts, and summary. Default false. Use when screenshots would blow the tool-result budget. |
| containerMaxWidth | number | – | Your design system's canonical container width in px — makes the max-width check token-aware. |
| includeScreenshots | boolean | – | Include the base64 full-page PNG per capture in the result. Default: false (screenshots are large). |
| interactions | array | – | Fire each interaction before capture; the resulting state is diffed against baseline to catch hover/click white-wash and obscured content. |
| scroll_settle | boolean | – | Step through the page with short pauses to fire reveal-on-scroll/IntersectionObserver content, play videos, then return to the top before capture. Default: true |
| themes | array | – | Themes to toggle (prefers-color-scheme + data-theme/class). Default: ['light','dark'] |
| timeoutMs | number | – | Per-navigation timeout in ms. Default: 30000 |
| url | string | yes | URL to render and audit (http/https or file://) |
| viewports | array | – | Viewports to render. Default: iphone 393×852, desktop 1440×900, wide 2160×1200 |
No output schema declared.
No examples provided.
audit_video_playback ~172
Render a page in headless Chromium and observe whether each <video> actually advances (samples currentTime before/after a play attempt), classifying every clip into playing|paused|stalled|empty|error with a reason. Catches black/non-playing videos that static audits miss — the most common real-world defect on marketing sites with video backgrounds. Pass url to render + observe, or dom_snapshot to classify pre-collected observations without a browser.
| Name | Type | Req | Description |
|---|---|---|---|
| dom_snapshot | array | – | Pre-collected video observations to classify without rendering (deterministic path) |
| observeMs | number | – | Milliseconds to wait between currentTime samples after play() attempt. Default: 1000 |
| url | string | – | URL to render and observe (http/https or file://). Requires headless chromium. |
No output schema declared.
No examples provided.
bind_taste_surface ~990
Persist a project's surface calibration for a taste profile — the answers from get_taste_interview. A binding records: the surface string scoped rules match against (e.g. 'product-site'), URL hosts that identify the project in url-mode audits, per-rule severity overrides (block|warn|nit|off — 'off' silences a rule on this surface), an optional voice/tone note, per-dimension design_notes (typography, spacing, color, layout, motion, imagery, entrance, loading, navigation, aesthetic, libraries, special — the interview's design:* answers), and a first-class `references` array — the example sites the person pointed to. References are NOT lossy prose: each url is captured live and its PageTraits (scheme, luminance, animation/scroll motion, text density) are stored on the binding, then design_notes are consistency-checked against what the references ACTUALLY are. A 'dark, cinematic' color note against two references that both render light comes back as a consistency_warning to surface to the user. Upserts by project name (~/.raven/taste/<profile>.surfaces.json); on a re-bind, omitted references/design_notes/voice_note/overrides/hosts carry forward and are reported in carried_forward, while explicit empty values clear them. When the design_notes name an expensive technique (three.js/WebGL, GSAP scroll choreography, anime.js staggered motion, glassmorphism, a branded loader, lottie, kinetic display type…), the result carries build_hints — a concrete recipe + canonical public example sources per technique, so the builder sees the HOW at kickoff, BEFORE building; an expensive note is not license to drop it. After binding, audit_taste with project:'<name>' or a bound url applies the calibration automatically: matching scoped rules run at full severity, non-matching ones are skipped, overrides re-tune the rest. ENFORCED: a bind whose RESULT has no calibration content (no design_notes/voice_note/references/overrides) is REFUSED — a brand-new surface bound bare (the fingerprint o…
| Name | Type | Req | Description |
|---|---|---|---|
| design_notes | object | – | Per-dimension design preferences from the interview's design:* questions — keys are short dimension names (typography, spacing, color, layout, motion, imagery, entrance, loading, navigation, aestheti… |
| hosts | array | – | URL hostnames that identify this project (e.g. ravenmcp.ai) — matched in url-mode audits, subdomains included. |
| overrides | array | – | Per-rule re-tuning for this surface (e.g. relax a voice rule to nit on a product site). |
| profile | string | yes | Taste profile name. |
| project | string | yes | Project identifier, e.g. 'raven-mcp', 'portfolio'. |
| references | array | – | First-class reference examples the person pointed to. Each url is captured live (traits stored on the binding), and design_notes are consistency-checked against them — contradictions come back as con… |
| surface | string | yes | What this surface IS, in scope-matchable words: 'monochrome portfolio', 'product-site', 'developer docs'. Scoped rules activate when their scope tokens overlap this string. |
| uncalibrated_ack | string | – | ESCAPE HATCH — leave unset in the normal flow. Binding a BRAND-NEW surface with no calibration content (no design_notes/voice_note/references/overrides) is REFUSED, because that is the fingerprint of… |
| voice_note | string | – | Short tone guidance for this surface (e.g. 'Product register: benefits may be stated plainly; still no hype verbs'). Echoed as voice_note in audit results. |
No output schema declared.
No examples provided.
capture_reference ~630
Persist a pattern grabbed from any page so it survives the browser tab. Call it after get_grabbed_elements returns a selection, passing that selection's selector/styles/html/rect/stateStyles plus the URL it was grabbed from. Stores one JSON record under ~/.raven/references; html over 8000 chars is truncated and flagged, style maps over 200 properties are rejected, and non-http(s) URLs are rejected. Every save gets a fresh ref_id, so grabbing the same element twice keeps both. When html is supplied it also renders a PNG thumbnail beside the record by rebuilding that markup offline in headless Chromium — every external request is blocked, so remote images and webfonts are absent and the record says so (image.fidelity 'offline'). The thumbnail is best-effort: if no browser is available the capture still succeeds, with no image field. It does not fetch the source URL, and does not map anything onto the project's tokens — that is map_reference_to_tokens.
| Name | Type | Req | Description |
|---|---|---|---|
| app | string | – | Human name of the source app, e.g. 'Linear' |
| html | string | – | outerHTML of the grabbed element; truncated to 8000 chars on save |
| note | string | – | The designer's own words about why this pattern was kept; the highest-weighted field in search |
| owner | string | yes | Whether the pattern came from the user's own product or someone else's site |
| rect | object | – | Bounding rect of the grabbed element in page coordinates |
| selector | string | yes | CSS selector of the grabbed element, from the grab selection |
| stateStyles | – | – | Alias of state_styles, matching the field name get_grabbed_elements returns |
| state_styles | object | – | Per-state styles, either { hover: { color: 'red' } } or the grab selection's own { hover: { declarations: [{ property, value }] } } |
| styles | object | yes | Computed styles exactly as captured; rejected over 200 properties |
| tags | array | yes | Topic tags for later filtering, e.g. ['hero','typography'] |
| taxonomy | array | – | Stable pattern-kind ids binding this element to Raven's controlled vocabulary — this is what makes it findable by INTENT ('a scrolling mouse icon in a hero') rather than by the words that happen to b… |
| url | string | yes | Full http(s) URL of the page the pattern was grabbed from |
No output schema declared.
No examples provided.
compose_system ~58
Mix tokens from different design systems to create a custom composite. Example: Linear's colors + Stripe's typography.
| Name | Type | Req | Description |
|---|---|---|---|
| compositions | array | yes | Array of system-group pairs to compose |
| format | string | – | Output format. Default: dtcg |
No output schema declared.
No examples provided.
configure_design_system_source ~118
Save which local DESIGN.md file Raven should use for design-system inventory and comparison.
| Name | Type | Req | Description |
|---|---|---|---|
| aliases | object | – | Project component id to Raven canonical component id aliases |
| design_file_path | string | – | DESIGN.md path relative to the project directory; defaults to DESIGN.md |
| platform | string | – | Target platform: web-pointer, web-touch, ios, or android |
| project_dir | string | yes | Project directory where .raven configuration is stored |
| source_kind | string | yes | MVP source kind; only design-file is supported |
No output schema declared.
No examples provided.
create_brand_profile ~187
Create or update a local brand profile used by Raven creative jobs. Stores colors, fonts, tone, audience, constraints, product notes, and asset references locally under ~/.raven/creative by default.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_ids | array | – | Existing Raven creative asset IDs tied to this brand. |
| audience | string | – | Primary audience/customer. |
| colors | array | – | Brand colors, preferably hex or token names. |
| constraints | array | – | Rules to honor: no claims, legal notes, visual constraints. |
| description | string | – | What the brand/product is. |
| fonts | array | – | Brand fonts or type guidance. |
| id | string | – | Optional stable ID. If omitted, Raven creates one from the name. |
| name | string | yes | Brand or project name. |
| product | string | – | Product or offer notes. |
| tone | string | – | Voice and tone guidance. |
No output schema declared.
No examples provided.
create_character_profile ~146
Create a local character/identity reference profile for consistent image or video generation. Raven stores reference asset IDs and provider-training payloads; actual identity training happens only through a configured provider runner.
| Name | Type | Req | Description |
|---|---|---|---|
| consistency_notes | string | – | What must stay consistent across generations. |
| description | string | – | Visual/personality description. |
| id | string | – | Optional stable ID. |
| metadata | object | – | Optional non-secret metadata. |
| name | string | yes | Character, spokesperson, founder, avatar, or product persona name. |
| provider_training_id | string | – | External provider training/character ID if already trained. |
| reference_asset_ids | array | yes | Raven creative asset IDs for reference images/videos. |
No output schema declared.
No examples provided.
create_generation_job ~283
Create a Raven creative generation job for image, video, 3D, audio, campaign, or analysis. Returns a brand-aware provider payload. If execute=true and RAVEN_CREATIVE_RUNNER is configured, Raven submits the job to that local runner.
| Name | Type | Req | Description |
|---|---|---|---|
| aspect_ratio | string | – | Target aspect ratio, e.g. 1:1, 16:9, 9:16. |
| brand_profile_id | string | – | Local Raven brand profile ID. |
| channel | string | – | Target channel, e.g. TikTok, YouTube Shorts, blog, marketplace. |
| character_profile_id | string | – | Local Raven character profile ID. |
| duration_seconds | number | – | Video/audio duration. |
| execute | boolean | – | Submit through RAVEN_CREATIVE_RUNNER now. Default false. |
| media_type | string | yes | Output type. |
| model | string | – | Raven model slot or external provider model ID. |
| objective | string | – | Business or audience goal. |
| output_count | integer | – | Number of variants to request. |
| preset | string | – | Preset ID from list_creative_presets. |
| prompt | string | yes | Creative request. |
| provider | string | – | Provider label for the downstream runner. |
| quality | string | – | Requested quality tier. |
| reference_asset_ids | array | – | Local Raven creative asset IDs. |
No output schema declared.
No examples provided.
create_taste_profile ~394
Create (or overwrite) a named taste profile — a portable design-judgment ruleset + precedent corpus persisted locally under ~/.raven/taste/<name>.json (override dir with RAVEN_TASTE_HOME). Pass explicit rules[] (rule_id, clause_text, category, severity_default block|warn|nit, negative_prompt, owner taste|raven, delegate_to), and/or a DESIGN.md-style markdown doc to ingest (## headings = categories; '- ' bullets = rules; '(block)'/'(warn)'/'(nit)' severity markers; '(raven:<tool>)' delegates a rule to an existing Raven audit tool; '(scope:<surface>)' scopes a rule to one surface; 'Do NOT …' sentences become the rule's negative prompt). Ingest RULES-SHAPED docs only (actionable design constraints under category headings) — brand-story/mythology docs produce noise rules, not judgment. Local-first: nothing leaves the machine. Pass template:'portfolio'|'saas-marketing'|'app' for a cold start — seeds a small starter ruleset (color restraint, typography floor, spacing, voice, tap targets) BEFORE any calibration interview has run; template rules are added first, then any explicit rules/markdown you also pass are merged in on top. Still run get_taste_interview afterward — the template is a floor, not a substitute for calibrating to the actual person's taste.
| Name | Type | Req | Description |
|---|---|---|---|
| corpus | array | – | Seed precedent records. |
| markdown | string | – | DESIGN.md-style markdown to ingest as rules. |
| name | string | yes | Profile name (becomes <name>.json; lowercase alnum/dash/underscore). |
| rules | array | – | Explicit rule objects. |
| template | string | – | Seed a small cold-start ruleset for this surface family before any explicit rules/markdown are merged in. Omit for a blank profile. |
No output schema declared.
No examples provided.
decision_add ~111
Add an active decision to the local Decision Graph.
| Name | Type | Req | Description |
|---|---|---|---|
| alternatives_rejected | array | – | Alternatives considered and rejected. |
| author | string|null | – | Agent or person authoring the decision. Defaults to RAVEN_AGENT_ID or unknown. |
| component_ref | string | yes | Component or surface the decision refers to. |
| rationale | string | – | Reason for the decision. Omit when no rationale was recorded. |
| scope | string | yes | Scope where the decision applies. |
| statement | string | yes | Decision statement. |
No output schema declared.
No examples provided.
decision_commit ~77
Commit or confirm the rationale for a draft or extracted decision.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Decision node id to commit. |
| rationale | string | yes | Confirmed rationale for the decision. |
| similarity_threshold | number | – | Similarity threshold from 0 to 1. Overrides RAVEN_DECISION_SIMILARITY_THRESHOLD for this commit. |
No output schema declared.
No examples provided.
decision_contest ~108
Contest an active decision: it stops governing immediately, without deleting it or requiring a replacement.
| Name | Type | Req | Description |
|---|---|---|---|
| evidence_ref | string | – | Source ref for evidence that contradicts the decision. Attaches an evidence node and a contradicts edge, which raises the gap_scan finding from `contested` to `contested_with_evidence`. |
| id | string | yes | Existing active decision id to contest. |
| reason | string | yes | Why the decision is being contested. This is what an adjudicator reads. |
No output schema declared.
No examples provided.
decision_draft ~72
Capture a decision from working context with the why deferred for later confirmation.
| Name | Type | Req | Description |
|---|---|---|---|
| alternatives_rejected | array | – | Alternatives considered and rejected. |
| component_ref | string | yes | Component or surface the decision refers to. |
| scope | string | yes | Scope where the decision applies. |
| statement | string | yes | Decision statement. |
No output schema declared.
No examples provided.
decision_evidence ~103
Attach quantitative or qualitative evidence to an existing decision.
| Name | Type | Req | Description |
|---|---|---|---|
| confidence | number | yes | Confidence from 0 to 1. |
| confounds | array | – | Known factors that may confound the result. |
| decision_id | string | yes | Existing decision node id. |
| result_summary | string | yes | Concise summary of the evidence result. |
| source_ref | string | yes | URL, experiment name, ticket, or transcript reference. |
| type | string | yes | Evidence type. |
No output schema declared.
No examples provided.
decision_get ~37
Get a Decision Graph node and every node connected to it by an edge in either direction.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Decision Graph node id. |
No output schema declared.
No examples provided.
decision_history ~39
Return the complete supersession lineage for a decision, ordered oldest to newest.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Existing decision id anywhere in the supersession lineage. |
No output schema declared.
No examples provided.
decision_import ~114
Mine local git history and decision-bearing Markdown into provenance-tagged Decision Graph extraction prompts. Imported history remains review-only until decision_commit.
| Name | Type | Req | Description |
|---|---|---|---|
| doc_globs | array | – | Repository-relative Markdown globs. Supports * and **. |
| max_chunk_chars | integer | – | Maximum material characters per extraction chunk. Oversized single items are continuation-split (cap 60000). |
| max_commits | integer | – | Maximum git commits to inspect (cap 1000). |
| repo_path | string | yes | Local repository directory to inspect. |
No output schema declared.
No examples provided.
decision_list ~221
List decisions in the local Decision Graph. Defaults to ACTIVE decisions only — the ones that currently govern. Contesting a decision is what stops it governing, so contested decisions are deliberately excluded from the default: pass status:'contested' to review disputes, or include_contested:true to see both. A decision you cannot find is not the same as a decision that does not exist.
| Name | Type | Req | Description |
|---|---|---|---|
| drafts_only | boolean | – | When true, return active decisions awaiting a rationale or confirmation. |
| include_candidates | boolean | – | When true and status is omitted, include uncommitted imported candidates with active decisions. |
| include_contested | boolean | – | When true and status is omitted, include contested decisions alongside active ones. They do NOT govern — contesting is what removes a decision from force — but they are listed so an open dispute is d… |
| status | string | – | Decision status to list. Omit to list active decisions. |
No output schema declared.
No examples provided.
decision_scope ~77
Narrow two decisions to distinct scopes so both can remain active alongside one another.
| Name | Type | Req | Description |
|---|---|---|---|
| id_a | string | yes | First existing decision id. |
| id_b | string | yes | Second existing decision id. |
| scope_a | string | yes | Narrowed scope for the first decision. |
| scope_b | string | yes | Narrowed scope for the second decision. |
No output schema declared.
No examples provided.
decision_supersede ~54
Explicitly supersede one decision with another while preserving both nodes and their lineage.
| Name | Type | Req | Description |
|---|---|---|---|
| new_id | string | yes | Existing replacement decision id. |
| old_id | string | yes | Existing decision id that is being superseded. |
No output schema declared.
No examples provided.
design_gauntlet ~483
Answers 'why does my page look less polished than theirs?' with numbers instead of adjectives. Give it your page and a page you admire (vercel.com, linear.app, anything); both are rendered headless and their LIVE computed CSS is measured — never recalled from memory — across the nine things that decide perceived polish: surfaces, hairlines, text roles, letter spacing, accent, type scale, radii, elevation, rhythm (the first four dominate). You get back both sets of raw measurements, a per-dimension diff flagging where yours is worse, a concrete bar derived from the reference's own values (e.g. 'at most 4 surface colors — yours has 11'), a fix list split into mechanical find-and-replace vs decisions a human has to make, and one boolean, verdict.on_par. That boolean is the exit gate of the loop the response spells out: build, critique with fresh-context critics against renders, re-run this tool, and only call the work done when on_par is true. The reference is a standard, not a source — never copy its copy, marks, imagery or brand color.
| Name | Type | Req | Description |
|---|---|---|---|
| color_scheme | string | – | prefers-color-scheme emulated for BOTH pages (sites that theme by system preference measure differently per scheme). Default light; it is reported on each measurement. |
| device_scale_factor | number | – | Device pixel ratio for BOTH measurements — one value, so the hairline diff is never scale-mismatched. Default 1. Pass 2 to measure a page the way a retina display resolves it — it selects the retina… |
| reference_url | string | yes | The benchmark page (e.g. https://linear.app) — measured the same way; its values derive the bar. |
| subject_url | string | yes | The page being improved — rendered headless and measured live. |
| viewport | object | – | Viewport for both measurements. Default 1440x900. |
No output schema declared.
No examples provided.
diff_design_system ~117
Diff a project's declared design system (DESIGN.md) against the Raven canonical baseline: reports missing components, missing interaction/accessibility states, missing variants, and raw-literal token drift, as a scored report with fix priorities.
| Name | Type | Req | Description |
|---|---|---|---|
| baseline | string | – | Baseline id; defaults to raven-canonical |
| design_file_path | string | – | Direct path to DESIGN.md; overrides project configuration |
| platform | string | – | Target platform; overrides project configuration |
| project_dir | string | – | Project directory with a configured design-system source |
No output schema declared.
No examples provided.
evaluate_design ~187
Evaluate a design description against UX principles. Returns relevant principles, potential violations, and improvement suggestions.
| Name | Type | Req | Description |
|---|---|---|---|
| after_screenshot | string | – | Base64 PNG of the AFTER state. When both before+after are provided, returns a structured pixel diff with fix_confirmed. |
| before_screenshot | string | – | Base64 PNG of the BEFORE state |
| compact | boolean | – | Return only ids+names for matched principles/patterns (drop their full bodies) plus counts and any before/after diff. Default false. Use when the full principle library payload would blow the tool-re… |
| context | string | – | What the design is (e.g. 'pricing page for SaaS product') |
| description | string | – | Description of the design to evaluate |
| goals | array | – | What to evaluate for (e.g. ['conversion', 'accessibility', 'mobile-usability']) |
No output schema declared.
No examples provided.
forget_references ~337
Remove stored patterns from the local corpus — one by ref_id, or every pattern captured from a site. This is the takedown path: if a site asks that their design work not be kept, `forget_references({ host: 'their.site', confirm: true })` removes every record and every rendered thumbnail from that host in one call. Host matching is exact plus subdomains ('linear.app' takes 'app.linear.app', never 'notlinear.app'; an IP address matches only itself), and a host-wide removal requires confirm:true because it is not reversible — there is no trash. The refusal names the ref_ids it would remove: pass them back as expected_ref_ids to pin the removal to what you were shown, and anything that appeared since is reported in appeared_since_preview[] rather than deleted. Returns the ref_ids actually removed, so a partial result is visible rather than assumed; records whose JSON could not be parsed are reported in skipped[] and left on disk rather than counted as cleared, and records that could not be deleted are reported separately in failed[]. Local only: it deletes files under the reference home and contacts nobody.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | Required when removing by host — the removal is permanent |
| expected_ref_ids | array | – | The ref_ids the confirmation prompt listed. Supplying them pins the removal to that set: anything matching the host that appeared since is reported, not deleted. |
| host | string | – | Remove every reference captured from this host and its subdomains, e.g. 'linear.app' |
| ref_id | string | – | Remove exactly this one reference. Supply this or host. |
No output schema declared.
No examples provided.
gap_scan ~119
Scan the local Decision Graph for uncovered components, weak rationales, contested decisions, and derived staleness. Schedulers should call with digest_only:true and treat actionable:false as a no-op.
| Name | Type | Req | Description |
|---|---|---|---|
| digest_only | boolean | – | Hands-off mode. When healthy, return only the quiet actionable:false digest. |
| reference_systems | array | – | Pattern or design-system ids from Raven's existing registries. Omit for a small built-in pattern set. |
| use_cases | array | – | Use-case descriptions whose component terms should be covered by active decisions. |
No output schema declared.
No examples provided.
generate_design_system ~359
Generate a complete, custom design system with full token set. Provide a brand color to auto-generate a harmonious palette, pick a style preset, and export as visual HTML documentation, CSS variables, W3C DTCG JSON, Figma Variables, or SVG palette card. The HTML export is a beautiful, self-contained page suitable for sharing with stakeholders. Pass save:true to store the system for reuse by id — this is how a taste-engine session's design system becomes durable.
| Name | Type | Req | Description |
|---|---|---|---|
| base_system | string | – | Start from an existing system as foundation (e.g. 'stripe', 'linear'). Colors will be replaced by brand_color if provided. |
| brand_color | string | – | Primary brand hex color (e.g. '#FF6B35'). Auto-generates a full harmonious palette using color theory. |
| dark_mode | boolean | – | Generate dark mode tokens alongside light. Default: true |
| format | string | – | Export format: html (visual doc page), css (custom properties), dtcg (W3C JSON), figma (Figma Variables JSON), svg (color palette card), all. Default: html |
| name | string | yes | Name for the design system (e.g. 'Acme Corp', 'NightOwl') |
| save | boolean | – | Persist the generated token set to ~/.raven/design-systems so its id works everywhere a bundled system's does: base_system here, get_design_system, list_design_systems, and init_design_md. Refused if… |
| style | string | – | Aesthetic direction — influences spacing, radii, shadows, motion, and typography. Default: minimal |
No output schema declared.
No examples provided.
generate_mood_board ~510
Compose a mood board from what the Taste Engine already holds for a bound project — the binding's design_notes as chips, its captured references, and pattern-library thumbnails captured from those same reference sites — written as one self-contained HTML file (plus a best-effort PNG of the board) under the taste home's moodboards/ directory, or output_dir. Pass image_paths to embed the user's OWN images too — a generated brand pack, product shots, mood images — shown as a 'Your assets' section (they are the user's material, so no third-party credit rides on them). Use it right after the kickoff interview binds a surface ('get a mood board going'), or pass mode:'example' to show a labeled sample board to a user who has never made one, to get their thinking started BEFORE the interview. The board invents nothing: note text stays text (never fabricated color swatches), the ground (light/dark) is measured from the captured references' scheme traits, and every embedded pattern carries its credit. It is an APPROVAL STOP: the result and the board's footer name generate_design_system — the taste engine's core output — as the next step once the user says the direction is right; this tool never runs it. mode:'board' requires an existing surface binding and throws naming get_taste_interview when there is none.
| Name | Type | Req | Description |
|---|---|---|---|
| image_paths | array | – | Local file paths to the user's OWN images — a generated brand pack, product shots, mood images — embedded into the board as a 'Your assets' section (png/jpeg/gif/webp, sniffed from the bytes; unusabl… |
| mode | string | – | 'board' (default): compose the real board from the project's binding. 'example': write a clearly-labeled sample board that shows what a mood board is — use it to seed the user's thinking before calib… |
| output_dir | string | – | Directory for the board files. Defaults to <taste home>/moodboards. |
| profile | string | yes | Taste profile name (see list_taste_profiles). |
| project | string | – | Bound project name (see get_taste_interview / bind_taste_surface). Required for mode:'board'; ignored for mode:'example'. |
No output schema declared.
No examples provided.
generate_service_blueprint ~255
Render a service blueprint as a self-contained HTML page. Supports two modes: (1) classic Shostack single-actor blueprint — user action, frontstage, backstage, support, evidence, pain/delight; (2) two-actor HI-loop blueprint — when `actors` is supplied, renders two swim lanes with a line of interaction between them (e.g. customer ↔ lawyer, patient ↔ doctor, buyer ↔ agent). Each actor gets their own actions, frontstage (what they see), and evidence. Optionally accepts an ideal-state to render side-by-side with the current state.
| Name | Type | Req | Description |
|---|---|---|---|
| actors | object | – | Omit for classic single-actor Shostack blueprint. Provide to render a two-swim-lane HI-loop blueprint with a line of interaction between the two sides. |
| current | array | yes | The current-state blueprint as an array of steps |
| ideal | array | – | Optional ideal-state blueprint — if provided, output shows current AND ideal side-by-side |
| service_name | string | yes | Name of the service (e.g. 'Free trial signup', 'Client intake', 'Restaurant reservation') |
| subtitle | string | – | Short description or context line under the title |
No output schema declared.
No examples provided.
What is the Raven MCP server?
Raven is an MCP server listed in the public MCP registry as ai.ravenmcp/raven-mcp. Design intelligence for coding agents: audits, design systems, and a taste profile agents consult. This page covers its npm package (raven-mcp).
Is the Raven MCP server safe to use?
Raven scores 93 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Raven MCP server expose?
Raven exposes 111 tools: get_principles, get_pattern, get_business_strategy, evaluate_design, search_knowledge, and 106 more. Their descriptions and schemas cost roughly 20,360 tokens of context every time the server is loaded.
Is the Raven MCP server still maintained?
Raven is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Raven MCP server under?
Raven declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.