bricks-and-context

bricks-and-context

Enables AI assistants to interact with Databricks workspaces, running SQL queries, managing jobs, and exploring schemas via the Model Context Protocol.

Category
访问服务器

README

<div align="center">

🧱 Bricks and Context

Production-grade Model Context Protocol (MCP) server for Databricks

CI Python 3.10+ License: MIT MCP

SQL Warehouses · Jobs API · Multi-Workspace · Built for AI Agents

</div>


✨ What is this?

Bricks and Context lets AI assistants (Cursor, Claude Desktop, etc.) talk directly to your Databricks workspaces through the Model Context Protocol.

Think of it as a bridge: your AI asks questions, this server translates them into Databricks API calls, and returns structured, AI-friendly responses.

Why use this?

Pain Point How we solve it
AI gets overwhelmed by huge query results Bounded outputs — configurable row/byte/cell limits
Flaky connections cause random failures Retries + circuit breakers — automatic fault tolerance
Managing multiple environments is tedious Multi-workspace — switch between dev/prod with one parameter
Raw API responses confuse AI models Markdown tables — structured, LLM-optimized output

🔧 Available Tools

<details> <summary><strong>SQL & Schema Discovery</strong></summary>

Tool What it does
execute_sql_query Run SQL with bounded, AI-safe output
discover_schemas List all schemas in the workspace
discover_tables List tables in a schema with metadata
describe_table Get column types, nullability, structure
get_table_sample Preview rows for data exploration
connection_health Verify Databricks connectivity

</details>

<details> <summary><strong>Jobs Management</strong></summary>

Tool What it does
list_jobs List jobs with optional name filtering
get_job_details Full job config: schedule, cluster, tasks
get_job_runs Run history with state and duration
trigger_job Start a job with optional parameters
cancel_job_run Stop a running job
get_job_run_output Retrieve logs, errors, notebook output

</details>

<details> <summary><strong>Observability</strong></summary>

Tool What it does
cache_stats Hit rates, memory usage, category breakdown
performance_stats Operation latencies, error rates, health

</details>


🚀 Quick Start

1. Clone & Install

git clone https://github.com/laraib-sidd/bricks-and-context.git
cd bricks-and-context
uv sync  # or: pip install -e .

2. Configure Workspaces

Copy the template and add your credentials:

cp auth.template.yaml auth.yaml

Edit auth.yaml:

default_workspace: dev

workspaces:
  - name: dev
    host: your-dev.cloud.databricks.com
    token: dapi...
    http_path: /sql/1.0/warehouses/...

  - name: prod
    host: your-prod.cloud.databricks.com
    token: dapi...
    http_path: /sql/1.0/warehouses/...

💡 auth.yaml is gitignored. Your secrets stay local.

3. Run

python run_mcp_server.py

🎯 Cursor Integration

Cursor uses stdio transport and doesn't inherit your shell environment. You need explicit paths.

Step 1: Ensure dependencies are installed

cd /path/to/bricks-and-context
uv sync

Step 2: Open MCP settings in Cursor

Cmd+Shift+P"Open MCP Settings" → Opens ~/.cursor/mcp.json

Step 3: Add this configuration

Using uv run (recommended):

{
  "mcpServers": {
    "databricks": {
      "command": "uv",
      "args": [
        "--directory", "/path/to/bricks-and-context",
        "run", "python", "run_mcp_server.py"
      ],
      "env": {
        "MCP_AUTH_PATH": "/path/to/bricks-and-context/auth.yaml",
        "MCP_CONFIG_PATH": "/path/to/bricks-and-context/config.json"
      }
    }
  }
}

Or using venv directly:

{
  "mcpServers": {
    "databricks": {
      "command": "/path/to/bricks-and-context/.venv/bin/python",
      "args": ["/path/to/bricks-and-context/run_mcp_server.py"],
      "env": {
        "MCP_AUTH_PATH": "/path/to/bricks-and-context/auth.yaml",
        "MCP_CONFIG_PATH": "/path/to/bricks-and-context/config.json"
      }
    }
  }
}

Step 4: Restart Cursor

Reload the window to activate the MCP server.

Test it

Ask your AI:

  • "List my Databricks jobs"
  • "Run SELECT 1 on Databricks"
  • "Describe the table catalog.schema.my_table"

🌐 Multi-Workspace

Define multiple workspaces in auth.yaml, then select per-call:

execute_sql_query(sql="SELECT 1", workspace="prod")
list_jobs(limit=10, workspace="dev")

When workspace is omitted, the server uses default_workspace.


⚙️ Configuration

config.json — Tunable settings (committed)

Setting Default Description
max_connections 10 Connection pool size
max_result_rows 200 Max rows returned per query
max_result_bytes 262144 Max response size (256KB)
max_cell_chars 200 Truncate long cell values
allow_write_queries false Enable INSERT/UPDATE/DELETE
enable_sql_retries true Retry transient SQL failures
enable_query_cache false Cache repeated queries
query_cache_ttl_seconds 300 Cache TTL
databricks_api_timeout_seconds 30 Jobs API timeout

Any setting can be overridden via environment variable (uppercase, e.g., MAX_RESULT_ROWS=500).


🏗️ Architecture

┌─────────────────────────────────────────────────────────────────┐
│                   MCP Client (Cursor / Claude)                  │
└─────────────────────────────────────────────────────────────────┘
                                │ stdio
                                ▼
┌─────────────────────────────────────────────────────────────────┐
│                     FastMCP Server                              │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────┐  │
│  │ SQL Tools   │  │ Job Tools   │  │ Observability           │  │
│  └──────┬──────┘  └──────┬──────┘  └───────────┬─────────────┘  │
└─────────┼────────────────┼─────────────────────┼────────────────┘
          │                │                     │
          ▼                ▼                     ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────────┐
│ Connection Pool  │ │  Job Manager     │ │ Cache / Perf Monitor │
│  (SQL Connector) │ │  (REST API 2.1)  │ │                      │
└────────┬─────────┘ └────────┬─────────┘ └──────────────────────┘
         │                    │
         └────────┬───────────┘
                  ▼
┌─────────────────────────────────────────────────────────────────┐
│                   Databricks Workspace(s)                       │
│              SQL Warehouse        Jobs Service                  │
└─────────────────────────────────────────────────────────────────┘

🛡️ Reliability Features

Feature Description
Bounded outputs Rows, bytes, and cell-character limits prevent OOM
Connection pooling Thread-safe with per-connection health validation
Retry with backoff Exponential backoff + jitter for transient failures
Circuit breakers Automatic fault isolation, prevents cascading failures
Query caching Optional TTL-based caching for repeated queries

🧑‍💻 Development

uv sync --dev        # Install dev dependencies
uv run pytest        # Run tests
uv run black .       # Format code
uv run mypy src/     # Type check

📄 License

MIT — see LICENSE

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选