MCP气闸
  
MCP工具的零信任安全网关。\ MCP Airlock将每个工具调用都变成了一个短暂的、上下文绑定的能力决策,具有篡改的来源。
为什么存在
代理工具生态系统在一个痛苦的边界上失败了: 从不受信任的提示文本跳到特权工具执行.
目前的模式通常是:
- 静态排外主义者(
agent can call tool X) - 弱正则表达式过滤
- 没有完整性保证的事后日志
当提示注入在会话中期改变意图时,它们会失败,导致无声的特权升级或数据泄露。
MCP Airlock解决了这个问题,它为MCP提供了一个缺失的原语:
- 能力租赁:短期、已签署、受上下文约束的权利(
session + intent + tool scope + constraints) - 上下文感知策略:每次通话的动态授权(风险评分+工具约束+租赁检查)
- 篡改证据来源:在所有允许/拒绝决策中仅附加哈希链
核心创新
上下文约束能力租赁(CBCL)
每次工具调用都是根据签署的租约授权的:
- 绑定到
session_id - 绑定到
intent_hash - 适用于特定工具
- 时间有限
- 可选约束(例如允许的域、最大风险)
如果提示注入试图改变意图或跳过工具范围,则执行将被拒绝。
建筑
flowchart LR
A[Agent / MCP Client] -->|tools/call| B[MCP Airlock Server]
B --> C[Risk Engine]
B --> D[Capability Verifier]
B --> E[Policy Engine]
E -->|allow| F[Tool Adapter Layer]
E -->|deny| G[Policy Deny Response]
F --> H[External APIs / Internal Services]
B --> I[Provenance Ledger Hash Chain]信任边界
flowchart TB
subgraph Untrusted
U1[Prompt Content]
U2[Agent Reasoning Trace]
end
subgraph Trusted Control Plane
T1[MCP Airlock]
T2[Policy + Lease Validation]
T3[Signed Provenance Ledger]
end
subgraph External Targets
X1[Public APIs]
X2[Internal APIs]
end
U1 --> T1
U2 --> T1
T1 --> T2
T2 --> X1
T2 --> X2
T1 --> T3主要特点
- MCP stdio服务器兼容
initialize,tools/list,tools/call - 能力发布工具:
airlock_issue_capability - 代理/API使用分析工具:
airlock_usage_stats - API暴露测量工具:
airlock_exposure_report - 具有每个工具风险阈值的策略执行中间件
- 快速注射签名评分
- 抗SSRF HTTP工具适配器(
http_get_json) - 真实的API集成示例(
weather_hourly) - 篡改明显来源日志+验证命令
- 用于代理API安全性的沙盒强化指南
- CLI用于服务/演示/问题/验证/统计/曝光
2分钟快速入门
git clone https://github.com/lara-muhanna/mcp-airlock
cd mcp-airlock
python -m pip install -e .
python -m mcp_airlock --config examples/airlock.config.json demo您将看到:
- 人性化的总结(握手、能力、允许/拒绝、审计完整性)
- 恶意呼叫被拒绝,原因很简单
- 签名来源证据
一个命令本地演示(无需安装)
python -m mcp_airlock --config examples/airlock.config.json demo --city Austin --state Texas对于演示期间的完整JSON有效载荷:
python -m mcp_airlock --config examples/airlock.config.json demo --raw以MCP服务器运行
python -m mcp_airlock --config examples/airlock.config.json serveMCP客户端设置示例:
docs/CLIENT_SETUP.mddocs/SANDBOXING_AGENTIC_APIS.mdexamples/client-configs/claude_desktop.mcp.jsonexamples/client-configs/cursor.mcp.json
命令行界面
# Issue a capability directly
python -m mcp_airlock --config examples/airlock.config.json issue \
--session-id sess-123 \
--subject agent:planner \
--tools weather_hourly,http_get_json \
--intent "Plan safe outdoor activities" \
--ttl-seconds 900 \
--constraints '{"allowed_domains":["api.open-meteo.com"],"max_risk":0.6}'
# Verify audit integrity
python -m mcp_airlock --config examples/airlock.config.json verify-log
# API usage stats by agent
python -m mcp_airlock --config examples/airlock.config.json stats --lookback-hours 24
# API exposure measurement
python -m mcp_airlock --config examples/airlock.config.json exposure --lookback-hours 24代理集成示例
运行:
python examples/agent_integration.py此脚本:
- 通过stdio启动气闸
- 协商MCP初始化/列表
- 签发租约
- 运行正常的工具调用
- 运行一个被阻止的注入呼叫
配置模板
examples/airlock.config.json
{
"secret_key": "dev-secret-change-this-before-production",
"provenance_log": "./airlock-provenance.log",
"max_ttl_seconds": 1800,
"default_risk_threshold": 0.55,
"tools": {
"weather_hourly": {
"require_capability": true,
"risk_threshold": 0.7
},
"http_get_json": {
"require_capability": true,
"risk_threshold": 0.45,
"allowed_domains": ["api.open-meteo.com", "geocoding-api.open-meteo.com"]
}
}
}安全模型摘要
- 代理通过以下方式请求租赁
airlock_issue_capability. - 租约已签署HMAC,包括
session,intent_hash,tool_scope,expiry. - 每
tools/call请求包括_capability和_context. - 气闸强制执行:
- 租约有效期+签名 - 会话和意图连续性 - 风险阈值 - 特定于工具的约束(例如,域分配列表)
- 决策+证据被哈希链接到来源日志。
项目结构
mcp-airlock/
mcp_airlock/
cli.py
server.py
policy.py
capability.py
risk.py
provenance.py
config.py
tool_ids.py
tools/
http_json.py
weather.py
examples/
airlock.config.json
agent_integration.py
docs/
CLIENT_SETUP.md
SANDBOXING_AGENTIC_APIS.md路线图
- 上游MCP代理模式(透明地封装现有MCP服务器)
- OPA/Rego政策后端
- OpenTetry跟踪+SIEM接收器
- 管理能力经纪人+密钥轮换
- 已签名的事件响应回放包
社区
- 贡献指南:
CONTRIBUTING.md - 安全策略:
SECURITY.md - 行为准则:
CODE_OF_CONDUCT.md - 发布清单:
docs/RELEASE_CHECKLIST.md
许可证
麻省理工学院
