A Model Context Protocol server for PostgreSQL database access with full read/write capabilities, transaction management, and schema introspection
Server has 6 tools with basic schemas and descriptions, but significant quality gaps. Tool names lack clear verb-noun structure (execute_dml_ddl_dcl_tcl is 24 chars and combines multiple operations). Descriptions are present but generic, many under 100 chars and lack WHEN/WHY context. Parameters have types but descriptions are minimal (e.g., 'transaction_id' param: 'The ID of the transaction to commit' is only 40 chars, lacks format guidance). No output schemas documented. Error handling returns JSON but lacks recovery guidance. Tool descriptions are in Chinese, reducing LLM clarity. No parameter constraints (enums, ranges, patterns). Critical issue: execute_dml_ddl_dcl_tcl auto-commits after execution, contradicting its description claiming it wraps in a transaction for user review, this is a dangerous semantic mismatch.
获取有关特定表的详细信息
通过 ID 提交事务以永久应用对数据库的更改
执行 DML、DDL、DCL 或 TCL 语句(INSERT、UPDATE、DELETE、CREATE、ALTER、DROP 等)。自动包装在需要显式提交或回滚的事务中。重要提示:执行后,会话将结束,以便用户查看结果并决定。
运行只读 SQL 查询(SELECT 语句)。以只读模式执行以确保安全。
通过 ID 回滚事务以撤消所有更改并丢弃事务
获取数据库中所有表的列表
Tool name 'execute_dml_ddl_dcl_tcl' combines four SQL statement types (DML, DDL, DCL, TCL) into one tool, violating single-responsibility principle. LLMs cannot infer from the name alone what this tool does. Should split into separate tools or rename to 'execute_write_statement'.
Descriptions are in Chinese, reducing clarity for English-speaking LLMs and developers. All tool and parameter descriptions should be in English for maximum compatibility.
No output schemas documented. LLMs cannot predict what fields to expect from tool responses. Code shows JSON responses with 'status', 'message', 'rows_affected', etc., but these are not formally declared in tool definitions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
execute_dml_ddl_dcl_tcl description claims it 'wraps in a transaction for user review and decision', but code auto-commits immediately after execution (await client.query('COMMIT')). This semantic mismatch is dangerous, LLMs expect user confirmation but get auto-commit instead.
Parameter descriptions lack format guidance and constraints. E.g., 'sql' param has no mention of allowed statement types, length limits, or injection prevention. 'transaction_id' has no format hint (UUID? string? numeric?). No enums or regex patterns declared.