数据库自然语言查询工具

一个安全的本地MCP服务器,允许用户使用自然语言查询零售补充销售数据库,提供SQL转换和结果摘要功能。

  • by david125tran
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 david125tran/Model-Context-Protocol-MCP

使用说明

模型上下文协议MCP


ℹ️ 关于

此存储库包含实际操作的MCP项目,这些项目演示了如何安全地提供LLM 现实世界的工具 -数据库和网络搜索。每个项目都隔离了一个特定的功能和安全模式,遵循与OWASP一致的LLM工具编排最佳实践。

✅ 当前项目

项目 能力 总结
01-NL→ SQL数据库助手 数据库 通过具有严格SQL控制的本地MySQL存储提供安全的自然语言接口
02-LLM网络搜索管道 检索 在响应前强制进行实时外部搜索(Tavily),具有严格的验证+速率限制
03-交互式MCP数据库浏览器 Multi-DB Analytics 使用生产风格的React UI扩展Project 01,允许通过MCP(模式发现、NL)安全检查和查询许多数据库表→ SQL、结果和摘要)

每个项目:

  • 提供自己的MCP服务器+UI
  • 实施安全检查(输入验证、速率限制、提示保护)
  • 展示 纵深防御 支持工具的LLM模式
  • 可在本地运行,与框架无关

🔒 生产硬化注意事项 如果部署在本地开发之外,这些服务将是:

  • 位于网关层基于OAuth2/JWT的身份验证之后
  • 通过反向代理(NGINX/云负载均衡器)使用TLS进行保护
  • 使用最低权限数据库凭据部署
  • 通过结构化审计日志和请求跟踪进行监控
  • 与可观测性工具集成(度量+速率监控)

我在这里的实现侧重于安全的LLM工具编排和数据库安全控制。


项目01:用于补充销售分析的自然语言AI助手🛍️💬

  • 项目概况: 该项目构建了一个本地MCP服务器,允许用户使用以下命令查询零售补充剂销售数据库 简明英语 而不是SQL。
  • 亮点:
    • LLM配备了受控的数据库工具。它将用户问题转换为安全的SQL,在服务器端执行,并返回结构化的结果+摘要。示例:
      • “上个季度加拿大维生素的总销售额是多少?”
      • “哪个平台销售的蛋白质产品最多?”
    • 使用轻量级MCP服务器+浏览器UI在本地运行
  • 脚本:
    • Local DB.py -将Supplement_Sales_Weekly.csv加载到MySQL中
    • MCP Server.py -安全数据库MCP服务器+自然语言到原始SQL代码
    • MCP Client.py -用于与助手交互的UI
  • 🔒 安全(OWASP对齐控制):
OWASP概念 实施
提示注入防御 SQL清理程序仅强制执行SELECT
模型滥用缓解 令牌桶速率限制
限制模型工具 表满列表+列检查
安全输出处理 删除多语句、注释、分号
LLM安全防护 正则表达式过滤器+查询包装/ LIMIT
深度防御 原始SQL和NL-SQL路径都沙盒化
最低权限数据库访问 MySQL用户仅被授予SELECT角色

项目02:AI Web搜索-LLM的实时检索🌐🧠

  • 项目概况: 该项目创建了一个安全的MCP服务器,强制LLM在应答之前从网络中提取实时数据。该模型使用 塔维利搜索 + OpenAI GPT-4o-mini,然后为用户总结结果。
  • 亮点
    • 🔍 在回答之前强制进行实时网络搜索
    • 🧱 输入验证+内容净化
    • 🚦 令牌桶速率限制(每个工具和全局)
    • 🔐 及时注射和误用过滤
    • 📦 通过FastAPI实现基于浏览器的用户界面
    • 💬 安全的LLM编排- 没有模型启动的工具调用 (服务器首先强制检索)
  • 脚本:
    • MCP Server.py -MCP服务器、强制网络搜索管道、安全控制。此脚本还配备了一个网络搜索 search_web() 我编写但选择不实现的工具(也许我以后会实现)。
    • MCP Client.py -用于与助手交互的UI
    • guard.py -输入净化程序(正则表达式过滤器、上下文限制器、秘密编辑)
  • 🔒 安全(OWASP对齐控制):
风险类别 实施
提示注入防御 越狱条款的正则表达式过滤器+强制系统提示
模型工具滥用预防 服务器在模型完成之前强制进行网络搜索
速率限制 令牌桶(全局+特定于Tavily)
输入验证 validate_query() + validate_question() 长度和正则表达式检查
输出安全 validate_summary() +上下文大小调整
最小权限 无数据库访问权限;唯一公开的搜索工具
保密 .env 加载+neneneba API密钥从未记录
错误安全 山宁泰异常表面处理(ToolError包装)

项目03:交互式MCP数据库浏览器(React+MCP UI)🧭📊

  • 项目概况: 这个项目是一个生产风格的React前端 在安全的顶部 模型上下文协议(MCP) 后端。它演示了如何安全地暴露 多个数据库表 同时为用户提供一个现代的交互式UI来探索模式、生成SQL和提出自然语言问题。我介绍一个 FastAPI MCP代理 作为前端UI和MCP工具服务器之间的刻意架构边界。

  • 此项目连接:

    • A. 安全MCP数据库服务器
    • A. FastAPI MCP代理 -MCP代理在前端和MCP工具之间提供了一个安全的REST边界,反映了真实世界的部署模式,并防止客户端直接访问LLM执行或数据库。
    • A. React(Vite)前端用户界面
  • 聊天演示示例 自然语言查询 到 原始SQL 到 分析:

  • 回购布局:
03/
│
├── Run MCP Client.bat                                  # Launch React UI (npm start / vite / etc.)
├── Run MCP Server.bat                                  # Launch FastMCP database server
├── Run MCP Proxy.bat                                   # Launch FastAPI MCP proxy (REST → MCP)
│
├── .env                                                # LLM environment variables
├── db.env                                              # DB environment variables
│
├── backend/
│   │
│   ├── Local DB.py                                     # Load CSV files into local MySQL database
│   ├── MCP Server.py                                   # Secure MCP server (Natural Language to Raw SQL, schema tools)
│   ├── MCP Proxy.py                                    # FastAPI proxy exposing REST endpoints
│   ├── 2018_Central_Park_Squirrel_Census.csv
│   └── Supplement_Sales_Weekly.csv  
│
├── frontend/
│   │
│   ├── package.json                                    # Frontend dependencies & scripts
│   ├── node_modules/
│   │
│   ├── public/
│   │ 
│   └── src/
│       ├── App.js                                      # Main chat UI (state, API calls, history)
│       ├── App.css                                     # Chat UI styling
│       ├── index.js                                    # React entry point → App
│       └── index.css                                   # Global styles (resets, fonts)
│
└── directory.md                                        # Project directory overview (this file)