From 7675e934d35e120c5486d363955fc647fb07e385 Mon Sep 17 00:00:00 2001 From: daviddcheng Date: Tue, 8 Jul 2025 13:50:33 -0400 Subject: [PATCH 1/6] fix: update protocol version to match 2025-06-18 specification --- lib/mcp/transports/streamable_http.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mcp/transports/streamable_http.rb b/lib/mcp/transports/streamable_http.rb index 878b7d3..b9d8ce9 100644 --- a/lib/mcp/transports/streamable_http.rb +++ b/lib/mcp/transports/streamable_http.rb @@ -17,7 +17,7 @@ class StreamableHttpTransport < BaseTransport # rubocop:disable Metrics/ClassLen SERVER_ENV_KEY = 'fast_mcp.server' # StreamableHTTP implements MCP 2025-06-18 specification - PROTOCOL_VERSION = '2025-03-28' + PROTOCOL_VERSION = '2025-06-18' # Required headers for MCP 2025-06-18 REQUIRED_ACCEPT_HEADERS = ['application/json', 'text/event-stream'].freeze From 32b114404fd39a187a90675e287a92fb629e276a Mon Sep 17 00:00:00 2001 From: daviddcheng Date: Tue, 8 Jul 2025 16:49:15 -0400 Subject: [PATCH 2/6] fixed block bug --- lib/fast_mcp.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fast_mcp.rb b/lib/fast_mcp.rb index 3c9e93e..592ce4c 100644 --- a/lib/fast_mcp.rb +++ b/lib/fast_mcp.rb @@ -154,7 +154,7 @@ def self.mount_in_rails(app, options = {}) if transport_type == :legacy setup_legacy_rails_transport(app, options.merge(name: name, version: version, logger: logger)) else - setup_streamable_rails_transport(app, options.merge(name: name, version: version, logger: logger), transport_type) + setup_streamable_rails_transport(app, options.merge(name: name, version: version, logger: logger), transport_type, &block) end end From 33e521b278b983eec3a4a16b1cc9646b63c2542d Mon Sep 17 00:00:00 2001 From: daviddcheng Date: Tue, 8 Jul 2025 16:55:49 -0400 Subject: [PATCH 3/6] block parameter --- lib/fast_mcp.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/fast_mcp.rb b/lib/fast_mcp.rb index 592ce4c..270651a 100644 --- a/lib/fast_mcp.rb +++ b/lib/fast_mcp.rb @@ -152,7 +152,7 @@ def self.mount_in_rails(app, options = {}) # Handle transport-specific options if transport_type == :legacy - setup_legacy_rails_transport(app, options.merge(name: name, version: version, logger: logger)) + setup_legacy_rails_transport(app, options.merge(name: name, version: version, logger: logger), &block) else setup_streamable_rails_transport(app, options.merge(name: name, version: version, logger: logger), transport_type, &block) end @@ -167,7 +167,7 @@ def self.detect_transport_type(options) :streamable_http # Default to modern transport end - def self.setup_legacy_rails_transport(app, options) + def self.setup_legacy_rails_transport(app, options, &block) # Legacy transport setup with deprecation warning warn_rails_legacy_usage @@ -206,7 +206,7 @@ def self.setup_legacy_rails_transport(app, options) ) end - def self.setup_streamable_rails_transport(app, options, transport_type) + def self.setup_streamable_rails_transport(app, options, transport_type, &block) path = options.delete(:path) || '/mcp' allowed_origins = options[:allowed_origins] || default_rails_allowed_origins(app) allowed_ips = options[:allowed_ips] || ['127.0.0.1', '::1', '::ffff:127.0.0.1'] From 0c9d8d493d5455406c695f4bbce13cafd29b3d2f Mon Sep 17 00:00:00 2001 From: daviddcheng Date: Tue, 8 Jul 2025 17:12:34 -0400 Subject: [PATCH 4/6] fixed all bugs --- lib/fast_mcp.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/fast_mcp.rb b/lib/fast_mcp.rb index 270651a..922d041 100644 --- a/lib/fast_mcp.rb +++ b/lib/fast_mcp.rb @@ -178,7 +178,7 @@ def self.setup_legacy_rails_transport(app, options, &block) allowed_origins = options[:allowed_origins] || default_rails_allowed_origins(app) allowed_ips = options[:allowed_ips] || FastMcp::Transports::RackTransport::DEFAULT_ALLOWED_IPS - options[:localhost_only] = Rails.env.local? if options[:localhost_only].nil? + options[:localhost_only] = Rails.env.development? || Rails.env.test? if options[:localhost_only].nil? options[:allowed_ips] = allowed_ips options[:allowed_origins] = allowed_origins @@ -211,7 +211,7 @@ def self.setup_streamable_rails_transport(app, options, transport_type, &block) allowed_origins = options[:allowed_origins] || default_rails_allowed_origins(app) allowed_ips = options[:allowed_ips] || ['127.0.0.1', '::1', '::ffff:127.0.0.1'] - options[:localhost_only] = Rails.env.local? if options[:localhost_only].nil? + options[:localhost_only] = Rails.env.development? || Rails.env.test? if options[:localhost_only].nil? options[:allowed_ips] = allowed_ips options[:allowed_origins] = allowed_origins options[:require_https] = Rails.env.production? if options[:require_https].nil? From 8c36c5515058b1ede00f1d482667baa6a664271b Mon Sep 17 00:00:00 2001 From: daviddcheng Date: Tue, 8 Jul 2025 17:19:02 -0400 Subject: [PATCH 5/6] add &block for other functions --- lib/fast_mcp.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/fast_mcp.rb b/lib/fast_mcp.rb index 922d041..b5a32ee 100644 --- a/lib/fast_mcp.rb +++ b/lib/fast_mcp.rb @@ -51,7 +51,7 @@ module FastMcp # @yield [server] A block to configure the server # @yieldparam server [FastMcp::Server] The server to configure # @return [#call] The Rack middleware - def self.rack_middleware(app, options = {}) + def self.rack_middleware(app, options = {}, &block) name = options.delete(:name) || 'mcp-server' version = options.delete(:version) || '1.0.0' logger = options.delete(:logger) || Logger.new @@ -78,7 +78,7 @@ def self.rack_middleware(app, options = {}) # @yield [server] A block to configure the server # @yieldparam server [FastMcp::Server] The server to configure # @return [#call] The Rack middleware - def self.authenticated_rack_middleware(app, options = {}) + def self.authenticated_rack_middleware(app, options = {}, &block) name = options.delete(:name) || 'mcp-server' version = options.delete(:version) || '1.0.0' logger = options.delete(:logger) || Logger.new @@ -143,7 +143,8 @@ def self.register_resources(*resources) # @yield [server] A block to configure the server # @yieldparam server [FastMcp::Server] The server to configure # @return [#call] The Rack middleware - def self.mount_in_rails(app, options = {}) + def self.mount_in_rails(app, options = {}, &block) + # Default options name = options.delete(:name) || app.class.module_parent_name.underscore.dasherize version = options.delete(:version) || '1.0.0' From 1ac49d4f3462e9312e2762b421d93688163bdf42 Mon Sep 17 00:00:00 2001 From: daviddcheng Date: Fri, 11 Jul 2025 15:12:17 -0400 Subject: [PATCH 6/6] localhost option --- lib/fast_mcp.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/fast_mcp.rb b/lib/fast_mcp.rb index b5a32ee..d2d9937 100644 --- a/lib/fast_mcp.rb +++ b/lib/fast_mcp.rb @@ -179,7 +179,7 @@ def self.setup_legacy_rails_transport(app, options, &block) allowed_origins = options[:allowed_origins] || default_rails_allowed_origins(app) allowed_ips = options[:allowed_ips] || FastMcp::Transports::RackTransport::DEFAULT_ALLOWED_IPS - options[:localhost_only] = Rails.env.development? || Rails.env.test? if options[:localhost_only].nil? + options[:localhost_only] = Rails.env.local? if options[:localhost_only].nil? options[:allowed_ips] = allowed_ips options[:allowed_origins] = allowed_origins @@ -212,7 +212,7 @@ def self.setup_streamable_rails_transport(app, options, transport_type, &block) allowed_origins = options[:allowed_origins] || default_rails_allowed_origins(app) allowed_ips = options[:allowed_ips] || ['127.0.0.1', '::1', '::ffff:127.0.0.1'] - options[:localhost_only] = Rails.env.development? || Rails.env.test? if options[:localhost_only].nil? + options[:localhost_only] = Rails.env.local? if options[:localhost_only].nil? options[:allowed_ips] = allowed_ips options[:allowed_origins] = allowed_origins options[:require_https] = Rails.env.production? if options[:require_https].nil?