MCP server for interacting with ClickHouse via FastMCP
Server has 6 well-named, read-only tools with clear descriptions and documented input schemas. All tools follow verb_noun naming (check_, get_, execute_, list_, describe_). Descriptions are adequate (50-150 chars) and explain purpose. Input schemas are present with type declarations and parameter descriptions. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling is minimal (no recovery guidance, no categorization). No tool annotations (readOnlyHint, idempotentHint). Parameter descriptions lack format constraints and validation rules. Missing pagination support for list_tables and list_databases despite potentially large result sets.
Check how fresh a table's data is by finding the MAX timestamp.
Describe the schema of a ClickHouse table.
Execute a READ-ONLY SQL query against ClickHouse. Rejects any DML/DDL — only SELECT, WITH, SHOW, DESCRIBE, and EXPLAIN statements are accepted.
Get the row count for one or more tables.
List all databases available in ClickHouse.
List tables in a ClickHouse database.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting) for downstream tool chaining or data extraction. E.g., execute_query returns raw JSON but no schema is provided.
No tool annotations (readOnlyHint, idempotentHint, destructiveHint). All tools are read-only but this is not declared in the tool definition, forcing LLMs to infer safety from descriptions alone.
Parameter descriptions lack format constraints and validation rules. E.g., 'table' parameter has no guidance on valid formats (plain vs qualified names), and 'timestamp_col' auto-detection logic is mentioned but not formalized as a constraint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
No pagination support for list_databases and list_tables. If a ClickHouse instance has hundreds of tables, the response could exhaust context. No limit parameter or cursor guidance provided.
Error handling lacks recovery guidance. Client.query() returns raw ClickHouse error text (e.g., '[ClickHouse Error 404] ...') but does not categorize errors as retryable, user-fixable, or fatal, or suggest next steps.