本项目是一个基于MCP(Model Context Protocol)协议构建的应用后端示例,专注于提供通过自然语言查询SQLite数据库的能力。它将数据库操作封装为MCP工具和资源,使大型语言模型(LLM)客户端能够方便地访问和操作数据。
项目简介
MCP(Model Context Protocol)旨在为LLM应用提供标准化的上下文服务。本项目实现了MCP服务器端,提供数据库查询工具和表结构资源。配套的主机程序(Host)作为MCP客户端,集成LLM(如OpenAI/DeepSeek)实现将用户的自然语言问题转化为SQL查询,并通过MCP协议调用服务器端的工具执行查询,最终解释查询结果。
主要功能点
- 基于MCP协议: 遵循MCP规范,提供工具、资源和Prompt模板。
- 自然语言转SQL: 利用集成的大语言模型将用户输入的自然语言问题转化为可执行的SQL语句。
- SQL数据库访问: 通过MCP工具执行生成的SQL查询,获取数据库(SQLite)中的数据。
- 提供数据库表结构: 将数据库的表结构信息作为MCP资源提供给客户端或LLM,帮助理解数据模型。
- 实时通信: 使用SSE(Server-Sent Events)作为传输协议,支持服务器向客户端推送信息。
- 模块化设计: 服务器、客户端和主机程序职责分离,易于理解和扩展。
安装步骤
- 克隆仓库:
git clone https://github.com/HanShan006/MCP_Host_Client_Server_SSE.git cd MCP_Host_Client_Server_SSE - 安装依赖: 确保Python环境可用,然后安装所需的库:
pip install openai mcp-framework starlette uvicorn - 配置API密钥: 创建一个名为 'config.ini' 的文件,并在其中添加用于访问大语言模型(如OpenAI或DeepSeek)的API密钥。
请注意,本项目代码示例中使用了DeepSeek的API地址,您可能需要根据您使用的LLM服务调整 'mcp_host.py' 中的 'clientOpenai = OpenAI(...)' 配置。[secrets] API_KEY=你的_api_密钥_在此填写 - 创建示例数据库: 运行脚本创建并填充示例SQLite数据库文件 'database.db'。
python create_database.py
服务器配置
本项目包含可运行的MCP服务器实现 ('mcp_server.py')。对于任何MCP客户端(包括本项目中的 'mcp_host.py'),都需要配置如何启动服务器以及如何与其建立连接。
- 服务器名称: MCP服务器在此项目中注册的名称为 'SQLiteDB'。
- 启动命令: 启动此MCP服务器的命令是执行Python脚本 'mcp_server.py'。
- 启动参数: 启动脚本可以接受可选参数来指定监听的网络地址和端口,例如 '--host 127.0.0.1 --port 8100'。如果没有提供参数,服务器将使用默认值。
- 传输协议: 服务器使用SSE(Server-Sent Events)协议进行通信。
- 连接地址/路径: 服务器监听指定的网络地址和端口,MCP通信端点路径为 '/sse'。默认完整的连接URL可能是 'http://127.0.0.1:8100/sse'。
典型的MCP客户端会在其配置文件中记录以上信息,以便发现、启动并连接到此服务器。
基本使用方法
- 启动MCP服务器: 打开一个终端窗口,进入项目目录,运行服务器脚本。
服务器将在配置的地址和端口上启动并监听客户端连接。python mcp_server.py - 运行客户端主机程序: 打开另一个终端窗口,进入项目目录,运行主机程序脚本。
主机程序将连接到MCP服务器,获取数据库结构和可用工具信息,然后进入交互模式,提示您输入自然语言问题。python mcp_host.py - 输入查询: 在主机程序的命令行界面中输入您想查询的数据库问题,例如 "查询所有用户的信息" 或 "显示张三的所有订单",然后按回车。
- 查看结果: 主机程序将调用LLM生成SQL,通过MCP服务器执行,并再次调用LLM解释执行结果,最终显示在命令行中。输入 'q' 退出程序。
数据库结构示例
项目创建的 'database.db' 包含两个示例表:
- 'users': 存储用户信息(id, name, age, email)
- 'orders': 存储订单信息(id, user_id, product_name, price, order_date),user_id 是指向 users 表的外键。
通过MCP服务器提供的 'db://schema' 资源可以获取详细的表结构信息。
信息
分类
数据库与文件