这是一个用于 PostgreSQL 数据库性能分析和优化的 Model Context Protocol (MCP) 服务器。
PostgreSQL 分析器 MCP 是一个强大的工具,利用人工智能帮助数据库管理员和开发者优化他们的 PostgreSQL 数据库。它提供了对数据库结构、查询性能、索引使用情况以及配置设置的全面分析,并提供改进的实际建议。
此工具作为远程 MCP 服务器运行,使用可流传输的 HTTP 协议,允许集中部署并被任何兼容 MCP 的客户端访问,包括 Amazon Q 开发者 CLI、Claude 和其他支持 MCP 协议的 AI 助手。
实验性:该项目是实验性的,旨在展示使用 MCP 和 PostgreSQL 所能实现的功能。在任何生产环境中实施之前,应对所有建议和代码进行仔细审查。
非官方:这是一个个人项目,与我工作或贡献的任何组织无关,未得到它们的认可或代表。所有观点和方法都是我个人的。
无责任:本工具“按现状”提供,不附带任何形式的保证。自行承担风险使用。作者不对因使用本软件而产生的任何损害或问题负责。
此工具默认以只读模式运行。所有数据库连接都通过 SET TRANSACTION READ ONLY 建立,以防止意外修改您的数据库。查询执行功能严格限制为 SELECT、EXPLAIN 和 SHOW 命令。
克隆仓库:
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
克隆仓库:
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
配置您的数据库凭据:
python src/main.py --host 0.0.0.0 --port 8000
# 当运行容器时,服务器会自动启动
docker run -p 8000:8000 postgres-analyzer-mcp
要连接到远程 MCP 服务器,请配置您的 MCP 客户端如下:
服务器 URL: http://your-server-address:8000/mcp
传输方式: 可流传输的 HTTP
使用任何兼容 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 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")
为了最佳性能分析,我们建议启用以下扩展:
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 build -t postgres-analyzer-mcp -f Dockerfile .
docker run -d -p 8000:8000 postgres-analyzer-mcp
docker-compose 或 systemd 来确保容器在服务器重启时重新启动为了安全访问,考虑设置:
欢迎贡献!请随时提交拉取请求。
本项目采用 MIT 许可证 - 详情见 LICENSE 文件。