diff --git a/lib/fast_mcp.rb b/lib/fast_mcp.rb index 3c9e93e..d2d9937 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' @@ -152,9 +153,9 @@ 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) + setup_streamable_rails_transport(app, options.merge(name: name, version: version, logger: logger), transport_type, &block) end end @@ -167,7 +168,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 +207,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'] 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