Publication-quality plots from CSV/TXT/DAT files — CLI, Python API, and MCP agent tool
MultiFunctionPlotter provides 4 plotting tools with explicit schemas and descriptions, but has significant gaps in parameter clarity, error handling guidance, and output documentation. Tool names follow verb_noun pattern (plot, plot_function, plot_overlay, plot_grid) which is good. However, descriptions are inconsistent in depth, many parameters lack clear constraints or examples of valid values, and no output schemas are documented. Security is a concern: file paths are directly exposed as parameters without path traversal validation, and the subprocess-based implementation risks command injection. Error handling is minimal, only exit code checking with generic error messages. No tool annotations (readOnlyHint/destructiveHint) are present despite tools performing filesystem writes.
Plot a single data series from a CSV, TXT, or DAT file.
Plot a mathematical function directly — no data file needed. Uses numpy (np.) functions. Parameters can be embedded in the expression.
Create a grid of subplots, each with one or more data series.
Overlay multiple data series (from one or more files) onto a single plot.
No output schemas documented for any tool. LLMs cannot infer return types, plan downstream calls, or extract needed fields. All tools return 'Done.' or error message as plain string.
File path parameters (file, save) have no path traversal validation. A malicious agent or prompt injection could pass '../../etc/passwd' or '/etc/shadow', risking unauthorized file access. No description warns of path constraints.
plot_function accepts arbitrary Python expressions in 'expression' parameter (e.g., 'f(x) = np.sin(x)'). Without input validation, expressions like '__import__("os").system("cmd")' could trigger code execution via eval(). Subprocess safety depends entirely on Python's eval() constraints, which are insufficient.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Style parameter in 'plot' tool lists 18+ valid values in docstring but uses no enum constraint in schema. LLMs will hallucinate invalid styles like 'smooth', 'ribbon', 'heatmap3d', forcing retries.
No error handling documentation or recovery guidance. Tools return generic exit codes; errors like 'file not found' or 'invalid column index' are not actionable for LLMs. No suggestion for next steps (e.g., 'call list_files() to find available data').
plot_overlay and plot_grid accept complex nested structures (array of dicts with variable keys) without schema documentation. Parameter descriptions don't explain required vs optional keys in nested dicts.
Tools perform filesystem writes (saving PNG/PDF files) but lack tool annotations (destructiveHint). LLMs cannot reason about side effects; no warning that repeated calls with same 'save' path overwrite previous output.
plot_overlay and plot_grid documentation doesn't clarify when to use each vs plot(). No guidance on composition or discovery hints (e.g., 'Call plot_overlay for multiple series from different files; use plot_grid for subplots').