SAI MCP Server in WebAssembly Go
赛·麦克皮服务器 (Sài Mài kè pí fúwùqì)
example42
README
WebAssembly Go 中的 SAI MCP 服务器
该项目使用 WebAssembly Go 实现了管理控制协议 (MCP) 服务器,该服务器执行 "sai" 命令并处理其输出和退出代码。该实现与 wpcli 框架兼容。
概述
SAI MCP 服务器是一个 WebAssembly 模块,它提供了一个从 JavaScript 执行 SAI 命令行工具的接口。它处理:
- 使用提供的参数执行 "sai" 命令
- 分别捕获 stdout、stderr 和退出代码
- 解析输出格式(YAML、JSON 或纯文本)
- 将结构化结果返回到 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, text)
SAI 命令执行
SaiExecutor
组件处理 SAI 命令的实际执行:
- 为 SAI 命令创建一个新进程
- 分别捕获 stdout 和 stderr
- 从进程中提取退出代码
- 适当处理执行错误
输出解析
该实现包括针对不同输出格式的解析器:
- JSON: 将 JSON 输出解析为结构化对象
- YAML: 将 YAML 输出解析为结构化对象
- Text: 将纯文本原样返回
格式会根据命令和输出内容自动检测。
构建 WebAssembly 模块
要构建 WebAssembly 模块:
GOOS=js GOARCH=wasm go build -o sai_mcp.wasm ./cmd/main
这将生成一个 WebAssembly 文件 (sai_mcp.wasm
),该文件可以被 wpcli 框架加载。
与 wpcli 集成
要与 wpcli 框架集成:
- 将 WebAssembly 模块放置在适当的插件目录中
- 创建一个配置文件,定义可用的命令
- 向 wpcli 框架注册插件
示例配置:
name: sai
description: SAI 命令行工具集成
uuid: sai-plugin-uuid
versions:
- version: 1.0.0
wasm: sai_mcp.wasm
conf: sai_config.yaml
commands:
- name: install
description: 安装软件
usage: install <software> [options]
args:
- name: software
type: string
description: 要安装的软件的名称
required: true
# 其他命令...
使用示例
从 JavaScript:
// 执行 SAI 命令
const result = executeSai("install", "nginx");
// 检查结果
console.log("Exit code:", result.exitCode);
console.log("Output:", result.stdout);
if (result.stderr) {
console.error("Error:", result.stderr);
}
// 如果可用,访问已解析的输出
if (result.parsedOutput) {
console.log("Parsed output:", result.parsedOutput);
}
错误处理
该实现处理各种错误情况:
- 命令未找到:在 stderr 中返回适当的错误和非零退出代码
- 命令执行失败:在 stderr 中捕获错误消息并返回实际的退出代码
- 输出解析错误:如果解析失败,则回退到返回原始输出
测试
该实现包括全面的测试,用于验证:
- 基本命令执行
- 输出格式检测和解析
- 错误处理
- 退出代码传播
要运行测试(需要原生 Go 环境,而不是 WebAssembly):
go test ./cmd/main -v
局限性和未来改进
- 当前实现假定 SAI 命令在 PATH 中可用
- 输出格式检测基于简单的启发式方法,可以改进
- 可以为特定的 SAI 命令添加更复杂的解析
- WebAssembly 在文件系统访问和进程执行方面存在限制
推荐服务器
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
MCP Package Docs Server
促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。
Claude Code MCP
一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
mermaid-mcp-server
一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。
Jira-Context-MCP
MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

Linear MCP Server
一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。
Curri MCP Server
通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。