PostgreSQL MCP服务器-概念验证
用于查询PostgreSQL数据库的模型上下文协议(MCP)服务器实现。这个概念验证演示了如何创建一个可以与PostgreSQL数据库交互的MCP服务器,在人工智能模型和结构化数据库内容之间架起一座桥梁。
概述
该项目展示了模型上下文协议与PostgreSQL数据库的集成,使AI模型能够以结构化和安全的方式查询数据库内容并与之交互。服务器提供用于执行SQL查询、列出数据库模式和管理数据库连接的工具。
特性
- SQL查询执行:执行SELECT查询(出于安全考虑的只读操作)
- 图式反思:列出表、列和数据库结构
快速开始
先决条件
- Node.js 22
- PostgreSQL数据库
- TypeScript知识
安装
- 克隆存储库:
git clone
cd mcp-server-postgres-poc- 安装依赖项:
npm install- 设置测试数据(用于测试目的):
# Start PostgreSQL service
./init_postgres.sh
# Set up sample weather data
cd weather-data-setup
npx tsx setup-weather-data.ts
cd ..- 通过创建
.env文件:
POSTGRES_USER=your_username
POSTGRES_HOST=localhost
POSTGRES_DATABASE=your_database
POSTGRES_PASSWORD=your_password
POSTGRES_PORT=5432
POSTGRES_MAX_CONNECTIONS=10
POSTGRES_IDLE_TIMEOUT=30000
POSTGRES_CONNECTION_TIMEOUT=10000- 构建项目:
npm run build- 启动MCP服务器:
npm start可用工具
MCP服务器提供以下工具:
query
对PostgreSQL数据库执行SQL查询。
参数:
sql(string):要执行的SQL查询params(数组,可选):参数化查询的参数
list_tables
列出数据库中的所有表。
参数:
schema(字符串,可选):数据库架构名称(默认值:“public”)
describe_table
获取特定表结构的详细信息。
参数:
schema(字符串,可选):数据库架构名称(默认值:“public”)table(string):要描述的表名
样品数据
该POC包括一个天气数据设置,以展示服务器的功能:
天气数据
这 weather-data-setup/ 目录包含:
- weather.csv:美国气象站的历史天气数据(16744+条记录)
- setup-ather-data.ts:创建和填充天气数据库的脚本
测试截图
MCP服务器与天气数据一起运行的屏幕截图:
List Tables Tool
Weather Data Queries
要设置示例数据,请执行以下操作:
cd weather-data-setup
npx ts-node setup-weather-data.ts这创建了一个 weather_data 表格中的字段包括温度、降水、风数据和气象站信息。
发展
脚本
npm run build-将TypeScript编译为JavaScriptnpm run dev-使用tsx在开发模式下运行npm run watch-在监视模式下运行以进行开发npm run clean-清理构建工件
项目结构
src/
├── generic-postgres-mcp.ts # Main MCP server implementation
weather-data-setup/
├── README.md # Weather data documentation
├── setup-weather-data.ts # Database setup script
└── weather.csv # Sample weather data配置
服务器支持以下环境变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
POSTGRES_USER | postgres | 数据库用户名 |
POSTGRES_HOST | localhost | 数据库主机 |
POSTGRES_DATABASE | postgres | 数据库名称 |
POSTGRES_PASSWORD | (空) | 数据库密码 |
POSTGRES_PORT | 5432 | 数据库端口 |
POSTGRES_MAX_CONNECTIONS | 10 | 最大连接池大小 |
POSTGRES_IDLE_TIMEOUT | 30000 | 空闲连接超时(毫秒) |
POSTGRES_CONNECTION_TIMEOUT | 10000 | 连接超时(毫秒) |
安全考虑
- 始终使用参数化查询来防止SQL注入
- 将数据库用户权限限制为仅限于必要的操作
- 使用连接池高效管理数据库资源
- 验证并清理所有输入参数
- 考虑为长时间运行的操作实现查询超时
与MCP客户端集成
该服务器可以与任何兼容MCP的客户端集成,例如Claude Desktop或支持模型上下文协议的其他AI应用程序。
MCP客户端配置示例:
{
"mcpServers": {
"postgres-server": {
"command": "node",
"args": ["/path/to/dist/generic-postgres-mcp.js"],
"env": {
"POSTGRES_USER": "your_username",
"POSTGRES_HOST": "localhost",
"POSTGRES_DATABASE": "your_database",
"POSTGRES_PASSWORD": "your_password"
}
}
}
}贡献
这是一个概念验证项目。欢迎提出意见、建议和改进!请随时:
- 报告问题
- 建议新功能
- 提交拉取请求
- 改进文档
许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
后续步骤
这个POC演示了PostgreSQL的MCP服务器的基本功能。潜在的增强功能包括:
- 高级查询构建器和ORM集成
- 数据库迁移支持
- 多数据库支持
- 增强的安全功能
- 性能监控和指标
- 大型数据集的流式查询结果
- 交易管理
