databricks-mcp
# databricks-mcp
[](https://modelcontextprotocol.io)
[](https://python.org)
[](LICENSE)
**Read this in other languages: [正體中文](docs/README-zh-tw.md)**
A **read-only** MCP (Model Context Protocol) server for Databricks, enabling Claude to query Databricks SQL, browse metadata, and monitor jobs/pipelines.
## Features
- **SQL Queries**: Execute SELECT, SHOW, DESCRIBE queries (write operations blocked)
- **Metadata Browsing**: List catalogs, schemas, tables, and search tables
- **Delta Lake**: View table history, details, and grants
- **Jobs & Pipelines**: List and monitor Databricks Jobs and DLT Pipelines
- **Query History**: Browse SQL query history with filters
- **Cluster Metrics**: Monitor CPU, memory, network usage from system tables
## Installation
### Prerequisites
- Python 3.13+
- [uv](https://github.com/astral-sh/uv) package manager
- Databricks workspace with SQL Warehouse
### Setup
```bash
# Clone the repository
git clone https://github.com/ChrisChoTW/databricks-mcp.git
cd databricks-mcp
# Install dependencies
uv sync
# Create .env file
cp .env.example .env
```
### Configuration
Edit `.env` with your Databricks credentials:
```env
DATABRICKS_SERVER_HOSTNAME=your-workspace.cloud.databricks.com
DATABRICKS_HTTP_PATH=/sql/1.0/warehouses/your-warehouse-id
DATABRICKS_TOKEN=your-personal-access-token
```
## Usage
### With Claude Code
Add to your Claude Code MCP configuration (`~/.claude.json`):
```json
{
"mcpServers": {
"databricks-sql": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/path/to/databricks-mcp",
"run",
"python",
"server.py"
],
"env": {
"DATABRICKS_SERVER_HOSTNAME": "your-workspace.cloud.databricks.com",
"DATABRICKS_HTTP_PATH": "/sql/1.0/warehouses/your-warehouse-id",
"DATABRICKS_TOKEN": "your-token"
}
}
}
}
```
### Standalone
```bash
uv run python server.py
```
## Available Tools
### SQL & Metadata
| Tool | Description |
|------|-------------|
| `databricks_query` | Execute SQL queries (read-only) |
| `list_catalogs` | List all catalogs |
| `list_schemas` | List schemas in a catalog |
| `list_tables` | List tables in a schema |
| `get_table_schema` | Get table structure (DESCRIBE EXTENDED) |
| `search_tables` | Search tables by name |
### Delta Lake
| Tool | Description |
|------|-------------|
| `get_table_history` | View Delta table change history |
| `get_table_detail` | View Delta table details |
| `get_grants` | View object permissions |
| `list_volumes` | List Unity Catalog volumes |
### Jobs & Pipelines
| Tool | Description |
|------|-------------|
| `list_jobs` | List Databricks Jobs |
| `get_job` | Get job details |
| `list_job_runs` | List job run history |
| `get_job_run` | Get run details |
| `list_pipelines` | List DLT Pipelines |
| `get_pipeline` | Get pipeline status |
### Compute & Monitoring
| Tool | Description |
|------|-------------|
| `list_query_history` | List SQL query history |
| `list_warehouses` | List SQL Warehouses |
| `list_clusters` | List clusters |
| `get_cluster_metrics` | Get cluster CPU/memory metrics |
| `get_cluster_events` | Get cluster events |
## Project Structure
```
databricks-mcp/
├── server.py # Entry point
├── core.py # Shared connections and MCP instance
└── tools/
├── query.py # SQL queries and metadata
├── delta.py # Delta Lake and permissions
├── jobs.py # Jobs management
├── pipelines.py # DLT Pipelines
├── compute.py # Clusters and query history
└── metrics.py # Cluster metrics
```
## Security
This server is **read-only by design**:
- ❌ INSERT, UPDATE, DELETE, DROP, TRUNCATE, MERGE, COPY blocked
- ✅ SELECT, SHOW, DESCRIBE, CREATE VIEW allowed
- Credentials are passed via environment variables (never hardcoded)
## License
MIT
## Contributing
Issues and pull requests are welcome!
TDQS
Scored across 25 tools
Most tools have distinct purposes targeting specific Databricks resources (clusters, jobs, tables, etc.), but some overlap exists. For example, get_table_detail, get_table_schema, and get_table_history all focus on table metadata with potentially unclear boundaries for an agent. However, descriptions help differentiate them by specifying different aspects (detail vs. schema vs. history).
Tool names follow a highly consistent verb_noun pattern throughout, with clear and predictable conventions. All tools use either 'get_', 'list_', or 'search_' prefixes followed by the resource name (e.g., get_cluster_events, list_jobs, search_tables), making them easily readable and systematic.
With 25 tools, the count is borderline high for a single server, potentially overwhelming for an agent. While Databricks is a complex platform, this many tools might indicate fragmentation or redundancy, such as multiple table-related tools that could be consolidated. It feels heavy but not extreme.
The tool set provides broad coverage for monitoring and querying Databricks resources, including clusters, jobs, tables, pipelines, and more. Minor gaps exist, such as lack of create/update/delete operations for many resources (e.g., no create_cluster or delete_job), but agents can work around this with the provided query tool for some operations. Core read and list functionalities are well-covered.