2026年7月6日 3 分钟阅读

Declaw 实战指南:用 Firecracker 沙箱给 MCP 服务器穿上防弹衣

tinyash 0 条评论

痛点:MCP 服务器的安全隐患

如果你在用 Claude Desktop、Cursor、Windsurf 或任何 MCP 客户端,你的每一条 MCP 服务器配置大概长这样:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
    }
  }
}

这看起来很安全,但问题在于:MCP 服务器以子进程运行,拥有宿主机完全访问权限。没有沙箱,没有权限模型。你的 GitHub token 被明文传给了一个从 npm 安装的包,这个包可以读你硬盘上任何文件,可以访问任何网络地址。

这不是危言耸听。2026 年初 Claude Desktop Extensions 被爆出零点击 RCE 漏洞(CVSS 10/10),Cursor 也曾有 CurXecute(CVE-2025-54135,CVSS 9.8)和 MCPoison(CVE-2025-54136,CVSS 8.8)等高危漏洞。

Declaw 正是为了解决这个问题而生的开源工具——它在你的 MCP 服务器外面套一层 Firecracker 微 VM 沙箱,让每个 MCP 服务器运行在硬件隔离环境中。

Declaw 是什么?

Declaw 是一个面向 AI Agent 的安全沙箱运行时,基于 AWS 开源的 Firecracker microVM 技术。核心思想很简单:把 MCP 服务器关进一个迷你虚拟机里运行,通过硬件虚拟化实现真正的隔离。

用 Declaw 前后的对比一目了然:

// Before — MCP 直接运行,完全不受限
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
    }
  }
}

// After — MCP 运行在 Firecracker VM 中
{
  "mcpServers": {
    "github": {
      "command": "declaw",
      "args": [
        "mcp", "--env", "GITHUB_PERSONAL_ACCESS_TOKEN",
        "--network-allow", "registry.npmjs.org,api.github.com,github.com",
        "--", "npx", "-y", "@modelcontextprotocol/server-github"
      ],
      "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
    }
  }
}

仅仅在命令前加上 declaw mcp,整个 MCP 服务器就被装进了一个微 VM。网络默认全部拒绝(deny-all),只有你用 --network-allow 显式允许的主机才能被访问。

快速上手

安装

Declaw CLI 有多种安装方式:

chmod +x declaw-linux-amd64
sudo mv declaw-linux-amd64 /usr/local/bin/declaw

curl -fsSL https://raw.githubusercontent.com/declaw-ai/declaw-cli/main/install.sh | sh

go install github.com/declaw-ai/declaw-cli/cmd/declaw@latest

安装后注册账户并登录:

declaw auth login

配置 MCP 客户端

Claude Desktop(macOS 配置文件路径 ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "github": {
      "command": "declaw",
      "args": [
        "mcp", "--env", "GITHUB_PERSONAL_ACCESS_TOKEN",
        "--network-allow", "api.github.com,github.com",
        "--", "npx", "-y", "@modelcontextprotocol/server-github"
      ],
      "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
    }
  }
}

Cursor(配置文件 ~/.cursor/mcp.json):

{
  "mcpServers": {
    "github": {
      "command": "declaw",
      "args": [
        "mcp", "--env", "GITHUB_PERSONAL_ACCESS_TOKEN",
        "--network-allow", "api.github.com,github.com",
        "--", "npx", "-y", "@modelcontextprotocol/server-github"
      ],
      "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
    }
  }
}

Claude Code

claude mcp add github \
  -e GITHUB_PERSONAL_ACCESS_TOKEN=*** -- \
  declaw mcp --env GITHUB_PERSONAL_ACCESS_TOKEN \
  --network-allow api.github.com,github.com \
  -- npx -y @modelcontextprotocol/server-github

核心参数说明

参数默认值说明
--network-allow deny-all出站网络白名单(逗号分隔)
--template mcp-server沙箱模板(内置 Node.js + Python)
--timeout 3600沙箱超时时间(默认 1 小时)
--env KEY转发环境变量(可重复,KEY 从宿主机读,KEY=VAL 直接设值)
--file LOCAL:REMOTE上传本地文件到沙箱(可重复)

