mcpField
S
ScopeGate

ScopeGate

远程服务
scopegate.dev安全182 天前更新

关于 ScopeGate

ScopeGate 是面向 AI Agent 的可自托管服务访问网关,可按单项操作创建受限 MCP 端点,并记录请求以供审查和撤销。

主要功能

  1. 01按单项操作设置服务权限
  2. 02按项目组织端点
  3. 03记录并导出请求审计日志
  4. 04独立撤销端点密钥
  5. 05加密并自动刷新令牌

适用场景

  1. 01允许读取邮件但禁止发送
  2. 02限制 Agent 可调用的服务操作
  3. 03按工具和结果审查 Agent 调用

MCP 相关

ScopeGate 通过 Streamable HTTP 暴露按权限限制的 MCP 端点。MCP 客户端只能获得端点已启用操作对应的工具。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://scopegate.dev/api/mcp/{api_key}
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;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
设置
  1. 克隆仓库并安装依赖项:
pnpm install
  1. 复制环境文件并填写相应值:
cp .env.example .env
变量说明
DATABASE_URLPostgreSQL 连接字符串
BETTER_AUTH_SECRET用于签名会话的密钥
BETTER_AUTH_URL应用基础 URL(例如 http://localhost:3000)
ADMIN_EMAIL初始化管理员邮箱
ADMIN_PASSWORD初始化管理员密码
  1. 运行数据库迁移:
pnpm prisma migrate dev
  1. 启动开发服务器:
pnpm dev

打开 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
│   ├── 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)

工作原理

  1. 登录 — 使用管理员凭据登录(首次运行时根据环境变量初始化)
  2. 创建项目 — 按项目组织端点和服务
  3. 连接服务 — 为项目添加服务连接
  4. 创建 MCP 端点 — 选择服务连接并指定具体权限(例如 gmail:read_emails、calendar:create_event)
  5. 使用 MCP URL — 将端点 URL 接入任何兼容 MCP 的 AI Agent;只会开放获准的操作
  6. 监控 — 在审计日志中跟踪每个请求

权限

权限是单个操作,而不是服务 — 可以授予 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 示例:

分组操作
Gmailgmail:read_emails、gmail:send_email、gmail:list_labels、gmail:search_emails
Google Calendarcalendar:list_events、calendar:create_event、calendar:update_event、calendar:delete_event
Google Drivedrive:list_files、drive:read_file、drive:create_file、drive:delete_file

数据库架构

  • User — 身份验证、团队成员资格
  • Session — 由数据库支持的身份验证会话
  • Account — 身份验证提供方凭据(邮箱/密码)
  • Project — 服务和端点的逻辑分组
  • TeamMember — 用户与项目的关系,含角色(所有者/成员)
  • ServiceConnection — 已连接服务的 OAuth 令牌
  • McpEndpoint — 含 API 密钥、速率限制和启用状态的 MCP 端点
  • EndpointPermission — 每个端点允许的操作
  • AuditLog — 记录操作、状态、耗时和错误的请求日志

许可证

请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。