PostgreSQL MCP服务器

一个基于Docker的PostgreSQL MCP服务器,提供全面的数据库交互功能,允许AI助手和其他MCP客户端通过标准化接口查询、检查和管理PostgreSQL数据库。

  • by vpro1032
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 vpro1032/postgresql-mcp-server

使用说明

PostgreSQL MCP服务器

基于Docker 模型上下文协议(MCP) 提供全面PostgreSQL数据库交互功能的服务器。该服务器使AI助手和其他MCP客户端能够通过标准化的接口查询、检查和管理PostgreSQL数据库。

特性

🔍 查询执行

  • 使用参数绑定执行原始SQL查询
  • 在事务中运行多个查询
  • 使用EXPLAIN/EXPLAIN ANALYZE获取查询执行计划

📊 架构检查

  • 列出数据库、模式、表、视图和函数
  • 用列、类型和约束描述表结构
  • 查看索引及其定义
  • 获取表大小和行数统计信息

📝 数据操作

  • 插入单行或多行
  • 使用WHERE子句进行更新和删除
  • 从JSON数组批量插入
  • 将表数据导出为JSON

⚙️ 数据库管理

  • 查看数据库统计信息和连接信息
  • 列出并终止活动连接
  • 运行VACUUM和ANALYZE操作
  • 检查桌子是否膨胀

快速开始

先决条件

  • Docker和Docker Compose
  • MCP客户端(例如,Claude Desktop、带MCP扩展的VS Code)

安装

  1. 克隆仓库

    git clone <repository-url>
    cd postgresql-mcp-server
    
  2. 配置环境变量

    cp .env.example .env
    # Edit .env with your preferred settings
    
  3. 启动服务

    docker-compose up -d
    
  4. 验证服务器是否正在运行

    docker-compose logs mcp-server
    

配置

服务器是通过环境变量配置的。看 .env.example 对于所有可用选项:

变量 描述 默认值
POSTGRES_HOST PostgreSQL主机 postgres
POSTGRES_PORT PostgreSQL端口 5432
POSTGRES_DB 数据库名称 postgres
POSTGRES_USER 数据库用户 postgres
POSTGRES_PASSWORD 数据库密码 postgres
POSTGRES_MAX_CONNECTIONS 最大连接池大小 20

与MCP客户端一起使用

克劳德桌面版

添加到您的Claude Desktop配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):

{
  "mcpServers": {
    "postgresql": {
      "command": "docker",
      "args": ["exec", "-i", "postgresql-mcp-server", "node", "dist/index.js"]
    }
  }
}

VS代码MCP扩展

添加到您的VS Code MCP设置中:

{
  "mcp.servers": {
    "postgresql": {
      "command": "docker",
      "args": ["exec", "-i", "postgresql-mcp-server", "node", "dist/index.js"]
    }
  }
}

可用命令

服务器提供 20+命令 横跨4个类别。看 COMMANDS.md 详细文档。

查询工具

  • execute_query -使用参数绑定执行SQL查询
  • execute_transaction -在事务中运行多个查询
  • explain_query -获取查询执行计划

架构工具

  • list_databases -列出所有数据库
  • list_schemas -列出当前数据库中的架构
  • list_tables -列出架构中的表
  • describe_table -获取表结构和约束
  • list_indexes -列出表的索引
  • list_views -列出架构中的视图
  • list_functions -列出存储的函数/过程
  • get_table_size -获取表大小和行数

数据工具

  • insert_data -插入一行
  • update_data -使用WHERE子句更新行
  • delete_data -使用WHERE子句删除行
  • bulk_insert -从JSON插入多行
  • export_table -将表数据导出为JSON

管理工具

  • get_database_stats -获取数据库统计信息
  • list_active_connections -显示活动连接
  • terminate_connection -通过PID终止连接
  • vacuum_table -在桌子上运行VACUUM
  • analyze_table -在表上运行ANALYZE
  • check_table_bloat -检查桌子是否膨胀

发展

从源头构建

# Install dependencies
npm install

# Build TypeScript
npm run build

# Run locally (requires PostgreSQL)
npm start

项目结构

postgresql-mcp-server/
├── src/
│   ├── index.ts           # Main server entry point
│   ├── database.ts        # Database connection manager
│   └── tools/
│       ├── query.ts       # Query execution tools
│       ├── schema.ts      # Schema inspection tools
│       ├── data.ts        # Data manipulation tools
│       └── admin.ts       # Administrative tools
├── Dockerfile             # Multi-stage Docker build
├── docker-compose.yml     # Docker Compose configuration
└── package.json           # Node.js dependencies

Docker命令

# Start services
docker-compose up -d

# Stop services
docker-compose down

# View logs
docker-compose logs -f mcp-server

# Rebuild after code changes
docker-compose up -d --build

# Access PostgreSQL directly
docker-compose exec postgres psql -U postgres

安全注意事项

  • 凭证:从不承诺 .env 具有真实凭据的文件
  • 网络MCP服务器和PostgreSQL通过私有Docker网络进行通信
  • 权限:服务器在容器中以非root用户身份运行
  • SQL注入:始终使用参数化查询(工具支持参数绑定)

故障排除

服务器无法连接到PostgreSQL

  • 检查PostgreSQL是否健康: docker-compose ps
  • 验证中的环境变量 .env
  • 检查日志: docker-compose logs postgres

MCP客户端无法连接到服务器

  • 确保容器正在运行: docker ps
  • 验证MCP客户端配置中的命令
  • 检查服务器日志: docker-compose logs mcp-server

权限被拒绝错误

  • 确保您的数据库用户具有适当的权限
  • 检查PostgreSQL日志中的身份验证错误

贡献

欢迎投稿!请随时提交拉取请求。

支持这个项目

如果您发现此MSSQL MCP服务器对您的项目有用,请考虑支持其开发!

☕ 成为赞助人

该项目由独立开发人员维护。您的支持有助于我们:

  • 🚀 添加新功能和改进
  • 🐛 修复错误并提高稳定性
  • 📚 创建更好的文档和教程
  • 🔒 增强安全功能
  • 🎯 提供更快的支持和更新

在Patreon上支持我们

支持者福利

顾客可以访问:

  • 🎯 优先支持 -在需要帮助时更快地获得帮助
  • 📝 抢先体验 -在公开发布之前尝试新功能
  • 💬 直接通信 -影响项目路线图
  • 🎓 独家教程 -高级使用指南和示例
  • 🏆 认可 -您的名字在我们的SUPPORTERS.md文件中

其他支持方式

  • ⭐ 标记此存储库 在GitHub上
  • 🐛 报告错误 并通过以下方式请求功能 GitHub问题
  • 📖 改进文档 通过提交pull请求
  • 💬 传话 -与同事分享并在社交媒体上分享

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

资源