项目简介
MCP Ruby SDK 是一个 Ruby Gem,旨在帮助开发者轻松构建符合 Model Context Protocol (MCP) 规范的应用后端服务器。它提供了一套 Ruby 类和方法,用于定义和管理 MCP 服务器的核心组件,如工具、Prompt 模板和数据资源。
主要功能点
- JSON-RPC 协议处理: 自动解析和处理 MCP 标准的 JSON-RPC 请求,生成符合规范的响应。
- 能力声明: 服务器可以声明其支持的功能(工具、Prompt、资源等),告知客户端其服务能力。
- 工具注册与调用: 方便地定义和注册可供 LLM 调用的外部工具,处理工具执行请求。
- Prompt 模板定义与渲染: 创建可重用的 Prompt 模板,支持动态传入参数生成最终 Prompt 内容。
- 数据资源管理: 注册和提供数据资源,允许客户端按 URI 读取信息。
- 传输协议支持: 内置对 Stdio 等传输协议的支持,并提供集成到 Web 框架(如 Rails)的处理方法。
- 可配置性: 允许配置异常报告和内部调用度量回调。
安装步骤
将此行添加到您的应用程序的 Gemfile 中:
gem 'mcp'
然后执行:
$ bundle install
或者通过命令行直接安装:
$ gem install mcp
服务器配置(面向 MCP 客户端)
构建 MCP 服务器后,MCP 客户端连接时需要知晓服务器的标识和启动方式。使用本库构建的 MCP 服务器通常需要以下配置信息:
- 服务器名称 (server name): 字符串类型,用于唯一标识 MCP 服务器实例(在实例化 'MCP::Server' 时指定,如 'name: "my_server"')。
- 服务器版本 (server version): 字符串类型,表示服务器应用的版本(在实例化 'MCP::Server' 时指定,如 'version: "1.0.0"')。
- 启动命令 (command) 及参数 (args): 数组类型,指定如何启动 MCP 服务器进程。例如,对于基于 Stdio 传输的 Ruby 脚本服务器,这可能是 '["/usr/bin/env", "ruby", "/path/to/your_server_script.rb"]'。对于基于 HTTP 传输的服务器,客户端则需要配置 URL。
- 传输配置 (transport): JSON 对象,指定客户端应使用哪种传输协议与服务器通信(如 '{"type": "stdio"}' 或 HTTP URL 等)。
请注意,具体的 'command'、'args' 和 'transport' 配置取决于您如何使用本库构建和部署您的 MCP 服务器应用程序。
基本使用方法(面向 Ruby 开发者)
-
定义工具、Prompt 或资源: 使用 'MCP::Tool', 'MCP::Prompt', 'MCP::Resource', 'MCP::ResourceTemplate' 类或 '.define' 方法创建您的业务逻辑组件。
# 定义一个工具 class MyTool < MCP::Tool description "A simple tool" input_schema({ properties: { input: { type: "string" } } }) def self.call(input:) MCP::Tool::Response.new([{ type: "text", text: "Processed: #{input}" }]) end end # 定义一个 Prompt class MyPrompt < MCP::Prompt description "A simple prompt" arguments [MCP::Prompt::Argument.new(name: "user_name", required: true)] def self.template(args, server_context:) MCP::Prompt::Result.new(messages: [ MCP::Prompt::Message.new(role: "user", content: MCP::Content::Text.new("Hello, #{args[:user_name]}!")) ]) end end # 定义一个资源 my_resource = MCP::Resource.new( uri: "app:my_data", name: "My Data", description: "Some important data", mime_type: "text/plain", text: "This is the data content." # 嵌入内容,或使用 handler 动态提供 ) -
实例化 MCP::Server: 将您定义的组件传递给 'MCP::Server' 构造函数。
server = MCP::Server.new( name: "my_ruby_server", version: "1.0.0", tools: [MyTool], prompts: [MyPrompt], resources: [my_resource], server_context: { # 传递上下文信息给工具/Prompt user_id: current_user.id } ) # 或者使用 handlers 动态处理资源读写等 server.resources_read_handler do |params| # 根据 params[:uri] 查找或生成资源内容 [{ uri: params[:uri], mimeType: "text/plain", text: "Dynamic content for #{params[:uri]}" }] end -
集成传输层: 将服务器实例与一个传输层关联,开始处理请求。
-
Stdio 传输:
require "mcp/transports/stdio" transport = MCP::Transports::StdioTransport.new(server) transport.open # 启动监听 stdin -
Web 框架 (如 Rails): 在控制器中处理 POST 请求。
class McpController < ApplicationController def handle_request server = MCP::Server.new( # 实例化或获取服务器实例 name: "my_rails_mcp", # ... 其他配置 ) # 假设请求体是 JSON-RPC 请求 response = server.handle_json(request.body.read) render json: response, status: (response[:error] ? :internal_server_error : :ok) end end
-
通过以上步骤,您就可以使用 MCP Ruby SDK 构建一个功能齐全的 MCP 服务器。
信息
分类
开发者工具