关于 Deno Sandbox MCP Server
Deno Sandbox MCP Server 通过 Deno 沙箱执行 TypeScript、JavaScript 和 Python,面向需要让 LLM 测试生成代码的场景。它将文件和网络权限作为启动参数传给 Deno,以限制代码可访问的范围。
主要功能
- 01沙箱执行 TypeScript、JavaScript 和 Python
- 02按目录限制文件读取与写入
- 03按域名或 IP 限制网络访问
- 04提供权限说明资源
适用场景
- 01在隔离目录中测试生成的代码
- 02限制代码仅访问指定网站
- 03检查 LLM 可用的沙箱权限
MCP 相关
它通过 MCP 工具让客户端在 Deno 沙箱中运行代码,并提供描述沙箱权限的资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Deno Sandbox MCP 服务
一个 MCP 服务,可让你使用 Deno® 沙箱在本地计算机上的沙箱中运行 TypeScript、JavaScript 和 Python 代码。此服务提供受控的代码执行环境,并支持明确的权限控制(即代码可以访问哪些网站、读取哪些文件)。
**注意:**本项目与 Deno Land LLC 没有任何关联。我只是 Deno® 运行时的爱好者。“Deno”是 Deno Land LLC 的注册商标。

如何运作以及原因
大模型很擅长编写代码,如果大模型能自己运行代码进行测试,就会很有帮助。问题在于,我们无法相信它不会造成损害,尤其是恶意人士可以通过提示词注入来欺骗大模型。例如,你只是无意中让大模型总结一封邮件,而有人在邮件中指示大模型运行代码,删除你的所有文件并把你的所有比特币转给他们。
沙箱会限制大模型编写的代码可以执行的操作。例如,我们可以规定代码只能修改特定文件夹中的文件,或只能访问特定的可信网站。
每种操作系统创建沙箱的方式都不同。有些更安全,有些更容易设置。本项目在两者之间取得了平衡。
我们的沙箱使用 Deno,而 Deno 使用的技术与 Chrome 用来阻止恶意网站损害计算机的技术相同。这让你可以运行 TypeScript 和 JavaScript,而且依赖的自有代码很少。
也有一些勤奋的开发者制作了 Pyodide,让你可以在网页浏览器中运行 Python。我们用它在同一个 Deno 环境中运行 Python。
你可以通过传入直接交给 Deno 运行时的参数来控制权限。你可以配置:
- 可以读取哪些文件(例如你的代码库)
- 可以写入哪些文件
- 拒绝访问特定文件(例如 SSH 密钥)
- 可以访问哪些网站或 IP 地址
非目标功能
我希望让这份代码比其他方案更易于阅读,以便人们可以自行审查。简单性是一项重要的安全特性;理解它的人越多,就越有可能发现错误。
我还选择牺牲一些性能,不重复使用 Pyodide 环境。这会带来少量开销,但能让实现更容易理解。
灵感来源
- Simon Willison 的 Pyodide 沙箱实验
- Pydantics 的 MCP Run Python
与 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。
示例
- 网络访问
- 宽松:
--allow-net- 允许访问所有网络
- 受限:
--allow-net=api.github.com,example.com- 仅允许访问特定域名
- 宽松:
- 文件系统
- 宽松:
--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 中试用以下示例:
-
基本算术(无需权限即可运行):
console.log(1 + 2); -
网络访问(需要
--allow-net):fetch('https://icanhazip.com').then(response => response.text()).then(ip => console.log(`Your IP is: ${ip.trim()}`)); -
文件系统访问(需要
--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
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。