项目简介

model-context-protocol-rb 是一个用 Ruby 语言编写的 Model Context Protocol (MCP) 服务器 SDK。它旨在帮助开发者快速构建 MCP 兼容的后端服务,以便为大型语言模型(LLM)应用提供上下文信息、工具和 Prompt 管理能力。该 SDK 尚处于实验阶段,但已实现了 MCP 服务器的核心功能。

主要功能点

  • 资源管理 (Resources): 允许注册和管理各种资源,并通过标准化的 URI 进行访问。支持文本和二进制资源,可以方便地向 LLM 提供外部数据。
  • 工具注册与执行 (Tools): 支持注册可被 LLM 调用的工具,扩展 LLM 的能力边界。工具定义输入 Schema,并返回结构化响应。
  • Prompt 模板 (Prompts): 支持定义和管理 Prompt 模板,允许客户端通过名称和参数获取 Prompt 内容,实现可定制的 LLM 交互模式。
  • JSON-RPC 通信: 使用 JSON-RPC 协议与 MCP 客户端进行通信,实现请求-响应模式和通知机制。
  • Stdio 传输: 默认支持 Stdio (标准输入/输出) 作为传输协议,方便本地开发和部署。
  • 可扩展的配置: 提供灵活的配置选项,包括服务器名称、版本、日志开关以及可注册的 Resources、Tools 和 Prompts。

安装步骤

  1. 确保已安装 Ruby 和 Bundler
  2. 将 gem 添加到你的 Gemfile 中:
    gem 'model-context-protocol-rb'
  3. 运行 bundle install 安装依赖:
    bundle install

服务器配置

MCP 客户端需要配置 MCP 服务器的启动命令和参数才能连接。以下是一个基于 'model-context-protocol-rb' 的 MCP 服务器配置示例 (JSON 格式):

{
  "serverName": "MCP Development Server",
  "command": "ruby",
  "args": ["path/to/your/server.rb"]
}

配置参数说明:

  • 'serverName': MCP 服务器的名称,可以自定义,例如 "My MCP Server"。 (对应示例中的 '"MCP Development Server"')
  • 'command': 启动 MCP 服务器的命令,通常是 Ruby 解释器 'ruby'。(对应示例中的 '"ruby"')
  • 'args': 传递给启动命令的参数,指向你的服务器 Ruby 脚本文件路径。(对应示例中的 '["path/to/your/server.rb"]')

server.rb 示例 (基于仓库 README 修改):

你需要创建一个 Ruby 脚本 (例如 'server.rb') 来启动 MCP 服务器。以下是一个简单的示例,你可以根据自己的需求扩展 Resources、Tools 和 Prompts 的实现:

# server.rb
require 'model-context-protocol-rb'

class TestPrompt < ModelContextProtocol::Server::Prompt
  with_metadata do
    {
      name: "Test Prompt",
      description: "A test prompt",
      arguments: [
        {
          name: "message",
          description: "The thing to do",
          required: true
        }
      ]
    }
  end

  def call
    messages = [
      {
        role: "user",
        content: {
          type: "text",
          text: "Do this: #{params["message"]}"
        }
      }
    ]
    Response[messages:, prompt: self]
  end
end

class TestResource < ModelContextProtocol::Server::Resource
  with_metadata do
    {
      name: "Test Resource",
      description: "A test resource",
      mime_type: "text/plain",
      uri: "resource://test-resource"
    }
  end

  def call
    TextResponse[resource: self, text: "Here's the data"]
  end
end

class TestTool < ModelContextProtocol::Server::Tool
  with_metadata do
    {
      name: "test-tool",
      description: "A test tool",
      inputSchema: {
        type: "object",
        properties: {
          message: {
            type: "string"
          }
        },
        required: ["message"]
      }
    }
  end

  def call
    TextResponse[text: "You said: #{params["message"]}"]
  end
end


server = ModelContextProtocol::Server.new do |config|
  config.name = "My MCP Server" # 修改服务器名称
  config.version = "1.0.0"
  config.enable_log = true
  config.registry = ModelContextProtocol::Server::Registry.new do
    prompts list_changed: false do # 根据需要配置 capabilities
      register TestPrompt
    end

    resources list_changed: false, subscribe: false do # 根据需要配置 capabilities
      register TestResource
    end

    tools list_changed: false do # 根据需要配置 capabilities
      register TestTool
    end
  end
end

server.start

请注意: 将 'path/to/your/server.rb' 替换为你的 'server.rb' 脚本的实际路径。

基本使用方法

  1. 启动 MCP 服务器: 在终端中,导航到包含 'server.rb' 文件的目录,并运行命令 'ruby server.rb'。服务器将通过 Stdio 监听 MCP 客户端的请求。

  2. 配置 MCP 客户端: 在你的 MCP 客户端应用中,配置连接到该 MCP 服务器,指定正确的 'command' 和 'args',以及 'serverName'。

  3. 客户端与服务器交互: MCP 客户端将通过 JSON-RPC 协议与服务器进行通信,调用 Resources, Tools 和 Prompts。你可以参考 MCP 协议规范和客户端 SDK 文档来了解如何发送请求和处理响应。

示例交互流程 (概念性):

  • 客户端发送 "initialize" 请求: 客户端启动时,会向服务器发送 "initialize" 请求,获取服务器的 capabilities 和 serverInfo。
  • 客户端获取资源列表: 客户端可以发送 "resources/list" 请求,获取服务器管理的资源列表。
  • 客户端读取资源: 客户端可以通过 "resources/read" 请求和资源 URI 读取资源内容。
  • 客户端获取 Prompt: 客户端可以发送 "prompts/get" 请求,根据 Prompt 名称和参数获取 Prompt 内容。
  • 客户端调用工具: 客户端可以发送 "tools/call" 请求,根据工具名称和参数调用注册的工具。

请查阅 'model-context-protocol-rb' 仓库的更多文档和示例代码,以深入了解其使用方法和高级特性。

信息

分类

开发者工具