Sai Mcp

Sai Mcp

🚀 使用 WebAssembly Go 实现的 SAI MCP 服务器

本项目借助 WebAssembly 中的 Go 语言,实现了一个管理控制协议(MCP)服务器。该服务器可执行 "sai" 命令,并对其输出和退出码进行处理。此实现与 wpcli 框架兼容。

🚀 快速开始

SAI MCP 服务器是一个 WebAssembly 模块,能提供从 JavaScript 执行 SAI 命令行工具的接口。它主要处理以下内容:

  1. 执行带有提供的参数的 "sai" 命令。
  2. 分别捕获 stdout、stderr 和退出码。
  3. 解析输出格式(YAML、JSON 或纯文本)。
  4. 将结构化的结果返回到 JavaScript 环境。

🏗️ 项目结构

sai_mcp/
├── cmd/
│   └── main/
│       ├── main.go           # WebAssembly 入口点和 JavaScript 接口
│       ├── sai_executor.go   # SAI 命令执行逻辑
│       ├── parser.go         # 输出格式解析(YAML、JSON)
│       └── main_test.go      # 实现的测试用例
└── go.mod                    # Go 模块定义

🔧 技术细节

WebAssembly 接口

WebAssembly 模块暴露了一个 JavaScript 函数 executeSai,该函数接受命令参数并返回一个包含以下属性的对象:

  • stdout:标准输出。
  • stderr:标准错误输出。
  • exitCode:退出码(0 表示成功,非零表示错误)。
  • parsedOutput:(可选)如果检测到格式,则解析输出。
  • format:(可选)检测到的输出格式(json、yaml、文本)。

SAI 命令执行

SaiExecutor 组件处理实际执行 SAI 命令:

  • 为 SAI 命令创建新进程。
  • 分别捕获 stdout 和 stderr。
  • 从进程提取退出码。
  • 合适地处理执行错误。

输出解析

实现包括不同输出格式的解析器:

  • JSON:解析 JSON 输出到结构化对象。
  • YAML:解析 YAML 输出到结构化对象。
  • 文本:返回纯文本作为原始文本。 格式基于命令和输出内容自动检测。

📦 安装指南

要构建 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);
}

❌ 错误处理

实现处理了各种错误场景:

  • 命令未找到:在 stderr 中返回适当的错误并使用非零退出码。
  • 命令执行失败:捕获错误消息并在 stderr 中返回实际退出码。
  • 输出解析错误:忽略无法解析的输出。

📚 术语表

  1. WebAssembly:一种可以在浏览器和非浏览器环境中以近似于 C++ 等效速度运行的二进制指令格式。
  2. Go:Google 开发的一种开源编程语言,专注于效率、安全性和可维护性。
  3. MCP 协议:管理控制协议,用于管理和控制分布式系统中的组件。
  4. wpcli:一个用于构建和管理命令行界面的 PHP 库。

通过以上实现,可以在 WebAssembly 和 Go 的结合下,为 SAI 命令提供高效的执行和管理。

  • 0 关注
  • 0 收藏,8 浏览
  • system 提出于 2025-09-25 01:00

相似服务问题