Sentinel
Sentinel
一个自托管的 MCP 服务器治理层。 Sentinel 位于你的 AI 代理与它们调用的工具之间,根据你的策略评估每个请求,并记录所发生事件的审计轨迹。
完全运行在你自己的机器上。Postgres 是唯一的硬依赖——无需 API 密钥,无需云账户,无需回传数据。
agent ──▶ Sentinel proxy ──▶ policy engine ──▶ MCP server
│
└──▶ audit log为什么存在
如果你给代理一组 MCP 工具,你就赋予了它行动的能力。大多数设置无法回答三个问题:
这个代理在什么条件下允许调用哪些工具?
它实际做了什么?
谁批准了触及生产环境的操作?
Sentinel 通过一个策略引擎(按调用评估条件)、一个带有前后快照的仅追加审计日志,以及一个针对你标记为敏感的任何操作的审批工作流,回答了这三个问题。
Related MCP server: AISentinel
包含内容
策略引擎 | 带有条件树的 ALLOW/DENY 规则。DENY 始终优先——它不能被后续的 ALLOW 覆盖 |
条件 | 两种模式:SIMPLE(扁平数组)和 ADVANCED(嵌套 AND/OR 表达式树) |
MCP 代理 | 多传输:HTTP、STDIO、WebSocket、SSE |
审计日志 | 每次工具调用、策略更改、认证事件和管理操作,均带有前后快照 |
多租户 | 组织 → 工作区 → 成员,在查询层进行范围限定 |
审批 | 将工具标记为敏感;调用在等待人工批准时被阻止 |
凭据 | 上游服务器凭据在静态时使用 AES-256-GCM 加密 |
管理 MCP 服务器 | 40 个工具,使代理能够自行管理 Sentinel |
A2A 代理 | 代理到代理协议支持 |
Web 界面 | 完整的管理员和用户控制台 |
快速开始
需要 Node 20+、pnpm 和 Postgres。
git clone https://github.com/gong8/sentinel-oss.git
cd sentinel-oss
cp .env.example .env # generate secrets, point DATABASE_URL at your Postgres
pnpm setup # install, generate client, push schema, seed
pnpm dev需要 Postgres?docker compose up -d postgres 会启动一个。
这样你会得到:
服务 | URL |
Web 控制台 | |
文档站点 | |
API | |
MCP 代理 | |
管理 MCP |
种子数据会创建一个 Acme Corporation 组织,包含三个用户,并打印他们的访问令牌。随时运行 pnpm db:creds 可再次打印它们。
将代理指向它
将代理添加到你的 MCP 客户端配置中:
{
"mcpServers": {
"sentinel": {
"url": "http://localhost:3001/mcp",
"headers": { "Authorization": "Bearer YOUR_ACCESS_TOKEN" }
}
}
}在 Web 控制台中注册上游服务器,针对它们的工具编写策略,现在每次调用都会通过策略引擎路由。
可选:代理功能
Sentinel 内置了一个管理代理(通过聊天完成配置)。它需要 LLM,并支持多种提供商——包括完全本地的提供商,因此你永远不必购买 API 密钥:
Ollama 或任何 OpenAI 兼容 端点(LM Studio、llama.cpp、vLLM)——本地、免费
Anthropic、OpenAI 或 Gemini——如果你更愿意自带密钥
Sentinel 中的其他所有功能在未配置 LLM 的情况下也能正常工作。
架构
一个 pnpm + Turborepo 单体仓库。
包 | 行数 | 功能 |
| ~72k | tRPC API——服务、路由、策略评估、审计 |
| ~73k | React 管理员 + 用户控制台 |
| ~11k | 文档站点 |
| ~6k | 共享类型、条件评估、管理工具定义 |
| ~4.7k | MCP 代理服务器(HTTP、STDIO、WebSocket、SSE) |
| ~3.3k | Prisma 模式——67 个模型 |
| ~2.5k | 代理到代理协议代理 |
| ~1.7k | 管理 MCP 服务器(40 个工具) |
大约 177k 行源代码 和 163k 行测试,分布在 218 个测试文件 中。
最可复用的部分是 packages/api/src/services/policyCondition.ts——一个约 1,300 行的条件树评估器,除了 Zod 和日志记录器外没有其他依赖。它不了解 MCP、Prisma 或 Sentinel,可以提取到任何需要策略表达式的项目中。
更深入的文档位于 docs/——从 docs/README.md 开始。
测试
pnpm test:unit # no database needed
pnpm test:integration # requires TEST_DATABASE_URL
pnpm test:security # tenant isolation, DENY precedence
pnpm test:e2e # Playwright
pnpm check # format, lint, types, tests项目约定
这个代码库对自己有一些不可妥协的规则,由 lint 配置和 .claude/hooks/ 中的 git 钩子强制执行:
不允许
as类型断言(除了as const)、不允许any、不允许@ts-ignore、不允许eslint-disable每个数据库查询都限定在
organizationId范围内所有输入都通过 Zod 验证
凭据在存储前加密
敏感操作记录审计日志,管理操作带有前后快照
DENY 策略不能被绕过,并且这一点已明确测试
参见 CLAUDE.md 获取完整的开发指南。
贡献
参见 CONTRIBUTING.md。安全问题:SECURITY.md。
许可证
GNU AGPL-3.0。如果你将修改后的 Sentinel 作为网络服务运行,你必须让你的修改对其用户可用。
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
- gatewayOAuthai.sealgate
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
MCP enforcement layer that intercepts AI agent actions and blocks rule violations before execution.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA local-first control plane for AI agent tools, providing policy enforcement, spend caps, rate limiting, and audit trails for MCP servers.1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceAn open-source MCP server that protects AI agents at runtime by evaluating every tool call against YAML policies and generating audit trails.1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides a governance layer for coding agents, enforcing policies, validation, and human-in-the-loop for tool calls without requiring an API key.MIT
- FlicenseAqualityBmaintenanceA governance layer for MCP servers that classifies tools by risk, enforces agent permissions, lets safe tools earn autonomy through a track record, and keeps an audit trail. Requires human approval for irreversible actions and provides blast radius context.14-