MCP server that provides SQL query execution and database schema inspection for an e-commerce SQLite database (Olist dataset). Exposes resources for table discovery and schema inspection, and a tool for executing SELECT queries.
Single tool with adequate naming (run_sqlite_query) and clear description (194 chars, within baseline 34-392). Input schema present with type and description. Output schema documented in description. However, no parameter validation constraints (enum, min/max), no error recovery guidance, and security validation is basic (string prefix check only). Resources (schema://tables, schema://{table_name}) are well-documented but tool-focused evaluation shows moderate gaps in LLM-optimization patterns.
MCP Tool: Safely executes SELECT queries against the E-commerce dataset by Olist SQLite database. **Security**: Read-only enforcement - rejects INSERT, UPDATE, DELETE, DROP, etc. **Args**: query (str): SQL SELECT query to execute **Returns**: dict: JSON-serializable response with: - `fail` (bool): False on success, True on error - `data` (list): List of row dicts with column names as keys on success - `error_message` (str): Error details if `fail=True`
Input validation is weak: only checks if query starts with 'SELECT' via string prefix. Vulnerable to comment-based injection (e.g., 'SELECT * FROM users; -- DROP TABLE'). No parameterized query support or AST parsing.
Error messages lack recovery guidance. 'Error executing query: <exception>' tells LLM nothing actionable. Should categorize as retryable vs. user-fixable and suggest next steps.
No pagination or result limits documented. Tool description does not state max rows returned. Large result sets could exhaust context window.
Parameter 'query' lacks format constraints in schema. No mention of max query length, forbidden keywords beyond SELECT, or timeout behavior. LLMs may pass malformed or excessively long queries.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Tool does not declare permissions or scope (e.g., 'read:database'). Audit trail and permission gating are absent, limiting compliance traceability.