A Model Completion Protocol (MCP) server for Databricks that provides access to Databricks functionality via the MCP protocol. This allows LLM-powered tools to interact with Databricks clusters, jobs, notebooks, and more.
This project is maintained by Olivier Debeuf De Rijcker olivier@markov.bot.
Credit for the initial version goes to @JustTryAI.
- MCP Protocol Support: Implements the MCP protocol to allow LLMs to interact with Databricks
- Databricks API Integration: Provides access to Databricks REST API functionality
- Tool Registration: Exposes Databricks functionality as MCP tools
- Async Support: Built with asyncio for efficient operation
The Databricks MCP Server exposes the following tools:
- list_clusters: List all Databricks clusters
- create_cluster: Create a new Databricks cluster
- terminate_cluster: Terminate a Databricks cluster
- get_cluster: Get information about a specific Databricks cluster
- start_cluster: Start a terminated Databricks cluster
- list_jobs: List all Databricks jobs
- run_job: Run a Databricks job
- list_notebooks: List notebooks in a workspace directory
- export_notebook: Export a notebook from the workspace
- list_files: List files and directories in a DBFS path
- execute_sql: Execute a SQL statement
- Python 3.10 or higher
uvpackage manager (recommended for MCP servers)
-
Install
uvif you don't have it already:# MacOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (in PowerShell) irm https://astral.sh/uv/install.ps1 | iex
Restart your terminal after installation.
-
Clone the repository:
git clone https://github.com/markov-kernel/databricks-mcp.git cd databricks-mcp -
Set up the project with
uv:# Create and activate virtual environment uv venv # On Windows .\.venv\Scripts\activate # On Linux/Mac source .venv/bin/activate # Install dependencies in development mode uv pip install -e . # Install development dependencies uv pip install -e ".[dev]"
-
Set up environment variables:
# Windows set DATABRICKS_HOST=https://your-databricks-instance.azuredatabricks.net set DATABRICKS_TOKEN=your-personal-access-token # Linux/Mac export DATABRICKS_HOST=https://your-databricks-instance.azuredatabricks.net export DATABRICKS_TOKEN=your-personal-access-token
You can also create an
.envfile based on the.env.exampletemplate.
To start the MCP server directly for testing or development, run:
# Activate your virtual environment if not already active
source .venv/bin/activate
# Run the start script (handles finding env vars from .env if needed)
./scripts/start_mcp_server.shThis is useful for seeing direct output and logs.
To use this server with AI clients like Cursor or Claude CLI, you need to register it.
-
Open your global MCP configuration file located at
~/.cursor/mcp.json(create it if it doesn't exist). -
Add the following entry within the
mcpServersobject, replacing placeholders with your actual values and ensuring the path tostart_mcp_server.shis correct:{ "mcpServers": { // ... other servers ... "databricks-mcp-local": { "command": "/absolute/path/to/your/project/databricks-mcp-server/start_mcp_server.sh", "args": [], "env": { "DATABRICKS_HOST": "https://your-databricks-instance.azuredatabricks.net", "DATABRICKS_TOKEN": "dapiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "RUNNING_VIA_CURSOR_MCP": "true" } } // ... other servers ... } } -
Important: Replace
/absolute/path/to/your/project/databricks-mcp-server/with the actual absolute path to this project directory on your machine. -
Replace the
DATABRICKS_HOSTandDATABRICKS_TOKENvalues with your credentials. -
Save the file and restart Cursor.
-
You can now invoke tools using
databricks-mcp-local:<tool_name>(e.g.,databricks-mcp-local:list_jobs).
-
Use the
claude mcp addcommand to register the server. Provide your credentials using the-eflag for environment variables and point the command to thestart_mcp_server.shscript using--followed by the absolute path:claude mcp add databricks-mcp-local \ -s user \ -e DATABRICKS_HOST="https://your-databricks-instance.azuredatabricks.net" \ -e DATABRICKS_TOKEN="dapiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \ -- /absolute/path/to/your/project/databricks-mcp-server/start_mcp_server.sh
-
Important: Replace
/absolute/path/to/your/project/databricks-mcp-server/with the actual absolute path to this project directory on your machine. -
Replace the
DATABRICKS_HOSTandDATABRICKS_TOKENvalues with your credentials. -
You can now invoke tools using
databricks-mcp-local:<tool_name>in your Claude interactions.
The repository includes utility scripts to quickly view Databricks resources:
# View all clusters
uv run scripts/show_clusters.py
# View all notebooks
uv run scripts/show_notebooks.pydatabricks-mcp-server/
├── src/ # Source code
│ ├── __init__.py # Makes src a package
│ ├── __main__.py # Main entry point for the package
│ ├── main.py # Entry point for the MCP server
│ ├── api/ # Databricks API clients
│ ├── core/ # Core functionality
│ ├── server/ # Server implementation
│ │ ├── databricks_mcp_server.py # Main MCP server
│ │ └── app.py # FastAPI app for tests
│ └── cli/ # Command-line interface
├── tests/ # Test directory
├── scripts/ # Helper scripts
│ ├── start_mcp_server.ps1 # Server startup script (Windows)
│ ├── run_tests.ps1 # Test runner script
│ ├── show_clusters.py # Script to show clusters
│ └── show_notebooks.py # Script to show notebooks
├── examples/ # Example usage
├── docs/ # Documentation
└── pyproject.toml # Project configuration
See project_structure.md for a more detailed view of the project structure.
- Python code follows PEP 8 style guide with a maximum line length of 100 characters
- Use 4 spaces for indentation (no tabs)
- Use double quotes for strings
- All classes, methods, and functions should have Google-style docstrings
- Type hints are required for all code except tests
The project uses the following linting tools:
# Run all linters
uv run pylint src/ tests/
uv run flake8 src/ tests/
uv run mypy src/The project uses pytest for testing. To run the tests:
# Run all tests with our convenient script
.\scripts\run_tests.ps1
# Run with coverage report
.\scripts\run_tests.ps1 -Coverage
# Run specific tests with verbose output
.\scripts\run_tests.ps1 -Verbose -Coverage tests/test_clusters.pyYou can also run the tests directly with pytest:
# Run all tests
uv run pytest tests/
# Run with coverage report
uv run pytest --cov=src tests/ --cov-report=term-missingA minimum code coverage of 80% is the goal for the project.
- API documentation is generated using Sphinx and can be found in the
docs/apidirectory - All code includes Google-style docstrings
- See the
examples/directory for usage examples
Check the examples/ directory for usage examples. To run examples:
# Run example scripts with uv
uv run examples/direct_usage.py
uv run examples/mcp_client_usage.pyContributions are welcome! Please feel free to submit a Pull Request.
- Ensure your code follows the project's coding standards
- Add tests for any new functionality
- Update documentation as necessary
- Verify all tests pass before submitting
This project is licensed under the MIT License - see the LICENSE file for details.
A Model Completion Protocol (MCP) server for interacting with Databricks services. Maintained by markov.bot.