Berth
Berth -- 数据库 MCP 服务器
为您的数据提供一个安全的停泊处 -- 为 AI 工具提供数据库访问权限。
Berth 是一个 Model Context Protocol 服务器,为 AI 助手提供对 PostgreSQL、SQLite 和 MySQL 数据库的安全、结构化访问。它提供了 13 种工具,用于检查模式、运行查询、管理数据、生成迁移和执行备份 -- 所有这些都由一个三级安全模型管理,以防止意外损坏。
安全模型
Berth 强制执行三种操作模式,以控制允许执行的 SQL:
模式 | 默认 | 允许 | 阻止 |
只读 (read-only) | 是 |
| 所有写入操作 |
写入 (write) | 否 |
|
|
管理 (admin) | 否 | 所有操作 | 破坏性操作需要确认令牌(60秒过期) |
服务器以 只读模式 启动。写入和管理模式必须显式启用。管理模式下的破坏性操作会生成一个 60 秒后过期的一次性确认令牌 -- AI 必须回显该令牌以确认意图。
工具
工具 | 描述 | 关键参数 |
| 服务器健康检查 | -- |
| 连接到数据库 |
|
| 执行 SELECT 查询 (自动添加 LIMIT 1000) |
|
| 执行 INSERT/UPDATE/DELETE (遵守安全模式) |
|
| 列出表、视图和索引 |
|
| 表的列详细信息 |
|
| 外键关系 |
|
| 数据库和表大小 |
|
| 当前运行的查询 (仅限 PostgreSQL) |
|
| 对查询运行 EXPLAIN ANALYZE |
|
| 通过比较模式生成迁移 SQL |
|
| 创建数据库备份 |
|
| 从备份恢复 (管理模式 + 确认令牌) |
|
模式迁移
generate_migration 工具比较两个模式并生成特定于方言的 SQL,以实现从一个模式到另一个模式的迁移。有两种操作模式:
模式 1 — 实时数据库 vs. 目标 DDL:
提供 connection_id(活动连接)和 target_sql(描述所需模式的 CREATE TABLE 语句)。Berth 会内省实时数据库并将其与解析后的目标进行差异对比。
模式 2 — 两个实时数据库:
提供 from_connection 和 to_connection(两个活动的连接 ID)。Berth 会内省两者并生成将源转换为目标的迁移。
它生成的内容:
CREATE TABLE用于新表ALTER TABLE ADD COLUMN用于新列ALTER TABLE ALTER COLUMN/MODIFY COLUMN用于类型、可空性和默认值更改CREATE INDEX/DROP INDEX用于索引更改ADD CONSTRAINT/DROP CONSTRAINT用于外键更改DROP TABLE和DROP COLUMN会被注释掉并附带警告(安全第一)
方言处理:
PostgreSQL -- 使用
ALTER COLUMN ... TYPE,SET/DROP NOT NULL,SET/DROP DEFAULTMySQL -- 对所有列更改使用
MODIFY COLUMN,DROP INDEX ... ON tableSQLite -- 对不支持的操作发出警告,并包含针对需要它的更改(ALTER COLUMN、旧版本上的 DROP COLUMN、约束更改)的表重建模式
支持的数据库
PostgreSQL -- 全面支持,包括
pg_stat_activity,EXPLAIN ANALYZE,pg_dump/psql备份/恢复SQLite -- 全面支持,包括 PRAGMA 内省,通过
sqlite3CLI 进行.backup/.restoreMySQL -- 全面支持,包括
information_schema内省,mysqldump/mysql备份/恢复
安装
从 PyPI 安装:
pip install berth-mcp或者在隔离环境中:
pipx install berth-mcpMySQL 支持需要可选依赖项:
pip install berth-mcp[mysql]默认包含 PostgreSQL (asyncpg) 和 SQLite (aiosqlite) 驱动程序。
使用方法
运行服务器:
berthBerth 通过 stdio 使用 MCP 协议进行通信。它旨在由 MCP 客户端启动,而不是独立运行。
Claude Code
claude mcp add berth -- berthClaude Desktop
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"berth": {
"command": "berth",
"args": []
}
}
}如果安装在虚拟环境中,请使用完整路径:
{
"mcpServers": {
"berth": {
"command": "/path/to/venv/bin/berth",
"args": []
}
}
}环境变量
变量 | 默认 | 描述 |
| 当前工作目录 | 用于备份和恢复路径的沙盒目录。所有路径都经过验证以确保位于此目录内。 |
安全性
三级安全模型 -- 默认只读,写入需要显式选择加入,破坏性操作需要确认令牌
确认令牌 -- 用于 DROP、TRUNCATE、ALTER DROP 和全表 DELETE 的 60 秒过期一次性 UUID
SQL 注入保护 -- 在 PRAGMA 语句中使用前,表名会根据
sqlite_master进行验证;全程使用参数化查询路径遍历保护 -- 备份/恢复路径经过解析和验证,确保位于
BERTH_BACKUP_DIR内;拒绝空字节密码掩码 -- DSN 密码在所有显示输出和错误消息中都会被掩码
开发
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/ -qPostgreSQL 和 MySQL 的集成测试需要 Docker:
docker compose -f tests/docker-compose.test.yml up -d
python -m pytest tests/ -q
docker compose -f tests/docker-compose.test.yml down许可证
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