MCP server for secure database access (PostgreSQL, MySQL, SQLite)
mcp-datalink exhibits solid definition quality with well-structured schemas and clear descriptions for all 6 tools. All tools are explicitly registered with complete inputSchemas including type definitions and parameter descriptions. Tool names follow verb-noun conventions appropriately (list_*, describe_*, query, execute, explain). Descriptions are substantive (ranging 40-160 chars) and action-oriented. However, there are notable gaps: no tool annotations (readOnlyHint/destructiveHint/idempotentHint), limited output schema documentation, and missing error recovery guidance. The execute tool description lacks explicit warning about state mutation consequences. Several parameter descriptions reference example values that could be reused literally by LLMs (e.g., 'Example: ["active", "2024-01-01"]'). All tools carry good parameter validation constraints (timeout ranges 5000-600000ms), but the response format for multi-row result sets is not formally documented.
Retrieve detailed table structure: column names, data types, nullability, defaults, indexes, and foreign key relationships.
Execute INSERT, UPDATE, or DELETE query and return affected row count.
Analyze query execution plan to understand performance characteristics and identify optimization opportunities.
List all configured database connections available in this server.
List all tables and views in a database schema with row counts and metadata.
Execute a read-only SELECT query and return results as structured data.
execute tool description lacks explicit warning about state mutation. Description states 'Execute INSERT, UPDATE, or DELETE query and return affected row count' but does not emphasize that this is a destructive operation with audit/logging implications or that it should be used carefully.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present in tool definitions. The execute tool should carry destructiveHint=true, and list_databases, list_tables, describe_table, query, and explain should carry readOnlyHint=true to guide agent behavior and safety policies.
Parameter descriptions in query and execute tools include literal example values ('["active", "2024-01-01"]') which LLMs may reuse verbatim in real calls. Replace with formal schema constraints (enum, pattern, format) rather than descriptive examples.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Output schema for query and execute tools is not formally documented. Callers do not know the structure of result sets, error responses, or whether results are paginated. A response schema documenting fields like 'rows', 'rowCount', 'columns', and pagination info is needed.
No error recovery guidance in tool descriptions. When a query fails or a table is not found, descriptions do not indicate what the agent should do next (retry, call describe_table to validate schema, call list_tables to discover available tables, etc.).
The 'params' parameter in query and execute tools is optional (not in required array) but the description and examples suggest it is necessary for parameterized queries. Clarify when params is optional vs. required, or make it required when the SQL string contains placeholders.