The official Ruby SDK for the Model Context Protocol (MCP), implementing both server and client functionality for JSON-RPC 2.0 based communication between LLM applications and context providers.

Key features:

  • JSON-RPC 2.0 message handling with protocol initialization and capability negotiation
  • Tool, prompt, and resource registration and invocation
  • Stdio and Streamable HTTP (including SSE) transports
  • Client support for communicating with MCP servers
  • Notifications, sampling, progress tracking, and completions

Quick Start

Here is a minimal MCP server using the stdio transport:

require "mcp"

class ExampleTool < MCP::Tool
  description "A simple example tool that echoes back its arguments"
  input_schema(
    properties: {
      message: { type: "string" },
    },
    required: ["message"]
  )

  class << self
    def call(message:, server_context:)
      MCP::Tool::Response.new([{
        type: "text",
        text: "Hello from example tool! Message: #{message}",
      }])
    end
  end
end

server = MCP::Server.new(
  name: "example_server",
  tools: [ExampleTool],
)

transport = MCP::Server::Transports::StdioTransport.new(server)
transport.open

Run the script and send JSON-RPC requests via stdin:

$ ruby server.rb
{"jsonrpc":"2.0","id":"1","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"example","version":"0.1.0"}}}
{"jsonrpc":"2.0","id":"2","method":"tools/list"}
{"jsonrpc":"2.0","id":"3","method":"tools/call","params":{"name":"example_tool","arguments":{"message":"Hello"}}}

For comprehensive documentation, see the full README.

API Documentation

Full API reference is hosted on RubyDoc.info. Select a version to view:

License

This project is transitioning from the MIT License to the Apache License 2.0. See LICENSE for details.