PostgreSQL分析器MCP
用于PostgreSQL数据库性能分析和优化的模型上下文协议(MCP)服务器。
概述
PostgreSQL Analyzer MCP是一个强大的工具,它利用人工智能帮助数据库管理员和开发人员优化他们的PostgreSQL数据库。它提供了对数据库结构、查询性能、索引使用和配置设置的全面分析,以及可操作的改进建议。
此工具使用Streamable HTTP传输作为远程MCP服务器运行,允许集中部署并由任何兼容MCP的客户端访问,包括Amazon Q Developer CLI、Claude和其他支持MCP协议的AI助手。
⚠️ 免责声明
实验性:这个项目是实验性的,旨在演示MCP和PostgreSQL的可能性。在任何生产环境中实施之前,应仔细审查所有建议和代码。
非官方的:这是一个个人项目,与我工作或参与的任何组织无关,也没有得到任何组织的认可或代表。所有的意见和方法都是我自己的。
无责任:此工具“按原样”提供,不提供任何形式的保修。使用风险自负。作者对因使用本软件而产生的任何损害或问题不承担责任。
特性
- 数据库结构分析:分析表、列、索引和外键
- 查询性能分析:分析执行计划并找出瓶颈
- 索引建议:根据查询模式获取新索引的建议
- 查询优化:接收查询重写建议以提高性能
- 查询识别速度慢:查找并分析运行缓慢的查询
- 数据库运行状况仪表板:全面了解数据库运行状况指标
- 指标使用分析:识别未使用、重复或臃肿的索引
- 只读查询执行:安全执行只读查询以进行验证
安全
此工具在以下情况下运行 只读模式 默认情况下。所有数据库连接都是通过以下方式建立的 SET TRANSACTION READ ONLY 以防止对数据库进行任何意外修改。查询执行功能严格限于SELECT、EXPLAIN和SHOW命令。
安装
先决条件
- Python 3.12+(或Docker)
- Amazon Aurora或RDS PostgreSQL数据库
- AWS帐户(用于Secrets Manager,可选)
设置
选项1:本地设置
- 克隆存储库:
git clone https://github.com/yourusername/postgres-performance-mcp.git
cd postgres-performance-mcp- 创建虚拟环境并安装依赖关系:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt选项2:Docker设置
- 克隆存储库:
git clone https://github.com/yourusername/postgres-performance-mcp.git
cd postgres-performance-mcp- 构建Docker镜像:
docker build -t postgres-analyzer-mcp -f Dockerfile .- 运行Docker容器:
docker run -p 8000:8000 postgres-analyzer-mcp对于AWS凭据(如果使用Secrets Manager):
docker run -p 8000:8000 \
-e AWS_ACCESS_KEY_ID=your_access_key \
-e AWS_SECRET_ACCESS_KEY=your_secret_key \
-e AWS_DEFAULT_REGION=your_region \
postgres-analyzer-mcp- 配置您的数据库凭据:
- 选项1:将凭据存储在AWS Secrets Manager中(推荐) - 选项2:使用工具时直接提供凭据
用法
启动服务器
当地:
python src/main.py --host 0.0.0.0 --port 8000Docker:
# The server starts automatically when running the container
docker run -p 8000:8000 postgres-analyzer-mcp配置MCP客户端
要连接到远程MCP服务器,请使用以下配置MCP客户端:
Server URL: http://your-server-address:8000/mcp
Transport: Streamable HTTP与MCP客户端一起使用
使用任何兼容MCP的客户端连接到服务器,并使用可用的工具:
analyze_database_structure(secret_name="my-postgres-db-credentials", region_name="us-west-2")可用工具
analyze_database_structure:分析数据库模式并提供优化建议get_slow_queries:识别数据库中运行缓慢的查询analyze_query:分析SQL查询并提供优化建议recommend_indexes:为给定的SQL查询推荐索引suggest_query_rewrite:建议对SQL查询进行优化重写database_health_dashboard:为数据库生成一个全面的健康仪表板query_optimization_wizard:逐步优化SQL查询的交互式向导analyze_index_usage:分析索引使用模式,识别未使用或低效的索引execute_read_only_query:执行只读SQL查询并返回结果show_postgresql_settings:使用可选筛选显示PostgreSQL配置设置health_check:检查服务器是否正在运行并响应
定制
此工具的真正强大之处在于根据您的特定环境进行定制:
- 添加根据您的数据库使用模式量身定制的自定义分析规则
- 与您的监控系统集成
- 根据您组织的最佳实践定制建议
- 添加有关数据模型的特定领域知识
- 使用特定于您需求的其他工具进行扩展
AWS密钥管理器设置
要使用AWS Secrets Manager存储数据库凭据,请执行以下操作:
- 使用以下密钥在AWS Secrets Manager中创建密钥:
- host:数据库主机名 - port:数据库端口(通常为5432) - dbname:数据库名称 - username:数据库用户名 - password:数据库密码
- 确保您的AWS凭据配置了访问密钥的适当权限。
- 调用工具时使用秘密名称:
analyze_query(query="SELECT * FROM users WHERE user_id = 123", secret_name="my-postgres-db-credentials")PostgreSQL配置
为了进行最佳性能分析,我们建议启用以下扩展:
CREATE EXTENSION pg_stat_statements;
CREATE EXTENSION pg_buffercache;并将这些设置添加到您的 postgresql.conf:
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all例子
分析数据库结构
analyze_database_structure(secret_name="my-postgres-db-credentials")分析查询
analyze_query(
query="SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id WHERE orders.status = 'pending'",
secret_name="my-postgres-db-credentials"
)获取索引建议
recommend_indexes(
query="SELECT * FROM products WHERE category = 'electronics' AND price < 100",
secret_name="my-postgres-db-credentials"
)执行只读查询
execute_read_only_query(
query="SELECT schemaname, relname, n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC LIMIT 10",
secret_name="my-postgres-db-credentials"
)部署到远程服务器
要将MCP服务器部署到远程计算机,请执行以下操作:
- 在远程服务器上安装Docker
- 将项目文件复制到服务器或从存储库克隆
- 构建并运行Docker容器:
docker build -t postgres-analyzer-mcp -f Dockerfile .
docker run -d -p 8000:8000 postgres-analyzer-mcp- 考虑使用流程管理器,如
docker-compose或systemd确保服务器重新启动时容器重新启动
为了安全访问,请考虑设置:
- 具有SSL/TLS的反向代理(如Nginx或Traefik)
- 身份验证中间件
- 限制访问的防火墙规则
贡献
欢迎投稿!请随时提交拉取请求。
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
致谢
- PostgreSQL社区的文档
- MCP协议开发人员支持AI驱动的工具
- 该项目是使用vibe编码创建的,vibe编码是一种人工智能辅助开发方法,将人类专业知识与人工智能能力相结合,以创建健壮、可维护的软件解决方案。

