mcp注射器
具有虚拟模型、供应商回退和安全MCP工具注入的弹性LLM网关垫片
mcp注入器位于代理(如OpenClaw)和LLM网关之间。它为MCP工具执行提供自动故障转移、错误转换和安全治理框架。
主要特点
- ✅ 虚拟模型链 -定义具有冷却功能的回退提供程序。
- ✅ 透明环路保护 -累积所有内部回合(推理、工具调用、结果),并通过签名的页脚将其与客户端同步。
- ✅ 会话补水 -当发生以下情况时,自动从持久存储中恢复对话上下文
session-id提供。 - ✅ 治理框架 -声明性工具访问策略(允许/严格)。
- ✅ PII扫描和恢复 -在提示中自动编辑敏感数据。受信任的工具可以接收原始PII值以进行安全处理。
- ✅ 已签署审计追踪 -具有ULID和HMAC链的防篡改NDJSON日志。
- ✅ 提供商级可观察性 -对每个提供者的令牌、请求和速率限制进行精细跟踪。
- ✅ 多路传输MCP -支持HTTP和STDIO(本地进程)MCP服务器。
- ✅ 翻译错误 -将神秘的提供程序错误转换为可操作的消息。
治理与安全
mcp注入器包括一个通过 :governance 输入 mcp-servers.edn (复制自 mcp-servers.example.edn).
治理模式
:permissive(默认):除非明确拒绝,否则允许使用所有工具。:strict:除非策略中明确允许,否则所有工具都将被拒绝。
特权工具
某些高风险工具(如 clojure-eval)标记为 享有特权的。这些工具是 总是被封锁 默认情况下,即使在许可模式下,除非在 :allow 规则。
政策示例
:governance
{:mode :permissive
:policy
{:mode :permissive ; Fallback mode for this policy (overrides global)
:allow ["mcp__stripe__*"]
:deny ["mcp__danger-server__*"]
:rules [{:model "gpt-4o-mini" :deny ["clojure-eval"]}]
:sampling {:trusted-servers ["stripe" "postgres"]}}
:audit
{:enabled true :path "logs/audit.log.ndjson"}
:pii
{:enabled true :mode :replace :proximity-check-enabled true}}PII强化和假阳性减少
PII扫描仪使用多层方法来最大限度地减少误报,同时捕获真正的秘密:
- 白名单:本地文件路径(Windows/POSIX)、URL、IP地址和UUID会自动忽略。
- 性格多样性:令牌必须至少包含4个字符类(小写、大写、数字、特殊)或3个至少包含20个字符的类。这可以防止像这样的描述性字符串
mcp__stripe__retrieve_customer避免被标记。 - 接近检查:默认情况下,一般的高熵字符串只有在遵循类似赋值的关键字时才会被编辑(例如。,
api_key:,token =).显式正则表达式模式(AWS、Anthropic等)绕过此检查以获得最大安全性。
PII恢复(智能保险库)
对于需要访问原始PII数据的工具(例如,必须看到真实电子邮件地址的Stripe集成),配置信任级别:
:servers
{:stripe
{:url "http://localhost:3001/mcp"
:trust :restore ; :none (default), :read, or :restore
:tools [{:name "retrieve_customer" :trust :restore}]}}:none(默认):工具接收经过编辑的令牌,如[EMAIL_ADDRESS_a35e2662]:restore:工具接收原始值(例如。,wes@example.com)
vault使用确定性SHA-256哈希和每个请求的盐,确保令牌在请求中保持一致,但不会在请求之间泄漏。
⚠️ 安全通知: clojure-eval 逃生舱口
这 clojure-eval 工具是 特权逃生舱 这允许LLM在主机JVM上执行任意Clojure代码。这是 远程代码执行(RCE)的设计.
- 默认状态:残疾。您必须明确允许
clojure-eval在您的保单中:allow列表。 - 风险:如果启用,则受损、产生幻觉或迅速注射的LLM会获得收益 完全系统访问--包括文件、环境变量、网络和过程控制。
- 缓解:仅启用
clojure-eval用于隔离环境中高度可信的模型。将其视为根级别访问。 - 启动警告:启用时,mcp注射器会记录
CRITICAL启动时的审计事件。
可观察性和追踪
行动收据 --当工具在请求期间运行时,mcp注入器会在响应内容前添加一个干净的markdown收据:
Action Receipt: trace_id=abc123 | 2 tools (165ms total)
- stripe.get_customer: 45ms
- postgres.query: ERROR: timeout
---收据包括:
- 前置 (未附加)-更适合Telegram/Slack用户体验
- PII已屏蔽 --用标记替换敏感值
- 可控的 通过配置/env
响应头 --每个响应都包含用于分布式跟踪的W3C跟踪头:
X-Injector-Traceparent: 00--
-00配置可观察性:
{:receipt-mode :on} ;; :on, :off, or :errors-only
{:receipt-style :emoji} ;; :emoji (future) or :ascii
{:footer-mode :off} ;; :off (default) or :legacy或者通过环境变量:
MCP_INJECTOR_RECEIPT_MODE=on|off|errors-only
MCP_INJECTOR_RECEIPT_STYLE=emoji|ascii
MCP_INJECTOR_FOOTER_MODE=off|legacy按请求覆盖: extra_body: {:receipt false} 禁止接收该请求。
快速开始
先决条件
安装
nix develop
bb test
bb run配置
复制示例配置并自定义:
cp mcp-servers.example.edn mcp-servers.edn环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
INJECTOR_AUDIT_SECRET | 用于对审核日志条目进行签名的32字节机密。 | (自动生成) |
MCP_INJECTOR_AUDIT_LOG_PATH | NDJSON审核日志的路径。 | logs/audit.log.ndjson |
MCP_INJECTOR_PORT | 服务器端口 | 8080 |
MCP_INJECTOR_LLM_URL | LLM网关终结点。 | http://localhost:11434 |
MCP_INJECTOR_MAX_ITERATIONS | 代理循环迭代限制。 | 10 |
MCP_INJECTOR_LOG_LEVEL | 日志冗长。 | debug |
MCP_INJECTOR_TIMEOUT_MS | LLM请求超时。 | 1800000 |
MCP_INJECTOR_RECEIPT_MODE | 何时显示行动收据: on, off,或 errors-only. | on |
MCP_INJECTOR_RECEIPT_STYLE | 收据样式: emoji 或 ascii. | emoji |
MCP_INJECTOR_FOOTER_MODE | 传统HTML页脚: off 或 legacy. | off |
编辑 mcp-servers.edn:
{:servers
{:stripe
{:url "http://localhost:3001/mcp"
:tools ["retrieve_customer" "list_charges"]}}
:llm-gateway
{:url "http://localhost:8080"
:virtual-models
{:brain
{:chain ["provider1/model1" "provider2/model2"]
:cooldown-minutes 5}}}}控制API
GET /api/v1/status:健康和版本。GET /api/v1/mcp/tools:列出发现的工具。GET /api/v1/stats:按型号和提供商细分的使用统计数据。GET /api/v1/audit/verify:以加密方式验证审核日志的完整性。POST /api/v1/mcp/reset:清除缓存并重新启动进程。
NixOS部署
services.mcp-injector = {
enable = true;
mcpServers = { ... };
governance = {
mode = "permissive";
policy = {
allow = [ "mcp__stripe__*" ];
};
};
};______________________________________________________________________
状态:生产就绪| 测试:72通过| 建于:巴巴什卡+http工具包+柴郡
