Skip to content

kenchan/mcp-rb

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

A lightweight Ruby framework for building MCP servers with a Sinatra-like DSL

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Ruby 98.3%
  • Shell 1.7%