Tuxido provides 4 tools with partial schemas and descriptions. Two tools (validate_tui and get_framework_info) are defined in a CLI module and referenced in the MCP server via a dictionary structure (MCP_TOOLS), while two identically-named tools (validate_tui_tool and get_framework_info_tool) are explicitly registered via fastmcp decorators. The schemas are visible and reasonably well-formed with proper enums and defaults. Descriptions are present and actionable (10-200 chars range, well within baseline). However, critical issues reduce the score: (1) Tool duplication, validate_tui/validate_tui_tool and get_framework_info/get_framework_info_tool appear to be redundant, creating ambiguity for LLM selection and violating single-responsibility principle. (2) Output schema documentation is missing, tools return dicts but the structure is undocumented for downstream chaining. (3) Error handling is minimal, no guidance on recovery, categorization, or actionable error messages. (4) Parameter descriptions exist but lack format constraints (e.g., code param has no length guidance, filename has no validation rules). (5) STDIO-only transport caps score at 50 regardless of definition quality.
Get information about the installed Textual framework including version, available widgets, and deprecated APIs. Use this before generating code to ensure you're using valid APIs.
Get information about the installed Textual framework. Use this before generating Textual code to ensure you're using valid widgets and avoiding deprecated APIs.
Validate a Textual TUI application for syntax errors, forbidden imports, and async patterns. Use this tool after generating Python code to check for common issues.
Validate a Textual TUI application. Use this tool after generating Python code for Textual apps to check for syntax errors, forbidden imports, and async patterns.
Duplicate tools with identical functionality (validate_tui vs validate_tui_tool, get_framework_info vs get_framework_info_tool). LLMs cannot distinguish between them; composition and selection are ambiguous.
Output schemas not documented. Tools return dicts with fields like 'status', 'errors', 'summary', 'metadata' but no formal schema is visible to clients. Downstream tools cannot infer what fields to extract.
Error handling lacks recovery guidance. 'Code cannot be empty' returns an error dict but does not tell the LLM what to do next or how to recover.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Parameter 'code' has no length constraints. LLMs could pass multi-megabyte strings. Baseline rubric requires format/range guidance in descriptions.
Parameter 'filename' is generic and lacks validation rules. No guidance on file extensions, path traversal protection, or valid naming constraints.
No pagination guidance for frameworks with many widgets. If get_framework_info returns 100+ widgets, context window explodes. Baseline requires pagination or result limits.