数据库AI查询服务

PostgreSQL DBQA with MCP是一个安全连接PostgreSQL数据库与AI模型的桥梁,支持自然语言查询和受控的数据修改操作。

  • by anilsrml
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 anilsrml/postgres-mcp-server

使用说明

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层安全模型

该服务器采用多层保护系统来确保数据安全:

  1. DDL阻塞: 结构修改命令,如 DROP, TRUNCATE, ALTER, CREATE 是 始终严格禁止.
  2. 条款执行: UPDATE 和 DELETE 如果没有 WHERE 条款。
  3. 行限制: 受单个查询影响的最大行数是有限的(默认值:100)。
  4. 表白名单: 仅向中指定的表授予写入权限 .env 文件。
  5. 两阶段交易: 写入操作首先在“干运行”(预览)模式下运行,以计算受影响的行数。
  6. 单独隔离: 不同的连接管理器和验证器用于读写操作。
  7. 审核日志: 所有操作都详细记录。

安装(Docker)

  1. 创建 Docker 映像:

    docker build -t postgres-mcp-server .
    
  2. 一 .env 创建文件(.env.example你可以复制):

    copy .env.example .env   # Windows
    cp .env.example .env     # Linux/Mac
    
  3. .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 在生产环境中使用前严格遵守。
  • 确保定期备份关键数据。