自动化工作流网关

一个智能工作流自动化系统,使用AI动态规划和执行跨平台任务,提供多租户访问控制和安全认证。

  • by PushpakMaheshwari1
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 PushpakMaheshwari1/AgenticMcpPrototype-

使用说明

🐛 自动Bug路由器——代理MCP网关

一个使用人工智能动态规划和执行跨平台任务的智能工作流自动化系统。特性 身份验证+RBAC 用于安全的多租户访问控制。


它做什么

您键入一个简单的英文命令:

Read ticket BUG-12 and post it to the dev channel

幕后:

  1. 快速API 从4台MCP服务器中发现可用工具
  2. 双子座 在运行时动态构建JSON执行计划(DAG)
  3. 基于角色的访问控制 在AI看到之前,根据用户角色过滤工具
  4. FastAPI执行DAG:调用Jira MCP→ 注入结果→ 呼叫Slack MCP
  5. WRITE工具暂停以获得Human In The Loop(HITL)批准
  6. 每一步都通过SSE流式传输到浏览器中的实时终端

建筑

Browser (Next.js :3000)
  │
  │  POST /execute  (natural-language command + JWT)
  │  ◀─── SSE stream (logs, DAG, step events, RBAC events)
  ▼
FastAPI Orchestrator (:8000)
  │
  ├── MCP SSE client ──▶  Jira Mock MCP  (:8081)
  │                         • jira_get_ticket
  │                         • jira_list_open_tickets
  │
  ├── MCP SSE client ──▶  Slack Mock MCP (:8082)
  │                         • slack_post_message
  │
  ├── MCP SSE client ──▶  GitHub Mock MCP (:8083)
  │                         • github_list_pull_requests
  │                         • github_get_pull_request
  │                         • github_create_issue
  │
  └── MCP SSE client ──▶  Sheets Mock MCP (:8084)
                            • sheets_read_range
                            • sheets_list_spreadsheets
                            • sheets_append_row

Auth+RBAC系统

角色和权限

角色 可以访问
实习生 Jira只读(jira_get_ticket, jira_list_open_tickets)
工程师 实习生工具+Slack帖子+GitHub阅读
高级的 工程师工具+表格(读/写)
管理员 所有工具+用户管理

RBAC流

POST /execute { command, Authorization: Bearer <JWT> }
│
▼ [JWT Middleware extracts user_id, role, tenant_id]
│
▼ Phase 1: Discover ALL tools from MCP servers
│
▼ [RBAC Check 1] Filter tools by role
│  Intern sees only 2/9 tools → Slack/GitHub/Sheets hidden from Gemini
│
▼ Phase 2: Gemini generates DAG using FILTERED tools
│
▼ Phase 3: Execute DAG steps
│   ├── [RBAC Check 2] is_tool_allowed(tool, role)?
│   │    NO → log violation, reject, return
│   │
│   ├── [HITL Gate] WRITE tool? → wait for human approval
│   │
│   └── invoke_tool() → result

快速开始

先决条件

1.配置

cd AgenticMcp
# Edit .env and set:
GEMINI_API_KEY=your-gemini-key
JWT_SECRET=any-random-string-for-jwt-signing

2.启动所有服务

docker compose up --build

3.打开控制室

http://localhost:3000
  • 注册 创建帐户(默认角色:实习生)
  • 登录 使用您的凭据
  • 键入命令并单击 执行→

测试用户

电子邮件 密码 角色
admin@test.com password 管理员(所有工具)
engineer@test.com password 工程师
senior@test.com password 高级的
(注册新) 任何 实习生

API终点

认证

方法 端点 描述
职位 /auth/signup 创建新帐户
职位 /auth/login 登录→ 获取JWT令牌
得到 /auth/me 获取当前用户信息

管理员(仅限管理员)

方法 端点 描述
得到 /admin/users 列出所有用户
补丁 /admin/users/{id}/role 更新用户角色

审核(仅限管理员)

方法 端点 描述
得到 /audit/rbac RBAC权限日志
得到 /audit/logins 登录尝试日志

