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, 代理层, 权限管理, 模型越狱, 测试用例, 自动化攻击