数据库连接协议

MCP Agent POC是一个安全的生产级实现,作为AI代理与PostgreSQL数据库之间的连接层,支持自然语言查询且不向LLM暴露数据库凭证。

  • by muniasamyk
  • Jupyter Notebook
  • 本地部署
  • 更新于
在 GitHub 查看 muniasamyk/MCP_Project

使用说明

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 .env

2.使用Docker运行

最简单的方法(Postgres+neneneba API):

docker-compose up --build

API监听 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运行:

  1. pip install -r requirements.txt
  2. 更新 .env 使用您的数据库凭据
  3. python -m app.main