ratelimit

package
v0.18.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 10, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

Package ratelimit provides token-bucket rate limiting for MCP servers.

The public API consists of the Limiter interface, Decision result type, and NewLimiter constructor. The token bucket implementation is internal.

Index

Constants

View Source
const (
	// MiddlewareType is the type constant for the rate limit middleware.
	MiddlewareType = "ratelimit"

	// CodeRateLimited is the JSON-RPC error code for rate-limited requests.
	// Per RFC THV-0057: implementation-defined code in the -32000 to -32099 range.
	CodeRateLimited int64 = -32029

	// MessageRateLimited is the JSON-RPC error message for rate-limited requests.
	MessageRateLimited = "Rate limit exceeded"
)

Variables

This section is empty.

Functions

func CreateMiddleware added in v0.17.0

func CreateMiddleware(config *types.MiddlewareConfig, runner types.MiddlewareRunner) error

CreateMiddleware is the factory function for rate limit middleware.

Types

type Decision

type Decision struct {
	// Allowed is true when the request may proceed.
	Allowed bool

	// RetryAfter is populated when Allowed is false.
	// It indicates the minimum wait before the next request may succeed.
	RetryAfter time.Duration
}

Decision holds the result of a rate limit check.

type Limiter

type Limiter interface {
	// Allow checks whether a request is permitted.
	// toolName is the MCP tool being called (empty for non-tool requests).
	// userID is the authenticated user (empty for unauthenticated requests).
	Allow(ctx context.Context, toolName, userID string) (*Decision, error)
}

Limiter checks rate limits for an MCP server.

func NewLimiter

func NewLimiter(client redis.Cmdable, namespace, name string, crd *v1alpha1.RateLimitConfig) (Limiter, error)

NewLimiter constructs a Limiter from CRD configuration. Returns a no-op limiter (always allows) when crd is nil. namespace and name identify the MCP server for Redis key derivation.

type MiddlewareParams added in v0.17.0

type MiddlewareParams struct {
	Namespace  string                    `json:"namespace"`
	ServerName string                    `json:"server_name"`
	Config     *v1alpha1.RateLimitConfig `json:"config"`
	RedisAddr  string                    `json:"redis_addr,omitempty"`
	RedisDB    int32                     `json:"redis_db,omitempty"`
}

MiddlewareParams holds the parameters for the rate limit middleware factory.

Directories

Path Synopsis
internal
bucket
Package bucket implements the token bucket algorithm backed by Redis.
Package bucket implements the token bucket algorithm backed by Redis.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL