MCP server for design inspiration and Tailwind component generation
TailwindDesigner has well-structured tool definitions with complete schemas and descriptions for all 5 tools. All parameters are typed with enums and constraints (min/max). Descriptions are present and actionable (avg ~80 chars). However, output schemas are not documented, tools return text responses without structured field definitions, forcing LLMs to parse unstructured JSON. Error handling is basic (isError flag + text message) but lacks recovery guidance. Tool composition is sound (single responsibility), but the generate-tailwind-component tool returns a placeholder message rather than actual output, limiting practical utility. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications.
Generate Tailwind component from saved designs
Get trending designs
Remove design from collection
Save design to collection
Search for designs
Output schemas not documented. Tools return unstructured text responses (JSON.stringify or plain text) without declaring field types or structure. LLMs cannot plan downstream calls or extract typed data reliably.
Error handling lacks recovery guidance. Errors return isError=true + text message but do not suggest next steps (e.g., 'Try search_designs() first' or 'Check image ID format'). Agents cannot self-correct.
Tool annotations missing. Risk classifications (READ_ONLY, WRITE, DESTRUCTIVE) are documented in metadata but not exposed via MCP tool annotations (readOnlyHint, destructiveHint, idempotentHint). Clients cannot determine safety without parsing descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
generate-tailwind-component returns placeholder text instead of actual Tailwind component code. Tool is non-functional, returns a description of what it would do rather than executable output. Agents cannot use the result.
Pagination not implemented. search-designs and get-trending-designs accept limit but do not return total_count, next_cursor, or offset. Large result sets could exceed context window; no way to fetch additional pages.