Class: Msf::MCP::Security::RateLimiter

Inherits:
Object
  • Object
show all
Defined in:
lib/msf/core/mcp/security/rate_limiter.rb

Instance Method Summary collapse

Constructor Details

#initialize(requests_per_minute: 60, burst_size: nil) ⇒ RateLimiter

Initialize rate limiter with token bucket algorithm

Parameters:

  • requests_per_minute (Integer) (defaults to: 60)

    Maximum requests per minute

  • burst_size (Integer) (defaults to: nil)

    Maximum burst size (default: same as requests_per_minute)



12
13
14
15
16
17
18
# File 'lib/msf/core/mcp/security/rate_limiter.rb', line 12

def initialize(requests_per_minute: 60, burst_size: nil)
  @requests_per_minute = requests_per_minute
  @burst_size = burst_size || requests_per_minute
  @tokens = @burst_size.to_f
  @last_refill = Time.now
  @mutex = Mutex.new
end

Instance Method Details

#check_rate_limit!(tool_name = nil) ⇒ Integer

Check if request is allowed, consume token if yes

Parameters:

  • tool_name (String, nil) (defaults to: nil)

    Tool name (for logging/tracking)

Returns:

  • (Integer)

    Number of tokens,if request allowed

Raises:



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/msf/core/mcp/security/rate_limiter.rb', line 25

def check_rate_limit!(tool_name = nil)
  @mutex.synchronize do
    refill!

    if @tokens >= 1.0
      @tokens -= 1.0
    else
      # Calculate retry_after in seconds
      tokens_per_second = @requests_per_minute / 60.0
      retry_after = ((1.0 - @tokens) / tokens_per_second).ceil

      raise RateLimitExceededError.new(retry_after)
    end
  end
end