RubyでローカルMCPサーバーをさっと作る
次の記事のオマージュかつ、最近作っている mcp-rb というgemの宣伝記事です。
ぜひ次の記事をご一読ください。
上の記事を読んで、「Rubyでシュッとやりたいよ」と思われた方に朗報です。
この記事では、RubyでMCPサーバーを立てるためのライブラリを紹介します。
mcp-rb とは
mcp-rb は Ruby で MCP サーバーを実装するためのライブラリです。
SinatraやGraphQL RubyのようなDSLを提供し、少ないコードでMCP サーバーを実装できます。
どのくらい実用段階かというと、これで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に比べて非常に短いことがわかります。
このコードでは次のようなことをしています。
- 
nameで MCP サーバーの名前を設定
- 
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とも一応連携して動くが…どうするかは手探りというのがこちらです。
browser-use みたいなものもPlaywrightを組み合わせて作っていて、期待値には達しないがぼちぼち動くみたいな感じです。
実は公式のPython SDKも面白く、type hintsを読み取って、必要なパラメータを組み立てていたりします。なのでmcp-rbよりも短く書けたりしそうです。すごい。
rbs inlineをうまく使って似たような機能作れないかなぁとか考えています。
以上余談でした。
TypeScriptやPythonではAI/LLM関連のツールがよく出てきますが、Rubyは比較的少ない印象なので、なにかの参考になれば幸いです。
せっかくなのでもう一回リンク貼っておきます。
Issue, Pull Request, Starお待ちしています。



Discussion