A Model Context Protocol (MCP) server that provides AI assistants with direct access to Dolt and DoltgreSQL databases. This server enables AI tools like Claude to interact with Dolt's version-controlled SQL databases over either the MySQL or PostgreSQL wire protocol, allowing for database operations, version control workflows, and data management tasks.
The Dolt MCP Server acts as a bridge between AI assistants and Dolt databases, exposing a comprehensive set of tools for:
- Database Management: Create, drop, and manage databases
- Table Operations: Create, alter, drop, describe, and query tables
- Version Control: Branch management, commits, merges, and diffs
- Data Operations: Insert, update, delete, and query data
- Remote Operations: Clone, fetch, push, and pull from remote repositories
Both Dolt (MySQL-compatible) and DoltgreSQL (PostgreSQL-compatible) backends are supported. The SQL dialect is selected at startup with the --dolt or --doltgres flag. An embedded DoltLite backend (--doltlite) is also available in specially built binaries, running against a local database file with no server at all — see DoltLite Mode.
- Go 1.25 or later
- A running Dolt or DoltgreSQL SQL server instance (not needed for DoltLite mode)
The default build is pure Go (no cgo) and cross-compiles freely:
git clone https://github.com/dolthub/dolt-mcp
cd dolt-mcp
go build -o dolt-mcp-server ./mcp/cmd/dolt-mcp-serverBinaries built this way do not include DoltLite support (--doltlite returns an error). Building with embedded DoltLite requires cgo and libdoltlite; see Building with DoltLite Support.
Pull the official Docker image:
docker pull dolthub/dolt-mcp:latestThe Dolt MCP Server can run in two modes and supports multiple deployment methods:
docker run -d \
--name dolt-mcp-server \
-p 8080:8080 \
-e MCP_MODE=http \
-e DOLT_HOST=your-dolt-host \
-e DOLT_USER=root \
-e DOLT_DATABASE=your_database \
-e DOLT_PASSWORD=your_password \
dolthub/dolt-mcp:latestdocker run -it --rm \
-e MCP_MODE=stdio \
-e DOLT_HOST=your-dolt-host \
-e DOLT_USER=root \
-e DOLT_DATABASE=your_database \
-e DOLT_PASSWORD=your_password \
dolthub/dolt-mcp:latestSet MCP_DIALECT=doltgres to point the container at a DoltgreSQL server. DOLT_PORT defaults to 5432 when the dialect is doltgres.
docker run -d \
--name dolt-mcp-server \
-p 8080:8080 \
-e MCP_MODE=http \
-e MCP_DIALECT=doltgres \
-e DOLT_HOST=your-doltgres-host \
-e DOLT_USER=postgres \
-e DOLT_DATABASE=your_database \
-e DOLT_PASSWORD=your_password \
dolthub/dolt-mcp:latestThe stdio server communicates over standard input/output, making it ideal for integration with AI assistants like Claude Desktop.
Against Dolt (MySQL dialect, the default):
./dolt-mcp-server \
--stdio \
--dolt \
--host 0.0.0.0 \
--port 3306 \
--user root \
--database mydbAgainst DoltgreSQL (PostgreSQL dialect):
./dolt-mcp-server \
--stdio \
--doltgres \
--host 0.0.0.0 \
--port 5432 \
--user postgres \
--database mydbIf --port is omitted, it defaults to 3306 for Dolt and 5432 for DoltgreSQL.
Add this configuration to your Claude Desktop MCP settings:
{
"mcpServers": {
"dolt-mcp": {
"command": "/path/to/dolt-mcp-server",
"args": [
"--stdio",
"--dolt",
"--host", "0.0.0.0",
"--port", "3306",
"--user", "root",
"--database", "your_database_name"
],
"env": {
"DOLT_PASSWORD": "your_password_if_needed"
}
}
}
}For a DoltgreSQL backend, swap --dolt for --doltgres and adjust the port/user to match your server.
When connecting to a Dolt MCP server running in HTTP mode, you can configure Claude to use the HTTP transport. Important: HTTP connections require the /mcp endpoint to be appended to the server URL.
claude mcp add --transport http dolt-mcp https://your-dolt-host:8080/mcp --header "Authorization: Bearer <token>"Add this configuration to your Claude Desktop MCP settings:
{
"mcpServers": {
"dolt-mcp": {
"transport": "http",
"url": "https://your-dolt-host:8080/mcp",
"headers": {
"Authorization": "Bearer <your-token>"
}
}
}
}Note: Replace your-dolt-host, the port, and <your-token> with your actual server details. The /mcp endpoint is required for HTTP connections.
The HTTP server exposes a REST API for MCP tool calls, useful for web applications and custom integrations.
./dolt-mcp-server \
--http \
--mcp-port 8080 \
--dolt \
--host 0.0.0.0 \
--port 3306 \
--user root \
--database mydbPass --doltgres in place of --dolt to connect to a DoltgreSQL server.
DoltLite is a fork of SQLite that adds Dolt's version control features: an entire version-controlled database — branches, commits, diffs, merges, and remotes — lives in a single local file. In DoltLite mode the MCP server embeds the database engine directly, so there is no Dolt or DoltgreSQL server to install, configure, or run: point the server at a database file (created on first use if missing) and start working. This makes it ideal for local-first AI workflows on a laptop or in a container.
DoltLite mode requires a binary built with DoltLite support. Prebuilt archives named dolt-mcp-server-doltlite-<platform> are attached to releases for Linux and macOS on amd64/arm64, plus Windows x64, and the multi-architecture dolthub/dolt-mcp:<version>-doltlite Docker images include it. The default (pure Go) build does not: passing --doltlite to it errors with this binary was built without DoltLite support; rebuild with -tags "doltlite libsqlite3" ....
docker run -d \
--name dolt-mcp-server-doltlite \
-p 8080:8080 \
-v dolt_mcp_data:/data \
-e MCP_MODE=http \
-e DOLT_DB_FILE=/data/mydb.db \
-e DOLT_COMMIT_NAME="Your Name" \
-e DOLT_COMMIT_EMAIL=you@example.com \
dolthub/dolt-mcp:latest-doltliteMount a volume at /data so the database file persists across container restarts. See docker/README.md for the full set of environment variables.
Download a dolt-mcp-server-doltlite archive from the releases page (or build it yourself, below), then:
./dolt-mcp-server-doltlite \
--doltlite \
--db-file /path/to/mydb.db \
--commit-name "Your Name" \
--commit-email you@example.com \
--doltlite-busy-timeout 30s \
--http --mcp-port 8080
# or --stdio in place of --http --mcp-portNo --host, --port, --user, --password, or TLS flags are needed — DoltLite runs in-process against the file.
--doltlite: Use the embedded DoltLite dialect. Mutually exclusive with--doltand--doltgres.--db-file: Path to the DoltLite database file (required with--doltlite). The file is created if it does not exist.--commit-name/--commit-email: The author name and email used for Dolt commits. Recommended — commits are authored as "doltlite" when unset.--doltlite-busy-timeout: How long DoltLite waits for a conflicting lock (default5s;0disables waiting).
{
"mcpServers": {
"dolt-mcp-doltlite": {
"command": "/path/to/dolt-mcp-server-doltlite",
"args": [
"--stdio",
"--doltlite",
"--db-file", "/path/to/mydb.db",
"--commit-name", "Your Name",
"--commit-email", "you@example.com"
]
}
}
}DoltLite support requires cgo, the doltlite and libsqlite3 build tags, and libdoltlite (with zlib and pthreads). Because of cgo, DoltLite binaries cannot be cross-compiled — build on the target platform.
Get libdoltlite either way:
- GitHub release zips: download the
doltlite-lib-<platform>-<version>.zipasset (e.g.doltlite-lib-linux-x64-0.11.46.zip) from a dolthub/doltlite release. It containsdoltlite.handlibdoltlite.a.mattn/go-sqlite3built with thelibsqlite3tag includes<sqlite3.h>, so copy the header:cp doltlite.h sqlite3.hinside the unpacked directory. - Build from source: clone dolthub/doltlite at the pinned tag, then
mkdir build && cd build && ../configure && make doltlite-lib(requires a C toolchain,tcl, and zlib headers, e.g.apt-get install build-essential tcl zlib1g-dev). The build directory generatessqlite3.hnatively.
Then build the server, pointing cgo at the directory containing the header and static library:
CGO_CFLAGS="-I/path/to/doltlite/build" \
CGO_LDFLAGS="/path/to/doltlite/build/libdoltlite.a -lz -lpthread" \
go build -tags "doltlite libsqlite3" -o dolt-mcp-server-doltlite ./mcp/cmd/dolt-mcp-serverOn Linux, append -lm -ldl to CGO_LDFLAGS. The static link means the resulting binary has no runtime dependency on a doltlite shared library.
DoltLite embeds a single database in a single file, so server- and multi-database-oriented tools are automatically hidden from clients in this mode:
list_databases,create_database,drop_database,clone_databaseshow_processlist,kill_process
Everything else (39 tools) works, including the dolt_tests tools, merge status, and remote operations against file:// URLs and DoltLite-compatible HTTP(S) remotes. Authenticated remotes use DoltLite credentials; create one through the exec tool with SELECT dolt_creds_new();, then configure the returned key with the remote service. The engine reads credentials from ~/.doltlite/creds by default or DOLTLITE_CREDS_DIR when set.
- One database per file: the
working_databasetool argument is accepted but ignored; there is only ever one database. - Commit author: configure
--commit-name/--commit-emailor commits are authored as "doltlite". - Branch switching: dirty working sets are preserved independently per branch; switching away and back restores that branch's unstaged and staged state.
- Concurrency: each tool call uses its own pinned DoltLite database handle so branch and transaction state cannot leak between concurrent MCP operations. DoltLite coordinates those handles—and other applications opening the same file—with concurrent readers and one durable writer at a time. Configure lock waiting with
--doltlite-busy-timeout. - Remote compatibility: remote storage must speak DoltLite's file or HTTP(S) protocol; a full Dolt repository and a DoltLite database use different storage formats.
--host: Hostname of the Dolt or DoltgreSQL server (not used with--doltlite)--user: Username for server authentication (not used with--doltlite)--stdioor--http: Server mode selection
--dolt: Use the Dolt (MySQL-compatible) dialect. This is the default when no dialect flag is passed.--doltgres: Use the DoltgreSQL (PostgreSQL-compatible) dialect.--doltlite: Use the embedded DoltLite dialect. Requires--db-fileand a binary built with DoltLite support (see DoltLite Mode).
--dolt, --doltgres, and --doltlite are mutually exclusive.
--database: Name of the database to connect to--port: Server port. Defaults to3306for Dolt and5432for DoltgreSQL.--password: Password for authentication (can also use environment variable)--tls: TLS mode for the database connection:true,false,skip-verify, orpreferred--tls-ca: Path to a CA certificate file for the database TLS connection--mcp-port: HTTP server port (default: 8080, HTTP mode only)--db-file: Path to the DoltLite database file, created if missing (required with--doltlite)--commit-name: Author name for Dolt commits (--doltliteonly, recommended)--commit-email: Author email for Dolt commits (--doltliteonly, recommended)--doltlite-busy-timeout: How long DoltLite waits for a conflicting lock (default5s;0disables waiting)
DOLT_PASSWORD: Set the password for Dolt server authentication
When using Docker, you can configure the server using environment variables:
DOLT_HOST: Hostname of the Dolt SQL server (not used withdoltlite)DOLT_USER: Username for Dolt server authentication (not used withdoltlite)
DOLT_DATABASE: Name of the database to connect toDOLT_PASSWORD: Password for authenticationDOLT_PORT: Server port (default: 3306 fordolt, 5432 fordoltgres)MCP_DIALECT: SQL dialect:dolt(MySQL-compatible),doltgres(PostgreSQL-compatible), ordoltlite(embedded, requires the-doltliteimage variant). Default:dolt(doltlitein the-doltliteimages)MCP_MODE: Server mode:httporstdio(default: stdio)MCP_PORT: HTTP server port (default: 8080, HTTP mode only)
DOLT_DB_FILE: Path to the DoltLite database file inside the container (default:/data/doltlite.db); mount a volume at/datato persist itDOLT_COMMIT_NAME: Author name for Dolt commits (recommended)DOLT_COMMIT_EMAIL: Author email for Dolt commits (recommended)DOLTLITE_BUSY_TIMEOUT: How long DoltLite waits for a conflicting lock (default:5s;0disables waiting)DOLTLITE_CREDS_DIR: Credential directory for authenticated HTTP(S) remotes (default:/data/creds)DOLTLITE_CREDS_KID: Optional credential key ID when more than one key is presentDOLTLITE_CA_FILE: Optional CA bundle for a private HTTPS remote
version: '3.8'
services:
dolt-mcp-server:
image: dolthub/dolt-mcp:latest
ports:
- "8080:8080"
environment:
- MCP_MODE=http
- DOLT_HOST=dolt-server
- DOLT_PORT=3306
- DOLT_USER=root
- DOLT_DATABASE=myapp
- DOLT_PASSWORD=secret
depends_on:
- dolt-server
restart: unless-stopped
dolt-server:
image: dolthub/dolt-sql-server:latest
ports:
- "3306:3306"
volumes:
- dolt_data:/var/lib/dolt
environment:
- DOLT_ROOT_PATH=/var/lib/dolt
restart: unless-stopped
volumes:
dolt_data:The Dolt MCP Server provides 40+ tools organized by functionality:
list_databases: List all available databasescreate_database: Create a new databasedrop_database: Remove a databaseselect_version: Get Dolt server version information
show_tables: List tables in current databaseshow_create_table: Show table creation SQLdescribe_table: Show table schema and structurecreate_table: Create new tablesalter_table: Modify table structuredrop_table: Remove tables
query: Execute SELECT queries (read operations)exec: Execute INSERT, UPDATE, DELETE queries (write operations)
list_dolt_branches: List all branchesselect_active_branch: Show currently active branchcreate_dolt_branch: Create new branchescreate_dolt_branch_from_head: Create branch from current HEADdelete_dolt_branch: Remove branchesmove_dolt_branch: Rename branches
list_dolt_commits: View commit historycreate_dolt_commit: Create commits with staged changesstage_table_for_dolt_commit: Stage specific tablesstage_all_tables_for_dolt_commit: Stage all modified tablesunstage_table: Remove tables from staging areaunstage_all_tables: Clear staging area
list_dolt_diff_changes_in_working_set: Show uncommitted changeslist_dolt_diff_changes_by_table_name: Show changes for specific tablelist_dolt_diff_changes_in_date_range: Show changes within date rangeget_dolt_merge_status: Check merge conflicts and status
merge_dolt_branch: Merge branches (fast-forward when possible)merge_dolt_branch_no_fast_forward: Force merge commit
dolt_reset_soft: Soft reset to a revision (table, branch, commit, working set, or '.')dolt_reset_hard: Hard reset to a revision
list_dolt_remotes: List configured remotesadd_dolt_remote: Add new remote repositoriesremove_dolt_remote: Remove remote repositoriesclone_database: Clone remote databasesdolt_fetch_branch: Fetch specific branch from remotedolt_fetch_all_branches: Fetch all branches from remotedolt_push_branch: Push branch to remotedolt_pull_branch: Pull branch from remote
# Start the MCP server
./dolt-mcp-server --stdio --dolt --host localhost --user root --database testdb
# Example AI interactions:
# "Show me all tables in the database"
# "Create a table called users with id, name, and email columns"
# "Insert some sample data into the users table"
# "Show me the current branch and recent commits"# Example AI workflow:
# "Create a new branch called 'feature-users'"
# "Switch to the feature-users branch"
# "Create a users table with appropriate schema"
# "Stage and commit these changes"
# "Switch back to main and merge the feature branch"# Example AI interactions:
# "Show me all data in the sales table"
# "Calculate total revenue by month from the orders table"
# "Show me what changed in the products table in the last week"
# "Create a branch to experiment with data transformations"go test ./...The repository includes comprehensive integration tests that validate tool functionality against a real Dolt server instance.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Submit a pull request
This project follows the same license as the main Dolt project.
For issues and questions:
- Create issues in this repository
- Join the Dolt Discord community
- Check the Dolt documentation