A Model Context Protocol server that enables interaction with Metabase via LLMs
This server has 8 tools with clear verb-noun naming (list_*, execute_*, create_*, convert_*) and basic descriptions. However, there are significant gaps in schema completeness, parameter descriptions, and error handling guidance. Most tools return raw JSON dumps without structured typing or pagination support. Error messages are minimal and do not guide recovery. The server lacks proper output schema documentation, making it difficult for LLMs to plan downstream operations. Several tools (list_cards, convert_timezone) show incomplete error handling or missing constraint documentation.
Convert dates and times from any timezone to UTC
Create a new bookmark for user.
Create a new Card. Card type can be question, metric, or model.
Run the query associated with a Card.
Execute a query and retrieve the results in the usual format.
List all cards in Metabase
List all collections in Metabase
No output schema documentation. All tools return TextContent with raw JSON dumps. LLMs cannot predict response structure, making it impossible to plan chained calls or extract specific fields without additional parsing overhead.
Parameter descriptions are missing or incomplete. 'parameters' in execute_card is documented as 'List of parameters as dictionaries' but does not explain the structure, expected keys, or format of each dictionary. 'query' in execute_query lacks any note about SQL dialect, parameterization, or timeout constraints.
No pagination or result limiting documented. list_databases, list_collections, and list_cards offer no offset/limit parameters and no mention of response size caps. If a Metabase instance has thousands of items, responses will blow the context window without explicit pagination guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 49 | - | v1 |
List all databases in Metabase
Error handling does not guide recovery. execute_card and execute_query do not describe what errors may occur (timeout, invalid SQL, card not found, permission denied) or what the LLM should do next. create_bookmark handles 400/404 status codes in code but does not document these conditions in the description.
Input validation and constraints not documented. database_id, card_id, collection_id parameters lack any note about valid ranges, whether negative IDs are allowed, or what happens if an ID does not exist. convert_timezone does not document valid timezone identifier format (e.g., IANA timezone database required) in the parameter description.
Missing idempotency guidance. create_card and create_bookmark are write operations with no note about whether they are idempotent or if repeated calls with identical parameters will produce duplicate records. This matters for agent retry behavior.
list_cards silently filters to bookmarked cards only (?f=bookmarked) but this critical behavior is hidden in a docstring, not in the tool description where LLMs read it. LLMs will expect all cards and be surprised to receive only a subset.