
List all catalogs in Unity Catalog. Returns catalog names, owners, types, and descriptions. Use this to discover available data catalogs before browsing schemas and tables.
List schemas within a Unity Catalog catalog. Returns schema names, owners, and descriptions. Use list_catalogs first to find valid catalog names.
List tables within a Unity Catalog schema. Returns table names, types, formats, and owners. Use listcatalogs and listschemas first to find valid catalog and schema names.
Get detailed information about a table including column definitions, types, and properties. Provide the full three-level name (catalog.schema.table). Use list_tables to find valid names.
Get events for a cluster to diagnose issues. Returns creation, termination, resizing, errors, and driver events. Filter by time range or event type. Use list_clusters to find the cluster ID.
List all clusters in the Databricks workspace. Returns cluster IDs, names, states, and configurations. Use this to find cluster IDs for other operations.
Get detailed information about a specific Databricks cluster including state, configuration, and resource allocation. Use list_clusters first to find the cluster ID.
Create a new Databricks cluster. Requires cluster name, Spark version, and node type. Specify numworkers for fixed size or autoscalemin/max_workers for autoscaling.
Start a terminated Databricks cluster. The cluster must be in TERMINATED state. Use list_clusters to find clusters and their states.
Terminate a running Databricks cluster. This stops the cluster but preserves its configuration for restarting. Use list_clusters to find cluster IDs.
List available Genie spaces (rooms). Returns space IDs, names, and descriptions. Use this to find a space before asking questions with ask_genie.
Ask a natural language question about your data using Databricks Genie. Provide either spaceid or spacename to identify the Genie room. If the response status is EXECUTINGQUERY, use getgenie_message to poll for results.
Get the status and results of a Genie message. Use this to poll for results when askgenie returns status EXECUTINGQUERY. Returns the SQL query, results, and any attachments.
List jobs in the Databricks workspace with optional name filter and pagination. Returns job IDs, names, and settings. Use page_token from response for next page.
Get detailed information about a specific Databricks job including tasks, schedule, and configuration. Use list_jobs first to find the job ID.
Create a new Databricks job with one or more tasks. Each task needs a taskkey and type (notebooktask, sparkpythontask, sql_task, etc). Supports scheduling with cron expressions.
Permanently delete a Databricks job. This also cancels any active runs. Use list_jobs to find the job ID.
Trigger an immediate run of a Databricks job. Optionally pass notebookparams or pythonnamedparams to override defaults. Use listjobs to find the job ID.
Export a notebook's content from the workspace. Returns base64-encoded content in the specified format (SOURCE, HTML, JUPYTER, DBC). Use list_workspace to find notebook paths.
Create or overwrite a notebook in the workspace. Content must be base64-encoded. For SOURCE format, specify the language (PYTHON, SCALA, SQL, R). Set overwrite=true to replace existing.
Submit a one-time notebook run. Requires either warehouseid (SQL warehouse) or existingclusterid (cluster) for compute. Returns a runid to track with getjobrun and getjobrun_output.
Re-run failed tasks in a completed job run without re-running succeeded ones. Set rerunallfailedtasks=true to retry all failures, or specify individual task keys with reruntasks. Use getjobrun to inspect task states first.
List job runs in the Databricks workspace. Filter by jobid, activeonly, or completed_only. Supports offset/limit pagination. Returns run IDs, states, and timing info.
Get detailed information about a specific job run including state, timing, and task details. Use listjobruns to find the run ID.
Cancel an active job run. The run must be in PENDING or RUNNING state. Use listjobruns with active_only=true to find cancellable runs.
Get the output of a completed job run including notebook results, SQL output, logs, and error traces. Use listjobruns to find the run ID.
List all model serving endpoints in the workspace. Returns endpoint names, states, served models, and configuration. Use this to discover available ML models and LLM endpoints.
Query a model serving endpoint for predictions or chat completions. Automatically detects Foundation Model API endpoints (chat, completions, embeddings) vs custom models and routes accordingly. Use listservingendpoints to find valid names.
Execute a SQL statement on a Databricks SQL warehouse. Returns results synchronously within waittimeout (default 10s) or a statementid for async polling via getsqlstatement.
Execute a read-only SQL statement on a Databricks SQL warehouse (SELECT, WITH, SHOW, DESCRIBE, EXPLAIN, VALUES, LIST). Rejects DDL/DML and multi-statement input. Use executesqlstatement for writes.
Get the status and results of a SQL statement execution. Use this to poll for results of async statements started with executesqlstatement.
Cancel a running SQL statement execution. Use getsqlstatement first to verify the statement is still in PENDING or RUNNING state.
List all SQL warehouses in the Databricks workspace. Returns warehouse IDs, names, sizes, and states. Use this to find warehouse IDs for SQL execution.
Get detailed information about a specific SQL warehouse including state, size, cluster count, and active sessions. Use listsqlwarehouses to find the warehouse ID.
Create a new Databricks SQL warehouse. Requires a name and cluster_size (T-shirt sizing from 2X-Small to 4X-Large). Optionally configure autoscaling and auto-stop.
Start a stopped SQL warehouse. The warehouse must be in STOPPED state. Use listsqlwarehouses to find warehouses and their states.
Stop a running SQL warehouse. This deallocates compute resources. Use listsqlwarehouses to find warehouses and their states.
Get the current authenticated Databricks user and their workspace home directory. Returns user ID, username, display name, and home path (e.g., /Users/user@example.com). Use this to determine where to place notebooks or files.
Validate Databricks credentials. Verifies credentials during setup.
Create a vector search endpoint to host vector search indexes. An endpoint must exist before creating indexes on it.
Create a vector search index on an endpoint. Use DELTASYNC to auto-sync from a Delta table, or DIRECTACCESS for manual vector upserts. Requires a vector search endpoint (use createvectorsearch_endpoint first).
Delete a vector search index. This permanently removes the index and its data. Use queryvectorindex to verify the index before deleting.
Delete a vector search endpoint. All indexes on the endpoint must be deleted first. Use deletevectorsearch_index to remove indexes before deleting the endpoint.
Query a vector search index using text or a vector. Returns the most similar documents with scores. Supports filtering and column selection. Provide querytext for automatic embedding or queryvector for pre-computed embeddings.
List objects in a Databricks workspace directory. Returns notebooks, directories, files, repos, and libraries at the given path. Use '/' for the root directory.
Get metadata about a workspace object including type, language (for notebooks), and timestamps. Use list_workspace to find valid paths.
Rename or move a workspace file or notebook to a new path. Returns destinationurl for the new location. Use listworkspace to find valid source paths.
Delete a workspace object (notebook, file, or directory). For non-empty directories, set recursive=true. Use list_workspace to find valid paths.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It’s an MCP server that exposes data and functionality from a Databricks instance via tools. Your agents can invoke these tools to create new clusters, list job runs in a given workspace, delete a job, and more.
Databricks offers a suite of “official” MCP servers:
You can also use a hosted MCP platform that offers dozens of tools out of the box, such as Merge Agent Handler.
Here are some popular use cases:
Here are just a few reasons:
Yes. Merge’s platform materials say Agent Handler includes default security rules and custom security rules, and the Security Gateway scans tool inputs and responses for sensitive data before taking action based on platform configuration.
Here are a few examples:
You can follow these steps:
1. Create an Agent Handler account and grab your API key from the Agent Handler dashboard. This API key is what your MCP client uses to authenticate to the Agent Handler MCP endpoint.
2. Create a Tool Pack for the Databricks workflow (e.g., “Databricks Analytics”). Tool Packs define which connectors and tools your agent is allowed to call.
3. Create (or select) a Registered User that your agent will act “as” when making tool calls. Registered Users are the identity containers that hold credentials (user-level or shared auth).
4. Authenticate Databricks for that Registered User (or configure shared auth if you want one org-level Databricks credential reused across users). In practice, this is typically done via Agent Handler Link in your product so end users can connect without you handling credentials directly.
5. Connect your MCP client to the Agent Handler MCP endpoint for that Tool Pack + Registered User. Then your client can <code class="blog_inline-code">list_tools</code> and <code class="blog_inline-code">call_tool</code> for the Databricks tools you enabled in the Tool Pack.
6. Run a few real prompts and monitor the results using Agent Handler’s logs (and add rules/alerts as needed) to verify the tool calls and outputs look right before pushing the connector to production.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now