Comprehensive MCP server for Databricks. Provides tools for Unity Catalog, SQL, compute, jobs, pipelines, serving endpoints, vector search, apps, Lakebase, dashboards, Genie, secrets, IAM, connections, experiments, Delta Sharing, files (DBFS & Volumes), grants, storage credentials, external locations, metastores, online tables, global init scripts, tokens, Git credentials, quality monitors, and command execution.
Server has 29 tools with consistent naming patterns and reasonable descriptions. Most tools follow verb_noun structure (databricks_list_*, databricks_get_*, databricks_create_*, etc.). Descriptions are generally present and moderately detailed (ranging 50-200 characters). However, significant gaps exist: (1) Input schemas are visible in the provided samples but lack comprehensive validation constraints (no enums for known value sets like connection_type, spark_version, language); (2) Parameter descriptions are present but often minimal, many parameters lack format constraints, ranges, or examples; (3) Output schemas are NOT documented, tool descriptions do not specify what fields the response contains or their types; (4) Error handling is missing, no tool specifies recovery guidance or error classification; (5) Many WRITE and DESTRUCTIVE tools lack acknowledgment of irreversibility or confirmation patterns. The server benefits from logical grouping (apps, compute, connections, command execution) and clear vertical domains, but does not meet production-grade tool documentation standards. Average tool score ~62 reflects decent naming and present descriptions offset by missing schemas, validation constraints, and error guidance.
Check the status and results of an executed command. Polls the execution status of a previously submitted command. When the command completes, the response includes the output results or error details.
Create a new Databricks App. Creates a new app in the workspace. The app name must be unique, contain only lowercase alphanumeric characters and hyphens, and will become part of the app's URL. This is an asynchronous operation. The app will be provisioned in the background. Use databricks_get_app to check its status.
Create a new compute cluster. Creates an all-purpose cluster with either a fixed number of workers or autoscaling. If autoscale_min and autoscale_max are both greater than 0, autoscaling is enabled and num_workers is ignored. Otherwise, a fixed-size cluster is created with num_workers.
Create a new external connection. Creates a connection object storing the credentials and configuration needed to access an external data source. The caller must have the CREATE_CONNECTION privilege on the metastore.
Output schemas not documented. Tool descriptions describe purpose but NOT the structure of returned JSON objects. LLMs cannot plan downstream tool calls or extract fields without knowing what keys and types the response contains. Example: databricks_list_apps says it returns 'paginated list' but doesn't specify fields like 'apps', 'count', 'next_cursor', or field types.
Missing input validation constraints for enum-typed parameters. Parameters like 'language' in databricks_create_execution_context, 'connection_type' in databricks_create_connection, and 'mode' in databricks_deploy_app accept known finite sets of values but are typed as strings with no enum constraint. This forces LLMs to guess valid options and produces hallucinated values. Example: 'language' should enumerate ['python', 'sql', 'scala', 'r'].
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Create an execution context on a running cluster. An execution context is a stateful session on a cluster where commands can be executed. Variables and state persist across commands within the same context. The cluster must be in the RUNNING state.
Delete a Databricks App. Permanently deletes the app and all its deployments. This action cannot be undone. The app's URL will become unavailable immediately.
Delete an external connection. Permanently removes the connection and its stored credentials. Foreign catalogs that depend on this connection will no longer function. The caller must be the connection owner or a metastore admin.
Deploy source code to a Databricks App. Creates a new deployment for the specified app. The source code at the given workspace path will be packaged and deployed. This is an asynchronous operation. The deployment will proceed in the background. Use databricks_get_app or databricks_list_app_deployments to monitor progress.
Destroy an execution context on a cluster. Releases the resources associated with the context. Any running commands in the context will be cancelled. It is good practice to destroy contexts when they are no longer needed.
Execute a command in an existing execution context. Submits a command for asynchronous execution on the cluster. Returns immediately with a command ID that can be polled for status and results using databricks_command_status.
Get detailed information about a specific Databricks App. Retrieves the full configuration and status of an app including its active deployment, compute status, URL, creator, and resources.
Get details of a specific app deployment. Retrieves complete information about a single deployment including its status, source code path, deployment mode, and any error messages.
Get the environment configuration for a Databricks App.
Get detailed information about a specific compute cluster.
Get detailed information about a specific connection.
Get detailed information about a specific instance pool.
List all deployments for a Databricks App. Returns the deployment history for the specified app, including both active and past deployments with their status, timestamps, and source code paths.
List all Databricks Apps in the workspace. Returns a paginated list of apps with their names, descriptions, status, and URLs. Use this to discover what apps exist in the workspace before performing operations on them.
List all cluster policies in the workspace. Cluster policies constrain the attributes available during cluster creation, enforcing organizational standards and cost controls.
List all compute clusters in the workspace. Returns both running and terminated clusters, including all-purpose and job clusters. Each entry includes the cluster's current state.
List all external connections in the workspace. Returns connections configured for Lakehouse Federation and other external data access patterns. Each connection stores the type, host, port, and credential information needed to reach an external system.
List all instance pools in the workspace. Instance pools reduce cluster start and auto-scaling times by maintaining a set of idle, ready-to-use cloud instances.
Resize a running cluster to a different number of workers. Changes the number of worker nodes in a running cluster. The resize happens gracefully — existing tasks are not interrupted.
Restart a running compute cluster. Restarts the Spark driver and all workers. Use this to clear cached state or apply configuration changes. This call returns immediately without blocking.
Start a Databricks App. Starts the last active deployment of the app. If the app is already running, this has no effect. This is an asynchronous operation. Use databricks_get_app to check when the app becomes active.
Start a terminated compute cluster. Initiates the start process for a previously terminated cluster. The cluster may take several minutes to become fully running. This call returns immediately without blocking.
Stop a running Databricks App. Stops the active deployment of the app. The app's URL will become unavailable. Use databricks_start_app to restart it later. This is an asynchronous operation. Use databricks_get_app to confirm the app has stopped.
Terminate a running compute cluster. Stops all Spark workloads and releases the cloud resources. The cluster configuration is preserved and it can be restarted later. This call returns immediately without blocking.
Update an existing connection's options or name. Updates the connection configuration. At least one of options_json or new_name must be provided. The caller must be the connection owner or a metastore admin.
Destructive tools lack confirmation or dry-run pattern. databricks_delete_app, databricks_delete_connection, and databricks_terminate_cluster are irreversible operations but provide no confirmation step, dry-run mode, or verification gate. Agents can delete resources without acknowledgment, risking data loss.
Error handling missing from all tools. No tool specifies what errors can occur, whether they are retryable, or what recovery action the agent should take. Tool descriptions do not include error classification or guidance. Example: databricks_create_cluster does not document what happens if the cluster_name is duplicate, spark_version is invalid, or quota is exceeded.
Parameter descriptions incomplete. Many parameters lack format constraints, ranges, or valid value hints. Example: databricks_create_cluster 'spark_version' parameter description says 'Spark runtime version string (e.g. "14.3.x-scala2.12")' but does not document valid versions, version discovery method, or fallback behavior if version is unavailable. Parameter 'num_workers' lacks min/max bounds.
Minimal descriptions on read-only helpers. databricks_get_app_environment, databricks_get_cluster, databricks_get_instance_pool, databricks_get_connection have very short descriptions (under 50 chars) that provide minimal context for when/why to call them vs related tools. LLMs struggle to distinguish between similar-sounding getters.
Tool chains may break due to missing context IDs in responses. No guarantee that databricks_list_clusters returns cluster_id (required by start_cluster, terminate_cluster, resize_cluster). If response omits required reference IDs, agents are forced to make extra lookup calls. Spec does not document response structure.
No pagination bounds documented. List tools like databricks_list_apps, databricks_list_clusters do not document max result limits, default page size, or how to handle large result sets. Code shows paginate() utility is used, but tool description doesn't specify limit behavior (e.g., 'Limited to 100 results').