缟玛瑙
Onyx是一种 MCP(模型上下文协议)服务器 在内部安全地执行代码 Docker沙盒。它支持多种编程语言,并与 克劳德桌面 或其他MCP客户端。Onyx使在 沙盒MCP环境非常适合 克劳德桌面 高级用户或任何使用可执行代码构建AI工作流的人。
特性
- 🔹 多语言支持:
- pythonpython:3.11) - Javaopenjdk:17) - Cgcc:12) - Cgcc:12) - JavaScript/Node.js(node:20) - 生锈(rust:1.72)
- 🔹 Docker沙盒:
- 网络已禁用(--network none) - 带有tmpfs挂载的只读FS用于安全写入 - CPU、内存和进程数有限 - 非根执行(--user 1000:1000)
- 🔹 MCP协议:暴露a
run_code用于执行任意代码的工具。
- 🔹 日志记录:所有执行日志都转到
stderr(对MCP客户端安全)。
- 🔹 CI就绪:通过GitHub Actions对执行者进行自动测试。
______________________________________________________________________
项目结构
sandbox/
├── .github/
│ └── workflows/ci.yml # GitHub Actions CI
├── cmd/
│ └── server/
│ └── main.go # MCP server entrypoint
├── internal/
│ ├── model/ # Code params, executor interface, result types
│ ├── executor/ # Language-specific executors
│ └── utils/ # Docker availability checks
├── tests/
├── go.mod, go.sum______________________________________________________________________
安装说明
1.先决条件
- 转到1.20+
- (Windows/macOS)或Docker引擎(Linux)
验证两者:
go version
docker --version2.拉取所需的Docker镜像
为了避免第一次执行时的延迟,请预拉所有语言运行时:
docker pull python:3.11
docker pull openjdk:17
docker pull gcc:12
docker pull node:20
docker pull rust:1.723.构建并运行服务器
从repo的根开始:
# Run directly
go run ./cmd/server/main.go
# Or build a binary (recommended for Claude Desktop)
go build -o sandbox_server ./cmd/server/main.go你现在应该已经 sandbox_server (或 sandbox_server.exe 在Windows上)。
______________________________________________________________________
与Claude Desktop连接
- 找到Claude Desktop的配置文件:
code $env:AppData\Claude\claude_desktop_config.json- 为添加MCP服务器条目 缟玛瑙:
{
"mcpServers": {
"onyx": {
"command": "/sandbox_server.exe",
"args": []
}
}
}- 重新启动克劳德桌面。
- 现在你应该看到
run_code工具可用。
______________________________________________________________________
用法
For a good example of how it can be used, check out this chat: https://claude.ai/share/512e1f5a-77fc-40ca-8c49-b372b2c680f9
______________________________________________________________________
扩展到新语言
添加对另一种语言的支持需要:
- 选择Docker镜像 使用语言的编译器/运行时。
例子: golang:1.22 对于Go来说, php:8.2-cli 对于PHP。
- 实现执行器 在……里面
internal/executor/.go:
- 定义一个结构(例如。, GoExecutor).
- 实施 Execute 方法:
- 将源代码导入容器。 - 在内部编译/解释它 /workspace. - 运行输出二进制文件/脚本。
- 在中注册
main.go:
if args.Language == "go" {
runtime = executor.GoExecutor{}
}- 编写测试 在……里面
internal/executor/go_test.go.
- 拉取Docker镜像 提前(
docker pull golang:1.22).
