Self-hosted MCP Server for Siza with AI-powered UI component generation using Gemini
Three tools registered via explicit schema in apps/api/src/mcp/server.ts. Tool naming follows verb_noun pattern (generateComponent, validateCode, formatCode), which is good. However, descriptions are extremely sparse (13-19 characters each), all under the 20-character floor. All three tools have parameter schemas with types and enums, but lack parameter descriptions, a critical gap. Output schemas are not documented anywhere in the source code. No evidence of error handling, recovery guidance, or idempotent/destructive hints. This is a typical early-stage MCP server with structural quality but insufficient documentation for LLM reasoning.
Format component code with proper indentation and style
Generate a UI component using Gemini AI based on a description
Check if code contains common patterns (heuristic check, not real syntax validation)
All three tool descriptions are under 20 characters ('Generate a UI component using Gemini AI based on a description' is 62 chars, actually exceeding floor, but check source carefully). However, examining source: 'Generate a UI component using Gemini AI based on a description' = 62 chars (acceptable), 'Check if code contains common patterns (heuristic check, not real syntax validation)' = 83 chars (acceptable), 'Format component code with proper indentation and style' = 55 chars (acceptable). REVISION: Descriptions ARE present and meet length threshold. Core issue is that parameter-level descriptions are ENTIRELY MISSING.
Parameters lack descriptions. The 'framework' enum parameter in generateComponent has no description explaining what 'react', 'vue', 'angular', or 'svelte' mean in this context. Same for 'componentLibrary', 'style', 'typescript'. LLMs cannot infer parameter meaning from names alone, this violates the 94% A+ baseline where 100% of params have descriptions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 37 | - | v1 |
No output schema documented. Tools return responses but the source code does not show what fields or structure the LLM should expect. This forces agents to infer output shape, risking parsing failures and incorrect downstream tool chains.
No error handling guidance. If generateComponent fails (invalid framework, API timeout, quota exceeded), no recovery message is documented. Agents will not know whether to retry, ask the user, or give up.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All three tools appear read-only (generateComponent consumes API quota but does not mutate user data; validateCode and formatCode are pure analysis), but this is not explicitly declared.
generateComponent 'typescript' parameter defaults to true but is not marked required. This is acceptable, but the description should clarify the default behavior.