alifanov/scopegate
GitHub: alifanov/scopegate
一个 AI 访问代理层,为 AI Agent 提供细粒度的服务权限网关,通过 MCP endpoint 仅暴露经过授权的特定功能操作。
Stars: 15 | Forks: 3
# ScopeGate
AI 访问代理层。连接外部服务(例如 Google),定义细粒度权限,并获取用于 AI agent 的 MCP endpoint URL。它作为权限网关运行——仅暴露您授权的特定功能,比原生 OAuth scope 更加细粒度。
## 技术栈
- **Framework**:Next.js 16 (App Router)
- **Language**:TypeScript
- **Database**:PostgreSQL + Prisma 7
- **UI**:Tailwind CSS v4,shadcn/ui
- **Auth**:Better Auth(基于数据库的 session,Prisma adapter)
- **MCP**:`@modelcontextprotocol/sdk` (Streamable HTTP)
- **包管理器**:pnpm
## 快速开始
### 前置条件
- Node.js 18+
- pnpm
- PostgreSQL
### 设置
1. 克隆仓库并安装依赖:
```
pnpm install
```
2. 复制环境变量文件并填写您的值:
```
cp .env.example .env
```
| 变量 | 描述 |
|---|---|
| `DATABASE_URL` | PostgreSQL 连接字符串 |
| `BETTER_AUTH_SECRET` | 用于 session 签名的密钥 |
| `BETTER_AUTH_URL` | 应用基础 URL(例如 `http://localhost:3000`) |
| `ADMIN_EMAIL` | 引导管理员邮箱 |
| `ADMIN_PASSWORD` | 引导管理员密码 |
3. 运行数据库迁移:
```
pnpm prisma migrate dev
```
4. 启动开发服务器:
```
pnpm dev
```
打开 [http://localhost:3000](http://localhost:3000)。
## 项目结构
```
src/
├── app/
│ ├── (auth)/ # Login & register pages
│ ├── (dashboard)/ # Protected dashboard pages
│ │ └── projects/ # Project management, endpoints, audit, settings
│ ├── api/
│ │ ├── auth/[...all]/ # Better Auth catch-all handler
│ │ ├── projects/ # Projects CRUD, endpoints, services, audit
│ │ └── mcp/[apiKey]/ # MCP Streamable HTTP handler
│ ├── layout.tsx
│ └── page.tsx # Landing page
├── components/
│ ├── ui/ # shadcn/ui components
│ ├── layout/ # Sidebar, header
│ └── shared/ # Reusable app components
├── lib/
│ ├── db.ts # Prisma client singleton
│ ├── auth.ts # Better Auth server instance
│ ├── auth-client.ts # Better Auth client SDK
│ ├── auth-middleware.ts # getCurrentUser() helper
│ ├── bootstrap.ts # Admin user bootstrap on empty DB
│ └── mcp/
│ ├── permissions.ts # Permission groups (source of truth)
│ ├── tools.ts # MCP tool definitions
│ └── handler.ts # MCP server factory
├── generated/prisma/ # Generated Prisma client
└── middleware.ts # Route protection
```
## 可用脚本
```
pnpm dev # Start development server
pnpm build # Production build
pnpm start # Start production server
pnpm lint # Run ESLint
pnpm prisma generate # Regenerate Prisma client
pnpm prisma migrate dev # Create and apply migrations
pnpm prisma studio # Open Prisma Studio (DB browser)
```
## 工作原理
1. **登录** — 使用管理员凭据登录(首次运行时从环境变量中引导生成)
2. **创建项目** — 按项目组织 endpoint 和服务
3. **连接服务** — 将服务连接添加到项目中
4. **创建 MCP Endpoint** — 选择服务连接并选取特定权限(例如 `gmail:read_emails`、`calendar:create_event`)
5. **使用 MCP URL** — 将 endpoint URL 插入任何兼容 MCP 的 AI agent;仅暴露允许的操作
6. **监控** — 在审计日志中跟踪每一个请求
## 权限
权限定义在 `src/lib/mcp/permissions.ts` 中,并按服务分组:
| 分组 | 操作 |
|---|---|
| Gmail | `gmail:read_emails`, `gmail:send_email`, `gmail:list_labels`, `gmail:search_emails` |
| Google Calendar | `calendar:list_events`, `calendar:create_event`, `calendar:update_event`, `calendar:delete_event` |
| Google Drive | `drive:list_files`, `drive:read_file`, `drive:create_file`, `drive:delete_file` |
## Database Schema
- **User** — 身份验证、团队成员身份
- **Session** — 基于数据库的 auth session
- **Account** — auth provider 凭据(邮箱/密码)
- **Project** — 服务和 endpoint 的逻辑分组
- **TeamMember** — 带有角色的用户与项目关系(所有者/成员)
- **ServiceConnection** — 用于已连接服务的 OAuth token
- **McpEndpoint** — 包含 API key、速率限制和活跃状态的 MCP endpoint
- **EndpointPermission** — 每个 endpoint 允许的操作
- **AuditLog** — 包含操作、状态、持续时间和错误的请求日志
## 许可证
查看 [LICENSE](LICENSE)。
标签:AI网关, MCP, Prisma, 代理层, 权限管理, 模型越狱, 测试用例, 自动化攻击