Serves BoxOffice Brain's GUARDED ClickHouse tools over MCP (stdio). Republishes run_clickhouse_sql and describe_tables with read-only screen, data-scope allowlist, and rate limiter in front.
BoxOffice Brain defines 2 tools with clear, domain-specific purposes and solid descriptions (194 - 250 chars, within baseline 34 - 392). Both tools have input schemas with type definitions and parameter descriptions. However, output schemas are documented only in prose (return dict structure described in docstrings), not as formal JSON Schema. Error handling is present but generic, status codes (ok|rejected|suppressed|error) lack recovery guidance. Tool naming is verb-noun compliant (run_*, describe_*). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite both being read-only. Parameter descriptions are adequate but could specify constraints more formally (e.g., SQL statement length, allowed table patterns). The grounding trace structure is well-designed for auditability but not schema-documented for LLM consumption.
List the ClickHouse cinema tables the agent may read, with their columns. Call this first so the SQL you write uses real column names. Returns a dict of db.table -> [{name, type}, ...].
Run a READ-ONLY ClickHouse query and return rows plus a grounding trace. Args: sql (one SELECT/WITH statement over the allowed cinema tables), note (short description of what this query is for). Returns a dict with status (ok | rejected | suppressed | error), rows, row_count and grounding (sql, rows_read, bytes_read, elapsed_ms, source). Only read rows when status == 'ok'.
Output schemas not formally documented as JSON Schema. Return structure (status, rows, row_count, grounding) described only in prose docstrings. LLMs cannot parse unstructured output descriptions reliably.
Error responses lack recovery guidance. Status 'rejected' or 'suppressed' returned without actionable next steps (e.g., 'Try describe_tables() first' or 'Query exceeds row limit; add LIMIT clause').
No tool annotations despite both tools being read-only. Missing readOnlyHint annotation would signal to agents that these tools are safe to call speculatively without side-effect concerns.
Parameter 'sql' in run_clickhouse_sql lacks formal constraints. Description says 'one SELECT/WITH statement' but does not specify max length, forbidden keywords, or pattern. LLMs may pass invalid SQL without validation hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Grounding trace structure (sql, rows_read, bytes_read, elapsed_ms, source, guardrail, reason) not schema-documented. LLMs cannot reliably extract audit fields from prose descriptions.