mcpField
D
Deno Sandbox MCP Server

Deno Sandbox MCP Server

本地服务
github.com/bewt85AI 与智能体1378 周前更新

关于 Deno Sandbox MCP Server

Deno Sandbox MCP Server 通过 Deno 沙箱执行 TypeScript、JavaScript 和 Python,面向需要让 LLM 测试生成代码的场景。它将文件和网络权限作为启动参数传给 Deno,以限制代码可访问的范围。

主要功能

  1. 01沙箱执行 TypeScript、JavaScript 和 Python
  2. 02按目录限制文件读取与写入
  3. 03按域名或 IP 限制网络访问
  4. 04提供权限说明资源

适用场景

  1. 01在隔离目录中测试生成的代码
  2. 02限制代码仅访问指定网站
  3. 03检查 LLM 可用的沙箱权限

MCP 相关

它通过 MCP 工具让客户端在 Deno 沙箱中运行代码,并提供描述沙箱权限的资源。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"deno-sandbox": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/inspector"
]
}
}
}
启动命令npx -y @modelcontextprotocol/inspector

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@modelcontextprotocol/inspector

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Deno Sandbox MCP 服务

npm version

一个 MCP 服务,可让你使用 Deno® 沙箱在本地计算机上的沙箱中运行 TypeScript、JavaScript 和 Python 代码。此服务提供受控的代码执行环境,并支持明确的权限控制(即代码可以访问哪些网站、读取哪些文件)。

**注意:**本项目与 Deno Land LLC 没有任何关联。我只是 Deno® 运行时的爱好者。“Deno”是 Deno Land LLC 的注册商标。

一头 cowsay 奶牛问候的截图

如何运作以及原因

大模型很擅长编写代码,如果大模型能自己运行代码进行测试,就会很有帮助。问题在于,我们无法相信它不会造成损害,尤其是恶意人士可以通过提示词注入来欺骗大模型。例如,你只是无意中让大模型总结一封邮件,而有人在邮件中指示大模型运行代码,删除你的所有文件并把你的所有比特币转给他们。

沙箱会限制大模型编写的代码可以执行的操作。例如,我们可以规定代码只能修改特定文件夹中的文件,或只能访问特定的可信网站。

每种操作系统创建沙箱的方式都不同。有些更安全,有些更容易设置。本项目在两者之间取得了平衡。

我们的沙箱使用 Deno,而 Deno 使用的技术与 Chrome 用来阻止恶意网站损害计算机的技术相同。这让你可以运行 TypeScript 和 JavaScript,而且依赖的自有代码很少。

也有一些勤奋的开发者制作了 Pyodide,让你可以在网页浏览器中运行 Python。我们用它在同一个 Deno 环境中运行 Python。

你可以通过传入直接交给 Deno 运行时的参数来控制权限。你可以配置:

  • 可以读取哪些文件(例如你的代码库)
  • 可以写入哪些文件
  • 拒绝访问特定文件(例如 SSH 密钥)
  • 可以访问哪些网站或 IP 地址

非目标功能

我希望让这份代码比其他方案更易于阅读,以便人们可以自行审查。简单性是一项重要的安全特性;理解它的人越多,就越有可能发现错误。

我还选择牺牲一些性能,不重复使用 Pyodide 环境。这会带来少量开销,但能让实现更容易理解。

灵感来源

与 Claude Desktop 搭配使用

此 MCP 应该适用于多种 MCP 客户端。

你需要安装 Node.js 或 Deno,不需要两者都安装。

要将此 MCP 服务与 Claude Desktop 搭配使用,请将它添加到以下位置的 claude_desktop_config.json 文件中:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json

如果你已安装 Deno

{
  "mcpServers": {
    "denoSandbox": {
      "command": "deno",
      "args": [
        "run",
        "npm:mcp-deno-sandbox",
        "--allow-net=icanhazip.com,example.com",
      ]
    }
  }
}

如果你已安装 Node.js,则会自动安装 Deno

