智能PostgreSQL MCP客户端
该项目使用LangChain和Google Gemini在PostgreSQL的模型上下文协议(MCP)服务器和大型语言模型(LLM)之间提供了强大的集成。它支持PostgreSQL数据库的自然语言查询,具有智能SQL生成功能。
概述
智能PostgreSQL MCP客户端允许用户使用自然语言与PostgreSQL数据库进行交互。用户可以用简单的英语提问,而不是编写复杂的SQL查询,系统将自动生成并执行适当的SQL查询来检索所请求的信息。
主要优势:
- 简化数据库访问:使用自然语言查询数据库
- 智能查询生成:自动将问题转换为优化的SQL
- 灵活的部署选项:通过命令行使用或与MCP兼容的IDE集成
- 提高生产率:减少编写和调试SQL查询所花费的时间
入门指南
克隆和访问项目
- 克隆存储库:
git clone https://github.com/anass1209/MCP_PostgreSQL.git- 导航到项目目录:
cd MCP_PostgreSQL再进行
您可以使用Poetry(推荐)、pip或UV安装依赖关系:
使用诗歌:
poetry install使用pip:
pip install -r requirements.txt使用紫外线:
uv pip install -r requirements.txt关于MCP
MCP(模型上下文协议)是一种协议,它使人工智能模型能够安全、受控地访问外部资源。在这个项目中,它为LLM提供了一种标准化的方式来与PostgreSQL数据库交互,同时保持安全性和适当的访问控制。
使用MCP的好处:
- 安全:数据库资源的受控访问
- 标准化:AI模型与数据库交互的一致界面
- 可扩展性:易于添加新功能和工具
- 互操作性:适用于各种LLM和数据库系统
项目结构
此存储库包含两个主要实现:
1.带_CMD
如果要通过命令行或LCI与MCP服务器交互,请使用此文件夹:
client.py:使用LLM连接到MCP服务器的客户端应用程序server.py:MCP服务器实现config.py:数据库连接和API密钥的配置设置db.py:数据库连接和管理实用程序sql_tools.py:SQL查询工具和实用程序prompts.py:LLM提示智能SQL生成.env:API键和数据库配置的环境变量
2.与IDE_MCP集成
如果您想与Claude Desktop等MCP兼容的IDE集成,请使用此文件夹:
intelligent_server.py:MCP服务器,通过智能SQL生成公开PostgreSQL功能intelligent_server.bat:启动智能MCP服务器的批处理脚本config.py:数据库连接和API密钥的配置设置db.py:数据库连接和管理实用程序sql_tools.py:SQL查询工具和实用程序prompts.py:LLM提示智能SQL生成.env:API键和数据库配置的环境变量
公用文件
pyproject.toml:诗歌依赖关系管理文件poetry.lock:锁定诗歌依赖项的文件
用法
先决条件
- 确保PostgreSQL正在运行,并且可以使用配置中定义的连接参数进行访问。
- 在中设置环境变量
.env文件:
GOOGLE_API_KEY="your-gemini-api-key"
PG_HOST="localhost"
PG_PORT=
PG_USER=""
PG_PASSWORD=""
PG_DEFAULT_DB=""选项1:使用命令行界面(带_CMD文件夹)
- 导航到With_CMD文件夹:
cd With_CMD- 使用特定问题运行客户端:
python client.py "What tables are in the Candidat_DB database?"或者没有交互模式的论据:
python client.py然后在提示时输入您的问题。
With_CMD用法示例
Command Line Interface Example Command Line Interface Example
*上图显示了使用命令行界面查询PostgreSQL数据库的示例。用户用自然语言提问,系统生成并执行适当的SQL查询以检索所请求的信息。*
选项2:使用MCP兼容IDE(Integret_with_IDE_MCP文件夹)
- 导航到Integret_with_IDE_MCP文件夹:
cd Integret_with_IDE_MCP- 配置IDE以连接到MCP服务器:
将此JSON配置添加到IDE的MCP设置中:
{
"mcpServers": {
"intelligent-postgres": {
"command": "Path to intelligent_server.bat",
"args": [],
"cwd": "Path to the MCP_Test folder",
"env": {
"PG_HOST": "localhost",
"PG_PORT": "5432",
"PG_USER": "Your database username",
"PG_PASSWORD": "Your database password",
"PG_DEFAULT_DB": "Your default database",
"GOOGLE_API_KEY": "Your API key",
"PYTHONIOENCODING": "utf-8",
"PYTHONUNBUFFERED": "1"
}
}
}
}- 更新
intelligent_server.bat如果需要:
- 如果使用UV,请更换 poetry run python intelligent_server.py 在.bat文件中 uv run python intelligent_server.py 必要时使用绝对路径
- 将此任务添加到IDE中,然后重新启动以激活新的MCP“Intelligent postgres”
客户端将自动连接到MCP服务器,通过此服务器访问PostgreSQL,并使用LLM回答有关数据库的问题。
IDE MCP集成示例
Command Line Interface Example Command Line Interface Example Command Line Interface Example
*上图演示了如何通过MCP兼容的IDE使用自然语言查询与PostgreSQL数据库进行交互。IDE提供了一个无缝的界面,可以直接在您的开发环境中提问和接收格式化的结果。*
查询的最佳实践
- 指定数据库和表:当您有多个数据库和表时,请始终在查询中指定数据库和表,以获得更准确的结果。例如:
Which employees are managers and have no manager themselves? use Candidates_DB and employees table- 具体:提供清晰、具体的问题,包括您要查找的数据的所有相关信息。
- 包括上下文:如果可能,请包含有关您正在查询的数据结构或关系的上下文。
技术要求
依赖项
- Python 3.11+
- PostgreSQL数据库服务器
- Python包:
- psycopg2二进制文件:PostgreSQL数据库适配器 - fastmcp:快速MCP服务器实现 - mcp:模型上下文协议核心库 - langchain mcp适配器:用于mcp的langchain适配器 - langgraph:基于图形的工作流管理 - langchain谷歌genai:谷歌双子座集成langchain
主要特点
- 智能SQL生成MCP服务器包括智能工具,可以根据自然语言问题自动生成优化的SQL查询。
- 多步数据库分析:逐步进行数据库发现、表选择、模式分析和查询生成,以进行全面的数据探索。
- 错误处理:强大的错误处理,具有自动查询更正和重试机制,可实现可靠操作。
- LLM集成:与Google Gemini无缝集成,实现高级自然语言理解。
- 双重实施:根据您的工作流首选项,在命令行界面或IDE集成之间进行选择。
- 开发者友好:结构良好的代码库,关注点明确分离,文档全面。
贡献
- 如果您有任何错误修复或改进,请提交拉取请求或打开问题!
- 遵循现有的代码样式,并对新功能进行适当的测试。
- 对于重大更改,请先打开一个问题来讨论您想要更改的内容。
获取API密钥
- Google Gemini API密钥:https://aistudio.google.com/apikey
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
MCP服务器工具
智能MCP服务器提供以下工具:
list_databases:列出所有可用数据库list_tables:列出特定数据库中的表describe_table:描述表的模式run_sql:执行安全的SELECT SQL查询sample_data:显示表格中的示例数据Step-by-step analysis tools:(步骤1至步骤9)用于智能查询生成debug_connection:用于测试连接和功能的调试工具
常见问题(FAQ)
我应该使用哪个文件夹?
- 使用 使用_CMD 如果您想通过命令行或LCI与MCP服务器交互,请使用文件夹。
- 使用 与IDE_MCP集成 如果您想与Claude Desktop等MCP兼容的IDE集成,请使用文件夹。
如何指定要查询的数据库?
在问题中包括数据库和表名。例如:
Which employees are managers and have no manager themselves? use Candidates_DB and employees table除了Google Gemini,我还可以使用其他LLM吗?
当前的实现针对Google Gemini进行了优化,但该架构旨在以最小的变化适应其他LLM。
数据库访问有多安全?
MCP协议确保数据库访问受到控制,默认情况下仅限于只读SELECT查询,在LLM和数据库之间提供了一个安全层。该系统实施了多种安全措施,以防止任何破坏性操作:
- SQL查询筛选:所有SQL查询都通过正则表达式模式进行过滤,该模式可以阻止潜在的破坏性操作,例如:
ALTER, CREATE, DELETE, DROP, INSERT, UPDATE, TRUNCATE, GRANT, REVOKE- 错误处理流程:当查询执行过程中发生错误时,系统会尝试更正查询,而不是允许可能有害的操作。
- 只读操作:该系统仅设计为执行SELECT语句,确保不会发生数据修改。
- 综合录井:出于安全审计和调试目的,记录所有查询尝试。
这些保护措施确保即使语言模型生成了不适当的查询,它也会在到达数据库之前被阻止。
我可以问哪些类型的问题?
你可以问任何可以用PostgreSQL数据库中的数据回答的问题。问题越具体,提供的上下文越多(如数据库和表名),结果就越好。
