Rust MCP服务器模板

一个基于Rust实现的轻量级Model Context Protocol (MCP)服务器,通过STDIO进行通信,提供简单的问候工具。

  • by matthew-sayer
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 matthew-sayer/rust_mcp_server_example

使用说明

Rust MCP服务器模板(STDIO)

此存储库提供了一个简单的示例 模型上下文协议(MCP) 用Rust实现的服务器。 这与STDIO一起运行。

服务器使用 prism_mcp_rs crate创建一个基本的MCP服务器,使用一个工具根据用户的输入向用户致意。

特性

  • MCP服务器:使用 prism_mcp_rs 机箱。
  • Hello工具:一个简单的工具,它以用户的名字作为输入,并以个性化的问候语作为回应。
  • 异步执行:由 tokio 用于处理异步操作的运行时。
  • 标准运输:服务器使用标准输入/输出(Stdio)进行通信,使其易于与其他工具或脚本集成。

运作原理

  1. 服务器已用名称初始化(HelloToolServer)和版本(1.0.0).
  2. 单个工具, hello,已向服务器注册。此工具:
    • 接受JSON输入 name 现场。
    • 回复问候信息,如 Hello, <name>!.
  3. 服务器使用标准输入/输出(Stdio)作为其通信传输机制。

代码概述

main.rs

这 main.rs 文件包含以下关键组件:

  • 工具处理核心:一个实现 ToolHandler 特质,它定义了 hello 工具。在Rust中,我们创建结构来保存要使用的数据,类似于Python 初始化 在类内,但不实际初始化任何东西,只存储数据。然后,我们使用实现为它们添加行为,就像我们在这里为ToolHandler所做的那样,而不是像Python那样在类中添加函数。我们还在空结构体上方有#[derive(Clone)],允许我们为工具的多个实现克隆它。
  • MCP服务器初始化:服务器已创建 hello 添加了工具及其模式和处理程序。
  • 服务器启动:服务器已使用启动 StdioServerTransport.

添加工具

在主功能中,使用以下工具编写更多工具: server.addtool(工具名、描述、json对象、结构体(工具句柄核心)),并确保等待它,否则它不会拿起工具(此服务器中的函数是异步的)。

示例工具: hello

这 hello 工具定义如下:

  • 输入架构:
    {
        "type": "object",
        "properties": {
            "name": {
                "type": "string",
                "description": "The name of the person to greet."
            }
        }
    }
    
    
    server.add_tool(
        "hello".to_string(), // NAME
        Some("Says hello to the specified user.".to_string()), // DESCRIPTION
        json!({
            "type": "object",
            "properties": {
                "name": {
                    "type": "string",
                    "description": "The name of the person to greet."
                }
            }
        }), // JSON INPUT SCHEMA
        ToolHandlerCore, // CORE STRUCT
    ).await?;

依赖项

Cargo.toml中的所有内容,以及CMake的安装。

如何使用它?

使用cargo Build-release构建它,然后使用cargo run-release。然后,它将在“目标”文件夹中创建一个发布文件夹,您可以将其中的exe作为STDIO服务器使用。

用于VSCode的mcp.json示例

{
  "servers": {
    "RustMCPServer": {
      "type": "stdio",
      "command": "target\\release\\rust_mcp_template.exe",
      "args": ["--mode", "vscode"],
      "env": {
        "VSCODE_WORKSPACE": "${workspaceFolder}"
      }
    }
  }
}