使用说明

项目简介

该项目 'WASM MCP 运行时' 提供了一个基于 WebAssembly (WASM) 的 Model Context Protocol (MCP) 服务器运行时环境。其核心思想是允许开发者使用任何编程语言编写 MCP 服务器逻辑,并将其编译为 WASM 模块。该运行时负责加载和执行这些 WASM 模块,从而为大型语言模型 (LLM) 应用提供上下文信息和工具扩展能力。

该项目的目标是构建跨平台沙箱化易于使用的 MCP 服务器。通过 WASM 的特性,MCP 服务器可以运行在不同的操作系统和硬件架构上,同时保证安全性和隔离性。

主要功能点

  • WASM 运行时环境: 提供加载和执行 WASM 模块的基础设施,使得 WASM 模块可以作为 MCP 服务器运行。
  • 工具扩展: 允许 WASM 模块向 LLM 客户端暴露工具 (Tools) 功能。示例中提供了 'get_alerts' 和 'get_forecast' 工具,用于获取天气预警和天气预报信息。
  • HTTP 请求支持: WASM 模块可以通过 'http_get' 函数发起 HTTP GET 请求,方便从外部数据源获取信息,例如天气 API。
  • JSON 数据处理: 示例代码使用了 'parson.c' 库进行 JSON 数据的解析和构建,便于处理 MCP 协议中的 JSON 格式数据。
  • 输入/输出管理: 运行时提供 'mcp_set_input'、'mcp_get_output'、'mcp_set_output' 和 'mcp_get_error' 等函数,用于 WASM 模块与运行时环境进行数据交换和错误报告。

安装步骤

  1. 安装 Node.js 环境: 由于该运行时是用 JavaScript 开发的,因此需要先安装 Node.js 运行环境。请访问 Node.js 官网 下载并安装适合您操作系统的版本。
  2. 安装项目依赖: 克隆该 GitHub 仓库到本地后,在项目根目录下打开终端,运行以下命令安装项目依赖:
    npm install

服务器配置

MCP 客户端需要配置 MCP 服务器的启动命令和参数才能连接并使用其功能。对于 'WASM MCP 运行时',配置信息如下所示:

{
  "serverName": "wasm-mcp-runtime",
  "command": "node",
  "args": [
    "./src/wasm.js" //  这里实际上不需要直接运行 wasm.js,wasm.js 只是库,真正运行的是使用该库的程序,例如结合 npx 使用,或者在其他js程序中调用。这里args 仅作为示例,实际使用中 MCP 客户端可能需要更灵活的配置方式,比如指定 WASM 模块的路径等。但根据仓库提供的 usage 示例,直接运行 wasm.js 并不是运行 MCP 服务器的方式,而是通过 'npx wasm-mcp config' 命令生成配置,然后客户端可能需要根据生成的配置去连接 WASM MCP 服务。仓库本身更像是一个 WASM MCP 运行时的库,而不是一个可以直接独立运行的 MCP 服务器程序。因此,这里提供一个基于仓库 'README.md' 中 'npx wasm-mcp config' 命令的配置示例,更贴近仓库的实际使用方式。但实际上,这个仓库更偏向于 MCP 运行时的 *库* 而不是一个独立的 *服务器程序*。以下配置更多的是 *如何使用这个库* 的角度来理解,而不是直接运行一个服务器。

    // 实际上,更准确的使用方式可能是通过 npx 命令,例如:
    // "args": [
    //   "wasm-mcp",
    //   "config",
    //   "https://github.com/konsumer/wasm-mcp/raw/refs/heads/main/examples/weather.wasm"
    // ]
    // 但这仍然不是直接运行服务器,而是获取配置信息。

    //  更合适的理解是,这个仓库提供的是一个 *库*,用于加载和运行 WASM MCP 服务。
    //  用户需要基于这个库,构建自己的 MCP 客户端或集成到现有的 LLM 应用中。
    //  因此,这里更偏向于 *如何配置 MCP 客户端去使用基于这个库构建的 WASM MCP 服务*。

    //  由于仓库没有提供直接运行 MCP 服务器的命令,以下配置更多的是 *理论上的配置示例*,
    //  用户需要根据实际使用场景和 MCP 客户端的要求进行调整。

    //  更贴近实际的配置,可能是让 MCP 客户端 *加载和运行 wasm.js 以及相关的 WASM 模块*。
    //  但这超出了 MCP 服务器配置的通常理解,更像是 *客户端集成了 MCP 运行时*。

    //  考虑到仓库提供的 'npx wasm-mcp config' 命令,更合理的配置可能是:
    //  让 MCP 客户端 *调用 'npx wasm-mcp config' 命令获取 WASM MCP 服务的配置信息*,
    //  然后根据配置信息去连接和使用 WASM MCP 服务。

    //  以下配置示例,更偏向于 *假设用户已经通过某种方式(例如 'npx wasm-mcp config')获取了 WASM MCP 服务的配置信息*,
    //  MCP 客户端需要根据这些信息去连接和使用 WASM MCP 服务。

    //  由于仓库本身更偏向于 *库* 而不是独立的 *服务器程序*,
    //  因此,这里提供的 “服务器配置” 更多的是 *如何配置 MCP 客户端去使用基于这个库构建的 WASM MCP 服务* 的角度来理解。
  ],
  "serverURL": "stdio" //  或者其他 MCP 客户端支持的传输协议,例如 WebSocket
}

