Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
/cmd/workspace/apps/ @databricks/eng-app-devex
/libs/apps/ @databricks/eng-app-devex
/acceptance/apps/ @databricks/eng-app-devex
/experimental/apps-mcp/ @databricks/eng-app-devex @lennartkats-db
/experimental/aitools/ @databricks/eng-app-devex @lennartkats-db
12 changes: 6 additions & 6 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -145,14 +145,14 @@ jobs:
- name: Analyze slow tests
run: make slowest

test-exp-apps-mcp:
test-exp-aitools:
needs:
- cleanups
- testmask

# Only run if the target is in the list of targets from testmask
if: ${{ contains(fromJSON(needs.testmask.outputs.targets), 'test-exp-apps-mcp') }}
name: "make test-exp-apps-mcp"
if: ${{ contains(fromJSON(needs.testmask.outputs.targets), 'test-exp-aitools') }}
name: "make test-exp-aitools"
runs-on: ${{ matrix.os }}

strategy:
Expand All @@ -171,11 +171,11 @@ jobs:
- name: Setup build environment
uses: ./.github/actions/setup-build-environment
with:
cache-key: test-exp-apps-mcp
cache-key: test-exp-aitools

- name: Run tests
run: |
make test-exp-apps-mcp
make test-exp-aitools

test-exp-ssh:
needs:
Expand Down Expand Up @@ -251,7 +251,7 @@ jobs:
test-result:
needs:
- test
- test-exp-apps-mcp
- test-exp-aitools
- test-exp-ssh
- test-pipelines

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ tools/yamlfmt.exe
# Built by make for 'make lint'
tools/golangci-lint

# Built by make for test filtering
tools/testmask/testmask

# Cache for tools/gh_report.py
.gh-logs

Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,8 @@ generate:

.PHONY: lint lintfull tidy lintcheck fmt fmtfull test test-unit test-acc test-slow test-slow-unit test-slow-acc cover showcover build snapshot snapshot-release schema integration integration-short acc-cover acc-showcover docs ws wsfix links checks test-update test-update-templates generate-out-test-toml test-update-aws test-update-all generate-validation

test-exp-apps-mcp:
make test TEST_PACKAGES="./experimental/apps-mcp/..." ACCEPTANCE_TEST_FILTER="TestAccept/idontexistyet/apps-mcp"
test-exp-aitools:
make test TEST_PACKAGES="./experimental/aitools/..." ACCEPTANCE_TEST_FILTER="TestAccept/idontexistyet/aitools"

test-exp-ssh:
make test TEST_PACKAGES="./experimental/ssh/..." ACCEPTANCE_TEST_FILTER="TestAccept/ssh"
Expand Down
2 changes: 1 addition & 1 deletion acceptance/apps/init-template/app/script
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
$CLI experimental apps-mcp tools init-template app --name test_app --sql-warehouse-id abc123 --output-dir output > /dev/null 2>&1
$CLI experimental aitools tools init-template app --name test_app --sql-warehouse-id abc123 --output-dir output > /dev/null 2>&1
echo "✓ Template instantiation succeeded"
rm -rf output
2 changes: 1 addition & 1 deletion acceptance/apps/init-template/empty/script
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
$CLI experimental apps-mcp tools init-template empty --name test_empty --catalog main --output-dir output > /dev/null 2>&1
$CLI experimental aitools tools init-template empty --name test_empty --catalog main --output-dir output > /dev/null 2>&1
echo "✓ Template instantiation succeeded"
rm -rf output
2 changes: 1 addition & 1 deletion acceptance/apps/init-template/job/script
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
$CLI experimental apps-mcp tools init-template job --name test_job --catalog main --output-dir output > /dev/null 2>&1 || exit 1
$CLI experimental aitools tools init-template job --name test_job --catalog main --output-dir output > /dev/null 2>&1 || exit 1
echo "✓ Template instantiation succeeded"
rm -rf output
2 changes: 1 addition & 1 deletion acceptance/apps/init-template/pipeline/script
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
$CLI experimental apps-mcp tools init-template pipeline --name test_pipeline --language python --catalog main --output-dir output > /dev/null 2>&1
$CLI experimental aitools tools init-template pipeline --name test_pipeline --language python --catalog main --output-dir output > /dev/null 2>&1
echo "✓ Template instantiation succeeded"
rm -rf output
2 changes: 1 addition & 1 deletion cmd/experimental/experimental.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package experimental

