Sovereign brand MCP that live-reads tokens, voice rules and logos from the canonical design-system folder. Provides a query layer over design tokens, brand voice rules, product identity, and component specifications without copying or hardcoding any brand values.
AGLAYA Design System MCP demonstrates strong naming conventions (all tools start with action verbs: get_, list_, check_, is_), comprehensive descriptions (most 150-300 chars, well above 10-char minimum), and clear parameter documentation. All 15 tools have explicit descriptions and input schemas with type definitions. However, output schemas are documented only in prose within descriptions, not as formal JSON Schema structures. Error handling via _guard() wrapper is present but generic (returns {error: str(e)}). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being read-only. Parameter descriptions are strong but lack explicit enums for constrained values (e.g., 'category' in list_tokens accepts 'color, type, spacing, radius, motion, shadow, other' but not declared as enum). Overall: solid foundation, minor schema formalization gaps.
Analyse `text` against the brand voice — tone and vocabulary ONLY, never commercial or legal argument (the reply carries that scope note; a clean result is not permission to publish). Flags off-brand terms (with the AGLAYA-correct replacement, e.g. "solutions" -> "systems", "newsletter" -> "Dispatch"), forbidden phrases, exclamation marks, emoji, and rhetorical warmth questions. Returns {clean, findings}.
A product's accent color: token, hex, oklch, cross-checked against the live CSS token. Two-level doctrine: the accent is first-class on that product's surface (CTA allowed, no proportion cap), never on the master.
Full spec for one component: token refs, per-variant/structural values, states, and rules. `id` accepts the id ('button') or display name. Colors cite colors_and_type.css tokens — resolve them with get_token.
Resolve a product glyph SVG. Variant keys are manifest-driven: most products use 'white' | 'accent' | 'fill'; ConsentFlow is the exception with a colour isotipo ('color' | 'light'). Omit `variant` for the default ('accent' if present, else the first available).
Resolve a product lockup SVG. layout: 'lockup' (horizontal) | 'stacked' | product-specific ('lockup-outlined', 'lockup-ondark' for ConsentFlow).
Output schemas documented only in prose descriptions, not as formal JSON Schema. LLMs cannot parse unstructured docstring descriptions to infer response structure for downstream tool chaining.
Constrained parameters lack enum declarations. 'category' in list_tokens accepts 'color, type, spacing, radius, motion, shadow, other' but is defined as free-form string. LLMs may hallucinate invalid values.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all 15 tools being read-only. Clients cannot infer safety properties without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2025-06-18+ | v2 |
Resolve a logo variant to its canonical file under assets/. variant: '<isotipo|logotipo>-<color>' — color accepts es/en aliases (rojo/red, blanco/white, negro/black, color). fmt: 'svg' (default) or 'png'. Example: get_logo("isotipo-rojo") -> path to assets/isotipo/svg/aglaya-isotipo-rojo.svg.
The hard brand rules read live from docs/BRAND-RULES.md. scope: 'master' (default) — the rigid marca-madre rules: AGLAYA uppercase, zero radius, 3 colors only, no emoji / Lucide / Heroicons, two-line headline with the second line in brand red, etc. 'product' — the product-surface rules: everything inherited from master EXCEPT color exclusivity; the product accent is first-class (allowed on CTAs, no proportion cap).
Full identity record for one product (accent, functions, glyph/lockup paths, exceptions). `id` accepts the slug ('kanban-desk') or display name.
A product's voice. Single-voice doctrine: returns the one AGLAYA voice for every product (per-product voice is intentional absence, not a gap).
Return the live value of a single design token from colors_and_type.css. `name` accepts 'color-brand' or '--color-brand'. Shape: {"token": "--color-brand", "value": <live from the CSS>}. The example deliberately shows no value: a docstring that prints the red is the copy this tool exists to make unnecessary, and it would be read as authoritative the day the red moves.
Return the brand voice rules read live from docs/BRAND-RULES.md: tone, evidence (how far a claim may go), shape (sentence-level writing rules), pronouns (you/we), casing, protected vocabulary, forbidden patterns, and the final check (the questions a text must answer before it ships).
Is `term` on-brand? Protected vocabulary returns allowed=True; off-brand terms return allowed=False plus the correct AGLAYA term.
List UI component specs (button, card, input, badge…) with their variants, read live from components/components.json.
List the AGLAYA product roster read live from products/products.json: id, name, accent (hex + token), functions, sacred flag. Includes the monolithic model + single-voice markers and any removed products.
List design tokens, optionally by category. Categories: color, type, spacing, radius, motion, shadow, other. Omit `category` for all tokens.
Error handling is generic: _guard() wrapper returns {error: str(e)} without recovery guidance. Per pattern:recovery-guide, errors should suggest next steps (e.g., 'Product not found. Call list_products() to see available products.').
Parameter descriptions lack format/constraint details. E.g., 'variant' in get_logo says '<isotipo|logotipo>-<color>' but does not specify case sensitivity, whether hyphens are required, or exact color aliases accepted.