执行

方法 端点 描述
得到 /tools 发现所有MCP工具
职位 /execute 执行自然语言命令

人在回路

方法 端点 描述
得到 /hitl/pending 列出待批准事项
职位 /hitl/{exec_id}/approve 批准一个步骤
职位 /hitl/{exec_id}/reject 拒绝步骤
得到 /hitl/audit HITL决策历史

调试

URL 您将看到什么
http://localhost:8081/health Jira模拟状态
http://localhost:8082/health 松弛模拟状态
http://localhost:8082/inbox 所有Slack消息
http://localhost:8083/health GitHub模拟状态
http://localhost:8084/health 表格模拟状态
http://localhost:8000/health 后端活性

SSE事件类型

type 有效载荷 UI效果
log level, message 终端输出
dag dag (JSON计划) 流程图渲染
rbac_filter role, visible_count, total_count 显示筛选工具
rbac_block tool, role 刀具堵塞警报
step_start step_id, tool 卡片突出显示琥珀色
step_complete step_id, output_key, result 卡片变绿
pending_approval execution_id, step_id, ... HITL模式
approved execution_id, step_id 继续执行
rejected execution_id, step_id 停止执行
error message 错误警报
complete outputs 工作流完成

预加载演示数据

Jira模拟门票:

ID 标题 状态 优先级
BUG-12 数据库超时问题 打开 高
BUG-13 移动设备上的登录重定向循环 正在进行中 中等

命令示例:

Read ticket BUG-12 and post it to the #dev channel
List all open Jira tickets and notify #alerts on Slack
Get pull request #47 from acme-corp/backend and log to Sheets

文件结构

AgenticMcp/
├── docker-compose.yml
├── .env
├── README.md
│
├── backend/
│   ├── main.py         # FastAPI: Auth + RBAC + Execution
│   ├── requirements.txt
│   └── Dockerfile
│
├── frontend/
│   ├── app/
│   │   ├── page.tsx    # UI + Auth + DAG viewer
│   │   ├── layout.tsx
│   │   └── globals.css
│   ├── package.json
│   └── Dockerfile
│
├── jira-mock/
│   ├── server.py
│   └── requirements.txt
│
├── slack-mock/
│   ├── server.py
│   └── requirements.txt
│
├── github-mock/
│   ├── server.py
│   └── requirements.txt
│
└── sheets-mock/
    ├── server.py
    └── requirements.txt

不使用Docker运行

模拟MCP服务器

# Terminal 1
cd jira-mock && pip install -r requirements.txt && python server.py

# Terminal 2
cd slack-mock && pip install -r requirements.txt && python server.py

# Terminal 3
cd github-mock && pip install -r requirements.txt && python server.py

# Terminal 4
cd sheets-mock && pip install -r requirements.txt && python server.py

后端

cd backend
pip install -r requirements.txt
JIRA_MCP_URL=http://localhost:8081/sse \
SLACK_MCP_URL=http://localhost:8082/sse \
GITHUB_MCP_URL=http://localhost:8083/sse \
SHEETS_MCP_URL=http://localhost:8084/sse \
GEMINI_API_KEY=your-key \
JWT_SECRET=your-secret \
python main.py

# Tab 4 — Frontend
cd frontend && npm install
NEXT_PUBLIC_API_URL=http://localhost:8000 npm run dev

关键谈话要点

“注意,我们从来没有写过 if 'BUG' in command: call_jira(). LLM读取工具列表,并将逻辑本身以JSON的形式实时写入。 更改命令→ 计划改变了。添加工具→ 它被使用了。"

“我们添加了具有两个强制点的Auth+RBAC:

  1. 工具发现-在Gemini看到之前过滤工具
  2. 执行门-在运行时阻止禁用工具 实习生只能阅读Jira——他们甚至从未将Slack视为一种选择!"

“WRITE工具(如发布到Slack)会触发HITL批准。 在执行操作之前,必须得到人类的明确批准。 每次权限检查都会记录到SQLite中进行审核。"