Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions lib/fast_mcp.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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'
Expand All @@ -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

Expand All @@ -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

Expand Down Expand Up @@ -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']
Expand Down
2 changes: 1 addition & 1 deletion lib/mcp/transports/streamable_http.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down