MiniLake MCP
A local Databricks API emulator with a 67-tool MCP server: agents run SQL and jobs without a real workspace
- 142 ★ on the repository
- Last commit
Broad access
Why this level
- MCP tools execute arbitrary SQL and spawn Docker containers on your machine.
- There is no authentication and any token is accepted: a published port serving `/mcp` amounts to handing out a shell.
Install
- Works in
Manual install
pip install minilakeThe first run command from the README installs the emulator. MCP needs the extra: `pip install 'minilake[mcp]'`.
Access and checks
How we reviewBroad accessThe tool can change data, run commands or handle secrets.
- MCP tools execute arbitrary SQL and spawn Docker containers on your machine.
- There is no authentication and any token is accepted: a published port serving `/mcp` amounts to handing out a shell.
This is third-party code. Review the repository files before installing.
What it does
MiniLake starts a Databricks REST API emulator on localhost so code built on `databricks-sdk`, the CLI and Terraform can be written and tested without a real workspace. SQL runs on DuckDB, external Delta tables are Parquet files with a `_delta_log/`, and jobs run `spark-submit` in a sibling Docker container. Other parts of the API store and return data or answer `501 NOT_IMPLEMENTED`. The MCP server is switched on with `MINILAKE_MCP=1` and answers at `/mcp` on the same port, with no extra process. It offers 67 tools, some of which collapse a four-call sequence into one, 8 resources with rules for the agent and 4 prompt templates. The agent gets instructions before its first action: for instance, that the SQL dialect here is DuckDB, not Spark. The MCP layer calls the emulator's own HTTP API, so a tool error matches the error an ordinary SDK client would see.
Who it is for. Data engineers writing Databricks code who want an agent to run SQL and jobs locally rather than in a paid workspace.
Good fit when
- An agent writes `databricks-sdk` scripts and they must run without workspace access.
- Terraform or Asset Bundles configuration is checked against a local copy of the API.
- CI runs tests for Databricks code with no cloud cost.
- An agent needs catalogs, schemas and tables it can create and break without consequences.
Not a fit when
- You must verify permissions and grants: the emulator stores them but never enforces them.
- The code relies on Spark SQL rather than the DuckDB dialect.
- The server is meant to be shared with several people or exposed to a network.
Example request
Create a sales catalog with a store schema and an orders table holding three rows, then run a query grouped by customer.MCP
- Transport
- http
- Authentication
- not required
Environment variables
MINILAKE_MCPrequired- The value 1 enables serving MCP at /mcp.
MINILAKE_MCP_MAX_ROWS- Row cap for run_sql, 200 by default.
MINILAKE_MCP_ALLOWED_HOSTS- Host header allowlist, required when reaching the server under a non-loopback name.
Limitations
The emulator targets one developer on localhost: there is no authentication and any token is accepted. MCP tools run arbitrary SQL and spawn Docker containers, so the port serving `/mcp` must not be published and the `127.0.0.1` binding stays as it is. Repos, DLT, Model Registry, Vector Search, Lakeview and Genie, and Delta Sharing are not implemented. Managed tables live in DuckDB without files and Spark cannot see them. A green local run is no substitute for a check against real Databricks.
How to disable. Run `claude mcp remove minilake` and stop the `minilake` process or the Docker container. Without `MINILAKE_MCP=1` the `/mcp` endpoint is not served.
FAQ
How do I connect MiniLake to Claude Code?
Start the emulator with `MINILAKE_MCP=1`, then run `claude mcp add --transport http minilake http://localhost:8000/mcp`. `claude mcp list` should show the connection. The repository also ships a ready project `.mcp.json`.
How is MCP enabled and why is it off by default?
With `MINILAKE_MCP=1`. The tools execute arbitrary SQL and spawn Docker while the emulator accepts any token, so `/mcp` is disabled by default.
How many rows does `run_sql` return?
Up to 200 rows by default. `MINILAKE_MCP_MAX_ROWS` changes the cap so a `SELECT *` on a large table cannot flood the agent context.
Does the emulator work offline?
Yes. The Docker image downloads nothing at runtime, so it suits offline use.
How do I run MiniLake in Docker?
Run `docker run -p 8000:8000 ghcr.io/dmux/minilake:latest`. For MCP add `-e MINILAKE_MCP=1`: the required extra is already in the image.
Discussion
No questions or reviews yet.
Related
MCP serversDremio MCP server: an agent browses tables, looks for patterns in the data and analyzes cluster workload.
Databricks Field Engineering's agent kit: an installer for Databricks skills, an MCP server and a visual Builder App
One MCP server for SQLite, SQL Server, PostgreSQL and MySQL: read and change data, edit schemas and export to CSV and JSON
A desktop SQL workspace with a built-in MCP server: the agent reads the schema and runs queries in the same client you already use
A single-binary MCP server for MySQL, MariaDB, PostgreSQL and SQLite: read-only by default, with optional PII redaction
DuckDB / MotherDuck MCP Server
DuckDB / MotherDuck Local MCP Server
An MCP server for SQL analytics on DuckDB: local files, in-memory databases, S3-hosted databases and MotherDuck
Comparison with similar tools
Cards that share the main search query, and how they differ.
| Tool | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| MiniLake (this card) | no | not required | 142 | |
| Databricks AI Tools | no | 384 | official skills for working with the real Databricks platform; MiniLake replaces the platform with a local emulator | |
| DuckDB / MotherDuck MCP Server | yes | not required | 539 | gives direct SQL analytics on DuckDB; MiniLake builds a Databricks-compatible REST API on top of DuckDB |
README in short
The emulator covers much of the Databricks REST API and is tested against the real `databricks-sdk`, the Terraform provider and `databricks bundle`. The documentation covers configuration, a web SQL editor at `/ui/` and the status of every service.