Version 1.0.0 of the official Ruby SDK for the Model Context Protocol is now available. This is the first stable release of the mcp gem: the public API is now stable, and breaking changes ship only in major releases, following the Semantic Versioning policy documented in VERSIONING.md.

Alongside the release, the Ruby SDK now meets every Tier 2 requirement of the SDK tiering system, as recorded in the Tier 2 assessment, and development toward Tier 1 is ongoing.

What is in 1.0

The 1.0 release implements the 2025-06-18 and 2025-11-25 specification revisions and passes 100% of the server and client conformance scenarios. It includes:

  • MCP servers with tools, prompts, resources (including templates and subscriptions), completions, logging, pagination, progress, and cancellation, plus server-to-client requests for sampling, elicitation (form and URL mode), and roots
  • An MCP client with a complete OAuth flow, including dynamic client registration, PKCE, and scope handling
  • stdio and Streamable HTTP transports; the HTTP transport is a standard Rack app, so it can be mounted directly in Rails routes or any Rack-compatible framework

From Tier 3 to Tier 2

The Ruby SDK was assessed at Tier 3 in March 2026. Since then:

  • Server conformance moved from 83.3% to 100%, with no baselined failures
  • A conformance client was implemented and passes 100% of client scenarios
  • Sampling, elicitation, and progress notifications were implemented on both the server and client sides
  • ROADMAP.md and VERSIONING.md were published

Work is also under way to support the upcoming 2026-07-28 specification release.

Get started

Install the gem:

$ gem install mcp

A minimal stdio server looks like this:

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],
)

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

See the Ruby SDK documentation for guides on building servers and clients, including Rails integration.

Give us your feedback

If you run into problems or unexpected behavior while using the SDK, please report them on the issue tracker. Reports from real-world usage are especially valuable.

The Ruby SDK began at Shopify and is maintained by Topher Bullock, Koichi Ito, Ateş Göral, and Jonathan Hefner together with the wider Ruby community. Thank you to everyone for the feedback and contributions on the road to 1.0.