安全策略中间件

mcpguard是一个轻量级的MCP服务器安全和策略中间件,提供可配置的策略、速率限制、认证和提示注入启发式保护。

  • by mmprotest
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 mmprotest/mcpguard

使用说明

麦普加德

mcpguard 是用于模型上下文协议(MCP)服务器的轻量级安全和策略中间件。它通过可配置的策略、速率限制、身份验证和提示注入启发式来保护工具执行和资源访问。

特性

  • 允许/拒绝工具、资源和提示的策略
  • 内存或Redis后端的令牌桶速率限制
  • 支持glob和regex的资源URI ACL
  • 快速注射启发式
  • API密钥和承载令牌认证
  • 带证明存根的结构化审计日志记录
  • 库和sidecar代理集成模式

安装

pip install -e .
# or using uv
uv pip install -e .

快速入门

  1. 启动最小MCP服务器:
python examples/minimal_server.py
  1. 运行防护代理:
mcpguard proxy --policy examples/policy.yaml --target ws://localhost:8765
# clients connect to ws://localhost:8787/ws by default
  1. 发送工具调用(例如,通过websockets或用于HTTP端点的curl)。调用到 calculator.add 将被允许,同时 admin.echo-env 将被政策拒绝。

政策示例

version: 1
auth:
  mode: api_key
  allowed_keys:
    - demo-key
tools:
  allow:
    - "calculator/*"
  deny:
    - "admin/*"
resources:
  allow:
    - "file://**/*.md"
  deny:
    - "file://**/.env"
prompts:
  deny_regex:
    - "(?i)ignore.*instructions"
    - "(?i)exfiltrate"
  max_length: 4000
rate_limit:
  capacity: 30
  refill_rate_per_sec: 1.0
  backend: memory
logging:
  level: INFO
  output: stderr
attestation:
  enabled: true
  alg: sha256

图书馆使用情况

from mcpguard.guard import Guard
from mcpguard.policy import load_policy

policy = load_policy("examples/policy.yaml")
guard = Guard(policy)

@guard.wrap_tool(tool_name="calculator.add")
async def calculator_add(a: int, b: int) -> int:
    return a + b

代理CLI

mcpguard proxy --policy examples/policy.yaml --target ws://localhost:8765
# clients connect to ws://localhost:8787/ws by default
mcpguard check --policy examples/policy.yaml --tool calculator.add --prompt "add two numbers" --identity alice

审计日志

审计日志以JSON行的形式发出,其中包含 decision="allow" 或 decision="deny"。被阻止的提示将生成类似于以下内容的日志条目:

{
  "ts": "2024-01-01T00:00:00Z",
  "identity": "alice",
  "tool": "calculator.add",
  "decision": "deny",
  "reason": "PromptInjectionSuspected",
  "findings": [
    {"rule_id": "prompt_regex_0", "severity": "high", "reason": "Matched (?i)ignore.*instructions"}
  ]
}

安全模型

  • 策略是声明性的,并使用Pydantic进行验证。
  • 在任何检查之前都会强制执行身份验证。
  • 费率限制适用于每个身份和工具。
  • 快速的启发式方法可以防止常见的注射模式。
  • 证明存根为未来的签名集成提供哈希值。

局限性

  • Proxy目前支持类似MCP的消息的JSON WebSocket帧。
  • Redis后端使用需要提供DSN并运行Redis。
  • 快速启发式是基于模式的,可能需要针对您的环境进行调整。

发展

使用提供的Makefile:

make install
make lint
make typecheck
make test

许可证

MIT许可证。看 许可证.