Production-grade MCP server for PostgreSQL with schema-awareness and safety guardrails.
Server has 8 tools with explicit schemas and descriptions, but quality is inconsistent. Tool names follow verb_noun convention (query, list_tables, describe_table). Descriptions are present but generic, most lack context on WHEN to use each tool or what distinguishes them. Parameter descriptions are sparse: 'sql' is described, but 'context' in nl_query has no description. Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance. Security concerns: nl_query accepts arbitrary 'context' object without validation; confirm_ddl token mechanism is undocumented. Pagination is present (page, page_size) but lacks total_count or next_cursor in response. Overall: functional but below production baseline.
Confirms and executes high-risk DDL operations after receiving a validation token.
Returns detailed column, index, and foreign key definitions.
Run EXPLAIN (FORMAT JSON) and attach cost estimate and plan summary.
Lists all tables in the specified schema.
Intelligently translates natural language into validated, optimized SQL and executes it.
Executes a validated PostgreSQL query with parameterized inputs (Tier: READ_ONLY/READ_WRITE).
Resolve exact table names, column names, types, nullability, and constraints.
nl_query parameter 'context' lacks description and type constraints. LLM cannot infer what object structure is expected.
No output schemas documented. LLMs cannot predict response structure (fields, types, pagination format). Baseline: 100% of A+ tools document return types.
Pagination (page, page_size) lacks total_count or next_cursor in response. Large result sets will blow context window without proper pagination metadata.
confirm_ddl token mechanism is undocumented. How is the token generated? How long is it valid? What happens if token is invalid? No recovery guidance.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Executes multiple write operations inside an explicit BEGIN/COMMIT block.
Error handling is minimal. No error classification (retryable vs fatal). No actionable error messages. LLM cannot self-correct on invalid input.