Model Context Protocol server for PostgreSQL database inspection and querying
Server has 3 tools with clear naming (verb_noun pattern) and good descriptions (100-150 chars each). All tools declare ToolAnnotations (readOnlyHint=true). However, input schemas are incomplete: postgresql_list_tables has empty input schema ({}), and postgresql_describe_table lacks minLength/maxLength in visible schema definition. Output schemas are not documented, callers cannot infer return structure. Error handling is minimal; no recovery guidance or actionable error messages. Parameter descriptions are present but generic. No pagination support despite potential for large result sets.
Queries information_schema.columns to return column details for a table.
Executes read-only SQL queries (SELECT, etc). Safe to auto-approve. Uses READ ONLY transaction mode to ensure no data modification can occur. Automatically rolls back any transaction to prevent accidental commits.
Returns a list of all table names in the public schema. Filters out system tables and returns only user-created tables.
postgresql_list_tables has empty input schema ({}).
No output schemas documented for any tool. Callers cannot infer return structure (e.g., list_tables returns List[str], describe_table returns List[Dict[str, Any]]). LLMs need explicit return type documentation to plan downstream calls.
No pagination support. postgresql_list_tables and postgresql_execute_read_query can return unbounded results. Large result sets blow context windows. Missing limit/offset parameters and result count.
Error handling is minimal. No recovery guidance. Errors from database operations (connection failures, query syntax errors, table not found) are wrapped in generic 'Database operation failed' messages. LLMs cannot self-correct.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
postgresql_execute_read_query accepts queries up to 100,000 chars with no validation. No query complexity limits, no timeout enforcement visible. Agents could pass expensive queries causing resource exhaustion.