项目简介

'wasmcp' 是一个用于开发和组合Model Context Protocol (MCP) 服务器的WebAssembly组件开发套件。它允许开发者使用Rust、Python、TypeScript等多种语言编写MCP工具、资源或提示处理器,然后将这些功能组件与预构建的传输层(如HTTP或Stdio)和核心中间件组合成一个独立的、高效的WebAssembly MCP服务器。该服务器以可组合、沙盒化、轻量级的方式为LLM应用提供上下文服务。

主要功能点

  • 多语言支持: 允许开发者使用Rust、Python、TypeScript等流行语言编写自定义的MCP功能组件。
  • 组件化架构: MCP服务器被设计为一系列可插拔的WebAssembly组件,通过责任链模式(middleware chain)进行组合,每个组件处理特定的MCP方法并委托其他请求。
  • 多种传输协议: 内置HTTP/SSE和Stdio传输层,方便与各种MCP客户端进行通信。
  • 工具管理: 能够托管和执行LLM可调用的外部工具,支持工具列表查询和调用。
  • 资源管理: 支持托管和管理上下文资源,提供数据访问能力。
  • Prompt模板: 支持定义和渲染可定制的Prompt模板,用于生成LLM交互内容。
  • 能力声明: 服务器能够向客户端声明其支持的功能(如工具、资源、提示、补全等)。
  • 轻量高效: WebAssembly组件的特性使得生成的服务器体积小巧,启动快速,运行隔离。

安装步骤

  1. 安装 Rust (Cargo): 如果尚未安装,请通过 'rustup' 安装Rust编程语言及其包管理器Cargo。
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  2. 安装 'wasmcp' CLI: 使用Cargo安装 'wasmcp' 命令行工具。
    cargo install --git https://github.com/wasmcp/wasmcp
  3. 安装 Wasmtime 运行时: 'wasmcp' 生成的WebAssembly组件需要Wasmtime运行时来执行。
    # 请根据您的操作系统访问 https://wasmtime.dev/ 下载或使用其官方指南安装
    # 例如 (Linux/macOS):
    curl https://wasmtime.dev/install.sh -sSf | bash
    确保 'wasmtime' 命令在您的PATH中可用。

服务器配置

MCP客户端与MCP服务器通过JSON-RPC通信。客户端需要知道如何启动MCP服务器及其参数。MCP服务器可以作为命令行程序(Stdio传输)或HTTP服务(HTTP传输)运行。

以下是两种常见传输模式下,MCP客户端可能需要配置的服务器启动命令的描述(JSON配置示例仅用于说明结构,不应直接复制)。

  • Stdio 传输模式 (命令行应用程序) 当MCP服务器配置为Stdio传输时,它将作为一个标准的命令行程序运行,通过其标准输入/输出与MCP客户端通信。

    • 配置信息
      • 'server_name': 用于客户端界面显示的服务名称,例如 "My MCP Stdio Server"。
      • 'command': 启动MCP服务器所需的可执行文件,通常是 'wasmtime'。
      • 'args': 传递给 'command' 的参数列表。例如,'["run", "/path/to/your/stdio-server.wasm"]',其中 'run' 是 'wasmtime' 的子命令,'/path/to/your/stdio-server.wasm' 是您使用 'wasmcp compose -t stdio' 命令生成的WebAssembly MCP服务器组件的完整路径。
  • HTTP 传输模式 (Web服务) 当MCP服务器配置为HTTP传输时,它将监听一个HTTP端口,并通过HTTP POST请求接收JSON-RPC调用,通过Server-Sent Events (SSE) 发送响应和通知。

    • 配置信息
      • 'server_name': 用于客户端界面显示的服务名称,例如 "My MCP HTTP Server"。
      • 'command': 启动MCP服务器所需的可执行文件,通常是 'wasmtime'。
      • 'args': 传递给 'command' 的参数列表。例如,'["serve", "-Scli", "/path/to/your/http-server.wasm"]',其中 'serve' 是 'wasmtime' 的子命令,'-Scli' 启用WASI CLI接口,'/path/to/your/http-server.wasm' 是您使用 'wasmcp compose -t http' 命令生成的WebAssembly MCP服务器组件的完整路径。
      • 'env' (可选): 环境变量,例如 '{"PORT": "8080"}' 用于指定服务器监听的端口。
      • 'url': MCP客户端连接到服务器的URL,例如 '"http://127.0.0.1:8080/"'。默认情况下,'wasmtime serve' 监听 'http://0.0.0.0:8080/'。

基本使用方法

  1. 创建新的MCP功能组件 (例如,一个Python工具):
    wasmcp new my-tools --language python
    cd my-tools
    # 在 app.py 文件中,您可以添加或修改您的MCP工具逻辑,例如实现一个字符串反转工具。
  2. 构建您的组件:
    make # 这个命令会根据您在 'new' 步骤中选择的语言,构建出一个WebAssembly组件文件,例如 'my-tools.wasm'。
  3. 组合成一个完整的MCP服务器: 假设您想创建一个HTTP服务器,并包含您刚刚制作的 'my-tools.wasm' 组件。
    wasmcp compose my-tools.wasm -t http -o http-server.wasm
    您也可以组合多个功能组件。这些组件将自动形成一个中间件链,其提供的工具、资源和提示将自动合并并暴露给客户端。
    # 假设您还有一个 Rust 编写的 calculator-tools.wasm
    wasmcp compose my-tools.wasm ../calculator-tools.wasm -t stdio -o stdio-server.wasm
  4. 运行MCP服务器:
    • 作为HTTP服务器运行:
      wasmtime serve -Scli http-server.wasm # 服务器默认监听 http://0.0.0.0:8080/
    • 作为Stdio服务器运行:
      wasmtime run stdio-server.wasm
    现在,您的MCP服务器已准备好接收来自MCP客户端的JSON-RPC请求。

信息

分类

开发者工具