An MCP server for generating line, bar, pie, and histogram charts from JSON data.
This server has significant quality gaps across all dimensions. All four tools are explicitly defined with @mcp.tool() decorators in v0.py, visible in the source code. However, critical issues include: (1) parameter descriptions in the rubric examples contain literal example values (e.g., 'e.g., {"x": [1, 2, 3], "y": [10, 15, 13]}'), which violate the constraint against example values in descriptions; (2) the 'path' parameter across all tools lacks validation rules, format constraints, or guidance on relative vs. absolute paths; (3) chart title parameters (chart_title, x_title) are mentioned in the rubric but not consistently present across all tools (pie_chart lacks x_title); (4) error handling returns unstructured error messages without recovery guidance or actionable next steps; (5) output schemas are undocumented, the description states 'return the file path' but the actual return type is Dict[str, Any] with 'status' and 'file_path' or 'message' fields, which are not formally documented; (6) no validation error messages guide the LLM to correct invalid data structures; (7) code contains commented-out normalize_path() function and unused output_file variable references, suggesting incomplete development. The tool names follow the generate_X_chart pattern, which is appropriate, but descriptions are generic and under 100 chars, lacking context for when/why to select each tool over alternatives.
Generate a bar chart from JSON data and return the file path.
Generate a histogram from JSON data and return the file path.
Generate a line chart from JSON data and return the file path.
Generate a pie chart from JSON data and return the file path.
Example values in parameter descriptions (e.g., '{"x": [1, 2, 3], "y": [10, 15, 13]}') violate the constraint against literal examples. LLMs will reuse these values verbatim in real calls, causing failures.
Output schema is undocumented. Actual return type is Dict[str, Any] with conditional keys ('file_path' on success, 'message' on error), but this structure is not formally declared in the tool definition. LLMs cannot reliably extract the file path or know when an error occurred.
Path parameter lacks validation rules and format guidance. No documentation on whether relative paths are resolved against cwd, whether directories are auto-created, or what happens if the path is invalid. Code attempts ensure_directory_exists() but this is not promised in the parameter description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 37 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Error responses do not guide recovery. A response like 'Invalid data structure for line chart' tells the LLM nothing about how to fix it (which fields are missing? what are valid types?). Should return 'Invalid data structure: expected {"x": [numbers...], "y": [numbers...]}, got: <actual keys>'. [Source: pattern:recovery-guide]
Tool descriptions are generic and under 100 characters. They do not explain WHEN to use each tool (e.g., when is line_chart preferred over bar_chart?), what data distributions they're suited for, or what the output file format is (PNG vs SVG vs other).
Inconsistent parameter sets across tools. generate_pie_chart lacks x_title (makes sense semantically), but this is not explained. Other tools have optional chart_title, is this always applicable? What if the user doesn't want a title? Description should state whether omitting it suppresses the title or uses a default.
Source code contains commented-out normalize_path() function and references to undefined output_file variable in try blocks (e.g., 'ensure_directory_exists(output_file)' where output_file is never assigned). This suggests incomplete development and will cause runtime NameError exceptions.