R

mcp-rb

...
Created 2/12/2025byfunwarioisii

Categories

mcp-servermodelcontextprotocol

Language:

Ruby

Stars:

20

Forks:

2

MCP-RB

A lightweight Ruby framework for implementing MCP (Model Context Protocol) servers with a Sinatra-like DSL.

Installation

Add this line to your application's Gemfile:

gem 'mcp-rb'

Usage

Here's a simple example of how to create an MCP server:

require 'mcp'

name "hello-world"

version "1.0.0"

# Define a resource
resource "hello://world" do
  name "Hello World"
  description "A simple hello world message"
  call { "Hello, World!" }
end

# Define a resource template
resource_template "hello://{user_name}" do
  name "Hello User"
  description "A simple hello user message"
  call { |args| "Hello, #{args[:user_name]}!" }
end

# Define a tool
tool "greet" do
  description "Greet someone by name"
  argument :name, String, required: true, description: "Name to greet"
  call do |args|
    "Hello, #{args[:name]}!"
  end
end

# Define a tool with nested arguments
tool "greet_full_name" do
  description "Greet someone by their full name"
  argument :person, required: true, description: "Person to greet" do
    argument :first_name, String, required: false, description: "First name"
    argument :last_name, String, required: false, description: "Last name"
  end
  call do |args|
    "Hello, First: #{args[:person][:first_name]} Last: #{args[:person][:last_name]}!"
  end
end

# Define a tool with an Array argument
tool "group_greeting" do
  description "Greet multiple people at once"
  argument :people, Array, required: true, items: String, description: "People to greet"
  call do |args|
    args[:people].map { |person| "Hello, #{person}!" }.join(", ")
  end
end

Supported specifications

Reference: MCP 2024-11-05

  • Base Protocol
    • ping
    • stdio transport
  • Server features
    • Resources
      • resources/read

                  - resources/list
        
      • resources/templates/list

    • Tools
      • tools/list
      • tools/call

Any capabilities are not supported yet.

Testing

ruby -Ilib:test -e "Dir.glob('./test/**/*_test.rb').each { |f| require f }"

Test with MCP Inspector

bunx @modelcontextprotocol/inspector $(pwd)/examples/hello_world.rb

Find broken using hello_world.rb

./test/test_requests.sh

Formatting

bundle exec standardrb --fix

Release

To release a new version:

  1. Update version in lib/mcp/version.rb
  2. Update CHANGELOG.md
  3. Create a git tag
git add .
git commit -m "Release vx.y.z"
git tag vx.y.z
git push --tags
  1. Build and push to RubyGems
gem build mcp-rb.gemspec
gem push mcp-rb-*.gem

Changelog

See CHANGELOG.md

Last updated: 3/8/2025

Publisher info

funwarioisii's avatar

Kazuyuki Hashimoto

mainly using Ruby and TypeScript

12
followers
19
following
82
repos

More MCP servers built with Ruby

mcp_rails_template

A minimal Rails API template for creating MCP (Model Context Protocol) servers with robust tool execution capabilities.

By seuros9