使用MCP工具和RBAC的AI代理
一个生产就绪的AI代理系统,使用PyCasbin将模型上下文协议(MCP)、LangChain ReAct代理和基于角色的访问控制(RBAC)结合在一起。该应用程序演示了具有企业级权限管理的安全AI代理操作。
概述
此应用程序实现了一个文档管理系统,其中具有不同角色(管理员、编辑、查看器)的用户与AI代理进行交互。代理根据自然语言查询自主选择和执行工具,所有操作都受RBAC策略的保护。
主要特点
- MCP协议:HTTP+服务器发送事件(SSE),实现高效通信
- RBAC控制:基于PyCasbin的权限管理
- LangChain集成:使用OpenAI GPT-4o重新激活代理
- 企业用户界面:使用React和TailwindCSS构建的现代、干净的界面
- 实时更新:实时文档管理和权限执行
- 安全:具有日志记录和审计跟踪的多层防御
系统架构
User Interface (React)
↓
API Server (FastAPI)
↓
LangChain ReAct Agent (GPT-4o)
↓
MCP Client (HTTP + SSE)
↓
MCP Server (FastAPI)
↓
RBAC Manager (PyCasbin) + Document Storage角色许可
| 角色 | 创建 | 读取 | 更新 | 删除 |
|---|---|---|---|---|
| 管理员 | ✅ | ✅ | ✅ | ✅ |
| 编辑 | ✅ | ✅ | ✅ | ❌ |
| 查看器 | ❌ | ✅ | ❌ | ❌ |
默认用户
- 爱丽丝 (管理员):完全访问所有操作
- 鲍勃 (编辑):可以创建、阅读和更新文档
- 查理 (查看器):只读访问
安装
1.克隆和设置环境
git clone https://github.com/AIAnytime/AI-Agent-with-MCP-Tools.git
cd AI-Agent-with-MCP-Tools
cd backend
activate .venv2.安装Python依赖项
pip install -r requirements.txt3.配置环境变量
这 .env 文件应包含:
OPENAI_API_KEY=your_openai_api_key_here4.安装前端依赖项
cd frontend
npm install
cd ..运行应用程序
选项1:一次启动所有服务(推荐)
chmod +x start_all.sh
./start_all.sh这将开始:
- MCP服务器已打开
http://localhost:8765 - 上的API服务器
http://localhost:8000 - 前端打开
http://localhost:3000
用法
- 打开应用程序 在
http://localhost:3000
- 选择用户 从用户选择器(alice、bob或charlie)
- 与AI代理聊天 使用自然语言:
- 创建一个名为“项目计划”的文档,内容为“第四季度项目计划” - “列出所有文档” - “阅读文档‘项目计划’” - 用新内容更新文档“项目计划” - 删除文档“项目计划” - “检查我的权限”
- 查看文档 在“文档”选项卡中查看所有创建的文档
- 检查权限 在“权限”选项卡中查看RBAC矩阵
- 了解系统 在“系统体系结构”选项卡中
示例演示
管理员用户(alice)-完全访问权限
Query: "Create a document called 'quarterly-report' with content 'Q4 2024 Report'"
Result: ✅ Document created successfully
Query: "Delete the document 'quarterly-report'"
Result: ✅ Document deleted successfully编辑用户(bob)-无删除权限
Query: "Create a document called 'meeting-notes' with content 'Team Meeting Notes'"
Result: ✅ Document created successfully
Query: "Delete the document 'meeting-notes'"
Result: ❌ Permission denied: Editor role cannot delete documents查看器用户(charlie)-只读
Query: "Read the document 'meeting-notes'"
Result: ✅ Document content displayed
Query: "Update document 'meeting-notes' with 'Updated Notes'"
Result: ❌ Permission denied: Viewer role cannot update documents项目结构
mcp-rbac-app/
├── backend/
│ ├── api/
│ │ └── main.py # FastAPI backend for frontend
│ ├── agent/
│ │ └── langchain_agent.py # LangChain ReAct Agent
│ ├── mcp/
│ │ ├── mcp_server.py # MCP HTTP Server
│ │ ├── mcp_client.py # MCP Client
│ │ └── document_tools.py # Document CRUD tools
│ ├── rbac/
│ │ ├── model.conf # Casbin RBAC model
│ │ ├── policy.csv # Casbin policies
│ │ └── rbac_manager.py # RBAC enforcement
│ └── storage/
│ └── document_storage.py # Document persistence
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── api/ # API client
│ │ ├── App.jsx # Main app component
│ │ └── main.jsx # Entry point
│ ├── package.json
│ └── vite.config.js
├── data/
│ └── documents/ # Document storage (auto-created)
├── .env # Environment variables
├── requirements.txt # Python dependencies
├── start_all.sh # Start all services
└── README.md # This file重新激活代理流
LangChain ReAct Agent遵循以下推理循环:
- 问题:接收用户的自然语言查询
- 思想:分析需要采取什么行动
- 动作选择:选择合适的MCP工具
- 动作输入:为工具执行准备参数
- 工具执行:MCP服务器执行RBAC检查
- 观察:接收并分析结果
- 任务完成?:确定目标是否实现或继续循环
- 最终答案:将结果返回给用户
安全功能
1.最小特权原则
每个角色只有最低限度的必要权限。
2.默认拒绝
除非策略中明确允许,否则所有操作都将被拒绝。
3.操作日志
所有权限检查和操作都会被记录下来以供审计。
4.执行前验证
在执行任何工具之前,都会验证权限。
API终点
MCP服务器(端口8765)
GET /-健康检查GET /tools/list-列出可用工具POST /tools/call-执行工具(返回task_id)GET /stream/{task_id}-用于工具执行的SSE流
API服务器(端口8000)
GET /-健康检查GET /users-获取所有用户和角色GET /permissions/{role}-获取角色的权限GET /documents-列出所有文件POST /agent/query-向AI代理发送查询
许可证
本项目是为教育和演示目的而创建的,具有麻省理工学院许可证。
