Production MCP server for your data warehouse. Read-only enforcement, role-based access, audit log. Postgres, Oracle, Snowflake, BigQuery, Redshift, DuckDB, MotherDuck.
warehouse-mcp demonstrates solid fundamentals: all 16 tools have descriptions (avg ~80 chars, within baseline 34-392), clear verb-noun naming (glossary_lookup, schema_lookup, query, list_schemas, etc.), and visible input schemas with typed parameters. Most tools accept natural identifiers (schema, table, column names) rather than opaque IDs. However, output schemas are not documented in the source code, responses are inferred from tool names and descriptions but not formally specified. Parameter descriptions are present but terse (e.g., 'The schema name' lacks format/constraint details). Error handling is not visible in the tool definitions. No tool annotations (readOnlyHint, destructiveHint) despite all tools being READ_ONLY. Composition is strong: tools chain well (e.g., list_schemas → list_tables → describe_table → query), and each has a single responsibility.
Get statistical summary for columns in a table
Get the row count for a table
Get column definitions for a table
Search for columns matching a pattern across the warehouse
Get foreign key relationships for a table or schema
Get the SQL definition of a view
Semantic lookup tool for glossary entries
List all available schemas in the warehouse
List all tables and views in a schema
Output schemas not documented. Tool descriptions infer return types (e.g., 'Get column definitions' implies structured columns), but formal response schemas are absent from visible code. LLMs cannot plan downstream tool calls without knowing what fields to expect.
Tool annotations missing. All 16 tools are READ_ONLY (no state modification), but readOnlyHint is not declared in tool definitions. This prevents clients from optimizing caching and retry logic.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Execute a free-form SQL query against the warehouse
Get a random sample of rows from a table
Semantic lookup tool for schema information
Search for a value across tables in the warehouse
Semantic lookup tool for table information
Get time series data from a table with temporal columns
Get the most frequent values in a column
Parameter descriptions lack constraint details. E.g., 'The schema name' does not specify format, length, or valid characters. 'Number of rows to sample (max 100)' is good, but most params omit bounds. LLMs cannot validate inputs without explicit constraints.
Error handling not visible in tool definitions. No recovery guidance, error classification, or actionable messages documented. If a query fails or a table is not found, LLMs have no guidance on next steps.
Pagination not visible for list tools. list_schemas, list_tables, find_columns, and search_value may return large result sets, but no limit/offset or cursor parameters are documented. Large responses risk context window exhaustion.