Berth
Provides database access with tools for querying, schema introspection via information_schema, generating migrations with MySQL-specific syntax (MODIFY COLUMN for alterations), and backup/restore operations using mysqldump and mysql CLI.
Provides comprehensive database access with tools for querying, schema introspection (tables, columns, indexes, foreign keys, sizes), EXPLAIN ANALYZE, monitoring active queries via pg_stat_activity, generating dialect-aware migrations, and backup/restore operations using pg_dump and psql.
Provides database access with tools for querying, schema introspection via PRAGMA statements, generating migrations with SQLite-specific handling (including table rebuild patterns for column modifications), and backup/restore using sqlite3 CLI commands.
Berth -- Database MCP Server
A secure berth for your data -- database access for AI tools.
Berth is a Model Context Protocol server that gives AI assistants safe, structured access to PostgreSQL, SQLite, and MySQL databases. It exposes 13 tools for inspecting schemas, running queries, managing data, generating migrations, and performing backups -- all governed by a 3-tier safety model that prevents accidental damage.
Safety Model
Berth enforces three operating modes that control what SQL is permitted:
Mode | Default | Allows | Blocks |
read-only | Yes |
| All writes |
write | No |
|
|
admin | No | Everything | Destructive ops require a confirmation token (60s expiry) |
The server starts in read-only mode. Write and admin modes must be explicitly enabled. Destructive operations in admin mode generate a one-time confirmation token that expires after 60 seconds -- the AI must echo the token back to confirm intent.
Tools
Tool | Description | Key Parameters |
| Server health check | -- |
| Connect to a database |
|
| Execute a SELECT query (auto-adds LIMIT 1000) |
|
| Execute INSERT/UPDATE/DELETE (respects safety mode) |
|
| List tables, views, and indexes |
|
| Column details for a table |
|
| Foreign key relationships |
|
| Database and table sizes |
|
| Currently running queries (PostgreSQL only) |
|
| Run EXPLAIN ANALYZE on a query |
|
| Generate migration SQL by comparing schemas |
|
| Create a database backup |
|
| Restore from backup (admin mode + confirmation token) |
|
Schema Migrations
The generate_migration tool compares two schemas and produces dialect-aware SQL to migrate from one to the other. Two modes of operation:
Mode 1 — Live database vs. target DDL:
Provide connection_id (an active connection) and target_sql (CREATE TABLE statements describing the desired schema). Berth introspects the live database and diffs it against the parsed target.
Mode 2 — Two live databases:
Provide from_connection and to_connection (two active connection IDs). Berth introspects both and generates the migration to transform the source into the target.
What it generates:
CREATE TABLEfor new tablesALTER TABLE ADD COLUMNfor new columnsALTER TABLE ALTER COLUMN/MODIFY COLUMNfor type, nullability, and default changesCREATE INDEX/DROP INDEXfor index changesADD CONSTRAINT/DROP CONSTRAINTfor foreign key changesDROP TABLEandDROP COLUMNare commented out with warnings (safety first)
Dialect handling:
PostgreSQL -- uses
ALTER COLUMN ... TYPE,SET/DROP NOT NULL,SET/DROP DEFAULTMySQL -- uses
MODIFY COLUMNfor all column changes,DROP INDEX ... ON tableSQLite -- warns about unsupported operations and includes the table rebuild pattern for changes that require it (ALTER COLUMN, DROP COLUMN on older versions, constraint changes)
Supported Databases
PostgreSQL -- full support including
pg_stat_activity,EXPLAIN ANALYZE,pg_dump/psqlbackup/restoreSQLite -- full support including PRAGMA introspection,
.backup/.restoreviasqlite3CLIMySQL -- full support including
information_schemaintrospection,mysqldump/mysqlbackup/restore
Installation
From PyPI:
pip install berth-mcpOr in an isolated environment:
pipx install berth-mcpMySQL support requires an optional dependency:
pip install berth-mcp[mysql]PostgreSQL (asyncpg) and SQLite (aiosqlite) drivers are included by default.
Usage
Run the server:
berthBerth communicates over stdio using the MCP protocol. It is designed to be launched by an MCP client, not run standalone.
Claude Code
claude mcp add berth -- berthClaude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"berth": {
"command": "berth",
"args": []
}
}
}If installed in a virtual environment, use the full path:
{
"mcpServers": {
"berth": {
"command": "/path/to/venv/bin/berth",
"args": []
}
}
}Environment Variables
Variable | Default | Description |
| Current working directory | Sandbox directory for backup and restore paths. All paths are validated to stay within this directory. |
Security
3-tier safety model -- read-only by default, writes require explicit opt-in, destructive ops require confirmation tokens
Confirmation tokens -- one-time UUIDs with 60-second expiry for DROP, TRUNCATE, ALTER DROP, and full-table DELETE
SQL injection protection -- table names validated against
sqlite_masterbefore use in PRAGMA statements; parameterized queries used throughoutPath traversal protection -- backup/restore paths are resolved and validated to stay within
BERTH_BACKUP_DIR; null bytes rejectedPassword masking -- DSN passwords are masked in all display output and error messages
Development
git clone https://github.com/seayniclabs/berth.git
cd berth
python -m venv .venv && source .venv/bin/activate
pip install -e ".[test]"
python -m pytest tests/ -qIntegration tests for PostgreSQL and MySQL require Docker:
docker compose -f tests/docker-compose.test.yml up -d
python -m pytest tests/ -q
docker compose -f tests/docker-compose.test.yml downLicense
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/seayniclabs/berth'
If you have feedback or need assistance with the MCP directory API, please join our Discord server