SAI MCP Server in WebAssembly Go

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 命令行工具的接口。它处理:

  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, 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 框架集成:

  1. 将 WebAssembly 模块放置在适当的插件目录中
  2. 创建一个配置文件,定义可用的命令
  3. 向 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

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
mermaid-mcp-server

mermaid-mcp-server

一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。

精选
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

精选
TypeScript
Linear MCP Server

Linear MCP Server

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

精选
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Curri MCP Server

Curri MCP Server

通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。

官方
本地
JavaScript