listDatabasesLABSCO SUMMARY
Three database engines behind one binary, with the write tools removable rather than merely discouraged.
The schema tools go further than most — views, triggers, functions, procedures and materialized views, not just tables — which is what an assistant needs before it writes a query against a database it has not seen. Read-only mode is the setting to reach for first: it removes the write and DDL tools from the surface rather than trusting a prompt to avoid them. With no runtime to install and a binary this size, the practical difference from the alternatives is that it can live wherever the database already is.
What it is
A single-binary Rust server for SQL databases: it discovers the schema, runs queries and, when you let it, writes — against MySQL and MariaDB, PostgreSQL, or SQLite from the same executable.
What you get
- Schema discovery: listDatabases, listTables, listViews, listTriggers, listFunctions, listProcedures and listMaterializedViews
- readQuery for reading rows, and writeQuery when writes are enabled
- explainQuery, so a slow statement can be examined rather than guessed at
- DDL when you want it: createDatabase, dropDatabase and dropTable
- A read-only mode that hides writeQuery, createDatabase, dropDatabase and dropTable entirely
- Stdio for a desktop client, or HTTP with CORS origin and host allowlists for a shared server
- About 7 MB with no Python, Node or Docker underneath it
Requirements
Your own database credentials — DB_BACKEND is required, with DB_HOST, DB_PORT, DB_USER, DB_PASSWORD and DB_NAME filling in around it, or the matching CLI flags which take precedence. Defaults follow the backend: port 3306 and user root for MySQL and MariaDB, 5432 and postgres for PostgreSQL, while SQLite just takes a file path. SSL options are available. Install with the published script, a container image, or cargo.
Setup effort
One command plus credentials — curl -fsSL https://dbmcp.haymon.ai/install.sh | bash, then supply credentials
USE CASES
Understanding a database before you query it
List tables, views and the functions around them, so the query the model writes matches what is actually there.
Answering a question that needs a join you have not written
Read the structure, then run the SELECT and get the rows back in the same conversation.
Letting an assistant near production without letting it write
Start in read-only mode and the write and DDL tools are not on the surface at all.
Working out why a query is slow
Get the plan back and read it alongside the schema rather than pasting into a client.
Setting up a scratch database for a test
Create it, use it, and drop it — with writes enabled deliberately for that session.
13 tools
Listed in project docs. Your client may show a different list.
listTableslistViewslistTriggerslistFunctionslistProcedureslistMaterializedViewsreadQuerywriteQuerycreateDatabasedropDatabasedropTableexplainQueryBEFORE YOU INSTALL
What to know first
Tools you get
13 tools named in the project's documentation.
Requires
- dbmcp on PATH
- DB_PASSWORD in your environment
Where it runs
All 3 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
curl -fsSL https://dbmcp.haymon.ai/install.sh | bashMCP Clients
Claude Code
{
"mcpServers": {
"dbmcp": {
"command": "dbmcp",
"args": [
"stdio"
],
"env": {
"DB_BACKEND": "mysql",
"DB_HOST": "localhost",
"DB_USER": "root",
"DB_PASSWORD": "secret",
"DB_NAME": "myapp"
}
}
}
}Claude Desktop
{
"mcpServers": {
"dbmcp": {
"command": "dbmcp",
"args": [
"stdio"
],
"env": {
"DB_BACKEND": "postgres",
"DB_HOST": "localhost",
"DB_USER": "postgres",
"DB_PASSWORD": "secret",
"DB_NAME": "myapp"
}
}
}
}Windsurf
{
"mcpServers": {
"dbmcp": {
"command": "dbmcp",
"args": [
"stdio"
],
"env": {
"DB_BACKEND": "mysql",
"DB_HOST": "localhost",
"DB_USER": "root",
"DB_PASSWORD": "${env:DB_PASSWORD}",
"DB_NAME": "myapp"
}
}
}
}