A Model Context Protocol server for BigQuery with cross-project support
The server has 4 tools with reasonable naming conventions (all start with verbs: list_, analyze_). Descriptions are present and moderately detailed (120-180 chars each), explaining WHAT the tools do and basic context. However, several critical gaps reduce overall quality: (1) Input schemas are minimal, most parameters lack type constraints, enums, or detailed format descriptions; (2) No output schemas are documented anywhere in the visible code; (3) Error handling is not evident in tool definitions; (4) No pagination support for list_ tools despite returning potentially large result sets; (5) Parameter descriptions are sparse. The tools are READ-ONLY and well-scoped (one action each), meeting basic composition patterns, but fall short of production-grade LLM integration standards.
Analyze table structure and statistics. Provides comprehensive table analysis including row counts, data types, null statistics, and cardinality information for each column. Analyzes the full table schema without sampling.
List datasets in a project, filtered by allowlist patterns. Lists all datasets in the specified project that match the configured access patterns. Defaults to the billing project if no project is specified.
List accessible BigQuery projects with descriptions. Returns all configured projects that this server can access, including their names, descriptions, and allowed dataset patterns.
List tables in a dataset with optional type filtering. Lists all tables, views, and materialized views in the specified dataset. Can filter by table type for specific resource types.
Output schemas are not documented. LLMs cannot infer what fields analyze_table, list_tables, list_datasets, and list_projects return. This forces the LLM to guess field names for chaining downstream operations.
Input parameter 'project' in list_datasets lacks type, constraints, and detailed format. Is it optional? What happens if omitted? Current description is insufficient for LLM parameter binding.
Parameter 'table_type' in list_tables is documented as 'all|table|view|materialized_view' in the description, but should be declared as a JSON Schema enum constraint. Free-form strings invite hallucinated values.
list_datasets and list_tables accept no pagination parameters (limit, offset, page_size, next_cursor). If these tools return large result sets (common for BigQuery with many datasets/tables), LLM context will be exhausted. No limit is stated.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 49 | - | v1 |
No error handling guidance in tool definitions. If analyze_table encounters a missing table, permission denied, or quota exceeded, the LLM receives no recovery instructions.
Tool descriptions lack dependency hints. There is no guidance that list_projects should be called BEFORE list_datasets, or that analyze_table requires knowing the table path from list_tables. Multi-step planning is left to the LLM to discover.