{
  "mcpServers": {
    "denoSandbox": {
      "command": "npx",
      "args": [
        "mcp-deno-sandbox",
        "--allow-net=icanhazip.com,example.com"
      ]
    }
  }
}

你可以鼓励大模型使用这些工具,帮助它更好地完成任务。此外,还有一个资源定义了沙箱中可用的权限。如果大模型持续遇到权限被拒绝的错误,你可以建议它检查自己拥有哪些权限。

权限示例

你需要在运行时设置权限;如果更改权限,则需要重启服务。

这些权限与 Deno® 权限相同,并且会直接传递给 Deno。

示例

  1. 网络访问
    • 宽松:--allow-net
      • 允许访问所有网络
    • 受限:--allow-net=api.github.com,example.com
      • 仅允许访问特定域名
  2. 文件系统
    • 宽松:--allow-read --allow-write
      • 完全访问文件系统
      • 权衡:恶意大模型可以访问你的点文件以及你能访问的任何内容(包括它可以编辑以授予自己更多权限的文件)
    • 受限:--allow-read=/tmp --allow-write=/tmp
      • 仅限特定目录
      • 适合处理隔离的文件

如需查看完整的权限列表和详细文档,请参阅 Deno® 安全性。

安全注意事项

此服务会使用启动时指定的权限运行代码。这些权限会传递给 Deno 运行时。

请谨慎启用权限。以下做法会彻底破坏沙箱的防护:

  • 授予不受限制的 FFI 或执行权限
  • 允许写入管理服务权限的文件(例如 claude_desktop_config.json)

你还应仔细考虑是否授予对敏感点文件的读取权限(例如包含 AWS、NPM、OpenAI 凭据的文件);尤其是在你已授予网络访问权限的情况下。

请记住,恶意人员可以利用提示词注入,诱骗你偏好的语言模型在你的计算机上运行有害内容。他们可能会在你无法阅读的 PDF 中,或在你要求模型总结的长文档中,隐藏不可见文本。

如果你希望进一步隔离不受信任的代码,Deno® 还提供了一些额外建议。

已知问题

Python
  • 出于某种原因,你无法使用 open(PATH, 'w') 写入文件。读取文件可以正常工作,但我不知道为什么写入不行。我在工具描述中提供了绕过此问题的提示。你也可以告诉大模型,它可以运行 import js; js.fs.writeFileSync(PATH, CONTENT)。这会在同一个 Deno 沙箱中运行,但操作稍微麻烦一些。
  • 如果你授予 -A、-R 或 -W 权限,就很难判断哪些文件应挂载到 pyodide 环境中。目前,我会猜测你的主目录和 /tmp。你也可以明确指定其他目录,这些目录也会被挂载。
  • 我不确定这种挂载能否在 Windows 上正常工作。

开发

# Clone the repository
git clone https://github.com/bewt85/mcp-deno-sandbox.git
cd mcp-deno-sandbox

# Install dependencies
npm install

检查代码格式和类型:

npm run checks

自动修复一些问题:

npm run fix

使用 MCP Inspector 进行测试:

npx @modelcontextprotocol/inspector ./node_modules/.bin/ts-node src/index.ts

在 Inspector 中试用以下示例:

  1. 基本算术(无需权限即可运行):

    console.log(1 + 2);
    
  2. 网络访问(需要 --allow-net):

    fetch('https://icanhazip.com').then(response => response.text()).then(ip => console.log(`Your IP is: ${ip.trim()}`));
    
  3. 文件系统访问(需要 --allow-read):

    const text = Deno.readTextFileSync('/path/to/file.txt');
    console.log(text);
    

贡献

我没有太多空闲时间,因此无法处理大多数功能请求或贡献。如果你想添加功能,最好 fork 此仓库。抱歉。

发布

准备发布时:

  • 将 package.json 中的版本更新为 X.Y.Z
  • 合并你的更改
  • 在 GitHub 中发布 vX.Y.Z
  • 等待其自动部署到 NPM

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。