Policy-enforced SQLite MCP server that gives an agent read access to a database without giving it the database. The boundary is enforced by SQLite's own authorizer and a read-only connection, not by inspecting SQL text.
Two tools with clear, concise descriptions (avg 115 chars, within baseline 34-392). Both have proper JSON Schema with type definitions. However, parameter descriptions are minimal or absent: sql_query lacks guidance on format/constraints; describe_schema has no parameters. No output schema documentation. Error handling returns isError=true with text, but lacks recovery guidance or categorization. Tool names follow verb_noun pattern (sql_query, describe_schema) and are appropriately specific for a guardrail server. Composition is sound, each tool has one responsibility. Missing: parameter validation rules in descriptions, output schema docs, error classification, and idempotent/readonly hints.
List the tables and columns this server exposes. Anything not listed here cannot be read, so do not try.
Run one read-only SELECT against the database. Only allowlisted tables and columns are readable; writes, multiple statements and PRAGMA are refused. Results are capped and the response says so when truncated.
sql_query parameter 'sql' lacks format/constraint guidance. Description says 'A single SELECT (or WITH ... SELECT) statement' but does not specify: max length, forbidden keywords (PRAGMA, INSERT, UPDATE, DELETE), or example valid input. LLMs may attempt multi-statement or write queries despite the policy.
No output schema documented for either tool. sql_query returns formatted text with row counts and column headers; describe_schema returns table/column listings. LLMs cannot plan downstream operations or extract structured data without knowing the response format.
Error responses lack recovery guidance. PolicyViolation and generic exceptions return 'Refused: <message>' or 'Refused: internal error.' with isError=true, but do not categorize errors (retryable vs user-fixable vs fatal) or suggest next steps. An LLM cannot distinguish 'table not in allowlist' from 'syntax error' from 'timeout'.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Tool annotations missing. Neither tool declares readOnlyHint, destructiveHint, or idempotentHint. Both are read-only and idempotent, but the MCP spec (2026-07-28) expects these hints in the tool definition to guide agent planning and safety checks.
describe_schema has no parameters but inputSchema declares 'properties: {}' without explanation. The tool is discovery-only and takes no input, but the description does not state 'Call this first to see available tables and columns before querying.' This misses a dependency hint that guides multi-step planning.