This MySQL tool server has critical definition quality gaps. Tool names lack action verbs (testConnection, execute, query are acceptable but insert/update/delete lack clarity on scope). Descriptions are present but generic, most are 50-100 chars, below the 194-char baseline for production tools. Parameter descriptions exist but are minimal (e.g., 'SQL 语句' for sql param). No output schemas are documented, callers cannot predict response structure. Error handling returns unstructured objects with 'success' and 'error' fields but provides no recovery guidance. The server exposes raw SQL execution, creating injection risks despite parameterization claims. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels (WRITE, DESTRUCTIVE). Composition is reasonable (7 focused tools), but parameter validation is weak, no enums, no format constraints, no min/max bounds.
关闭连接池。释放所有连接并标记连接池为已关闭状态
执行 DELETE 操作。根据 WHERE 条件删除指定表中的数据,防止全表删除
执行 SQL 查询。支持参数化查询以防止 SQL 注入
执行 INSERT 操作。将数据对象转换为参数化 INSERT SQL 语句并执行
执行 SELECT 查询。调用 execute() 方法执行查询并确保返回数据为数组类型
测试数据库连接。从连接池获取连接并执行简单查询以验证连接
执行 UPDATE 操作。根据 WHERE 条件更新指定表中的数据,防止全表更新
No output schemas documented. Tools return unstructured {success, error, data, affectedRows, insertId} objects. LLMs cannot predict response structure or plan downstream calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools marked WRITE and DESTRUCTIVE in metadata but not in schema. Agents cannot distinguish safe from unsafe operations.
Parameter descriptions are minimal (10-30 chars). 'SQL 语句' and 'WHERE 条件对象' lack context on format, constraints, or examples. Below 72-char baseline for param annotations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | 2026-07-28+ | v2 |
No input validation constraints. Parameters accept free-form strings with no enums, regex patterns, length limits, or format declarations. LLMs can pass invalid SQL or table names.
Error responses lack recovery guidance. Returns {success: false, error: '...'} but does not tell LLM what to do next or categorize errors as retryable/user-fixable/fatal.