{
  "data": {
    "tool": {
      "category": "",
      "endpoint": "https://mcp.ravenmcp.ai/api/mcp",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/ravenmcp-raven-mcp.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/ravenmcp-raven-mcp.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/ravenmcp-raven-mcp.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 16795,
          "counts": {
            "error": 0,
            "note": 1,
            "warn": 8
          },
          "findings": [
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "audit_ios_a11y",
              "message": "none of its 3 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "audit_ios_screen",
              "message": "4 parameters without a description: elements[].rect.h, elements[].rect.w, elements[].rect.x, elements[].rect.y",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "audit_layout",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "audit_page",
              "message": "3 parameters without a description: viewport, viewport.h, viewport.w",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "audit_parity",
              "message": "none of its 3 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "audit_screen",
              "message": "5 parameters without a description: elements[].rect.h, elements[].rect.w, elements[].rect.x, elements[].rect.y, scroll_settle",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "generate_service_blueprint",
              "message": "3 parameters without a description: ideal[].actor_b.action, ideal[].actor_b.evidence, ideal[].actor_b.frontstage",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC23",
              "severity": "warn",
              "message": "45 tools, about 16,373 tokens of definitions",
              "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
            },
            {
              "rule": "TC24",
              "severity": "note",
              "message": "45 of 45 tools have no outputSchema",
              "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
            }
          ]
        },
        "checkedAt": "2026-10-04T22:20:34Z",
        "count": 45,
        "schemaTokens": 16795,
        "status": "ok",
        "tools": [
          {
            "name": "get_principles",
            "description": "Get design principles relevant to a UI context. Returns usability heuristics, laws of UX, Gestalt principles, accessibility requirements, typography rules, and color theory — matched to what you're designing.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "category": {
                  "description": "Filter to category: accessibility, brand, color-systems, color-theory, component-architecture, d4d, gestalt, laws-of-ux, mobile-ux, nielsen-heuristics, research, responsive-layout, service-design, spacing-systems, typography, ux-writing",
                  "type": "string"
                },
                "context": {
                  "description": "What you're designing (e.g. 'signup form', 'pricing page', 'mobile nav', 'dark dashboard')",
                  "type": "string"
                },
                "format": {
                  "description": "Output format: full (all details), checklist (implications + violations), brief (just summary). Default: full",
                  "enum": [
                    "full",
                    "checklist",
                    "brief"
                  ],
                  "type": "string"
                },
                "platform": {
                  "description": "Platform context. 'ios' returns Apple HIG principles (Dynamic Type, 44pt targets, SF Symbols, safe areas, dark-mode, haptics, App Review privacy); 'react-native' returns RN principles (44/48pt+hitSlop, accessibilityLabel/Role, font scaling, SafeAreaView, dark mode, iOS+Android parity, secrets). Both replace the web/CSS-oriented set. Default: web.",
                  "enum": [
                    "web",
                    "ios",
                    "react-native"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "context"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Principles"
            }
          },
          {
            "name": "get_pattern",
            "description": "Get proven UI/UX patterns for a specific design type. Returns do's, don'ts, evidence, and checklists for signup flows, pricing pages, navigation, forms, landing pages, dashboards, modals, empty states, error states, loading states, CTAs, social proof, and mobile conversion.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "goal": {
                  "description": "Filter by primary goal",
                  "enum": [
                    "conversion",
                    "usability",
                    "accessibility",
                    "delight"
                  ],
                  "type": "string"
                },
                "platform": {
                  "description": "Filter patterns by platform context",
                  "enum": [
                    "desktop",
                    "mobile",
                    "responsive"
                  ],
                  "type": "string"
                },
                "type": {
                  "description": "Pattern type (e.g. 'signup-flow', 'pricing-page', 'navigation', 'forms', 'landing-page', 'dashboard', 'modals-dialogs', 'empty-states', 'error-states', 'loading-states', 'cta', 'social-proof', 'mobile-conversion')",
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Pattern"
            }
          },
          {
            "name": "get_business_strategy",
            "description": "Get business and monetization strategies for digital products. Covers monetization models, retention strategies, onboarding optimization, growth mechanics, and product metrics frameworks.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "stage": {
                  "description": "Company stage for contextual filtering",
                  "enum": [
                    "startup",
                    "growth",
                    "mature"
                  ],
                  "type": "string"
                },
                "type": {
                  "description": "Strategy type: monetization, retention, onboarding, growth, metrics",
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Business Strategy"
            }
          },
          {
            "name": "evaluate_design",
            "description": "Evaluate a design description against UX principles. Returns relevant principles, potential violations, and improvement suggestions. Screenshot pixel-diff is disabled on the hosted (remote) endpoint (unbounded image decode). Omit 'before_screenshot'/'after_screenshot' and pass a 'description' to evaluate the design against UX principles statelessly.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "after_screenshot": {
                  "description": "Base64 PNG of the AFTER state. When both before+after are provided, returns a structured pixel diff with fix_confirmed.",
                  "type": "string"
                },
                "before_screenshot": {
                  "description": "Base64 PNG of the BEFORE state",
                  "type": "string"
                },
                "compact": {
                  "description": "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-result budget.",
                  "type": "boolean"
                },
                "context": {
                  "description": "What the design is (e.g. 'pricing page for SaaS product')",
                  "type": "string"
                },
                "description": {
                  "description": "Description of the design to evaluate",
                  "type": "string"
                },
                "goals": {
                  "description": "What to evaluate for (e.g. ['conversion', 'accessibility', 'mobile-usability'])",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Evaluate Design"
            }
          },
          {
            "name": "search_knowledge",
            "description": "Search across all design principles, UI patterns, and business strategies. Use when you need to find specific guidance or don't know which category to look in.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "layer": {
                  "description": "Which layer to search: principles, patterns, business, or all (default)",
                  "enum": [
                    "principles",
                    "patterns",
                    "business",
                    "all"
                  ],
                  "type": "string"
                },
                "query": {
                  "description": "Search term (e.g. 'touch targets', 'pricing psychology', 'color contrast')",
                  "type": "string"
                }
              },
              "required": [
                "query"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Search Knowledge"
            }
          },
          {
            "name": "get_checklist",
            "description": "Get a pre-publish checklist for a specific UI type. Returns actionable yes/no items to verify before shipping.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "platform": {
                  "description": "Platform context for platform-specific checks. 'ios' = native SwiftUI/iOS (Apple HIG); 'react-native' = RN/Expo (iOS HIG + Android Material: 44/48pt+hitSlop, accessibilityLabel/Role, font scaling, SafeAreaView, dark mode, platform parity, secrets). Both replace the web/mobile-web checks.",
                  "enum": [
                    "desktop",
                    "mobile",
                    "responsive",
                    "ios",
                    "react-native"
                  ],
                  "type": "string"
                },
                "type": {
                  "description": "What you're shipping (e.g. 'signup form', 'pricing page', 'dashboard', 'landing page', 'modal')",
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Checklist"
            }
          },
          {
            "name": "get_d4d_framework",
            "description": "Get the Design for Delight (D4D) framework templates. Returns customer problem statement, ideal state, hypothesis, LOFA, and experiment templates for structured product thinking.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "stage": {
                  "description": "Which stage of the D4D loop to return. Default: full (all stages)",
                  "enum": [
                    "frame",
                    "empathy",
                    "broad",
                    "narrow",
                    "experiment",
                    "recommendation",
                    "full"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get D4D Framework"
            }
          },
          {
            "name": "list_design_systems",
            "description": "Browse available design systems for tokens. Filter by category (component-library, consumer, developer, fintech, framework, platform, productivity) or search by name.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "category": {
                  "description": "Filter by category: component-library, consumer, developer, fintech, framework, platform, productivity. Saved user systems list under 'user'.",
                  "type": "string"
                },
                "search": {
                  "description": "Search by name or description",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List Design Systems"
            }
          },
          {
            "name": "get_design_system",
            "description": "Get design tokens for a specific design system. Returns colors, typography, spacing, radii, elevation, and motion tokens in W3C DTCG, CSS custom properties, or flat format.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "format": {
                  "description": "Output format: dtcg (W3C standard), css (custom properties), flat (key-value). Default: dtcg",
                  "enum": [
                    "dtcg",
                    "css",
                    "flat"
                  ],
                  "type": "string"
                },
                "group": {
                  "description": "Filter to a token group: color, color-dark, color-light, typography, spacing, radius, elevation, motion",
                  "type": "string"
                },
                "id": {
                  "description": "Design system ID (e.g. 'stripe', 'linear')",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Design System"
            }
          },
          {
            "name": "compose_system",
            "description": "Mix tokens from different design systems to create a custom composite. Example: Linear's colors + Stripe's typography.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "compositions": {
                  "description": "Array of system-group pairs to compose",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "group": {
                        "description": "Token group to take (color, typography, spacing, radius, elevation, motion)",
                        "type": "string"
                      },
                      "system": {
                        "description": "Source design system ID",
                        "type": "string"
                      }
                    },
                    "required": [
                      "system",
                      "group"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "format": {
                  "description": "Output format. Default: dtcg",
                  "enum": [
                    "dtcg",
                    "css"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "compositions"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Compose System"
            }
          },
          {
            "name": "audit_page",
            "description": "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. NOTE: the url argument is REJECTED on this hosted (remote) endpoint - pass html instead. audit_page url-capture is disabled on the hosted (remote) endpoint. Pass the page HTML via the 'html' argument instead.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "adversarial_verify": {
                  "description": "After generating findings, independently re-check each against the live DOM/network and tag it confirmed / likely-artifact / inconclusive. Surfaces a debunked_count.",
                  "type": "boolean"
                },
                "compact": {
                  "description": "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. Use when the full payload would blow the tool-result budget.",
                  "type": "boolean"
                },
                "containerMaxWidth": {
                  "description": "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.",
                  "type": "number"
                },
                "html": {
                  "description": "The full HTML content of the page to audit",
                  "type": "string"
                },
                "interactions": {
                  "description": "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 screenshot.",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "delay_ms": {
                        "type": "number"
                      },
                      "event": {
                        "enum": [
                          "hover",
                          "click",
                          "focus"
                        ],
                        "type": "string"
                      },
                      "selector": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "selector",
                      "event",
                      "delay_ms"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "scroll_settle": {
                  "description": "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 false positives.",
                  "type": "boolean"
                },
                "strict": {
                  "description": "Strict mode — also flags warnings as failures. Default: false",
                  "type": "boolean"
                },
                "url": {
                  "description": "REJECTED on this hosted (remote) endpoint; pass html instead. (Local/stdio: Raven launches headless chromium, renders the page, and audits the RENDERED DOM.)",
                  "type": "string"
                },
                "viewport": {
                  "additionalProperties": false,
                  "properties": {
                    "h": {
                      "type": "number"
                    },
                    "w": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "w",
                    "h"
                  ],
                  "type": "object"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit Page"
            }
          },
          {
            "name": "score_page",
            "description": "Score an HTML/CSS page across 7 design categories (Structure, Typography, Color \u0026 palette, Spacing \u0026 rhythm, Accessibility, Responsive layout, Design tokens), each rated 0–10. Scores are derived deterministically from the same checks as audit_page — no browser required. Pass html directly; the url argument is REJECTED on this hosted (remote) endpoint. Also returns the same overall 0–100 score and A–D grade audit_page produces, the weakest category, and the three categories Raven does not mechanically assess (brand, conversion, motion) with guidance on which tools to use for those. score_page url-capture is disabled on the hosted (remote) endpoint. Pass the page HTML via the 'html' argument instead.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "containerMaxWidth": {
                  "description": "Your design system's canonical content-container width in px (e.g. 1152). Forwarded to the responsive/max-width check.",
                  "type": "number"
                },
                "html": {
                  "description": "The full HTML content of the page to score.",
                  "type": "string"
                },
                "strict": {
                  "description": "Strict mode — count warnings as failures in the overall score. Default: false.",
                  "type": "boolean"
                },
                "url": {
                  "description": "REJECTED on this hosted (remote) endpoint; pass html instead. (Local/stdio: Raven launches headless chromium, renders the page, and scores the RENDERED DOM.)",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Score Page"
            }
          },
          {
            "name": "audit_parity",
            "description": "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[].",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "android": {
                  "additionalProperties": false,
                  "properties": {
                    "elements": {
                      "items": {
                        "additionalProperties": false,
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "label": {
                            "type": "string"
                          },
                          "rect": {
                            "additionalProperties": false,
                            "properties": {
                              "h": {
                                "type": "number"
                              },
                              "w": {
                                "type": "number"
                              },
                              "x": {
                                "type": "number"
                              },
                              "y": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "x",
                              "y",
                              "w",
                              "h"
                            ],
                            "type": "object"
                          },
                          "role": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "rect"
                        ],
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "viewport": {
                      "additionalProperties": false,
                      "properties": {
                        "h": {
                          "type": "number"
                        },
                        "w": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "w",
                        "h"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "elements",
                    "viewport"
                  ],
                  "type": "object"
                },
                "checklist": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "a": {
                        "type": "string"
                      },
                      "b": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "relation": {
                        "enum": [
                          "present",
                          "vertically-centered",
                          "baseline-aligned",
                          "left-aligned",
                          "equal-gap",
                          "equal-size",
                          "same-truncation"
                        ],
                        "type": "string"
                      },
                      "tolerance": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "name",
                      "a",
                      "relation"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "ios": {
                  "additionalProperties": false,
                  "properties": {
                    "elements": {
                      "items": {
                        "additionalProperties": false,
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "label": {
                            "type": "string"
                          },
                          "rect": {
                            "additionalProperties": false,
                            "properties": {
                              "h": {
                                "type": "number"
                              },
                              "w": {
                                "type": "number"
                              },
                              "x": {
                                "type": "number"
                              },
                              "y": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "x",
                              "y",
                              "w",
                              "h"
                            ],
                            "type": "object"
                          },
                          "role": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "rect"
                        ],
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "viewport": {
                      "additionalProperties": false,
                      "properties": {
                        "h": {
                          "type": "number"
                        },
                        "w": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "w",
                        "h"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "elements",
                    "viewport"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "ios",
                "android",
                "checklist"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit Parity"
            }
          },
          {
            "name": "audit_ios_a11y",
            "description": "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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "elements": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "bgColor": {
                        "type": "string"
                      },
                      "dynamicTypeClipped": {
                        "type": "boolean"
                      },
                      "fgColor": {
                        "type": "string"
                      },
                      "fontPt": {
                        "type": "number"
                      },
                      "hint": {
                        "type": "string"
                      },
                      "label": {
                        "type": "string"
                      },
                      "rect": {
                        "additionalProperties": false,
                        "properties": {
                          "h": {
                            "type": "number"
                          },
                          "w": {
                            "type": "number"
                          },
                          "x": {
                            "type": "number"
                          },
                          "y": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "x",
                          "y",
                          "w",
                          "h"
                        ],
                        "type": "object"
                      },
                      "role": {
                        "type": "string"
                      },
                      "traits": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "value": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "rect"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "options": {
                  "additionalProperties": false,
                  "properties": {
                    "minTarget": {
                      "type": "number"
                    }
                  },
                  "type": "object"
                },
                "viewport": {
                  "additionalProperties": false,
                  "properties": {
                    "h": {
                      "type": "number"
                    },
                    "w": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "w",
                    "h"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "elements",
                "viewport"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit iOS Accessibility"
            }
          },
          {
            "name": "audit_responsive_visibility",
            "description": "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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "breakpoints": {
                  "description": "Viewport widths in px. Default [390, 768, 1440, 2160]",
                  "items": {
                    "type": "number"
                  },
                  "type": "array"
                },
                "url": {
                  "description": "URL to render (http/https or file://)",
                  "type": "string"
                },
                "viewportHeight": {
                  "description": "Render height in px. Default 900",
                  "type": "number"
                }
              },
              "required": [
                "url"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": true,
              "title": "Audit Responsive Visibility"
            }
          },
          {
            "name": "audit_contrast",
            "description": "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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "dom_snapshot": {
                  "description": "Pre-collected text elements to score without rendering",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "bgColor": {
                        "type": "string"
                      },
                      "bold": {
                        "type": "boolean"
                      },
                      "color": {
                        "type": "string"
                      },
                      "fontPx": {
                        "type": "number"
                      },
                      "selector": {
                        "type": "string"
                      },
                      "text": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "selector",
                      "color",
                      "bgColor"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "screenshot": {
                  "description": "Optional base64 PNG for caller reference; ratios are computed from the DOM, not pixels",
                  "type": "string"
                },
                "url": {
                  "description": "URL to render and measure (http/https or file://)",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": true,
              "title": "Audit Contrast"
            }
          },
          {
            "name": "suggest_contrast_fix",
            "description": "Given failing WCAG color pairs, return the MINIMAL color change that clears the target ratio. For each {fg,bg} pair, computes the smallest foreground adjustment (and an alternative background adjustment) that reaches AA/AAA — with the achieved ratio and direction. Feeds directly from audit_contrast's failing pairs: pass them here to get concrete passing values instead of brute-forcing colors by hand. Pure offline math.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "level": {
                  "description": "WCAG level when targetRatio is not given per-pair. Default AA.",
                  "enum": [
                    "AA",
                    "AAA"
                  ],
                  "type": "string"
                },
                "pairs": {
                  "description": "Color pairs to remediate. Each: { selector?, fg, bg, fontPx?, bold?, targetRatio? }. fontPx/bold pick the large-text threshold; targetRatio overrides the level.",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "bg": {
                        "type": "string"
                      },
                      "bold": {
                        "type": "boolean"
                      },
                      "fg": {
                        "type": "string"
                      },
                      "fontPx": {
                        "type": "number"
                      },
                      "ratio": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "selector": {
                        "type": "string"
                      },
                      "status": {
                        "enum": [
                          "pass",
                          "fail",
                          "indeterminate"
                        ],
                        "type": "string"
                      },
                      "targetRatio": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "fg",
                      "bg"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Suggest Contrast Fix"
            }
          },
          {
            "name": "audit_url",
            "description": "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. audit_url is disabled on the hosted (remote) endpoint: one run drives a real browser through every requested viewport and theme, and was MEASURED at 95s in its cheapest single-viewport single-theme configuration and past 120s with defaults, which exceeds the per-call budget of the hosted clients that call it. Run it locally instead (npx raven-mcp) where there is no request deadline, or pass the page HTML to audit_page here for a static grade.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "compact": {
                  "description": "Drop per-capture base64 screenshots; keep findings, counts, and summary. Default false. Use when screenshots would blow the tool-result budget.",
                  "type": "boolean"
                },
                "containerMaxWidth": {
                  "description": "Your design system's canonical container width in px — makes the max-width check token-aware.",
                  "type": "number"
                },
                "includeScreenshots": {
                  "description": "Include the base64 full-page PNG per capture in the result. Default: false (screenshots are large).",
                  "type": "boolean"
                },
                "interactions": {
                  "description": "Fire each interaction before capture; the resulting state is diffed against baseline to catch hover/click white-wash and obscured content.",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "delay_ms": {
                        "type": "number"
                      },
                      "event": {
                        "enum": [
                          "hover",
                          "click",
                          "focus"
                        ],
                        "type": "string"
                      },
                      "selector": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "selector",
                      "event",
                      "delay_ms"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "scroll_settle": {
                  "description": "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",
                  "type": "boolean"
                },
                "themes": {
                  "description": "Themes to toggle (prefers-color-scheme + data-theme/class). Default: ['light','dark']",
                  "items": {
                    "enum": [
                      "light",
                      "dark"
                    ],
                    "type": "string"
                  },
                  "type": "array"
                },
                "timeoutMs": {
                  "description": "Per-navigation timeout in ms. Default: 30000",
                  "type": "number"
                },
                "url": {
                  "description": "URL to render and audit (http/https or file://)",
                  "type": "string"
                },
                "viewports": {
                  "description": "Viewports to render. Default: iphone 393×852, desktop 1440×900, wide 2160×1200",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "h": {
                        "type": "number"
                      },
                      "label": {
                        "type": "string"
                      },
                      "w": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "w",
                      "h"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                }
              },
              "required": [
                "url"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit URL"
            }
          },
          {
            "name": "audit_content",
            "description": "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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "goals": {
                  "description": "Optional content goals (e.g. ['clarity','conversion']); recorded for traceability.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "items": {
                  "description": "Array of content items to audit.",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "description": "Optional stable id; auto-generated (item_N) if omitted.",
                        "type": "string"
                      },
                      "text": {
                        "description": "The raw content string to evaluate.",
                        "type": "string"
                      },
                      "type": {
                        "description": "Content type — selects which heuristics apply.",
                        "enum": [
                          "prose",
                          "caption",
                          "heading",
                          "outcome",
                          "metric",
                          "cta",
                          "label"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "text"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "system": {
                  "description": "Optional content-system id (e.g. 'ux-writing'); recorded for traceability.",
                  "type": "string"
                }
              },
              "required": [
                "items"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit Content"
            }
          },
          {
            "name": "audit_typography",
            "description": "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 \u003e4 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. NOTE: despite the mention of url above, url mode is DISABLED on this hosted (remote) endpoint - pass nodes instead. audit_typography url-capture is disabled on the hosted (remote) endpoint. Pass a 'nodes' snapshot instead of 'url'.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "nodes": {
                  "description": "Pre-collected text nodes to analyze without rendering.",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "fontPx": {
                        "type": "number"
                      },
                      "fontWeight": {
                        "type": "number"
                      },
                      "lineHeightPx": {
                        "type": "number"
                      },
                      "selector": {
                        "type": "string"
                      },
                      "tag": {
                        "type": "string"
                      },
                      "text": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "selector",
                      "fontPx"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "url": {
                  "description": "REJECTED on this hosted (remote) endpoint; pass nodes instead. (Local/stdio: URL to render and measure, http/https or file://; requires headless chromium.)",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit Typography"
            }
          },
          {
            "name": "audit_tap_targets",
            "description": "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\u003e=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).",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "elements": {
                  "description": "Pre-collected interactive elements to score without rendering.",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "h": {
                        "type": "number"
                      },
                      "role": {
                        "type": "string"
                      },
                      "selector": {
                        "type": "string"
                      },
                      "text": {
                        "type": "string"
                      },
                      "w": {
                        "type": "number"
                      },
                      "x": {
                        "type": "number"
                      },
                      "y": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "selector",
                      "w",
                      "h"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "minSize": {
                  "description": "Minimum tap-target size in px on each axis. Default 44.",
                  "type": "number"
                },
                "url": {
                  "description": "URL to render and measure. Requires headless chromium.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": true,
              "title": "Audit Tap Targets"
            }
          },
          {
            "name": "get_brand_system",
            "description": "Get a complete design system for building an app with branding like a specific company. Say 'Make me an app with branding like Spotify' and get the full token set, style guide, and implementation instructions. Matches against 12 known design systems and provides closest match with ready-to-use CSS.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "company": {
                  "description": "The company whose branding to use (e.g. 'Spotify', 'Stripe', 'Apple', 'Linear', 'Airbnb')",
                  "type": "string"
                },
                "format": {
                  "description": "Output format: 'css' for CSS variables, 'dtcg' for W3C tokens, 'guide' for full implementation guide. Default: guide",
                  "enum": [
                    "css",
                    "dtcg",
                    "guide"
                  ],
                  "type": "string"
                },
                "mode": {
                  "description": "Color mode preference. Default: based on the system's primary mode",
                  "enum": [
                    "light",
                    "dark"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "company"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Brand System"
            }
          },
          {
            "name": "generate_design_system",
            "description": "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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "base_system": {
                  "description": "Start from an existing system as foundation (e.g. 'stripe', 'linear'). Colors will be replaced by brand_color if provided.",
                  "type": "string"
                },
                "brand_color": {
                  "description": "Primary brand hex color (e.g. '#FF6B35'). Auto-generates a full harmonious palette using color theory.",
                  "type": "string"
                },
                "dark_mode": {
                  "description": "Generate dark mode tokens alongside light. Default: true",
                  "type": "boolean"
                },
                "format": {
                  "description": "Export format: html (visual doc page), css (custom properties), dtcg (W3C JSON), figma (Figma Variables JSON), svg (color palette card), all. Default: html",
                  "enum": [
                    "html",
                    "css",
                    "dtcg",
                    "figma",
                    "svg",
                    "all"
                  ],
                  "type": "string"
                },
                "name": {
                  "description": "Name for the design system (e.g. 'Acme Corp', 'NightOwl')",
                  "type": "string"
                },
                "style": {
                  "description": "Aesthetic direction — influences spacing, radii, shadows, motion, and typography. Default: minimal",
                  "enum": [
                    "minimal",
                    "bold",
                    "warm",
                    "corporate",
                    "playful",
                    "dark"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Generate Design System"
            }
          },
          {
            "name": "audit_layout",
            "description": "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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "elements": {
                  "description": "Array of element rects captured from the rendered page via the DevTools snippet",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "computed": {
                        "additionalProperties": false,
                        "properties": {
                          "background": {
                            "type": "string"
                          },
                          "color": {
                            "type": "string"
                          },
                          "fontSize": {
                            "type": "string"
                          },
                          "gap": {
                            "type": "string"
                          },
                          "margin": {
                            "type": "string"
                          },
                          "padding": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "rect": {
                        "additionalProperties": false,
                        "properties": {
                          "h": {
                            "type": "number"
                          },
                          "w": {
                            "type": "number"
                          },
                          "x": {
                            "type": "number"
                          },
                          "y": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "x",
                          "y",
                          "w",
                          "h"
                        ],
                        "type": "object"
                      },
                      "selector": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "selector",
                      "rect"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "viewport": {
                  "additionalProperties": false,
                  "description": "Viewport dimensions {w,h} at capture time",
                  "properties": {
                    "h": {
                      "type": "number"
                    },
                    "w": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "w",
                    "h"
                  ],
                  "type": "object"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit Layout"
            }
          },
          {
            "name": "audit_swiftui",
            "description": "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. Taste-profile bindings are not available on the hosted (remote) endpoint (per-user state is a later phase). Omit 'project'/'profile' to run the stateless SwiftUI audit.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "accent_color_contents": {
                  "description": "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).",
                  "type": "string"
                },
                "profile": {
                  "description": "Taste profile owning the binding. Omit to search all stored profiles for one bound to the project.",
                  "type": "string"
                },
                "project": {
                  "description": "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 APIs) and returned in note_assessments; missing notes count toward the grade.",
                  "type": "string"
                },
                "source": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "SwiftUI source — a single file/view as a string, or an array of file contents. Concatenated before analysis."
                },
                "strict": {
                  "description": "Strict mode — also count warnings as failures for grading. Default: false",
                  "type": "boolean"
                }
              },
              "required": [
                "source"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit Swiftui"
            }
          },
          {
            "name": "audit_screen",
            "description": "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. Taste-profile bindings are not available on the hosted (remote) endpoint (per-user state is a later phase). Omit 'project'/'profile' to run the stateless screen audit.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "elements": {
                  "description": "Elements captured from the rendered screen via an accessibility/view-hierarchy snapshot",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "bgColor": {
                        "description": "Background color behind this element — hex, rgb(), or semantic name",
                        "type": "string"
                      },
                      "fgColor": {
                        "description": "Foreground color — hex (#1c1c1e), rgb(), or a platform semantic name ('secondaryLabel' iOS / 'onSurfaceVariant' Android)",
                        "type": "string"
                      },
                      "fontPt": {
                        "description": "Effective font point/dp size, if text",
                        "type": "number"
                      },
                      "label": {
                        "type": "string"
                      },
                      "rect": {
                        "additionalProperties": false,
                        "properties": {
                          "h": {
                            "type": "number"
                          },
                          "w": {
                            "type": "number"
                          },
                          "x": {
                            "type": "number"
                          },
                          "y": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "x",
                          "y",
                          "w",
                          "h"
                        ],
                        "type": "object"
                      },
                      "role": {
                        "description": "Accessibility role/trait, e.g. button, link, cell, staticText, image, tab, textField",
                        "type": "string"
                      }
                    },
                    "required": [
                      "rect"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "platform": {
                  "description": "Target platform — 'ios' (default, 44pt minimum, iOS semantic colors) or 'android' (48dp minimum, Material semantic roles)",
                  "enum": [
                    "ios",
                    "android"
                  ],
                  "type": "string"
                },
                "profile": {
                  "description": "Taste profile owning the binding. Omit to search all stored profiles for one bound to the project.",
                  "type": "string"
                },
                "project": {
                  "description": "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 notes; results gain note_assessments.",
                  "type": "string"
                },
                "screenshot": {
                  "description": "Optional base64 PNG of the screen, for the caller's reference. Geometry is scored from the snapshot, not decoded pixels.",
                  "type": "string"
                },
                "scroll_settle": {
                  "type": "boolean"
                },
                "viewport": {
                  "additionalProperties": false,
                  "description": "Screen size in pt (iOS) or dp (Android) at capture time, e.g. {w:393,h:852} iPhone 15, {w:412,h:915} Pixel",
                  "properties": {
                    "h": {
                      "type": "number"
                    },
                    "w": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "w",
                    "h"
                  ],
                  "type": "object"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit Screen"
            }
          },
          {
            "name": "audit_ios_screen",
            "description": "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. Taste-profile bindings are not available on the hosted (remote) endpoint (per-user state is a later phase). Omit 'project'/'profile' to run the stateless iOS screen audit.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "elements": {
                  "description": "Elements captured from the rendered screen via an accessibility/view-hierarchy snapshot",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "bgColor": {
                        "description": "Background color behind this element — hex, rgb(), or semantic name",
                        "type": "string"
                      },
                      "fgColor": {
                        "description": "Foreground color — hex (#1c1c1e), rgb(), or a platform semantic name ('secondaryLabel' iOS / 'onSurfaceVariant' Android)",
                        "type": "string"
                      },
                      "fontPt": {
                        "description": "Effective font point/dp size, if text",
                        "type": "number"
                      },
                      "label": {
                        "type": "string"
                      },
                      "rect": {
                        "additionalProperties": false,
                        "properties": {
                          "h": {
                            "type": "number"
                          },
                          "w": {
                            "type": "number"
                          },
                          "x": {
                            "type": "number"
                          },
                          "y": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "x",
                          "y",
                          "w",
                          "h"
                        ],
                        "type": "object"
                      },
                      "role": {
                        "description": "Accessibility role/trait, e.g. button, link, cell, staticText, image, tab, textField",
                        "type": "string"
                      }
                    },
                    "required": [
                      "rect"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "profile": {
                  "description": "Taste profile owning the binding. Omit to search all stored profiles for one bound to the project.",
                  "type": "string"
                },
                "project": {
                  "description": "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 notes; results gain note_assessments.",
                  "type": "string"
                },
                "screenshot": {
                  "description": "Optional base64 PNG of the screen, for the caller's reference. Geometry is scored from the snapshot, not decoded pixels.",
                  "type": "string"
                },
                "viewport": {
                  "additionalProperties": false,
                  "description": "Screen size in pt (iOS) or dp (Android) at capture time, e.g. {w:393,h:852} iPhone 15, {w:412,h:915} Pixel",
                  "properties": {
                    "h": {
                      "type": "number"
                    },
                    "w": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "w",
                    "h"
                  ],
                  "type": "object"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit iOS Screen"
            }
          },
          {
            "name": "audit_ios_privacy",
            "description": "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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "app_json": {
                  "description": "Expo app.json / app.config JSON (managed RN). Its expo.ios.infoPlist, expo.android.permissions, plugins, and extra are audited.",
                  "type": "string"
                },
                "entitlements": {
                  "description": "Optional .entitlements XML",
                  "type": "string"
                },
                "info_plist": {
                  "description": "Raw Info.plist XML (native iOS / bare RN). Provide this OR app_json.",
                  "type": "string"
                },
                "privacy_md": {
                  "description": "Optional PRIVACY.md / privacy policy text to cross-reference against declared permissions and default behavior",
                  "type": "string"
                },
                "source": {
                  "description": "Optional concatenated source (Swift or JS/TS) — enables code-vs-declaration contradiction checks and default-egress detection",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit iOS Privacy"
            }
          },
          {
            "name": "audit_rn",
            "description": "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.) Taste-profile bindings are not available on the hosted (remote) endpoint (per-user state is a later phase). Omit 'project'/'profile' to run the stateless React Native audit.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "color_scheme": {
                  "description": "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.",
                  "enum": [
                    "light",
                    "dark",
                    "automatic"
                  ],
                  "type": "string"
                },
                "profile": {
                  "description": "Taste profile owning the binding. Omit to search all stored profiles for one bound to the project.",
                  "type": "string"
                },
                "project": {
                  "description": "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, haptics, fonts) and returned in note_assessments; missing notes count toward the grade.",
                  "type": "string"
                },
                "source": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "React Native source — a single screen/component as a string, or an array of file contents. Concatenated before analysis."
                },
                "strict": {
                  "description": "Strict mode — also count warnings as failures for grading. Default: false",
                  "type": "boolean"
                }
              },
              "required": [
                "source"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit React Native"
            }
          },
          {
            "name": "list_content_systems",
            "description": "Browse available content design systems — brand voice and tone guides (Conversational Product Voice, GOV.UK, Shopify Polaris, Atlassian). Filter by category or search by name.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "category": {
                  "description": "Filter by category: commerce-saas, government, marketing-saas, productivity-saas",
                  "type": "string"
                },
                "search": {
                  "description": "Search by name, description, or tag",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List Content Systems"
            }
          },
          {
            "name": "get_content_system",
            "description": "Get a brand's content design system — voice attributes, tone shifts by context, vocabulary (use/avoid/never), grammar rules, content patterns for errors/empty-states/buttons/etc., and inclusive language guidance.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "description": "Content system ID (e.g. 'conversational-product-voice', 'gov-uk', 'shopify-polaris', 'atlassian')",
                  "type": "string"
                },
                "section": {
                  "description": "Return just one section. Default: all.",
                  "enum": [
                    "all",
                    "voice",
                    "tone_shifts",
                    "vocabulary",
                    "grammar",
                    "content-patterns",
                    "inclusive-language"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Content System"
            }
          },
          {
            "name": "get_content_principles",
            "description": "Get UX-writing principles — clarity over cleverness, active voice, error-message anatomy, inclusive language, voice vs tone, and more. Filter by the writing context (e.g. 'error messages', 'notifications', 'form labels').",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "context": {
                  "description": "What you're writing for (e.g. 'error messages', 'onboarding copy', 'empty state', 'notification'). Omit to get all UX-writing principles.",
                  "type": "string"
                },
                "format": {
                  "description": "Output format: full (all details), checklist (implications + violations), brief (just summary). Default: full",
                  "enum": [
                    "full",
                    "checklist",
                    "brief"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Content Principles"
            }
          },
          {
            "name": "get_content_pattern",
            "description": "Get content design patterns — copy recipes for error messages, empty-state copy, notifications, and form validation. Returns do's, don'ts, good/bad examples, evidence, and a checklist.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "type": {
                  "description": "Content pattern type",
                  "enum": [
                    "error-messages",
                    "empty-state-copy",
                    "notifications",
                    "form-validation"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Content Pattern"
            }
          },
          {
            "name": "get_research_method",
            "description": "Get research method details — qualitative (interviews, contextual inquiry, diary, field, intercept), quantitative (surveys, analytics, A/B tests, benchmarking, clickstream), or usability (moderated, unmoderated, 5-second, card sort, tree test, heuristic eval). Returns specific protocols, do/don't guidance, evidence, and a checklist. Use when the user is designing a study or asking how to measure something.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "category": {
                  "description": "Which family of methods. Default: all.",
                  "enum": [
                    "qualitative",
                    "quantitative",
                    "usability",
                    "all"
                  ],
                  "type": "string"
                },
                "search": {
                  "description": "Search within methods by name or description.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Research Method"
            }
          },
          {
            "name": "get_metrics_framework",
            "description": "Get a product-metrics framework — HEART (Google), AARRR/Pirate (Dave McClure), North Star Metric, Conversion Funnel, RICE Scoring, or OKRs. Returns structure, when-to-use, pitfalls, and examples. Use when the user asks 'how should we measure success?' or 'what metrics should we track?'",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "description": "Framework id (heart, aarrr, north-star-metric, conversion-funnel, rice-scoring, okrs). Omit to list all.",
                  "type": "string"
                },
                "search": {
                  "description": "Search for a framework by name or summary.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Metrics Framework"
            }
          },
          {
            "name": "get_service_pattern",
            "description": "Get a service design pattern — service blueprinting, human handoff, signup-as-service, omnichannel continuity, or moments of truth / recovery. Returns patterns, do/don't guidance, evidence, and a checklist. Use when the user is designing a service flow, escalation, cross-channel experience, or moment of truth.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "type": {
                  "description": "Service design pattern type",
                  "enum": [
                    "service-blueprinting",
                    "human-handoff",
                    "signup-as-service",
                    "omnichannel-continuity",
                    "moments-of-truth"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Service Pattern"
            }
          },
          {
            "name": "get_service_standard",
            "description": "Get the GOV.UK Service Standard — 14 points the UK government uses to assess whether a public service is ready to launch. Widely applicable as a rigorous service-quality checklist beyond government. Use when the user asks how to evaluate a whole service.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Service Standard"
            }
          },
          {
            "name": "generate_service_blueprint",
            "description": "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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "actors": {
                  "additionalProperties": false,
                  "description": "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.",
                  "properties": {
                    "a": {
                      "additionalProperties": false,
                      "description": "Actor A label (default: 'User'). Use when you want to name the first side (e.g. 'Customer', 'Patient').",
                      "properties": {
                        "label": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "label"
                      ],
                      "type": "object"
                    },
                    "b": {
                      "additionalProperties": false,
                      "description": "Actor B label (e.g. 'Lawyer', 'Doctor', 'Agent'). Presence of this field switches to two-actor layout.",
                      "properties": {
                        "label": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "label"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "b"
                  ],
                  "type": "object"
                },
                "current": {
                  "description": "The current-state blueprint as an array of steps",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "actor_b": {
                        "additionalProperties": false,
                        "description": "Only used when `actors.b` is provided. Captures the other side of the interaction.",
                        "properties": {
                          "action": {
                            "description": "What actor B does in this step",
                            "type": "string"
                          },
                          "evidence": {
                            "description": "Artifact actor B has — case file, notes, record",
                            "type": "string"
                          },
                          "frontstage": {
                            "description": "What actor B sees — their own UI, tools, views",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "backstage": {
                        "description": "What neither actor sees directly — shared systems, internal processes, back-office work",
                        "type": "string"
                      },
                      "delight": {
                        "description": "Designed moment of delight at this step (shown as green callout)",
                        "type": "string"
                      },
                      "evidence": {
                        "description": "In single-actor: artifact user receives. In two-actor: artifact actor A has.",
                        "type": "string"
                      },
                      "frontstage": {
                        "description": "In single-actor: what the user SEES (UI, agent greeting). In two-actor: what actor A sees.",
                        "type": "string"
                      },
                      "label": {
                        "description": "Step label (e.g. 'Discover', 'Sign up', 'First use')",
                        "type": "string"
                      },
                      "pain_point": {
                        "description": "Known pain point at this step (shown as red callout)",
                        "type": "string"
                      },
                      "support": {
                        "description": "Supporting processes, systems, third-party dependencies",
                        "type": "string"
                      },
                      "user_action": {
                        "description": "In single-actor: what the user does. In two-actor: what actor A does.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "label"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "ideal": {
                  "description": "Optional ideal-state blueprint — if provided, output shows current AND ideal side-by-side",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "actor_b": {
                        "additionalProperties": false,
                        "properties": {
                          "action": {
                            "type": "string"
                          },
                          "evidence": {
                            "type": "string"
                          },
                          "frontstage": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "backstage": {
                        "type": "string"
                      },
                      "delight": {
                        "type": "string"
                      },
                      "evidence": {
                        "type": "string"
                      },
                      "frontstage": {
                        "type": "string"
                      },
                      "label": {
                        "type": "string"
                      },
                      "pain_point": {
                        "type": "string"
                      },
                      "support": {
                        "type": "string"
                      },
                      "user_action": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "label"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "service_name": {
                  "description": "Name of the service (e.g. 'Free trial signup', 'Client intake', 'Restaurant reservation')",
                  "type": "string"
                },
                "subtitle": {
                  "description": "Short description or context line under the title",
                  "type": "string"
                }
              },
              "required": [
                "service_name",
                "current"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Generate Service Blueprint"
            }
          },
          {
            "name": "get_brand_principles",
            "description": "Get brand and visual-design principles — logo usage (clear space, min sizes, variants, placement, restraint), gradient usage (hierarchy, palette, contrast, trend vs signature), imagery (consistency, representation, purpose), visual hierarchy, and brand-as-system thinking. Use when the user asks about branding, logos, gradients, imagery, visual consistency, or how to treat a brand across surfaces.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "format": {
                  "description": "Output format. Default: full.",
                  "enum": [
                    "full",
                    "checklist",
                    "brief"
                  ],
                  "type": "string"
                },
                "topic": {
                  "description": "Filter by topic: 'logo', 'gradient', 'imagery', 'hierarchy', 'system', or a freeform search term. Omit to return all brand principles.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Brand Principles"
            }
          },
          {
            "name": "get_brand_trends",
            "description": "Get current brand and visual-design trends — what's working in 2026 and where each trend fits or fails. Includes bento grids, monospace type, neon-on-dark-glass, generative patterns, brutalism rebound, AI-generated imagery, lowercase/mixed case. Each trend is time-stamped — treat as a calibration signal, not a prescription.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get Brand Trends"
            }
          },
          {
            "name": "list_creative_models",
            "description": "Browse Raven's provider-agnostic creative model catalog. These are capability slots for image, video, 3D, audio, character consistency, and creative analysis. Each entry lists typical inputs and best-for guidance.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "capability": {
                  "description": "Filter by capability, e.g. product-photoshoot, text-to-video, brand-kit, ugc-ad.",
                  "type": "string"
                },
                "media_type": {
                  "description": "Filter by media type.",
                  "enum": [
                    "image",
                    "video",
                    "audio",
                    "3d",
                    "campaign",
                    "analysis"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List Creative Models"
            }
          },
          {
            "name": "list_creative_presets",
            "description": "Browse Raven creative presets for product photoshoots, marketplace cards, UGC ads, TV spots, cinematic reveals, social launch packs, storyboards, and infographics.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "media_type": {
                  "description": "Filter presets by media type.",
                  "enum": [
                    "image",
                    "video",
                    "campaign"
                  ],
                  "type": "string"
                },
                "search": {
                  "description": "Search preset name or description.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List Creative Presets"
            }
          },
          {
            "name": "score_creative",
            "description": "Score a creative prompt, script, or ad concept for hook strength, benefit clarity, product signal, call-to-action, channel fit, audience fit, and brand fit. This is a transparent heuristic, not a proprietary prediction model. Local brand profiles are not available on the hosted (remote) endpoint (per-user state is a later phase). Omit 'brand_profile_id' to score the pasted creative statelessly.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "audience": {
                  "description": "Target audience if not in a brand profile.",
                  "type": "string"
                },
                "brand_profile_id": {
                  "description": "Local Raven brand profile ID.",
                  "type": "string"
                },
                "channel": {
                  "description": "Target channel.",
                  "type": "string"
                },
                "creative_text": {
                  "description": "Prompt, script, ad copy, or creative concept to score.",
                  "type": "string"
                }
              },
              "required": [
                "creative_text"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Score Creative"
            }
          },
          {
            "name": "audit_consistency",
            "description": "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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "container_token": {
                  "description": "Project's canonical container width in px (e.g. 1152). When supplied, container divergence is measured against this token rather than the corpus modal.",
                  "type": "number"
                },
                "hero_token": {
                  "description": "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.",
                  "type": "string"
                },
                "pages": {
                  "description": "At least 2 pages to compare. Each entry is {name, html}.",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "html": {
                        "description": "Full HTML source for the page, including any \u003cstyle\u003e blocks.",
                        "minLength": 1,
                        "type": "string"
                      },
                      "name": {
                        "description": "Page route or label (e.g. \"/\", \"/changelog\", \"get-started\").",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "html"
                    ],
                    "type": "object"
                  },
                  "minItems": 2,
                  "type": "array"
                }
              },
              "required": [
                "pages"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Audit Consistency"
            }
          },
          {
            "name": "audit_video_playback",
            "description": "Render a page in headless Chromium and observe whether each \u003cvideo\u003e 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.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "dom_snapshot": {
                  "description": "Pre-collected video observations to classify without rendering (deterministic path)",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "autoplayBlocked": {
                        "description": "True if play() was rejected with NotAllowedError",
                        "type": "boolean"
                      },
                      "currentTimeEnd": {
                        "description": "currentTime recorded after the observe window",
                        "type": "number"
                      },
                      "currentTimeStart": {
                        "description": "currentTime recorded before the play attempt",
                        "type": "number"
                      },
                      "errorCode": {
                        "description": "MediaError.code (0=none, 1=aborted, 2=network, 3=decode, 4=src-not-supported)",
                        "type": "number"
                      },
                      "hasSource": {
                        "description": "True if currentSrc is non-empty OR the element has a src attribute or \u003csource\u003e child",
                        "type": "boolean"
                      },
                      "networkState": {
                        "description": "HTMLMediaElement.networkState (0..3; 3=NETWORK_NO_SOURCE)",
                        "type": "number"
                      },
                      "paused": {
                        "description": "True if the element is paused",
                        "type": "boolean"
                      },
                      "readyState": {
                        "description": "HTMLMediaElement.readyState (0..4)",
                        "type": "number"
                      },
                      "selector": {
                        "description": "CSS selector identifying the video element",
                        "type": "string"
                      }
                    },
                    "required": [
                      "selector",
                      "hasSource",
                      "readyState",
                      "networkState",
                      "errorCode",
                      "paused",
                      "autoplayBlocked",
                      "currentTimeStart",
                      "currentTimeEnd"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "observeMs": {
                  "description": "Milliseconds to wait between currentTime samples after play() attempt. Default: 1000",
                  "type": "number"
                },
                "url": {
                  "description": "URL to render and observe (http/https or file://). Requires headless chromium.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": true,
              "title": "Audit Video Playback"
            }
          }
        ]
      },
      "name": "Raven",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": [
        {
          "registryType": "npm",
          "identifier": "raven-mcp",
          "version": "2.6.0",
          "transport": "stdio"
        }
      ],
      "pageJsonUrl": "https://www.anchorterminal.com/tools/ravenmcp-raven-mcp.json",
      "popularity": {
        "githubStars": 6,
        "npmWeekly": 578
      },
      "registryName": "ai.ravenmcp/raven-mcp",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://mcp.ravenmcp.ai/api/mcp"
        }
      ],
      "repository": "https://github.com/rhinocap/raven-mcp",
      "reviewed": false,
      "slug": "ravenmcp-raven-mcp",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=ai.ravenmcp/raven-mcp",
      "summary": "Design intelligence for coding agents: audits, design systems, and a taste profile agents consult.",
      "updatedAt": "2026-09-23T22:04:08Z",
      "url": "https://www.anchorterminal.com/tools/ravenmcp-raven-mcp",
      "vendor": "ravenmcp.ai",
      "vendorUrl": "https://ravenmcp.ai",
      "version": "2.6.0",
      "websiteUrl": "https://ravenmcp.ai",
      "where": "both",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/ravenmcp-raven-mcp",
    "json": "https://www.anchorterminal.com/tools/ravenmcp-raven-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/ravenmcp-raven-mcp.md",
    "slim": "https://www.anchorterminal.com/tools/ravenmcp-raven-mcp.min.md"
  },
  "markdown": "# Raven\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by ravenmcp.ai (https://ravenmcp.ai)\n- Listed because: It's published in the registry under ravenmcp.ai, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: Design intelligence for coding agents: audits, design systems, and a taste profile agents consult.\n\n## Facts\n\n- MCP registry: `ai.ravenmcp/raven-mcp` 2.6.0\n- Endpoint: https://mcp.ravenmcp.ai/api/mcp (streamable HTTP)\n- Package: npm `raven-mcp` (stdio)\n- Source: https://github.com/rhinocap/raven-mcp\n- Website: https://ravenmcp.ai\n- npm downloads a week: 578\n- GitHub stars: 6\n- Registry entry updated: 2026-09-23\n\n## Tools\n\n- Tools it lists (45, about 16,795 tokens of context, `tools/list` without credentials over MCP 2025-11-25, checked 2026-10-04 22:20 UTC):\n  - `get_principles` (read-only): Get design principles relevant to a UI context. Returns usability heuristics, laws of UX, Gestalt principles, accessibility requirements, typography rules, and…\n  - `get_pattern` (read-only): Get proven UI/UX patterns for a specific design type. Returns do's, don'ts, evidence, and checklists for signup flows, pricing pages, navigation, forms,…\n  - `get_business_strategy` (read-only): Get business and monetization strategies for digital products. Covers monetization models, retention strategies, onboarding optimization, growth mechanics, and…\n  - `evaluate_design` (read-only): Evaluate a design description against UX principles. Returns relevant principles, potential violations, and improvement suggestions. Screenshot pixel-diff is…\n  - `search_knowledge` (read-only): Search across all design principles, UI patterns, and business strategies. Use when you need to find specific guidance or don't know which category to look in.\n  - `get_checklist` (read-only): Get a pre-publish checklist for a specific UI type. Returns actionable yes/no items to verify before shipping.\n  - `get_d4d_framework` (read-only): Get the Design for Delight (D4D) framework templates. Returns customer problem statement, ideal state, hypothesis, LOFA, and experiment templates for…\n  - `list_design_systems` (read-only): Browse available design systems for tokens. Filter by category (component-library, consumer, developer, fintech, framework, platform, productivity) or search…\n  - `get_design_system` (read-only): Get design tokens for a specific design system. Returns colors, typography, spacing, radii, elevation, and motion tokens in W3C DTCG, CSS custom properties, or…\n  - `compose_system` (read-only): Mix tokens from different design systems to create a custom composite. Example: Linear's colors + Stripe's typography.\n  - `audit_page` (read-only): Audit HTML/CSS against Raven's design quality standards. Checks typography (min 13px, weight 400+, modular-scale heading ratios, line-height consistency),…\n  - `score_page` (read-only): Score an HTML/CSS page across 7 design categories (Structure, Typography, Color \u0026 palette, Spacing \u0026 rhythm, Accessibility, Responsive layout, Design tokens),…\n  - `audit_parity` (read-only): Compare iOS vs Android element snapshots against a checklist of named spatial relationships (vertical centering, baseline/left alignment, equal gap/size,…\n  - `audit_ios_a11y` (read-only): Score an accessibility-enriched iOS element snapshot — missing accessibilityLabel/value/traits, sub-44pt tap targets, per-text WCAG contrast, Dynamic Type…\n  - `audit_responsive_visibility` (read-only): 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 /…\n  - `audit_contrast` (read-only): 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…\n  - `suggest_contrast_fix` (read-only): Given failing WCAG color pairs, return the MINIMAL color change that clears the target ratio. For each {fg,bg} pair, computes the smallest foreground…\n  - `audit_url` (read-only): Layer 0 render-and-capture audit: renders a LIVE URL at each viewport×theme, scroll-settles (fires whileInView/IntersectionObserver reveals; plays preload=none…\n  - `audit_content` (read-only): Evaluate an array of content items (headings, prose, CTAs, labels, captions, metrics, outcomes) against UX-writing principles and deterministic heuristics.…\n  - `audit_typography` (read-only): 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…\n  - `audit_tap_targets` (read-only): 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],…\n  - `get_brand_system` (read-only): Get a complete design system for building an app with branding like a specific company. Say 'Make me an app with branding like Spotify' and get the full token…\n  - `generate_design_system` (read-only): 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…\n  - `audit_layout` (read-only): 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,…\n  - `audit_swiftui` (read-only): Audit SwiftUI source against Apple's Human Interface Guidelines. Flags hardcoded .font(.system(size:)) below ~13pt and tiny semantic fonts…\n  - `audit_screen` (read-only): 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…\n  - `audit_ios_screen` (read-only): Audit a rendered iOS screen from a view-hierarchy/accessibility snapshot (and optional screenshot). Alias of audit_screen with platform:\"ios\". Call with no…\n  - `audit_ios_privacy` (read-only): 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…\n  - `audit_rn` (read-only): Audit React Native / Expo source (JSX/TSX + StyleSheet) against the iOS HIG + Android Material conventions RN must satisfy. Flags touchables missing…\n  - `list_content_systems` (read-only): Browse available content design systems — brand voice and tone guides (Conversational Product Voice, GOV.UK, Shopify Polaris, Atlassian). Filter by category or…\n  - `get_content_system` (read-only): Get a brand's content design system — voice attributes, tone shifts by context, vocabulary (use/avoid/never), grammar rules, content patterns for…\n  - `get_content_principles` (read-only): Get UX-writing principles — clarity over cleverness, active voice, error-message anatomy, inclusive language, voice vs tone, and more. Filter by the writing…\n  - `get_content_pattern` (read-only): Get content design patterns — copy recipes for error messages, empty-state copy, notifications, and form validation. Returns do's, don'ts, good/bad examples,…\n  - `get_research_method` (read-only): Get research method details — qualitative (interviews, contextual inquiry, diary, field, intercept), quantitative (surveys, analytics, A/B tests, benchmarking,…\n  - `get_metrics_framework` (read-only): Get a product-metrics framework — HEART (Google), AARRR/Pirate (Dave McClure), North Star Metric, Conversion Funnel, RICE Scoring, or OKRs. Returns structure,…\n  - `get_service_pattern` (read-only): Get a service design pattern — service blueprinting, human handoff, signup-as-service, omnichannel continuity, or moments of truth / recovery. Returns…\n  - `get_service_standard` (read-only): Get the GOV.UK Service Standard — 14 points the UK government uses to assess whether a public service is ready to launch. Widely applicable as a rigorous…\n  - `generate_service_blueprint` (read-only): Render a service blueprint as a self-contained HTML page. Supports two modes: (1) classic Shostack single-actor blueprint — user action, frontstage, backstage,…\n  - `get_brand_principles` (read-only): Get brand and visual-design principles — logo usage (clear space, min sizes, variants, placement, restraint), gradient usage (hierarchy, palette, contrast,…\n  - `get_brand_trends` (read-only): Get current brand and visual-design trends — what's working in 2026 and where each trend fits or fails. Includes bento grids, monospace type,…\n  - `list_creative_models` (read-only): Browse Raven's provider-agnostic creative model catalog. These are capability slots for image, video, 3D, audio, character consistency, and creative analysis.…\n  - `list_creative_presets` (read-only): Browse Raven creative presets for product photoshoots, marketplace cards, UGC ads, TV spots, cinematic reveals, social launch packs, storyboards, and…\n  - `score_creative` (read-only): Score a creative prompt, script, or ad concept for hook strength, benefit clarity, product signal, call-to-action, channel fit, audience fit, and brand fit.…\n  - `audit_consistency` (read-only): Audit multiple pages for cross-page consistency of content-container width and hero heading tier. Pass ≥2 pages ({name, html}) collected from different routes…\n  - `audit_video_playback` (read-only): Render a page in headless Chromium and observe whether each \u003cvideo\u003e actually advances (samples currentTime before/after a play attempt), classifying every clip…\n- How its tools read to an agent (0 errors, 8 warnings, 1 note, about 16,795 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - warn TC11 audit_ios_a11y: none of its 3 parameters has a description\n  - warn TC11 audit_ios_screen: 4 parameters without a description: elements[].rect.h, elements[].rect.w, elements[].rect.x, elements[].rect.y\n  - warn TC11 audit_layout: none of its 2 parameters has a description\n  - warn TC11 audit_page: 3 parameters without a description: viewport, viewport.h, viewport.w\n  - warn TC11 audit_parity: none of its 3 parameters has a description\n  - warn TC11 audit_screen: 5 parameters without a description: elements[].rect.h, elements[].rect.w, elements[].rect.x, elements[].rect.y, scroll_settle\n  - warn TC11 generate_service_blueprint: 3 parameters without a description: ideal[].actor_b.action, ideal[].actor_b.evidence, ideal[].actor_b.frontstage\n  - warn TC23 server: 45 tools, about 16,373 tokens of definitions\n  - note TC24 server: 45 of 45 tools have no outputSchema\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/ravenmcp-raven-mcp.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "Raven",
        "url": ""
      }
    ],
    "description": "Raven, an MCP server by ravenmcp.ai, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. Design intelligence for coding agents: audits, design systems, and a taste profile agents consult.",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "Raven",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/ravenmcp-raven-mcp",
    "published": "",
    "section": "indexed",
    "title": "Raven: MCP server, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/tools/ravenmcp-raven-mcp"
  },
  "tokens": {
    "markdown": 2950,
    "slim": 2880
  },
  "version": 1
}
