This MCP server interfaces with the Databricks Genie API. Genie is a conversational assistant that allows users to query data within defined spaces using natural language. This server provides tools to list Genie spaces, get metadata about a space, start new conversations, and ask follow-up questions.
Three tools with basic schemas and descriptions, but significant quality gaps. All tools have input schemas with type definitions and descriptions (meeting minimum bar), but output schemas are not formally documented. Error handling is present but generic. Tool names follow verb_noun convention. The server operates over STDIO only, which is a transport limitation. Descriptions are adequate (100-200 chars range) but lack LLM optimization guidance. No parameter constraints (enums) despite clear enumerable values. No rate limiting or permission gates. Resources feature is present but underutilized.
Start a new Databricks Genie conversation, ask a question, and return the SQL + query result from the database.
Ask a follow-up question in an existing Genie conversation and return SQL + query result.
Returns metadata about a Databricks Genie Space.
Output schemas are not formally documented. Tools return free-form string responses instead of structured JSON with typed fields. ask_genie and follow_up return complex formatted strings with embedded tables rather than proper JSON schemas. This forces LLMs to parse unstructured text, risking extraction errors and wasting tokens.
Parameter space_id accepts arbitrary strings with no validation or enum constraints. Users must know hardcoded space IDs (e.g., '01f01a54963a1c94b80020c9048124'), and there is no discovery mechanism beyond the hardcoded resource at genie-space://details. The description states 'Space ID can be internal' but provides no guidance on how to obtain one.
No documented or enforced output limits on query results. ask_genie and follow_up can return unlimited rows from database queries, risking context window exhaustion. No pagination parameters (limit, offset) exposed to caller. Blinding returns 'Query Result: {table}' with all rows formatted.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 10 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Error responses are generic string messages without structured error codes or recovery guidance. Examples: 'Error: {str(e)}', 'HTTP error occurred', 'Request to Genie API timed out.' None indicate whether the error is retryable, user-fixable, or fatal. LLM cannot determine next action.
Credentials (DATABRICKS_HOST, DATABRICKS_TOKEN) are loaded via environment variables and used to construct headers, but there is no defense against prompt injection. Tool parameters (space_id, question, conversation_id) are passed directly into URLs without sanitization, risking path traversal or injection attacks.
Hardcoded space IDs in get_genie_space_id() resource indicate no real API integration. Comment states 'At this time I could not find api to get all space ids and names.' This means discovery is incomplete and the tool cannot dynamically list available spaces.
No rate limiting or timeout protection on polling loops. ask_genie and follow_up poll up to 60 times with 5-second intervals, but if the API never responds, the tool sleeps for 300 seconds and then returns a timeout message. No backoff or exponential retry. An agent in a loop could spawn hundreds of simultaneous requests.
Tool descriptions lack guidance on when to use each tool. ask_genie and follow_up have similar names and both return SQL + results. The docstring for ask_genie says 'ask_genie' but the follow_up description does not clarify the difference or when to invoke follow_up vs starting a new ask_genie call. The server description hints at this ('Follow up question is invoked when...') but tool descriptions do not.