import (
mcp "github.com/databricks/cli/experimental/apps-mcp/cmd"
mcp "github.com/databricks/cli/experimental/aitools/cmd"
"github.com/spf13/cobra"
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Databricks MCP Server
# Databricks AI Tools

A Model Context Protocol (MCP) server for working with Databricks through natural language. This server provides tools for data exploration, workspace management, and executing Databricks CLI commands through AI-powered conversations.

Expand All @@ -17,19 +17,19 @@ A Model Context Protocol (MCP) server for working with Databricks through natura
- **Conversational interface**: Work with Databricks using natural language instead of memorizing CLI commands
- **Context-aware**: Get relevant command suggestions based on your workspace configuration
- **Unified workflow**: Combine data exploration, bundle management, and app deployment in one tool
- **Transparency**: Every MCP tool call displays clear, branded output so you always know when Databricks MCP is working
- **Transparency**: Every MCP tool call displays clear, branded output so you always know when Databricks AI Tools are working

Perfect for data engineers and developers who want to streamline their Databricks workflows with AI-powered assistance.

**Visual Feedback:**
When using Databricks MCP, you'll see distinctive branded headers in your chat:
When using Databricks AI Tools, you'll see distinctive branded headers in your chat:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 Databricks MCP: App scaffolded successfully
🚀 Databricks AI Tools: App scaffolded successfully
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

This makes it immediately clear you're using the Databricks MCP server, not just plain Claude or Cursor. If you don't see these headers, the MCP server isn't connected (see Troubleshooting below).
This makes it immediately clear you're using the Databricks AI Tools MCP server, not just plain Claude or Cursor. If you don't see these headers, the MCP server isn't connected (see Troubleshooting below).

---

Expand All @@ -39,7 +39,7 @@ This makes it immediately clear you're using the Databricks MCP server, not just

1. **Install the MCP server automatically:**
```bash
databricks experimental apps-mcp install
databricks experimental aitools install
```

This interactive command will:
Expand Down Expand Up @@ -94,7 +94,7 @@ If you prefer to configure manually or the automatic installation doesn't work:
"mcpServers": {
"databricks": {
"command": "databricks",
"args": ["experimental", "apps-mcp"],
"args": ["experimental", "aitools"],
"env": {
"DATABRICKS_HOST": "https://your-workspace.databricks.com",
"DATABRICKS_TOKEN": "dapi...",
Expand All @@ -111,16 +111,16 @@ Then restart your MCP client for changes to take effect

### Troubleshooting

#### 🚨 Not seeing Databricks MCP headers in your chat?
#### 🚨 Not seeing Databricks AI Tools headers in your chat?

If you ask about Databricks or apps but **don't see the distinctive headers** like:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 Databricks MCP: App scaffolded successfully
🚀 Databricks aitools: App scaffolded successfully
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

**You're using plain Claude/Cursor, not the Databricks MCP server!** This means:
**You're using plain Claude/Cursor, not the Databricks AI Tools MCP server!** This means:
- ❌ No access to Databricks data or tools
- ❌ Generic AI responses instead of actual app generation
- ❌ No scaffolding, validation, or deployment capabilities
Expand Down Expand Up @@ -156,7 +156,7 @@ If the MCP server doesn't connect or shows errors:
5. **Check Databricks CLI:** Verify the CLI is installed and accessible:
```bash
databricks --version
databricks experimental apps-mcp --help
databricks experimental aitools --help
```

6. **Test authentication:** Try listing catalogs to verify credentials work:
Expand All @@ -175,7 +175,7 @@ If issues persist, please report them at https://github.com/databricks/cli/issue

## Features

The Databricks MCP server provides CLI-based tools for workspace interaction:
The Databricks AI Tools provide CLI-based tools for workspace interaction:

Execute Databricks CLI commands and explore workspace resources:

Expand Down Expand Up @@ -321,10 +321,10 @@ The `invoke_databricks_cli` tool:

```bash
# Install MCP server in coding agents (Claude Code, Cursor, etc.)
databricks experimental apps-mcp install
databricks experimental aitools install

# Start MCP server (default mode)
databricks experimental apps-mcp
databricks experimental aitools
```

### Environment Variables
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import (
"os/signal"
"syscall"

mcplib "github.com/databricks/cli/experimental/apps-mcp/lib"
"github.com/databricks/cli/experimental/apps-mcp/lib/server"
mcplib "github.com/databricks/cli/experimental/aitools/lib"
"github.com/databricks/cli/experimental/aitools/lib/server"
"github.com/databricks/cli/libs/log"
"github.com/spf13/cobra"
)
Expand All @@ -16,9 +16,10 @@ func NewMcpCmd() *cobra.Command {
var warehouseID string

cmd := &cobra.Command{
Use: "apps-mcp",
Hidden: true,
Short: "Model Context Protocol server for AI agents",
Use: "aitools",
Aliases: []string{"apps-mcp"},
Hidden: true,
Short: "Databricks AI Tools - Model Context Protocol server for AI agents",
Long: `Start and manage an MCP server that provides AI agents with tools to interact with Databricks.

The MCP server exposes the following capabilities:
Expand All @@ -28,7 +29,7 @@ The MCP server exposes the following capabilities:

The server communicates via stdio using the Model Context Protocol.`,
Example: ` # Start MCP server with required warehouse
databricks experimental apps-mcp --warehouse-id abc123`,
databricks experimental aitools --warehouse-id abc123`,
RunE: func(cmd *cobra.Command, args []string) error {
// Create cancellable context for graceful shutdown
ctx, cancel := context.WithCancel(cmd.Context())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import (
"github.com/databricks/cli/bundle/run"
"github.com/databricks/cli/cmd/bundle/utils"
"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/experimental/apps-mcp/lib/state"
"github.com/databricks/cli/experimental/apps-mcp/lib/validation"
"github.com/databricks/cli/experimental/aitools/lib/state"
"github.com/databricks/cli/experimental/aitools/lib/validation"
"github.com/databricks/cli/libs/cmdio"
"github.com/databricks/cli/libs/log"
"github.com/spf13/cobra"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import (
"strings"

"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/experimental/apps-mcp/lib/middlewares"
"github.com/databricks/cli/experimental/apps-mcp/lib/session"
"github.com/databricks/cli/experimental/aitools/lib/middlewares"
"github.com/databricks/cli/experimental/aitools/lib/session"
"github.com/databricks/cli/libs/cmdctx"
"github.com/databricks/cli/libs/cmdio"
"github.com/databricks/databricks-sdk-go"
Expand All @@ -29,8 +29,8 @@ For each table, returns:
- Sample data (5 rows)
- Null counts per column
- Total row count`,
Example: ` databricks experimental apps-mcp discover-schema samples.nyctaxi.trips
databricks experimental apps-mcp discover-schema catalog.schema.table1 catalog.schema.table2`,
Example: ` databricks experimental aitools discover-schema samples.nyctaxi.trips
databricks experimental aitools discover-schema catalog.schema.table1 catalog.schema.table2`,
Args: cobra.MinimumNArgs(1),
PreRunE: root.MustWorkspaceClient,
RunE: func(cmd *cobra.Command, args []string) error {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ import (
"path/filepath"

"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/experimental/apps-mcp/lib/state"
"github.com/databricks/cli/experimental/aitools/lib/state"
"github.com/databricks/cli/libs/cmdio"
"github.com/databricks/cli/libs/template"
"github.com/spf13/cobra"
)

const (
defaultTemplateRepo = "https://github.com/databricks/cli"
defaultTemplateDir = "experimental/apps-mcp/templates/appkit"
defaultTemplateDir = "experimental/apps-mcp/templates/appkit" // TODO: Change to aitools/templates/appkit
defaultBranch = "main"
templatePathEnvVar = "DATABRICKS_APPKIT_TEMPLATE_PATH"
)
Expand Down Expand Up @@ -58,10 +58,10 @@ func newAppCmd() *cobra.Command {
Long: `Initialize a Databricks App using the appkit template.

Examples:
experimental apps-mcp tools init-template app --name my-app
experimental apps-mcp tools init-template app --name my-app --warehouse abc123
experimental apps-mcp tools init-template app --name my-app --description "My cool app"
experimental apps-mcp tools init-template app --name my-app --output-dir ./projects
experimental aitools tools init-template app --name my-app
experimental aitools tools init-template app --name my-app --warehouse abc123
experimental aitools tools init-template app --name my-app --description "My cool app"
experimental aitools tools init-template app --name my-app --output-dir ./projects

Environment variables:
DATABRICKS_APPKIT_TEMPLATE_PATH Override template source with local path (for development)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import (
"sort"
"strings"

"github.com/databricks/cli/experimental/apps-mcp/lib/common"
"github.com/databricks/cli/experimental/apps-mcp/lib/detector"
"github.com/databricks/cli/experimental/apps-mcp/lib/prompts"
"github.com/databricks/cli/experimental/aitools/lib/common"
"github.com/databricks/cli/experimental/aitools/lib/detector"
"github.com/databricks/cli/experimental/aitools/lib/prompts"
"github.com/databricks/cli/libs/cmdio"
"github.com/databricks/cli/libs/template"
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"fmt"

"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/experimental/apps-mcp/lib/middlewares"
"github.com/databricks/cli/experimental/aitools/lib/middlewares"
"github.com/databricks/cli/libs/template"
"github.com/spf13/cobra"
)
Expand All @@ -30,9 +30,9 @@ This creates a minimal project structure without sample code. For apps, jobs, or
use the dedicated 'app', 'job', or 'pipeline' commands instead.

Examples:
experimental apps-mcp tools init-template empty --name my_dashboard_project
experimental apps-mcp tools init-template empty --name my_alerts --language sql --catalog my_catalog
experimental apps-mcp tools init-template empty --name my_project --output-dir ./projects
experimental aitools tools init-template empty --name my_dashboard_project
experimental aitools tools init-template empty --name my_alerts --language sql --catalog my_catalog
experimental aitools tools init-template empty --name my_project --output-dir ./projects

After initialization:
Add resource definitions in resources/ (e.g., resources/my_dashboard.dashboard.yml)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"errors"

"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/experimental/apps-mcp/lib/middlewares"
"github.com/databricks/cli/experimental/aitools/lib/middlewares"
"github.com/databricks/cli/libs/template"
"github.com/spf13/cobra"
)
Expand All @@ -25,9 +25,9 @@ This creates a project with:
- Personal schemas for development

Examples:
experimental apps-mcp tools init-template job --name my_job
experimental apps-mcp tools init-template job --name my_job --catalog my_catalog
experimental apps-mcp tools init-template job --name my_job --output-dir ./projects
experimental aitools tools init-template job --name my_job
experimental aitools tools init-template job --name my_job --catalog my_catalog
experimental aitools tools init-template job --name my_job --output-dir ./projects

After initialization:
databricks bundle deploy --target dev
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"fmt"

"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/experimental/apps-mcp/lib/middlewares"
"github.com/databricks/cli/experimental/aitools/lib/middlewares"
"github.com/databricks/cli/libs/template"
"github.com/spf13/cobra"
)
Expand All @@ -25,10 +25,10 @@ This creates a project with:
- Personal schemas for development

Examples:
experimental apps-mcp tools init-template pipeline --name my_pipeline --language python
experimental apps-mcp tools init-template pipeline --name my_pipeline --language sql
experimental apps-mcp tools init-template pipeline --name my_pipeline --language python --catalog my_catalog
experimental apps-mcp tools init-template pipeline --name my_pipeline --language sql --output-dir ./projects
experimental aitools tools init-template pipeline --name my_pipeline --language python
experimental aitools tools init-template pipeline --name my_pipeline --language sql
experimental aitools tools init-template pipeline --name my_pipeline --language python --catalog my_catalog
experimental aitools tools init-template pipeline --name my_pipeline --language sql --output-dir ./projects

After initialization:
databricks bundle deploy --target dev
Expand Down
Loading