使用说明
模型上下文协议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在本地运行
- LLM配备了受控的数据库工具。它将用户问题转换为安全的SQL,在服务器端执行,并返回结构化的结果+摘要。示例:
- 脚本:
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-用于与助手交互的UIguard.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)