这是一个MCP服务器,允许你在本地机器上使用Deno®沙箱运行TypeScript、JavaScript和Python代码。该服务器提供了一个受控环境来执行代码,并具有明确的权限控制(即它可以访问哪些网站,可以读取哪些文件)。
注意: 本项目与Deno Land LLC没有任何关联。我只是Deno®运行时的一个粉丝。“Deno”是Deno Land LLC的注册商标。

大型语言模型(LLMs)擅长编写代码,如果LLM能够自行运行代码进行测试会更有帮助。问题是它们不能被信任不会造成损害,特别是如果恶意的人可以通过提示注入欺骗LLM。例如,你无辜地要求一个LLM总结一封邮件,而有人在邮件中告诉你的LLM运行删除所有文件并发送所有比特币给他们的代码。
沙箱对LLM编写的代码施加了限制。例如,我们可以说它只能更改特定文件夹中的文件,或者联系特定的可信网站。
每个操作系统创建沙箱的方法不同。有些更安全,有些更容易设置。这个项目在这两者之间取得了平衡。
我们的沙箱使用Deno,后者使用Chrome用来阻止恶意网站损害计算机的技术。这让你可以运行Typescript和JavaScript,并且依赖于很少量的我的代码。
一些勤劳的人还制作了Pyodide,它可以在Web浏览器中运行Python。我们使用它来在相同的Deno环境中运行Python。
你可以通过传递参数来控制权限,这些参数直接传递给Deno运行时。你可以配置以下内容:
我希望保持这个代码库比其他替代方案更简单易读,这样人们可以自己审核它。简洁性是一个重要的安全特性;了解它的人越多,发现错误的人就越多。
我还选择牺牲一些性能,不复用pyodide环境。这会产生一些小的开销,但使实现更容易理解。
此MCP应能与一系列MCP客户端一起工作。
你需要安装Node.js或Deno之一。不需要同时安装两个。
要使用此MCP服务器与Claude Desktop,将其添加到您的claude_desktop_config.json中:
~/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检查它拥有的权限,如果它不断收到权限拒绝错误。
你需要在运行时设置权限;如果你更改了它们,需要重新启动服务器。
权限与Deno®权限相同,并且只是传递过来。
示例
网络访问
--allow-net
--allow-net=api.github.com,example.com
文件系统
--allow-read --allow-write
--allow-read=/tmp --allow-write=/tmp
完整的权限列表和详细文档,请参阅Deno®安全。
此服务器使用启动服务器时指定的权限运行代码。这些权限传递给Deno®运行时。
小心启用的权限。沙箱完全被破坏的情况有:
claude_desktop_config.json)你也应该仔细考虑读取敏感点文件的权限(例如包含AWS、NPM、OpenAI凭证的文件);特别是如果你已经授予了网络访问权限。
记住,恶意的人可以使用提示注入来欺骗你偏好的语言模型,在你的计算机上运行有害的东西。也许他们可以在你无法阅读的PDF中隐藏一些不可见的文字,或者在你要求它总结的长文档中间。
Deno®有一些额外的建议,如果你想为不受信任的代码提供更多的隔离。
open(PATH, 'w')写入文件。它适用于读取文件,我不知道为什么写入不起作用。我在工具描述中包含了如何绕过这个问题的提示。你也可以指出你的LLM可以运行import js; js.fs.writeFileSync(PATH, CONTENT)。这在相同的Deno沙箱中运行,但有点麻烦。-A、-R或-W权限,很难确定哪些文件应该挂载到pyodide环境中。目前,我只猜测你的主目录和/tmp。你也可以显式指定其他目录,这些目录将被挂载。# 克隆仓库
git clone https://github.com/bewt85/mcp-deno-sandbox.git
cd mcp-deno-sandbox
# 安装依赖
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(`您的IP是: ${ip.trim()}`));
文件系统访问(需要--allow-read):
const text = Deno.readTextFileSync('/path/to/file.txt');
console.log(text);
我没有太多空闲时间,所以无法参与大多数功能请求/贡献。如果你想要添加某些东西,最好分叉仓库。抱歉。
当你想发布时:
package.json中的版本更新为X.Y.ZMIT