本项目借助 WebAssembly 中的 Go 语言,实现了一个管理控制协议(MCP)服务器。该服务器可执行 "sai" 命令,并对其输出和退出码进行处理。此实现与 wpcli 框架兼容。
SAI MCP 服务器是一个 WebAssembly 模块,能提供从 JavaScript 执行 SAI 命令行工具的接口。它主要处理以下内容:
sai_mcp/
├── cmd/
│ └── main/
│ ├── main.go # WebAssembly 入口点和 JavaScript 接口
│ ├── sai_executor.go # SAI 命令执行逻辑
│ ├── parser.go # 输出格式解析(YAML、JSON)
│ └── main_test.go # 实现的测试用例
└── go.mod # Go 模块定义
WebAssembly 模块暴露了一个 JavaScript 函数 executeSai
,该函数接受命令参数并返回一个包含以下属性的对象:
stdout
:标准输出。stderr
:标准错误输出。exitCode
:退出码(0 表示成功,非零表示错误)。parsedOutput
:(可选)如果检测到格式,则解析输出。format
:(可选)检测到的输出格式(json、yaml、文本)。SaiExecutor
组件处理实际执行 SAI 命令:
实现包括不同输出格式的解析器:
要构建 WebAssembly 模块,可使用以下命令:
GOOS=js GOARCH=wasm go build -o sai_mcp.wasm ./cmd/main
这将生成一个 WebAssembly 文件(sai_mcp.wasm
),该文件可以由 wpcli 框架加载。
// 执行 SAI 命令
const result = executeSai("install", "nginx");
// 检查结果
console.log("退出码:", result.exitCode);
console.log("输出:", result.stdout);
if (result.stderr) {
console.error("错误:", result.stderr);
}
// 如果有解析的输出则访问
if (result.parsedOutput) {
console.log("解析的输出:", result.parsedOutput);
}
实现处理了各种错误场景:
通过以上实现,可以在 WebAssembly 和 Go 的结合下,为 SAI 命令提供高效的执行和管理。