使用说明

项目简介

Viam MCP SDK 是一个使用 Rust 编写的软件开发工具包(SDK),旨在帮助开发者快速构建符合 Model Context Protocol (MCP) 规范的服务器组件。该 SDK 提供了一系列工具和抽象,用于处理 JSON-RPC 通信、注册和调用工具,以及管理服务器状态,从而简化 MCP 服务器的开发过程。开发者可以利用此 SDK 创建能够为大型语言模型(LLM)应用提供上下文信息和功能扩展的后端服务。

主要功能点

  • 简化 MCP 服务器开发: 提供 Rust 库和宏,降低 MCP 服务器组件的开发复杂度。
  • JSON-RPC 2.0 支持: 处理 MCP 客户端与服务器之间的标准 JSON-RPC 通信。
  • 工具 (Tools) 注册与调用: 允许开发者注册自定义工具,并通过标准 MCP 协议被 LLM 客户端调用执行,扩展 LLM 的能力。
  • 可扩展性: 通过模块化设计和自定义 Handler,支持功能的灵活扩展和定制。
  • 基于 WASM: 支持构建 WASM 组件,便于部署和跨平台运行。
  • 提供示例: 包含详细的示例代码,展示如何使用 SDK 构建 MCP 服务器组件和自定义工具。

安装步骤

  1. 确保已安装 Rust 和 Cargo: 如果尚未安装 Rust 开发环境,请访问 Rust 官网 按照指引进行安装。
  2. 创建 Rust 项目: 使用 Cargo 创建一个新的 Rust 项目。在终端中执行:
    cargo new my-mcp-server
    cd my-mcp-server
  3. 添加 Viam MCP SDK 依赖: 打开 'Cargo.toml' 文件,在 '[dependencies]' 部分添加 'viam-mcp-sdk' 依赖:
    [dependencies]
    viam-mcp-sdk = "0.1.0"
    serde = { version = "1.0", features = ["derive"] }
    serde_json = "1.0"
    chrono = "0.4"
    或者使用 Cargo 命令直接添加依赖:
    cargo add viam-mcp-sdk serde serde_json chrono
  4. 配置 'wit' 文件路径: 如果需要使用仓库中的 'wit' 文件,请确保 'wit_bindgen' 宏的 'path' 指向正确的 'wit' 文件夹。通常情况下,如果直接使用 'viam-mcp-sdk' crate,可以不需要手动配置 'wit' 文件路径。

服务器配置

MCP 客户端需要配置 MCP 服务器的启动命令和参数才能建立连接。以下是基于 'examples/mcp-server-component' 示例生成的配置信息,用于指导 MCP 客户端如何启动和连接到使用 Viam MCP SDK 构建的服务器组件。

{
  "serverName": "my-mcp-server",
  "command": "cargo",
  "args": [
    "run",
    "--example",
    "mcp-server-component"
  ],
  "description": "启动基于 Viam MCP SDK 构建的 MCP 服务器组件。该命令首先使用 'cargo run' 运行 'mcp-server-component' 示例,该示例演示了如何使用 SDK 注册和调用工具,并通过标准输入/输出 (stdio) 进行 JSON-RPC 通信,从而实现 MCP 服务器的功能。"
}

参数注释:

  • 'serverName': 服务器的名称,可以自定义。
  • 'command': 启动服务器的命令,这里使用 'cargo',因为示例项目是一个 Rust 项目,需要使用 Cargo 运行。
  • 'args': 传递给 'command' 的参数列表。
    • '"run"': Cargo 命令,用于运行项目。
    • '"--example"': Cargo 参数,指定运行示例。
    • '"mcp-server-component"': 示例名称,对应 'examples/mcp-server-component' 示例。
  • 'description': 对服务器配置的描述,帮助用户理解该配置的作用。

注意: 实际部署时,可能需要将服务器组件编译为 WASM 或其他可执行格式,并相应地修改 'command' 和 'args' 配置。上述配置适用于在开发环境中使用 'cargo run' 运行示例的情况。

基本使用方法

  1. 创建自定义工具: 在 'src' 目录下创建 'handlers' 文件夹,并在其中创建 Rust 文件 (例如 'src/handlers/my_tool.rs'),实现 'ToolHandler' trait 来定义自定义工具。参考 'examples/mcp-server-component/src/handlers' 目录下的示例工具代码。
  2. 注册工具: 在 'src/lib.rs' 文件中,使用 'mcp_server_component!' 宏注册自定义工具。例如:
    use viam_mcp_sdk::mcp_server_component;
    use crate::handlers::my_tool::MyTool; // 假设你创建了 MyTool
    
    mod handlers; // 引入 handlers 模块
    
    mcp_server_component! {
        tools: [
            MyTool // 注册 MyTool
        ]
    }
  3. 运行服务器: 在项目根目录下,使用 'cargo run --example mcp-server-component' 命令运行示例服务器组件。服务器将通过标准输入 (stdin) 接收 JSON-RPC 请求,并通过标准输出 (stdout) 返回响应。
  4. 与 MCP 客户端交互: 使用 MCP 客户端(例如基于 MCP 协议的 LLM 应用或客户端 SDK)连接到运行中的服务器。客户端可以通过 JSON-RPC 消息调用服务器提供的工具。例如,发送 'tools/list' 方法请求获取工具列表,或发送 'tools/call' 方法请求调用特定工具。

示例工具代码 ( 'src/handlers/my_tool.rs' ):

use viam_mcp_sdk::tool::ToolHandler;
use viam_mcp_sdk::command::JsonRpcError;
use serde_json::{Value, json};

pub struct MyTool;

impl Default for MyTool {
    fn default() -> Self {
        Self
    }
}

impl ToolHandler for MyTool {
    fn handle(&self, _params: &Value) -> Result<Value, JsonRpcError> {
        // 工具的具体逻辑
        Ok(json!({ "message": "Hello from MyTool!" }))
    }

    fn name(&self) -> &'static str {
        "my_tool"
    }

    fn description(&self) -> &'static str {
        "一个简单的自定义工具示例"
    }

    fn input_schema(&self) -> Value {
        json!({
            "type": "object",
            "properties": {}
        })
    }
}

确保在 'src/handlers/mod.rs' 中导出你的工具:

pub mod my_tool;
pub use my_tool::MyTool;

通过以上步骤,你可以使用 Viam MCP SDK 快速搭建和扩展 MCP 服务器组件,为 LLM 应用提供强大的后端支持。

信息

分类

开发者工具