MCP代理POC
该项目展示了一个安全、生产就绪的 模型上下文协议(MCP) 作为AI代理和PostgreSQL数据库之间的连接器层。该解决方案支持自然语言查询,而无需将数据库凭据暴露给LLM。
主要成就:LLM不能直接访问数据库,只能通过预定义的MCP工具。
______________________________________________________________________
🏗️ 架构概述
┌────────────────────────────────────────────────────────┐
│ USER QUERY │
│ "Fetch employees in AI department" │
└───────────────────┬────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ PLANNER AGENT (LLM) │
│ ✓ Natural Language Understanding │
│ ✗ NO database credentials │
│ Output: {"tool": "get_employees_by_department", │
│ "parameters": {"department": "AI"}} │
└───────────────────┬────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ EXECUTOR AGENT │
│ ✓ Validates tool request │
│ ✓ Maps to allowed operations only │
│ ✗ Cannot execute arbitrary SQL │
└───────────────────┬────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ MCP TOOLS LAYER (Sandbox) │
│ ✓ get_employees_by_department("AI") │
│ ✓ get_projects_by_status("Completed") │
│ ✓ get_issues_by_priority("High") │
│ ✗ Cannot run arbitrary SQL │
└───────────────────┬────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ DATABASE CONNECTION (Secure) │
│ ✓ Credentials in environment variables │
│ ✓ Only parameterized queries (SQL injection safe) │
└───────────────────┬────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ RESULT TO USER │
│ [Secure data retrieval via MCP] │
└────────────────────────────────────────────────────────┘🔒 安全特性
| 功能 | 带MCP |
|---|---|
| DB凭据 | 在.env中安全✅ |
| SQL访问 | 仅限预定义工具✅ |
| 攻击面 | 仅限有限操作✅ |
| 审计跟踪 | 完整日志记录✅ |
| 连接池 | 是的✅ |
项目结构
app/agents/:大脑(规划师、执行者、编排者)app/mcp/:工具层(数据库连接器)app/database/:低级数据库连接池app/api/:FastAPI路由
入门指南
1.设置环境
复制示例配置:
cp .env.example .env2.使用Docker运行
最简单的方法(Postgres+neneneba API):
docker-compose up --buildAPI监听 http://localhost:8000.
3.测试它
您可以在以下网址使用swagger UI /docs 或卷曲:
curl -X POST "http://localhost:8000/api/v1/query" \
-H "Content-Type: application/json" \
-d '{"query": "Find all projects that are in progress"}'本地开发(无Docker)
如果你有Python 3.11+和本地Postgres运行:
pip install -r requirements.txt- 更新
.env使用您的数据库凭据 python -m app.main
