关于 ScopeGate
ScopeGate 是面向 AI Agent 的可自托管服务访问网关,可按单项操作创建受限 MCP 端点,并记录请求以供审查和撤销。
主要功能
- 01按单项操作设置服务权限
- 02按项目组织端点
- 03记录并导出请求审计日志
- 04独立撤销端点密钥
- 05加密并自动刷新令牌
适用场景
- 01允许读取邮件但禁止发送
- 02限制 Agent 可调用的服务操作
- 03按工具和结果审查 Agent 调用
MCP 相关
ScopeGate 通过 Streamable HTTP 暴露按权限限制的 MCP 端点。MCP 客户端只能获得端点已启用操作对应的工具。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://scopegate.dev/api/mcp/{api_key}claude mcp add --transport http alifanov-scopegate https://scopegate.dev/api/mcp/{api_key}{"mcpServers":{"alifanov-scopegate":{"type":"http","url":"https://scopegate.dev/api/mcp/{api_key}"}}}在 Cursor 中打开{"servers":{"alifanov-scopegate":{"type":"http","url":"https://scopegate.dev/api/mcp/{api_key}"}}}在 VS Code 中打开{"mcpServers":{"alifanov-scopegate":{"type":"http","url":"https://scopegate.dev/api/mcp/{api_key}"}}}{"mcpServers":{"alifanov-scopegate":{"serverUrl":"https://scopegate.dev/api/mcp/{api_key}"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
ScopeGate
再也不要向 AI Agent 提供完整的 OAuth 权限范围。
ScopeGate 位于你的 Agent 与它们访问的账户之间——无论是你的账户还是客户的账户。你只需连接一次服务,勾选 Agent 可以调用的具体操作,然后为它提供一个只能执行这些操作的 MCP 端点。每次调用都会记录;只需点击一次即可撤销密钥,无需改动连接。
- 按操作授权 — 允许
gmail:read_emails,禁止gmail:send_email。权限比任何服务提供商的 OAuth 权限范围都更精细。 - 审计跟踪 — 谁调用了哪个工具、结果如何、耗时多久。按项目区分,可导出。
- 一键撤销 — 重新生成端点密钥;服务连接保持不变。
- 令牌绝不外泄 — 静态数据使用 AES-256-GCM 加密,并自动刷新;Agent 只能看到
sg_…。
一条命令即可自行运行:
docker compose --profile local up
打开 http://localhost:3000 — 首次启动时,管理员登录信息会打印在容器日志中。详情请参阅快速开始(可自托管)。
技术栈
- 框架:Next.js 16(App Router)
- 语言:TypeScript
- 数据库:PostgreSQL + Prisma 7
- UI:Tailwind CSS v4、shadcn/ui
- 身份验证:Better Auth(数据库支持的会话、Prisma 适配器)
- MCP:
@modelcontextprotocol/sdk(可流式传输的 HTTP) - 包管理器:pnpm
快速开始(可自托管)
功能与托管云版本完全一致——自托管版本没有删减任何功能。
git clone https://github.com/alifanov/scopegate.git
cd scopegate
docker compose --profile local up
打开 http://localhost:3000。无需 .env 文件:系统会自动配置本地 Postgres 和新的 BETTER_AUTH_SECRET。首次启动时,生成的管理员登录信息会在 app 容器日志中打印一次(查找 Generated admin login)——运行 docker compose logs app | grep -A4 "First run" 搜索。密码也会保存到 app_data 卷中,因此重启后仍然有效。
若要连接真实服务(Gmail、LinkedIn、GitHub 等),请将 .env.example 复制为 .env,并填写所需服务提供商的 OAuth 客户端 ID/密钥——每个配置块彼此独立且均为可选项;没有凭据的服务提供商不会显示。
开发环境设置
先决条件
- Node.js 20.19+、22.12+ 或 24+(Prisma 7 所需)
- pnpm
- PostgreSQL
设置
- 克隆仓库并安装依赖项:
pnpm install
- 复制环境文件并填写相应值:
cp .env.example .env
| 变量 | 说明 |
|---|---|
DATABASE_URL | PostgreSQL 连接字符串 |
BETTER_AUTH_SECRET | 用于签名会话的密钥 |
BETTER_AUTH_URL | 应用基础 URL(例如 http://localhost:3000) |
ADMIN_EMAIL | 初始化管理员邮箱 |
ADMIN_PASSWORD | 初始化管理员密码 |
- 运行数据库迁移:
pnpm prisma migrate dev
- 启动开发服务器:
pnpm dev
项目结构
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
│ ├── provider-registry.ts # Every supported provider — the one file to edit
│ └── mcp/
│ ├── permissions.ts # Permission groups (derived from the registry)
│ ├── tools/ # One file per service, aggregated in index.ts
│ ├── service-fetch.ts # Unified, SSRF-safe transport for all providers
│ └── handler.ts # MCP server factory + audit logging
├── 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)
工作原理
- 登录 — 使用管理员凭据登录(首次运行时根据环境变量初始化)
- 创建项目 — 按项目组织端点和服务
- 连接服务 — 为项目添加服务连接
- 创建 MCP 端点 — 选择服务连接并指定具体权限(例如
gmail:read_emails、calendar:create_event) - 使用 MCP URL — 将端点 URL 接入任何兼容 MCP 的 AI Agent;只会开放获准的操作
- 监控 — 在审计日志中跟踪每个请求
权限
权限是单个操作,而不是服务 — 可以授予 gmail:read_emails,而不授予
gmail:send_email。权限组源自 src/lib/provider-registry.ts
(27 个提供方:Google Workspace、Google Ads & Search Console、Meta、LinkedIn、
Twitter、Slack、Notion、Jira、HubSpot、Salesforce、Stripe、Airtable、……),并列于
src/lib/mcp/permissions.ts。添加提供方需要编辑注册表 —
传输方式、令牌策略和权限组均由此派生。
以下是一些 Google 示例:
| 分组 | 操作 |
|---|---|
| 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 |
数据库架构
- User — 身份验证、团队成员资格
- Session — 由数据库支持的身份验证会话
- Account — 身份验证提供方凭据(邮箱/密码)
- Project — 服务和端点的逻辑分组
- TeamMember — 用户与项目的关系,含角色(所有者/成员)
- ServiceConnection — 已连接服务的 OAuth 令牌
- McpEndpoint — 含 API 密钥、速率限制和启用状态的 MCP 端点
- EndpointPermission — 每个端点允许的操作
- AuditLog — 记录操作、状态、耗时和错误的请求日志
许可证
请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。