MCP server exposing brandkit recolor, verify, trim, and gen pipeline for brand asset generation and palette management
Four well-defined tools with complete input schemas and detailed descriptions. Tool names use verb_noun pattern (recolor, verify, trim, gen). Descriptions are substantive (194 - 450 chars), explaining WHAT each tool does and WHEN to use it. All parameters have type declarations and descriptions. Output schemas are documented in descriptions. However, parameter descriptions lack actionable constraints (e.g., no regex patterns, min/max for numeric fields, or enum validation hints). Error handling is mentioned but not formalized in tool descriptions. brandkit_gen is complex and could benefit from clearer dependency documentation (requires FAL_KEY, RECRAFT_API_KEY).
End-to-end logo-candidate pipeline: prompt + brand palette → fal.ai Ideogram v3 generate → Recraft vectorize → palette-snap recolor → palette-gate verify. Returns palette-locked survivor SVGs inline as text — no shared filesystem needed. Result shape: { provider, vectorize, count, palette, negative, survivors: [{name, svg, raster_base64?}], dropped: [{name, reason, error?, offenders?}] }. Survivors are guaranteed-clean — no offenders, every color in palette. Requires FAL_KEY and RECRAFT_API_KEY in the MCP server's environment. Soft-cap count at 6 to keep response payloads sane. Set dryRun=true to preview the requests without sending them.
Snap every hex color in an SVG to the nearest color in the brand palette. Returns the recolored SVG as text. Errors if the SVG contains rgb()/hsl()/named colors — convert those upstream first.
Tighten the root viewBox of an SVG to the rendered geometry bbox so the mark fills its canvas at every output size. Vectorizers (Recraft, vectorizer.ai) emit marks padded inside a much larger square — every favicon and og-image inherits that padding and renders tiny. Trim fixes that. Returns the rewritten SVG as text. SVG-in / SVG-out, no network. Set stripBackground=true to also drop vectorizer-added canvas-fill rects.
Verify that every color in an SVG is in the brand palette. Returns JSON { ok, offenders }. offenders[].kind is 'off-palette' (with suggestion) or 'non-hex'.
Parameter constraints not formalized in descriptions. padPct, count, and other numeric/enum fields lack actionable validation hints (e.g., 'count: 1 - 6, default 4' should appear in description, not just schema).
brandkit_gen description mentions environment variables (FAL_KEY, RECRAFT_API_KEY) but does not explain how to provide them or what happens if missing. No recovery guidance for auth failures.
No error classification or recovery guidance in tool descriptions. E.g., brandkit_recolor 'Errors if SVG contains rgb()/hsl()/named colors', but no guidance on how to fix or what to try next.
Output schemas documented in descriptions but not formally declared in tool definitions. LLMs cannot parse prose descriptions to extract field types; structured output schema declarations are needed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
brandkit_gen accepts 'provider' and 'vectorize' enums but marks Replicate and Vectorizer.ai as 'stubs'. No error handling or user guidance when stub providers are selected.