MCP server for Hydrolix/ClickHouse query execution and table introspection with support for parameterized queries and service account authentication
mcp-hydrolix demonstrates good definition quality with clear naming, solid descriptions, and complete input schemas. All 4 tools follow verb_noun naming convention (list_*, describe_*, run_*). Descriptions are substantive (80-200 chars typically) and explain WHAT and WHEN to use each tool. Input schemas are well-formed JSON Schema with type definitions and parameter descriptions. However, output schemas are not explicitly documented in the visible code, and error handling guidance is minimal. Tools are read-only with low risk, which simplifies security but limits the need for complex permission checks. The server uses FastMCP framework which abstracts away some boilerplate, making the code cleaner but harder to verify exact schema registration details.
Returns detailed column information for a table including type, default expressions, and comments
Lists all available databases in the Hydrolix cluster
Lists all tables in a specified database
Executes a SELECT query against the Hydrolix cluster with optional parameterization, row limits, and result formatting
Output schemas not documented in code. While the tools are registered with clear input schemas and descriptions, there is no visible documentation of what fields each tool returns. LLMs need to know expected output structure to plan downstream calls and extract data effectively.
Error handling lacks recovery guidance. Tools declare risk level (READ_ONLY) but error responses do not include actionable guidance. For example, if run_select_query fails due to invalid SQL, the response should suggest 'Call describe_table() first to see available columns' or 'Check query syntax, invalid SELECT detected.'
list_tables and list_databases lack pagination guidance. Descriptions do not mention whether results are paginated, capped, or can grow unboundedly. If a database has thousands of tables, returning all in a single response could exhaust context windows. Descriptions should state: 'Returns up to [N] results; use pagination if needed.'
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 74 | 2026-07-28+ | v2 |
run_select_query parameter 'parameters' accepts any object without schema constraints. The description says 'key-value pairs where values are bound as query parameters' but does not specify allowed value types, naming restrictions, or validation rules. This could allow LLMs to pass unsupported types or names with special characters.