ClickHouse columnar-OLAP backend binding plugin for mcpg. Runs an operator-fixed analytical SQL statement against a ClickHouse server (OSS, Cloud, Altinity) over its HTTP interface and returns rows as JSON. The statement uses `?` placeholders bound from `params` — an ordered list of CEL expressions evaluated against the tool arguments. Values are escaped + serialized by the driver as ClickHouse SQL literals (never raw string-interpolated), so caller input cannot alter the statement (injection-safe). A read-only keyword guard plus a server-side `readonly=1` setting fence the statement. Pure-Rust transport (hyper + rustls) — no native-tls / OpenSSL.
Three tools with strong descriptions (150-250 chars each) and clear security posture (SQL injection prevention, read-only guards). Input schemas present but minimal, parameters lack type constraints and enums. Tool names follow verb_noun pattern (clickhouse_query, list_tables, list_columns). Descriptions explain WHAT and WHY but lack actionable error recovery guidance. No output schema documentation visible. Missing parameter descriptions for 'arguments' in clickhouse_query.
Execute an operator-fixed analytical SQL statement against a ClickHouse server. The statement uses `?` placeholders bound from CEL expressions evaluated against tool arguments. Values are escaped and serialized as ClickHouse SQL literals, preventing SQL injection. Read-only statements are keyword-guarded and executed over HTTP GET; write statements execute over HTTP POST.
List columns from a ClickHouse table via `system.columns` catalog query. Optional `table` and `database` filters are each appended as bound `WHERE`/`AND` predicates (never interpolated). Rows are ordered by position for stable column listing and capped server-side by `LIMIT`.
List tables from a ClickHouse database via `system.tables` catalog query. An optional `database` filter is appended as a bound `WHERE database = ?` clause (never interpolated); an empty/None filter lists tables across all databases. Rows are ordered for stable listing and capped server-side by `LIMIT`.
clickhouse_query 'arguments' parameter lacks description and type constraints. LLMs cannot infer what CEL expressions to pass or how to structure the object.
No output schema documented for any tool. LLMs cannot plan downstream operations or extract required fields (e.g., table names from list_tables for use in list_columns).
list_tables and list_columns accept nullable 'database' and 'table' parameters but lack enum constraints or format guidance. No indication of valid values or discovery mechanism.
Error handling descriptions missing. No guidance on retryability, user-fixable errors, or recovery steps (e.g., 'If query times out, reduce LIMIT or add WHERE filters').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
No pagination or result-limiting parameters visible in list_tables/list_columns. Server-side LIMIT mentioned in descriptions but no client-side control (offset, page_size, cursor).