Deno沙盒MCP服务器
](https://www.npmjs.com/package/mcp-deno-sandbox)
一个MCP服务器,允许您使用Deno®沙箱在本地计算机上的沙箱中运行TypeScript、JavaScript和Python代码。此服务器提供了一个受控环境,用于执行具有明确权限控制的代码(即它可以访问哪些网站,可以读取哪些文件)。
注: 该项目与Deno Land LLC没有任何关联。我只是Deno®运行时的粉丝。“Deno”是Deno Land LLC的注册商标。
Screenshot of a cowsay cow saying hello
如何以及为什么
LLM擅长编写代码,如果LLM可以自己运行代码进行测试,这会有所帮助。问题是,他们不能被信任不会造成损害,特别是如果恶意人员可以使用提示注入欺骗LLM。例如,你无意中让法学硕士总结一封电子邮件,有人给你写了一封电子邮件告诉你的法学硕士运行代码删除你所有的文件,并将你所有的比特币发送给他们。
沙盒对LLM编写的代码的功能进行了限制。例如,我们可能会说它只能更改特定文件夹中的文件,或者联系特定的受信任网站。
每个操作系统都有不同的创建沙盒的方法。有些更安全,有些更容易设置。这个项目在两者之间取得了平衡。
我们的沙盒使用Deno,而Deno又使用与Chrome相同的技术来阻止恶意网站破坏您的计算机。这允许您运行Typescript和Javascript,并依赖于 我的代码很少.
一些辛勤工作的人也 皮奥迪斯 它允许您在web浏览器中运行Python。我们用它来 让你运行Python 在相同的Deno环境中。
您可以通过传递直接提供给Deno运行时的参数来控制权限。您可以配置哪些:
- 可以读取文件(例如您的代码库)
- 我们可以写哪些文件
- 拒绝访问特定文件(例如ssh密钥)
- 可以访问哪些网站或IP地址
非功能
我想让这个代码库比其他代码库更容易阅读,这样人们就可以自己审计了。简单性是一个重要的安全特性;了解它的人越多,发现bug的人就越多。
我还选择牺牲一些性能,不重用pyodide环境。这会产生很小的开销,但它使实现更容易推理。
灵感
- 西蒙·威利森 Pyodide沙盒实验
- Pydantics的 MCP运行Python
使用Claude Desktop
此MCP应与一系列MCP客户端配合使用。
你要么需要 或 迪诺 安装。你不需要两者。
要将此MCP服务器与Claude Desktop一起使用,请将其添加到您的 claude_desktop_config.json 在:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%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"
]
}
}
}您可以通过鼓励LLM使用这些工具来帮助它。还有一个资源定义了沙箱中可用的权限。如果LLM不断收到拒绝权限错误,您可以建议LLM检查它拥有哪些权限。
权限示例
您需要在运行时设置权限;如果更改了它们,则需要重新启动服务器。
权限与 Deno®权限 并且刚刚通过。
*例子*
- 网络接入
- 允许: --allow-net - 允许所有网络访问 - 受限制的: --allow-net=api.github.com,example.com - 仅允许网络访问特定域
- 文件系统
- 允许: --allow-read --allow-write - 完全文件系统访问权限 - 权衡:流氓LLM可以访问您的点文件和其他任何您可以访问的文件(包括它可以编辑以赋予自己更多权限的文件) - 受限制的: --allow-read=/tmp --allow-write=/tmp - 仅限于特定目录 - 适用于处理孤立文件
有关权限和详细文档的完整列表,请参阅 Deno®安全.
安全考虑
此服务器使用启动服务器时指定的权限运行代码。这些权限将传递给Deno®运行时。
请注意您启用的权限。沙盒完全被以下因素破坏:
- 给予一揽子外国金融机构或执行许可
- 允许对管理服务器权限的文件进行写访问(例如。
claude_desktop_config.json)
您还应该仔细考虑敏感信息的读取权限 dotfiles 您拥有(例如,AWS、NPM、OpenAI的证书);特别是如果您已授予网络访问权限。
记住,恶意的人可以使用提示注入来欺骗你喜欢的语言模型,让它在你的计算机上运行糟糕的东西。也许他们可以在你无法阅读的PDF文件中隐藏一些不可见的文本,或者在你要求它总结的长文档中。
Deno®有一些 其他建议 如果你想对不受信任的代码进行更多的隔离。
已知问题
python
- 您不能使用
open(PATH, 'w')出于某种原因写入文件。它适用于读取文件,我不知道写什么不起作用。我提供了一个提示
在工具描述中解决这个问题。你也可以向你的法学硕士指出,它可以运行 import js; js.fs.writeFileSync(PATH, CONTENT)。这在相同的Deno sanbox中运行,但有点烦人。
- 如果你给
-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检查员进行测试:
npx @modelcontextprotocol/inspector ./node_modules/.bin/ts-node src/index.ts在检查器中尝试以下示例:
- 基本算术(无权限工作):
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);贡献
我没有很多空闲时间,所以我无法参与大多数功能请求/贡献。如果你想添加一些东西,最好分叉存储库。道歉。
发布
当你想发布时:
- 更新中的版本
package.json到X.Y.Z - 合并您的更改
- 在GitHub vX中发布。Y.Z
- 等待它自动部署到NPM
许可证
麻省理工学院
