📘

RubyでローカルMCPサーバーをさっと作る

2025/02/24に公開

次の記事のオマージュかつ、最近作っている mcp-rb というgemの宣伝記事です。
ぜひ次の記事をご一読ください。
https://zenn.dev/mizchi/articles/deno-mcp-server

上の記事を読んで、「Rubyでシュッとやりたいよ」と思われた方に朗報です。
この記事では、RubyでMCPサーバーを立てるためのライブラリを紹介します。

mcp-rb とは

mcp-rb は Ruby で MCP サーバーを実装するためのライブラリです。
SinatraやGraphQL RubyのようなDSLを提供し、少ないコードでMCP サーバーを実装できます。

https://github.com/funwarioisii/mcp-rb

どのくらい実用段階かというと、これでCosenseとやり取りするMCP Serverを作成し、Claude Desktopを通じてプロジェクトの壁打ちができるくらいには動いています。

簡単な MCP サーバーを実装する

まずは、mizchi さんの記事と同様に getStringLength という文字列の長さを返すだけの簡単なサーバーを実装してみましょう。mcp-rb を使うと、以下のように書くことができます。

require 'mcp'

name "string-utils"

tool "getStringLength" do
  description "Get the length of a string"
  argument :input, String, required: true, description: "The input string"
  call { |args| args[:input].length.to_s }
end

TypeScriptに比べて非常に短いことがわかります。
このコードでは次のようなことをしています。

  1. name で MCP サーバーの名前を設定
  2. tool ブロックでツールを定義
    • description でツールの説明を設定
    • argument で引数の型や必須かどうかを指定
    • call ブロックで実際の処理を記述

名前がややこしいのですが、rubygems には mcp-rb で登録しているので次のコマンドでインストールしてください。

bundle add mcp-rb
# または
gem install mcp-rb

Roo Code に登録する

Roo Code で使用するには、mizchi さんの記事と同様に RooCode の MCP の設定ファイルを編集します。
私はrbenvを利用しているので次のようになります:

{
  "mcpServers": {
    "local": {
      "command": "/Users/funwarioisii/.rbenv/shims/ruby",
      "args": ["/path/to/string_utils.rb"],
      "env": {},
      "disabled": false,
      "alwaysAllow": []
    }
  }
}

おわりに

せっかくなのでもう少し今回紹介したmcp-rbについて書いておきます。

Railsとも一応連携して動くが…どうするかは手探りというのがこちらです。
https://github.com/funwarioisii/sample-mcp-rails

browser-use みたいなものもPlaywrightを組み合わせて作っていて、期待値には達しないがぼちぼち動くみたいな感じです。

実は公式のPython SDKも面白く、type hintsを読み取って、必要なパラメータを組み立てていたりします。なのでmcp-rbよりも短く書けたりしそうです。すごい。
rbs inlineをうまく使って似たような機能作れないかなぁとか考えています。
https://github.com/modelcontextprotocol/python-sdk

以上余談でした。
TypeScriptやPythonではAI/LLM関連のツールがよく出てきますが、Rubyは比較的少ない印象なので、なにかの参考になれば幸いです。

せっかくなのでもう一回リンク貼っておきます。
Issue, Pull Request, Starお待ちしています。
https://github.com/funwarioisii/mcp-rb

Discussion