使用说明
PostgreSQL DBQA与MCP(模型上下文协议)
该项目充当连接您的安全桥梁 PostgreSQL 数据库到 人工智能(AI) 模型(如Claude、Cursor等)。
通过利用 模型上下文协议(MCP),它使AI模型能够理解您的数据库模式,安全地查询它(SELECT),并执行受控的数据修改(INSERT、UPDATE、DELETE)。
特性
- 模式分析: 自动向AI引入数据库表、列和关系。
- 自然语言查询: AI将自然语言问题翻译成SQL并检索结果。
- 安全写入操作:
- 支持
INSERT,UPDATE,DELETE操作。 - 两阶段审批: AI首先使用以下命令预览受影响的行
modify_data,然后确认修改confirm_modification. - 关闭开关: 可以通过以下方式立即禁用写入权限
WRITE_ENABLED=false.
- 支持
7层安全模型
该服务器采用多层保护系统来确保数据安全:
- DDL阻塞: 结构修改命令,如
DROP,TRUNCATE,ALTER,CREATE是 始终严格禁止. - 条款执行:
UPDATE和DELETE如果没有WHERE条款。 - 行限制: 受单个查询影响的最大行数是有限的(默认值:100)。
- 表白名单: 仅向中指定的表授予写入权限
.env文件。 - 两阶段交易: 写入操作首先在“干运行”(预览)模式下运行,以计算受影响的行数。
- 单独隔离: 不同的连接管理器和验证器用于读写操作。
- 审核日志: 所有操作都详细记录。
安装(Docker)
-
创建 Docker 映像:
docker build -t postgres-mcp-server . -
一
.env创建文件(.env.example你可以复制):copy .env.example .env # Windows cp .env.example .env # Linux/Mac -
.env在文件中设置数据库URI:# Bağlantı URI - tek satırda tüm bilgiler DATABASE_URI=postgresql://username:password@host:port/dbname # Yazma İşlemleri WRITE_ENABLED=true WRITABLE_TABLES=customers,orders,products # Boş = tüm tablolar MAX_WRITE_ROWS=100
用法
AI客户端配置(克劳德桌面/光标)
将以下内容添加到您的AI客户端配置中(例如。, claude_desktop_config.json 或光标MCP设置):
{
"mcpServers": {
"postgres-dbq": {
"command": "docker",
"args": [
"run", "-i", "--rm", "--network", "host",
"-e", "DATABASE_URI",
"-e", "WRITE_ENABLED",
"-e", "WRITABLE_TABLES",
"-e", "MAX_WRITE_ROWS",
"postgres-mcp-server"
],
"env": {
"DATABASE_URI": "postgresql://postgres:your_password@localhost:5432/your_database",
"WRITE_ENABLED": "true",
"WRITABLE_TABLES": "",
"MAX_WRITE_ROWS": "100"
}
}
}
}
注:
--network host允许容器访问localhost服务(例如在主机上运行的PostgreSQL)。在Windows/Mac Docker桌面上,您还可以使用host.docker.internal在URI中,而不是localhost.
本地开发(无Docker)
pip install -r requirements.txt
python mcp_server.py
项目结构
mcp_server.py:主MCP服务器文件。工具定义位于此处。src/database/:executor.py:SQL执行引擎(preview_write和execute_write方法)。schema_manager.py:分析数据库架构的模块。
src/validation/:sql_validator.py:SQL安全检查和验证逻辑。rules.py:禁止的关键字和限制定义。
src/config.py:基于Pydantic的配置管理。Dockerfile:Docker镜像定义。
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
DATABASE_URI |
✅ | — | PostgreSQL连接URI(postgresql://user:pass@host:port/db) |
WRITE_ENABLED |
❌ | false |
启用写入操作 |
WRITABLE_TABLES |
❌ | "" (all) |
逗号分隔的可写表列表 |
MAX_WRITE_ROWS |
❌ | 100 |
每次写入查询受影响的最大行数 |
MAX_QUERY_TIMEOUT |
❌ | 30 |
查询超时(秒) |
MAX_RESULT_ROWS |
❌ | 1000 |
每次SELECT返回的最大行数 |
安全警告
这个工具具有强大的功能。当 WRITE_ENABLED=true 设置后,您的AI模型可以对数据库进行更改。
- 配置
WRITABLE_TABLES在生产环境中使用前严格遵守。 - 确保定期备份关键数据。