最关键的设计是 网络默认拒绝所有出站连接。MCP 服务器如果要连接外部 API(GitHub、Slack、Brave Search 等),必须在 --network-allow 中显式列出目标主机。这意味着即使 MCP 服务器的代码被投毒,攻击者也无法将数据外传到未授权的服务器。

进阶用法

自定义沙箱模板

默认的 mcp-server 模板包含 Node.js 和 Python,覆盖了大多数 MCP 服务器。但如果你的 MCP 服务器需要额外的系统包(如 ffmpegchromium、原生库),可以构建自定义模板:

echo 'FROM declaw/mcp-server:latest
RUN apt-get update && apt-get install -y ffmpeg' > Dockerfile

declaw template build --dockerfile Dockerfile

declaw mcp --template <模板ID> -- your-server-command

编程 SDK 集成

Declaw 不仅提供 CLI,还提供了 Python、TypeScript 和 Go 的 SDK,适合在代码中直接创建和管理沙箱:

npm install @declaw/sdk
import { Sandbox } from '@declaw/sdk';

const sandbox = await Sandbox.create({
  apiKey: 'your-api-key',
  template: 'base',
  timeout: 60,
});

// 执行命令
const result = await sandbox.commands.run('echo "Hello from a secure sandbox"');
console.log(result.stdout);

// 操作文件
await sandbox.files.write('/tmp/hello.txt', 'Hello World');
const content = await sandbox.files.read('/tmp/hello.txt');

// 清理
await sandbox.kill();

SDK 还内置了完善的安全护栏——PII 扫描(SSN、信用卡、API Key 自动脱敏)、提示注入防御、内容毒性过滤,都可以通过配置开启:

const sandbox = await Sandbox.create({
  security: SecurityPolicy.from({
    pii: {
      enabled: true,
      types: ['ssn', 'credit_card', 'email', 'phone', 'api_key'],
      action: 'redact',
    },
    injectionDefense: {
      enabled: true,
      action: 'block',
      threshold: 0.85,
    },
  }),
  network: { allowOut: ['api.openai.com', 'api.anthropic.com'] },
});

完整沙箱管理命令

Declaw CLI 提供了一套完整的沙箱生命周期管理命令:

declaw sandbox create|list|info|kill    # 管理沙箱
declaw sandbox exec|connect|files       # 交互沙箱
declaw sandbox pause|resume             # 生命周期管理
declaw template list|build|info|delete  # 管理模板
declaw volume create|list|get|delete    # 管理卷
declaw account info|usage|api-keys      # 账户管理
declaw auth login|logout|status         # 认证

所有列表和详情命令都支持 --json 参数输出机器可读格式,方便集成到 CI/CD 流水线中。

适用场景

  • Claude Desktop / Cursor 用户:你的 MCP 服务器现在有了硬件级隔离,不再裸奔
  • 团队共享 MCP 配置:多人共用一套配置,任何人安装了不安全的 MCP 服务器都不会影响他人的环境
  • CI/CD 流水线:在自动化的 Agent 工作流中运行不可信代码时,Declaw 提供了一层可靠的安全屏障
  • 安全合规:金融机构或处理敏感数据的企业,需要对 Agent 操作进行网络隔离和审计日志记录

总结

Declaw 解决了 AI Agent 生态中一个被忽视的安全问题:MCP 服务器运行在无沙箱的裸环境中。一条 declaw mcp 命令的改动,就能让你的所有 MCP 服务器运行在 Firecracker 微 VM 中,实现网络隔离、凭证保护和运行时监控。

Declaw CLI 以 Apache-2.0 协议开源,SDK 支持 Python、TypeScript、Go 三种语言,社区版提供免费额度,适合个人开发者和团队评估使用。在 AI Agent 越来越多地接入外部工具和服务的今天,给自己的 MCP 服务器加上一层沙箱保护,是个值得投入的工程实践。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。