lord-dubious/mcp-security-gateway
GitHub: lord-dubious/mcp-security-gateway
一个本地优先的 MCP 安全网关,在 AI 代理执行工具调用前进行策略匹配、风险评分与审批控制,并留存完整审计追踪。
Stars: 0 | Forks: 0
# MCP Security Gateway
本地优先的 MCP 安全网关,用于策略检查工具调用、风险评分、审批和审计追踪。

该项目建模了 AI 代理在执行工具之前必须跨越的边界。它接受 MCP 风格的工具请求,将其与本地策略进行匹配,生成允许/审批/拦截决策,并在 SQLite 中存储审计追踪。该演示有意设计为离线运行:它不会连接到真实的密钥、Shell 工具或生产系统。
## 当前可用功能
- 针对只读、Shell、部署和密钥访问场景的确定性 MCP 风格工具请求。
- 实时 `POST /api/requests/evaluate` 端点,接受新的本地工具请求并持久化生成的决策。
- 根据工具名称、环境元数据以及敏感/破坏性措辞,生成允许、拦截或需要人工审批的策略决策。
- 为每个请求提供风险等级、匹配的策略名称、原因和审计事件。
- 本地 FastAPI API、SQLite 存储以及经过精心设计的浏览器仪表板。
## 仪表板
仪表板显示请求量、审批/拦截率、高风险决策以及所选请求的审计追踪。侧边栏包含带有示例生产 Shell 请求的本地评估表单,以便评审人员可以看到网关做出新的决策,而不仅仅是浏览固定数据。
## 架构
```
flowchart TB
subgraph AgentBoundary[Agent tool boundary]
Agent[AI agent] --> Request[Tool request JSON]
Request --> API[FastAPI gateway]
API --> Evaluator[Local policy evaluator]
end
subgraph PolicyLayer[Policy and risk logic]
Policies[ToolPolicy fixtures] --> Evaluator
Evaluator --> Match{Pattern and metadata checks}
Match -->|read-only low risk| Allow[Allow]
Match -->|shell / production / mutation| Approval[Require approval]
Match -->|secrets / credentials| Block[Block]
end
subgraph Persistence[Reviewable audit trail]
Allow --> Decision[GatewayDecision]
Approval --> Decision
Block --> Decision
Decision --> Audit[AuditEvent]
Request --> Store[(SQLite)]
Decision --> Store
Audit --> Store
end
Store --> Dashboard[Browser dashboard]
Store --> APIRead[Read APIs]
```
## API 接口
- `GET /api/health` - 就绪检查。
- `GET /api/summary` - 允许、需要审批、拦截和高风险请求的计数。
- `GET /api/policies` - 本地策略固定数据。
- `GET /api/requests` - 按请求时间排序的已评估请求。
- `GET /api/requests/{request_id}` - 请求、决策和审计事件。
- `POST /api/requests/evaluate` - 评估并持久化新的本地工具请求。
- `POST /api/demo/reset` - 重置确定性的演示数据。
本地请求示例:
```
{
"agent_name": "Release Agent",
"tool_name": "shell.run",
"input_summary": "Deploy the latest policy bundle to production",
"metadata": {
"environment": "production",
"change_ticket": "SEC-1842"
}
}
```
网关返回带有高风险的 `require_approval` 决策,因为 Shell 执行加上生产元数据不应被自动允许。
## 策略逻辑
评估器是确定性的且经过刻意设计以便于审查:
- `repo.search` 被允许作为低风险的只读开发者工具。
- `shell.run` 默认需要审批,当输入提及部署、生产、删除、写入或类似的突变语言时,会升级为高风险。
- `secret.read` 及类似密钥的请求会在执行前被拦截。
- 未知工具需要审批,而不是被静默允许。
- 每个决策都包含匹配的策略、原因、人工复核标志和审计事件。
## 快速开始
```
uv run --extra dev pytest
uv run mcp-security-gateway
```
打开 `http://127.0.0.1:8050` 并在评估面板中尝试示例请求。
## 开发
```
uv run --extra dev ruff check src tests
uv run --extra dev ruff format --check src tests
uv run python -m compileall -q src tests
uv run --extra dev pytest tests/ --cov=mcp_security_gateway --cov-report=term-missing
```
## 当前限制
这是一个本地演示版网关,而不是实时的 MCP 代理。它对策略和审计边界进行了建模,而不会连接到真实的密钥、运行 Shell 命令,或在已部署的 MCP 服务器前强制执行策略。实时代理、身份验证、签名审批和组织策略同步将是自然的下一步。
标签:AI代理安全, AI安全, API网关, AV绕过, Chat Copilot, FastAPI, JSONLines, LLM工具调用, MCP安全网关, Python, SQLite, Streamlit, 安全边界, 审批流, 审计日志, 工具沙箱, 无后门, 本地优先, 模型上下文协议, 策略检查, 网络安全, 网络安全监控, 访问控制, 逆向工具, 隐私保护, 零信任, 风险评分, 驱动开发