BigQuery database query and schema inspection MCP server with dbt documentation support
Server has 5 tools with basic descriptions and no input schemas for 3 tools. Naming is verb-forward (load_, get_, query, fetch_) but descriptions lack actionable detail for LLM selection. Critical gaps: load_documentation, get_tables, and fetch_current_time have empty input schemas ({}), violating schema requirements. Descriptions are present but generic (34 - 194 chars); none explain WHEN to use the tool or dependencies. No output schemas documented. Error handling in query() is minimal ('Error: Query failed...'). No parameter validation or constraints. Overall pattern adherence is weak, tools exist but lack production-grade definition quality.
Fetch the current time in UTC. Returns: str: The current time in UTC.
Get the schema of a table in the database, along with the description of each available field. Args: dataset (str): The name of the dataset. table (str): The name of the table in the database, prefixed with the dataset. Returns: str: The schema of the table in the database.
Get the list of tables in the database. Returns: str: The list of tables in the database, prefixed by the dataset name.
Load the documentation of all tables. Returns: str: The full documentation of all tables. Key is the table name, value is the description.
Execute a SQL query against BigQuery and get back the result as dict. Input to this tool is a detailed and correct SQL query, output is a result from the database. If the query is not correct, an error message will be returned. If an error is returned, rewrite the query, check the query, and try again. If you encounter an issue with Unknown column 'xxxx' in 'field list', use get_table_schema to query the correct table fields.
Three tools (load_documentation, get_tables, fetch_current_time) have empty input schemas ({}).
Descriptions lack actionable context. None explain WHEN to call the tool, dependencies, or prerequisites. E.g., load_documentation does not mention it requires DBT_MANIFEST_FILEPATH env var or that it may return 'No documentation found.' LLMs cannot infer selection criteria from generic descriptions.
No output schemas documented. Tools return strings (load_documentation, get_tables, fetch_current_time) or lists (query), but LLMs cannot plan downstream calls without knowing the structure. query() returns 'str(results)', is it JSON, CSV, or raw Python repr?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 42 | 2026-07-28+ | v2 |
Error handling is minimal and non-actionable. query() returns 'Error: Query failed. {error}. Please rewrite the query...', no guidance on root cause, retryability, or next steps. load_documentation returns 'Error: {str(e)}' with no recovery path.
No parameter validation or constraints. get_table_schema accepts arbitrary dataset and table strings with no enum, pattern, or length limits. query() accepts any SQL string, no injection guards, no dry-run option for destructive queries.