防火墙代理

mcp-fw是一个防火墙代理,位于Claude Desktop和MCP服务器之间,通过NAIL效果标签控制每个服务器的操作权限。

  • by zyom45
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 zyom45/mcp-fw

使用说明

mcp fw

日本语版README

MCP服务器可以读取您的文件、运行进程和访问网络,而无需询问。

mcp-fw是位于Claude Desktop和mcp服务器之间的防火墙代理。 使用 指甲 效果标签,以精确控制每个服务器可以做什么。

默认情况下, mcp-fw 允许工具受影响策略的约束,但阻止MCP resources 和 prompts 除非您明确选择加入 allow_resources: true / allow_prompts: true.

Claude Desktop  ←→  mcp-fw (proxy)  ←→  MCP Server
                     ↑
                  policy.yaml
                  allow: [FS, IO]
                  deny:  [NET]

为什么

MCP服务器功能强大,但没有内置的权限模型。 文件系统服务器可以静默地进行网络调用。 “everything”服务器可以生成进程。

mcp-fw强制执行边界:

效果 它控制什么 示例
FS 文件读/写 读取文件,列出目录
IO 常规I/O 标准输入/标准输出,回声
NET 网络访问 HTTP请求、DNS
PROC 流程执行 生成子流程,exec
TIME 时间/时钟访问 获取当前时间
RAND 随机性 生成随机数

快速开始

pip install mcp-fw

命令

主CLI:

mcp-fw run --config policy.yaml --server filesystem [--verbose] [--log-file /path/to/file.log]
mcp-fw inspect --config policy.yaml --server filesystem
mcp-fw status --server filesystem
mcp-fw stop --server filesystem
mcp-fw claude-remove [--server filesystem]
mcp-fw menubar --config policy.yaml

仍支持传统速记:

mcp-fw --config policy.yaml --server filesystem [--verbose] [--log-file /path/to/file.log]

专用菜单栏入口点:

mcp-fw-menubar --config policy.yaml

1.制定政策

# policy.yaml
servers:
  filesystem:
    command: npx
    args: ["@modelcontextprotocol/server-filesystem", "/tmp"]
    allow: [FS, IO]
    deny: [NET]

这允许文件系统服务器读取/写入文件(FS, IO)但是 阻止所有网络访问 (NET). 它还保留了MCP resources 和 prompts 除非您明确启用它们,否则将被阻止。

2.将Claude Desktop指向代理

在 claude_desktop_config.json:

{
  "mcpServers": {
    "filesystem-fw": {
      "command": "mcp-fw",
      "args": ["--config", "/path/to/policy.yaml", "--server", "filesystem"]
    }
  }
}

就是这样。Claude Desktop现在正在与 mcp-fw,在转发到真实服务器之前过滤工具。

如果您的服务器使用MCP resources 或 prompts,明确选择加入:

servers:
  filesystem:
    allow_resources: true
    allow_prompts: true

要稍后删除mcp-fw条目,请执行以下操作:

mcp-fw claude-remove
# or only one server
mcp-fw claude-remove --server filesystem

3.看看发生了什么

$ mcp-fw --config policy.yaml --server filesystem --verbose
2025-01-15 10:00:01 [INFO] Filtered 5 → 3 tools (allowed effects: ['FS', 'IO'])
2025-01-15 10:00:05 [WARNING] Blocked tool call: fetch_url

要停止正在运行的代理进程,请执行以下操作:

mcp-fw stop --server filesystem

在更改政策之前,检查NAIL如何对工具进行分类:

mcp-fw inspect --config policy.yaml --server filesystem

输出显示推断效果、覆盖后的有效效果、覆盖是否更改了分类以及最终允许/阻止的结果。

菜单栏应用程序(macOS)

对于GUI体验:

pip install "mcp-fw[menubar]"
mcp-fw menubar --config policy.yaml
# or:
mcp-fw-menubar --config policy.yaml

A. [FW] 图标出现在菜单栏中:

[FW]
├── mcp-fw v0.2.8
├── ────────
├── ● filesystem
│   ├── Status: Running
│   ├── Checked = allowed, unchecked = blocked
│   ├── ────────
│   ├── [x] FS
│   ├── [x] IO
│   ├── [ ] NET          ← toggle effects live
│   ├── [ ] PROC
│   ├── Stop Proxy
│   └── ...
├── ○ everything
├── ────────
├── Edit Policy YAML
├── View Logs...
├── ────────
├── Sync to Claude Desktop
├── Remove from Claude Desktop
└── Quit
  • 切换效果 使用复选框--选中表示允许,未选中表示阻止,更改将写入 policy.yaml 立即
  • 同步到Claude桌面 生成 claude_desktop_config.json 自动输入
  • 停止代理 终止服务器正在运行的代理进程
  • 从克劳德桌面删除 删除已生成的 *-fw 条目来自 claude_desktop_config.json
  • 查看日志 打开实时日志查看器
  • 过程监视器 显示● 运行/○ 每台服务器的停止状态

运作原理

1. Claude calls list_tools()
   → mcp-fw forwards to the real server
   → NAIL annotates each tool with effect labels
   → mcp-fw filters out tools that violate the policy
   → Claude only sees allowed tools

2. Claude calls a tool
   → mcp-fw checks if it's in the allowed set
   → Allowed: forward to server
   → Blocked: return error

关键的见解是:工具不仅仅是按名称允许或拒绝的——它们是按 他们所做的事 (文件系统、网络、进程等)使用 NAIL效应系统这意味着mcp-fw可以在以前从未见过的服务器上执行策略。

政策参考

servers:
  my-server:
    command: npx                    # server command
    args: ["@org/server", "/tmp"]   # command arguments
    allow: [FS, IO]                 # permitted effects (empty = all)
    deny: [NET]                     # blocked effects (overrides allow)
    allow_resources: false          # permit MCP resources API
    allow_prompts: false            # permit MCP prompts API
    tool_overrides:                 # per-tool effect corrections
      safe_fetch: [IO]             # override NAIL's auto-detection

规则:

  • allow: [] (空)=允许所有效果,然后 deny 减去
  • allow: [FS, IO] =只有这些影响,那么 deny 减去
  • deny 总是赢 allow
  • allow_resources 和 allow_prompts 是明确的选择加入;默认情况下,它们被阻止
  • tool_overrides 允许您更正NAIL针对特定工具的自动效果检测

许可证

麻省理工学院