MCP server giving LLM agents access to databases, files, graphs, and a full data science toolkit — 70 tools across 13 database types and 20+ file formats.
LocalData MCP presents 15 tools with inconsistent quality across naming, descriptions, and schema clarity. While tool names generally follow verb_noun conventions (tool_hypothesis_test, tool_anova_analysis, solve_linear_program), descriptions vary significantly in quality and completeness. Critical issues: (1) Parameter schemas show type information but many lack actionable constraints (enums, ranges, patterns). (2) Some descriptions are too generic ('Run hypothesis test on query results') and lack context for when to use the tool vs. alternatives. (3) A fundamental architectural problem: multiple tools accept a raw SQLAlchemy 'engine' parameter of type 'Engine', which violates the secret-injection and natural-identifiers patterns, engines often embed credentials and force the LLM to manage database connection objects. (4) Output schemas are not documented; the source code snippets show only function signatures, not the shape of returned data. (5) No error recovery guidance in descriptions. The server reads as early-stage with good intent but incomplete execution against production-grade patterns.
Perform network analysis on graph data from database.
Execute query using enhanced connection management with enterprise security.
Get comprehensive status for one or all databases.
Initialize all databases found in configuration.
Solve constrained optimization problem from database data.
Solve assignment problem from database cost matrix.
Solve linear programming problem from database data.
SQLAlchemy Engine objects exposed as tool parameters violate secret-injection and natural-identifiers patterns. Engine objects often embed connection credentials and force LLMs to reason about database connection lifecycle. Should accept database_name (string) instead and resolve internally.
Output schemas are not documented anywhere in the source. Tools return results but the LLM must infer field names, types, and structure from live execution. This breaks composition (tool A's output cannot reliably feed tool B) and increases errors.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 49 | - | v1 |
Test whether nearby locations hold similar values.
Perform ANOVA analysis on query results.
Report which geospatial backends are installed and what they enable.
Calculate effect sizes for group comparisons.
Score predictions that are already stored alongside their actual values.
Locate statistically significant hot and cold spots (Getis-Ord Gi*).
Fit a regression model on query results.
Run hypothesis test on query results.
Enum values are mentioned in descriptions but not formally declared in schemas. E.g., tool_fit_regression mentions 'linear' as model_type default but no enum constraint shows valid options (linear, polynomial, logistic, ridge, lasso?). This invites LLM hallucination of invalid values.
Descriptions are too generic and lack context for when to use each tool vs. alternatives. E.g., 'Calculate effect sizes for group comparisons' does not explain which metric (Cohen's d? eta-squared?) or typical use cases. Tool descriptions should follow the pattern: WHAT + WHEN + RETURNS.
No error recovery guidance in any tool description. E.g., if execute_enhanced_query fails with 'query timeout', the LLM has no hint to retry with a smaller chunk_size or fewer rows. Should include actionable error recovery hints.
Destructive and sensitive operations lack confirmation/dry-run support. initialize_all_configured_databases and similar write operations should offer a 'dry_run' parameter or a separate 'preview' tool. Agents make mistakes and need safeguards.
Multiple tools accept Python expression strings (e.g., objective_function in optimize_constrained, constraint_functions list). This invites code injection, parsing errors, and LLM hallucination of invalid syntax. Should either use a structured format (algebraic notation, symbolic math) or provide strict validation and clear examples.
Parameter relationships are undocumented. E.g., in tool_hypothesis_test, does 'group_column' only apply when test_type='t-test'? In optimize_constrained, does constraint_functions list length match constraint_types list length? Undocumented dependencies cause silent misuse.
No rate limiting or timeout configuration visible. Long-running analytics tools (tool_hypothesis_test, fit_regression) could hang or overwhelm resources. Should declare expected runtime ranges and timeouts.
No pagination or result size limits documented. Queries could return thousands of rows, exhausting context. Tools should cap results (e.g., max 100 rows) and offer limit/offset parameters.