配置说明:

  • '"serverName"': MCP 服务器的名称,可以自定义。
  • '"command"': 运行 MCP 服务器的命令,这里使用 'node' 命令来运行 JavaScript 代码。
  • '"args"': 传递给 'node' 命令的参数。
    • '"./src/wasm.js"': 指向 'wasm.js' 文件,但这并不是直接运行服务器的方式,更准确的理解是,需要用户基于 'wasm.js' 库构建自己的 MCP 客户端或集成到现有应用中。
    • 更实际的参数可能需要根据 WASM 模块的路径和具体使用方式来确定。 例如,如果需要指定 WASM 模块的 URL 或本地文件路径,则需要在 'args' 中添加相应的参数。 可以参考 'README.md' 中的 'npx wasm-mcp config' 命令来理解参数的可能形式。
  • '"serverURL"': MCP 客户端连接服务器的 URL。
    • '"stdio"': 表示使用标准输入/输出流进行通信,这是一种常用的本地进程间通信方式。
    • 其他可能的 URL: 如果 WASM MCP 服务支持 WebSocket 或 SSE 等其他传输协议,则可以配置相应的 URL,例如 '"ws://localhost:8080"' 或 '"http://localhost:8080/sse"'。

注意: 以上配置仅为示例,实际使用中需要根据具体的 WASM MCP 模块和 MCP 客户端的要求进行调整。该仓库更像是一个 MCP 运行时的 ,而不是一个可以直接独立运行的 MCP 服务器程序。 因此,MCP 客户端可能需要集成该库,或者通过某种方式(例如 'npx wasm-mcp config' 命令)获取 WASM MCP 服务的配置信息,然后根据配置信息去连接和使用 WASM MCP 服务。

基本使用方法

  1. 编译 WASM MCP 服务: 使用任何支持 WASM 编译的目标语言(例如 C/C++, Rust, Go 等)编写 MCP 服务器逻辑,并将其编译为 WASM 模块 ('.wasm' 文件)。 仓库的 'examples' 目录下提供了 C 语言的示例代码 ('weather.c'),可以参考其编译方法。
  2. 配置 MCP 客户端: 根据 MCP 客户端的要求,配置 MCP 服务器的连接信息,包括命令、参数和服务器 URL 等。 参考上述 "服务器配置" 部分的示例。
  3. 运行 MCP 客户端: 启动 MCP 客户端应用程序,客户端将根据配置信息连接到 WASM MCP 运行时,并可以使用 WASM 模块提供的工具 (Tools) 和其他 MCP 功能。
  4. 调用 MCP 工具: 在 MCP 客户端中,可以调用 WASM MCP 服务提供的工具 (Tools),例如示例中的 'get_alerts' 和 'get_forecast' 工具。 调用方式通常取决于具体的 MCP 客户端实现,但一般会遵循 MCP 协议的 JSON-RPC 请求格式。 可以参考 'test/weather.test.js' 中的 'callMcp' 函数来理解如何调用 WASM 模块中的 MCP 函数。

示例调用 (参考 'test/weather.test.js'):

假设已经加载了 WASM 模块,可以使用 'callMcp' 函数调用 WASM 模块中的 'get_alerts' 工具:

import { callMcp, wasmLoader } from '../src/wasm.js';
import { readFile } from 'node:fs/promises';

const bytes = await readFile('examples/weather.wasm');
const wasm = await wasmLoader(bytes);

async function testGetAlerts() {
  const result = await callMcp(wasm, 'get_alerts', { state: 'OR' });
  console.log(result); // 输出 JSON 格式的响应结果
}

testGetAlerts();

注意: 以上 JavaScript 代码仅为示例,展示了如何使用 'wasm.js' 库加载 WASM 模块并调用其中的 MCP 函数。 实际的 MCP 客户端可能使用不同的编程语言和框架,但核心原理是类似的:加载 WASM 模块,并使用 MCP 协议与 WASM 模块进行通信。

信息

分类

开发者工具