Read-only PostgreSQL Model Context Protocol server
PostgreSQL MCP server provides 7 read-only tools with basic schemas and minimal descriptions. All tools have input schemas with proper JSON Schema structure (type, additionalProperties, required arrays). However, descriptions are extremely terse (10-34 chars, well below the 50-200 char LLM-optimized baseline). No parameter descriptions exist, LLMs cannot infer what 'schema' or 'sql' parameters control. Output schemas are undocumented. Error handling is absent from visible code. Tools follow verb_noun naming (postgres_get_*, postgres_list_*) but descriptions lack WHEN/WHY context. No tool annotations (readOnlyHint, etc.) despite all being read-only. Composition is sound (each tool does one thing), but parameter naming could be more explicit (e.g., 'schema_name' vs 'schema').
Describe table columns
Get PostgreSQL server information
List visible PostgreSQL databases
List indexes for a visible table
List visible schemas in the current database
List visible tables and views in a schema
Run one strict read-only SELECT query
All tool descriptions are under 20 characters (10-34 chars observed). Descriptions lack WHAT/WHEN/WHY context required for LLM tool selection.
No parameter descriptions exist. LLMs cannot infer what 'schema', 'table', or 'sql' parameters control. Rubric requires every parameter to have a non-empty description explaining its purpose and constraints.
Output schemas are not documented. LLMs cannot plan downstream calls or extract required fields (e.g., table names from list_tables). Rubric requires documented return types for all tools.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being read-only. Annotations enable agents to reason about safety and retry logic.
postgres_query accepts free-form SQL with only a minLength/pattern constraint. No enum of allowed query types, no documentation of what queries are safe, no error guidance if a write query is attempted. Invites SQL injection and misuse.