mcp fw
 ](https://pypi.org/project/mcp-fw/)  
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.yaml1.制定政策
# 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 filesystem3.看看发生了什么
$ 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.yamlA. [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总是赢allowallow_resources和allow_prompts是明确的选择加入;默认情况下,它们被阻止tool_overrides允许您更正NAIL针对特定工具的自动效果检测
许可证
麻省理工学院
