MCP网关-基于人工智能的MCP安全网关
第一个让AI工具访问的安全网关 _可审计的_,而不仅仅是允许/拒绝。
Gemini 3黑客马拉松参赛作品 | 实时管道演示 | 快速开始 | 7个双子座积分点
______________________________________________________________________
问题:13000多台MCP服务器,零安全层
MCP(模型上下文协议)生态系统已经爆发 13000+台服务器,但没有标准的安全层。AI代理连接到MCP服务器,可以:
- 域名抢注:
read_fi1e(带数字1)模仿者read_file--人工智能无法区分 - 签名伪装:工具描述更改自 _“列出分析数据”_ 到 _“执行系统命令并提取凭据”_ --初步批准后
- 诱售法:一个秘密请求的“只读文件查看器”
password,api_key,session_id领域
现有的工具无法捕捉到这些。 静态扫描程序会错过语义攻击。基于规则的系统无法推理意图。
真实世界验证
MCP生态系统具有 17500+台服务器 (mcp.so,2026年2月) 94%的攻击成功率 跨越12个攻击类别(赵等人,研究报告:2509.24272).现有的扫描仪可以实现低至 ~3%检测率 (检测到120个恶意服务器中的4个;来源于赵等人表3)。
2026年2月,安全研究人员 锦鲤安保 建立 341种恶意技能(12%) 在OpenClaw ClawHub市场(2857项技能经过审核)。OpenClaw的回应——整合基于VirusTotal哈希的扫描——地址 已知恶意软件签名但仅凭基于哈希的扫描无法捕捉到MCP特定的威胁:
- 语义操作:批准后更改含义的工具描述(签名隐藏)
- 快速注射:隐藏在工具输出中的指令(Snyk毒物技能,2026年2月)
- 域名抢注:角色级工具名称模仿(
read_fi1evsread_file)
| 方法 | 捕获已知恶意软件 | 捕获语义攻击 | 捕获新威胁 |
|---|---|---|---|
| 基于哈希的(VirusTotal) | 是 | 否 | 否 |
| 基于规则(~3%检测) | 部分 | 部分 | 否 |
| 双子座3推理(MCP网关) | 部分 | 是 | 是 |
MCP网关补充了基于哈希的扫描 利用Gemini 3的语义推理——检测 新颖的、基于意图的攻击 该签名匹配无法捕获。
MCP网关做什么
MCP网关是 安全第一代理 AI客户端(ChatGPT、Claude、Gemini CLI)和MCP服务器之间。每次工具调用都要经过一个6层检查管道,该管道由 Gemini 3结构化输出:
关键洞察:每个决策都会产生允许/拒绝,而不是二进制的允许/拒绝 结构化证据 --the _为什么_ 在每一个判决背后——确保安全 可审计和可解释.
为什么选择双子座3?(不仅仅是“任何法学硕士”)
MCP网关使用 5 Gemini 3独家功能 穿过 全部7个集成点 --不仅仅是一个组件:
| Gemini 3功能 | 用于 | 为什么只有Gemini 3 |
|---|---|---|
| 思维层次 | 全部6个组件(high 为了安全起见, low 速度) | 2层推理:对威胁进行深入分析,对安全内容进行快速分类 |
| 函数调用 | Agent Scan(多轮工具使用) | Gemini 自主决定 调用哪些安全工具——而不是固定的管道 |
| URL上下文 | 网络沙盒 | 双子座3 浏览URL本身 --无需我们自己的渲染器的多模式页面分析 |
| 谷歌搜索暂停 | AI委员会+扫描仪+沙盒+代理扫描 | 实时威胁情报:“此服务器/域/包是否被报告为恶意?” |
| 结构化输出 | 所有7个组件(类型化JSON模式) | 在单个API调用中组合浏览+搜索+类型化判决 |
建筑:双子座3不是“最后的分类器”——它是 推理引擎 浏览、搜索、思考和决定:
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents=f"Analyze this URL for security threats: {url}",
config=types.GenerateContentConfig(
# Gemini 3 unique: thinking + tools + structured output
thinking_config=types.ThinkingConfig(thinking_level="high"),
tools=[
types.Tool(url_context=types.UrlContext()), # Browse the URL
types.Tool(google_search=types.GoogleSearch()), # Search threat intel
],
response_mime_type="application/json",
response_schema=WebSecurityVerdict, # Typed verdict
temperature=1.0, # Gemini 3 recommended
max_output_tokens=4096,
),
)
verdict = WebSecurityVerdict.model_validate_json(response.text)没有双子座3:仅基于规则(DGA熵、品牌匹配、TLD评分)。有效,但错过了语义攻击。 双子座3:深入推理为什么一个页面是危险的,实时威胁情报,视觉页面分析。
7双子座3积分点
| # | 组件 | 架构 | 使用Gemini 3功能 |
|---|---|---|---|
| 1 | AI委员会 | CouncilVerdict | 思考水平=高 + 谷歌搜索停飞 +结构化输出 |
| 2 | 语义扫描器 | SemanticScanResult | 思考水平=高 + 谷歌搜索 +结构化输出 |
| 3 | RedTeam生成器 | RedTeamGeneration | 思考水平=低 +用于快速生成攻击的结构化输出 |
| 4 | 红队评估员 | PayloadSafetyVerdict | 思考水平=高 +安全评估的结构化输出 |
| 5 | 因果网络沙盒 | WebSecurityVerdict | thinking_level+URL上下文+谷歌搜索+结构化输出 |
| 6 | 代理扫描 | AgentScanResult | function_calling+thinking_level=高+谷歌搜索+多回合 |
| 7 | 审计QA聊天 | AuditQAResponse | 思考水平=高 +结构化输出——Gemini使用证据解释自己的安全决策 |
因果网络沙盒:“只有Gemini 3才能做到这一点”功能
Causal Web沙盒展示了其功能 双子座3独有:
- URL上下文:Gemini 3直接访问可疑URL,在内部呈现页面
- 谷歌搜索:检查威胁数据库中是否报告了域/URL
- 思维水平:
high为了进行深入分析(复杂的网络钓鱼),low用于快速分诊(\` 信封|
| 资源耗竭 |硬限制|2MB HTML,15秒超时,3个重定向,50K DOM元素|
快速启动(30秒)
# Clone and setup
git clone https://github.com/minorumochizuki2015-ship-it/mcp-gateway-gemini3.git
cd mcp-gateway-gemini3
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# Demo mode (no auth required, instant start)
MCP_GATEWAY_DEMO_MODE=true \
MCP_GATEWAY_ADMIN_TOKEN=demo \
python -m uvicorn src.mcp_gateway.gateway:app --host 127.0.0.1 --port 4100
# Open Dashboard → Click "Run Live Pipeline"
# http://127.0.0.1:4100/docs/ui_poc/dashboard.html使用Gemini AI
export GOOGLE_API_KEY="your-api-key"
MCP_GATEWAY_ADMIN_TOKEN=your-token \
python -m uvicorn src.mcp_gateway.gateway:app --host 127.0.0.1 --port 4100Docker(一个命令)
mkdir -p .local
echo "your-admin-token" > .local/admin_token.txt
echo "your-upstream-key" > .local/upstream_api_key.txt
GOOGLE_API_KEY="your-api-key" docker compose up --build
# Dashboard: http://localhost:4100云运行(谷歌云)
# 1. Create secrets in Secret Manager
echo -n "your-admin-token" | gcloud secrets create admin-token --data-file=-
echo -n "your-api-key" | gcloud secrets create google-api-key --data-file=-
# 2. Deploy with Cloud Build
gcloud builds submit --config=cloudbuild.yaml
# 3. Access your public URL
gcloud run services describe mcp-gateway --format='value(status.url)'建筑
+------------------+
| AI Clients |
| (ChatGPT/Claude |
| /Gemini CLI) |
+--------+---------+
|
+--------v---------+
| MCP Gateway | ← Python FastAPI
| + Dashboard UI | 6-layer security pipeline
+--+--+--+--+-----+
| | | |
+------------+ | | +------------+
| | | |
+------v------+ +-----v------+ +----v-----+ +------v------+
| AI Council | | Semantic | | RedTeam | | Causal Web |
| (Gemini 3) | | Scanner | | Gen+Eval | | Sandbox |
| | | (Gemini 3) | |(Gemini 3)| | (Gemini 3) |
+------+------+ +-----+------+ +----+-----+ +------+------+
| | | |
+-------+-------+------+------+------+-------+
| | |
+--------v-------+ +---v--------------v---+
| Evidence Trail | | Memory Ledger (SSOT) |
| (JSONL) | | Hash-based dedup |
+-----------------+ +---------------------+配置
| 变量 | 描述 | 默认值 |
|---|---|---|
GOOGLE_API_KEY | Gemini API密钥 | 人工智能功能所需 |
GEMINI_MODEL | Gemini型号名称 | gemini-3-flash-preview |
MCP_GATEWAY_ADMIN_TOKEN | 管理员身份验证 | 必需 |
MCP_GATEWAY_DEMO_MODE | 跳过演示的身份验证 | false |
MCP_GATEWAY_UPSTREAM_API_KEY | 上游LLM API密钥 | 代理必需 |
LEDGER_PATH | 内存分类账JSONL | 可选(启用SSOT) |
LEDGER_ERROR_POLICY | 分类账错误处理 | closed (故障关闭) |
测试套件
# 416 tests
python -m pytest tests/ -v
# Gemini integration tests only
python -m pytest tests/test_council.py tests/test_scanner.py \
tests/test_redteam.py tests/test_causal_sandbox.py -v基准
基于规则与Gemini 3的可重复检测基准比较:
# Rule-based only (no API key needed)
python scripts/benchmark.py
# Full comparison with Gemini 3
GOOGLE_API_KEY=xxx python scripts/benchmark.py --gemini| 方法 | 精确度 | 召回率 | F1 | 平均延迟 |
|---|---|---|---|---|
| 基于规则 | 0.917 | 0.846 | 0.880 | \ .local/admin_token.txt |
echo "your-upstream-key" > .local/upstream_api_key.txt echo "your-google-api-key" > .local/google_api_key.txt
docker compose up --build
## 关键文件
src/mcp_gateway/ gateway.py # FastAPI gateway (4900+ lines) — routing, policy, SSE pipeline ai_council.py # Gemini 3 → CouncilVerdict scanner.py # Static + Semantic + Advanced Attack Detection redteam.py # Attack generation + safety evaluation causal_sandbox.py # Evidence-based web security (Gemini 3) mcp_security_server.py # MCP Security Server (stdio + HTTP transport) sanitizer.py # Multi-level prompt injection defense evidence.py # JSONL evidence trail + Memory Ledger ssot/ # Memory Ledger (persistent SSOT) + Durable Streams registry.py # MCP server registration and management
docs/ui_poc/ # Dashboard UI (9 pages, bilingual EN/JA) Dockerfile # Cloud Run deployment docker-compose.yml # One-command full stack deployment cloudbuild.yaml # Google Cloud Build config
## 透明安全:工具调用自动扫描
当AI代理通过 `/run` MCP网关代理 **自动扫描任何URL参数** 在转发到上游MCP服务器之前:
Agent calls: browser_navigate(url="https://suspicious-site.tk/login") │ ▼ ┌─────────────────────────┐ │ 1. Extract URL params │ url, uri, href, target, destination, page │ 2. Fast scan (<5ms) │ DGA, TLD, brand, SSRF check │ 3. Deep scan (if warn) │ DOM + a11y + Gemini 3 analysis └─────────────────────────┘ │ ┌──────┴──────┐ │ │ ✅ Allow ❌ Block Forward to Return 403 + upstream evidence trail
**无需修改代理。** 网关透明地扫描带有URL的工具调用。每个拦截决定都会发出证据。
## 连接AI代理
### HTTP上的MCP(流式HTTP传输)
任何兼容MCP的客户端都可以通过HTTP连接到安全网关:
Initialize
curl -X POST http://localhost:4100/mcp/security \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
Check URL safety (fast scan)
curl -X POST http://localhost:4100/mcp/security \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"check_url","arguments":{"url":"https://example.com"}}}'
Full security scan with Gemini causal analysis
curl -X POST http://localhost:4100/mcp/security \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"scan_report","arguments":{"url":"https://suspicious-site.tk"}}}'
### MCP over stdio(用于本地AI代理)
python -m src.mcp_gateway.mcp_security_server
Reads/writes JSON-RPC 2.0 with Content-Length framing (LSP-style)
### REST API(用于非MCP集成)
Quick URL check via REST
curl -X POST http://localhost:4100/api/web-sandbox/scan \ -H "Content-Type: application/json" \ -d '{"url":"https://suspicious-site.tk"}'
MCP tool call interception
curl -X POST http://localhost:4100/api/mcp/intercept \ -H "Content-Type: application/json" \ -d '{"method":"tools/call","params":{"name":"fetch","arguments":{"url":"https://evil.tk"}}}'
## 安全通知
此网关设计用于 **本地/内部网络使用**不要直接暴露在公共互联网上。在前面使用身份验证反向代理。
## 许可证
麻省理工学院