hyperserve

package module
v0.9.8 Latest Latest
Warning

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

Go to latest
Published: Jul 12, 2025 License: MIT Imports: 25 Imported by: 0

README

HyperServe

A lightweight, high-performance HTTP server framework for Go with zero external dependencies (except golang.org/x/time/rate for rate limiting).

Go Version License

Quick Start

package main

import (
    "fmt"
    "net/http"
    "github.com/osauer/hyperserve"
)

func main() {
    // Create server with automatic defaults
    srv, _ := hyperserve.NewServer()
    
    // Add a route
    srv.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintln(w, "Hello, World!")
    })
    
    // Run (includes graceful shutdown, health checks, and more)
    srv.Run()
}

Building

HyperServe uses dynamic version detection at build time:

# Build with automatic version detection from git tags
make build

# Install globally with version
make install

# Manual build with specific version
go build -ldflags "-X github.com/osauer/hyperserve.Version=v1.0.0" .

Features

Zero Configuration Features

These features work automatically when you create a server:

Feature Description Details
Graceful Shutdown Clean shutdown on SIGINT/SIGTERM Built into srv.Run()
Request Logging Structured request logs Via DefaultMiddleware
Panic Recovery Automatic panic handling Via DefaultMiddleware
Metrics Collection Request count and timing Via DefaultMiddleware
Memory Leak Prevention Automatic cleanup Rate limiter cleanup every 5 minutes
Opt-in Features

Add these features as needed:

Feature How to Enable Example
Health Checks Kubernetes-ready health endpoints hyperserve.WithHealthServer()
Security Headers Add HeadersMiddleware srv.AddMiddleware("*", hyperserve.HeadersMiddleware(srv.Options))
Web Worker Support Enable CSP for blob: URLs hyperserve.WithCSPWebWorkerSupport()
Rate Limiting Add RateLimitMiddleware srv.AddMiddleware("/api", hyperserve.RateLimitMiddleware(srv))
Authentication Configure validator + middleware See Authentication
TLS/HTTPS WithTLS option hyperserve.WithTLS("cert.pem", "key.pem")
Static Files HandleStatic srv.HandleStatic("/static/")
Templates HandleTemplate See Templates
SSE Custom handler See Server-Sent Events
MCP Support WithMCPSupport hyperserve.WithMCPSupport()

Common Patterns

Basic Web Server
srv, _ := hyperserve.NewServer()

// Serve static files
srv.Options.StaticDir = "./public"
srv.HandleStatic("/")

srv.Run()
Secure API Server
srv, _ := hyperserve.NewServer(
    hyperserve.WithHealthServer(),
    hyperserve.WithAuthTokenValidator(validateToken),
)

// Apply secure API middleware stack (auth + rate limiting)
srv.AddMiddlewareStack("/api", hyperserve.SecureAPI(srv))

// API routes
srv.HandleFunc("/api/users", getUsersHandler)
srv.HandleFunc("/api/orders", getOrdersHandler)

srv.Run()
Web Application with Security
srv, _ := hyperserve.NewServer()

// Apply secure web middleware stack (security headers)
srv.AddMiddlewareStack("*", hyperserve.SecureWeb(srv.Options))

// Serve static files
srv.Options.StaticDir = "./static"
srv.HandleStatic("/static/")

// Dynamic routes
srv.HandleFunc("/", homeHandler)

srv.Run()
Enterprise Server with FIPS
srv, _ := hyperserve.NewServer(
    hyperserve.WithFIPSMode(),
    hyperserve.WithTLS("cert.pem", "key.pem"),
    hyperserve.WithAuthTokenValidator(validateJWT),
)

// Apply security middleware
srv.AddMiddlewareStack("/api", hyperserve.SecureAPI(srv))
srv.AddMiddlewareStack("/", hyperserve.SecureWeb(srv.Options))

srv.Run()

Web Worker Support

Modern web applications often use Web Workers for performance optimization. Libraries like Tone.js, PDF.js, and others create Web Workers using blob: URLs, which are blocked by default by Content Security Policy (CSP).

Enable Web Worker Support
srv, _ := hyperserve.NewServer(
    hyperserve.WithCSPWebWorkerSupport(),
)

// Apply security headers with Web Worker support
srv.AddMiddleware("*", hyperserve.HeadersMiddleware(srv.Options))

This adds blob: URLs to the CSP worker-src and child-src directives, enabling Web Workers while maintaining security.

Environment Variable
export HS_CSP_WEB_WORKER_SUPPORT=true
JSON Configuration
{
    "csp_web_worker_support": true
}
Use Cases
  • Audio Applications: Tone.js, Web Audio API libraries
  • PDF Rendering: PDF.js and similar libraries
  • Performance Optimization: Any library using Web Workers with blob: URLs

Security Note: Web Worker support is disabled by default. Enable only when needed for your application.

Configuration

Configuration Methods (in precedence order)
  1. Functional Options (recommended)
hyperserve.NewServer(
    hyperserve.WithAddr(":3000"),
    hyperserve.WithRateLimit(200, 400),
    hyperserve.WithCSPWebWorkerSupport(),  // Enable Web Worker support for Tone.js, PDF.js, etc.
)
  1. Environment Variables
export HS_PORT=3000
export HS_RATE_LIMIT=200
export HS_LOG_LEVEL=debug
export HS_CSP_WEB_WORKER_SUPPORT=true  # Enable Web Worker support
  1. JSON File (options.json)
{
    "port": 3000,
    "rateLimit": 200,
    "logLevel": "debug",
    "csp_web_worker_support": true
}
Default Configuration
  • Port: :8080
  • Health server: disabled by default (use WithHealthServer() to enable on :8081)
  • Rate limit: 1 req/s (burst: 10)
  • Timeouts: 5s read, 10s write, 120s idle
  • Log level: Info

Middleware

Default Middleware

Every server automatically includes:

  • MetricsMiddleware - Request counting and timing
  • RequestLoggerMiddleware - Structured request logs
  • RecoveryMiddleware - Panic recovery
Middleware Stacks

Pre-configured middleware combinations:

SecureAPI - For API endpoints:

  • AuthMiddleware - Bearer token validation
  • RateLimitMiddleware - Rate limiting per IP

SecureWeb - For web applications:

  • HeadersMiddleware - Security headers (CSP, HSTS, etc.)

FileServer - For static file serving:

  • HeadersMiddleware - Appropriate cache headers

Usage:

// Apply middleware stack to specific routes
srv.AddMiddlewareStack("/api", hyperserve.SecureAPI(srv))       // Auth + rate limiting for /api/*
srv.AddMiddlewareStack("*", hyperserve.SecureWeb(srv.Options))  // Security headers for all routes
Individual Middleware
// Add specific middleware to routes
srv.AddMiddleware("*", hyperserve.HeadersMiddleware(srv.Options))      // Global - all routes
srv.AddMiddleware("/api", hyperserve.AuthMiddleware(srv.Options))      // Only /api/* routes
srv.AddMiddleware("/api", hyperserve.RateLimitMiddleware(srv))         // Only /api/* routes
srv.AddMiddleware("/static", hyperserve.HeadersMiddleware(srv.Options)) // Only /static/* routes

Route-specific middleware:

  • Uses prefix matching: "/api" matches /api, /api/users, /api/v1/orders, etc.
  • Global middleware uses "*" and runs before route-specific middleware
  • Multiple middleware for the same route are executed in registration order
Custom Middleware
func TimingMiddleware(next http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        next.ServeHTTP(w, r)
        log.Printf("Request took %v", time.Since(start))
    }
}

srv.AddMiddleware("/api", TimingMiddleware)

Authentication

// Configure token validator
srv, _ := hyperserve.NewServer(
    hyperserve.WithAuthTokenValidator(func(token string) (bool, error) {
        // Validate token (JWT, database lookup, etc.)
        return isValidToken(token), nil
    }),
)

// Apply auth middleware to protected routes
srv.AddMiddleware("/api", hyperserve.AuthMiddleware(srv.Options))

The auth middleware:

  • Requires Bearer token in Authorization header
  • Uses timing-safe comparison
  • Returns 401 for invalid tokens

Templates

// Configure template directory
srv.Options.TemplateDir = "./templates"

// Static template data
srv.HandleTemplate("/about", "about.html", map[string]string{
    "title": "About Us",
})

// Dynamic template data
srv.HandleFuncDynamic("/user", "user.html", func(r *http.Request) interface{} {
    return map[string]interface{}{
        "username": r.URL.Query().Get("name"),
        "timestamp": time.Now(),
    }
})

Static Files

// Configure static directory
srv.Options.StaticDir = "./static"

// Serve files from /static/
srv.HandleStatic("/static/")

Uses Go 1.24's os.Root for secure file serving when available.

Server-Sent Events (SSE)

srv.HandleFunc("/events", func(w http.ResponseWriter, r *http.Request) {
    // Set SSE headers
    w.Header().Set("Content-Type", "text/event-stream")
    w.Header().Set("Cache-Control", "no-cache")
    w.Header().Set("Connection", "keep-alive")

    ticker := time.NewTicker(time.Second)
    defer ticker.Stop()

    for {
        select {
        case <-r.Context().Done():
            return
        case <-ticker.C:
            msg := hyperserve.NewSSEMessage(map[string]interface{}{
                "time": time.Now(),
                "data": "update",
            })
            fmt.Fprintf(w, "%s", msg)
            w.(http.Flusher).Flush()
        }
    }
})

Go 1.24 Features

FIPS 140-3 Mode

For government and regulated industries:

srv, _ := hyperserve.NewServer(
    hyperserve.WithFIPSMode(),
)
Encrypted Client Hello (ECH)

Protect user privacy:

srv, _ := hyperserve.NewServer(
    hyperserve.WithEncryptedClientHello(echKeys...),
)
Performance Features
  • Swiss Tables: Faster map implementation for rate limiting
  • os.Root: Secure file serving with automatic sandboxing
  • Post-Quantum: X25519MLKEM768 enabled by default (non-FIPS)

Model Context Protocol (MCP)

Enable AI assistant integration with multiple transport options:

HTTP Transport (Default)
srv, _ := hyperserve.NewServer(
    hyperserve.WithMCPSupport("MyApp", "1.0.0"),  // Enable MCP with server info
    hyperserve.WithMCPBuiltinTools(true),      // Enable built-in tools (disabled by default)
    hyperserve.WithMCPBuiltinResources(true),  // Enable built-in resources (disabled by default)
    hyperserve.WithMCPFileToolRoot("/safe/path"),
)
STDIO Transport

For CLI tools and Claude Desktop integration:

srv, _ := hyperserve.NewServer(
    hyperserve.WithMCPSupport(hyperserve.MCPOverStdio()),
    hyperserve.WithMCPBuiltinTools(true),      // Enable built-in tools
    hyperserve.WithMCPFileToolRoot("/safe/path"),
)

See mcp-stdio example for Claude Desktop integration.

Built-in Tools and Resources

Important: Built-in tools and resources are disabled by default for security. You must explicitly enable them:

// Enable only MCP protocol (no built-in tools/resources)
srv, _ := hyperserve.NewServer(
    hyperserve.WithMCPSupport(hyperserve.MCPServerInfo("MyApp", "1.0.0")),
)

// Alternative: Use the convenience function
srv, _ := hyperserve.NewServer(
    hyperserve.WithMCPServer("MyApp", "1.0.0"),  // Same as WithMCPSupport(MCPServerInfo(...))
)

// Enable MCP with built-in tools
srv, _ := hyperserve.NewServer(
    hyperserve.WithMCPSupport(hyperserve.MCPServerInfo("MyApp", "1.0.0")),
    hyperserve.WithMCPBuiltinTools(true),
)

// Enable MCP with built-in resources
srv, _ := hyperserve.NewServer(
    hyperserve.WithMCPSupport(hyperserve.MCPServerInfo("MyApp", "1.0.0")),
    hyperserve.WithMCPBuiltinResources(true),
)
Available Built-in Tools (when enabled)
  • read_file - Read files (sandboxed)
  • list_directory - List directories (sandboxed)
  • http_request - Make HTTP requests
  • calculator - Basic math operations

All tools support context-based cancellation and have a 30-second timeout by default.

Available Built-in Resources (when enabled)
  • config://server/options - Server configuration
  • metrics://server/stats - Performance metrics
  • system://runtime/info - System information
  • logs://server/recent - Recent log entries

Resources are automatically cached with a 5-minute TTL to improve performance.

Custom MCP Tools and Resources

Register your own tools and resources:

// Define a custom tool
type MyTool struct{}

func (t *MyTool) Name() string { return "my_tool" }
func (t *MyTool) Description() string { return "Custom tool" }
func (t *MyTool) Schema() map[string]interface{} {
    return map[string]interface{}{
        "type": "object",
        "properties": map[string]interface{}{
            "input": map[string]interface{}{"type": "string"},
        },
    }
}
func (t *MyTool) Execute(params map[string]interface{}) (interface{}, error) {
    // Implementation
    return map[string]interface{}{"result": "success"}, nil
}

// Register after server creation
srv, _ := hyperserve.NewServer(hyperserve.WithMCPSupport())
srv.RegisterMCPTool(&MyTool{})
srv.Run()
MCP Performance Features

HyperServe's MCP implementation includes several performance optimizations:

  • Context Support: All tools support cancellation with 30-second timeout
  • Resource Caching: Automatic 5-minute cache for resource reads
  • Metrics Collection: Detailed performance metrics for monitoring
  • Concurrent Execution: Tools can execute concurrently for better throughput

Access metrics programmatically:

if srv.MCPEnabled() {
    metrics := srv.mcpHandler.GetMetrics()
    // Returns request counts, latencies, error rates, cache stats
}

Performance

Baseline performance characteristics:

Metric Value
Allocations per request 10
Memory per request ~1KB
Baseline latency 180ns
With security middleware +30%

See PERFORMANCE.md for detailed benchmarks.

Examples

Complete example applications:

Testing

# Run all tests
go test ./...

# With race detection
go test -race ./...

# With coverage
go test -cover ./...

# Benchmarks
go test -bench=. -benchmem

Documentation

License

HyperServe is released under the MIT License.

Documentation

Overview

Package hyperserve provides built-in middleware for common HTTP server functionality.

The middleware package includes:

  • Request logging with structured output
  • Panic recovery to prevent server crashes
  • Request metrics collection
  • Authentication (Basic, Bearer token, custom)
  • Rate limiting per IP address
  • Security headers (HSTS, CSP, etc.)
  • Request/Response timing

Middleware can be applied globally or to specific routes:

// Global middleware
srv.AddMiddleware("*", hyperserve.RequestLoggerMiddleware)

// Route-specific middleware
srv.AddMiddleware("/api", hyperserve.AuthMiddleware(srv.Options))

// Combine multiple middleware
srv.AddMiddlewareGroup("/admin",
	hyperserve.AuthMiddleware(srv.Options),
	hyperserve.RateLimitMiddleware(srv),
)

Package hyperserve provides configuration options for the HTTP server.

Configuration follows a hierarchical priority:

  1. Function parameters (highest priority)
  2. Environment variables
  3. Configuration file (options.json)
  4. Default values (lowest priority)

Environment Variables:

  • SERVER_ADDR: Main server address (default ":8080")
  • HEALTH_ADDR: Health check server address (default ":8081")
  • HS_HARDENED_MODE: Enable security headers (default "false")
  • HS_MCP_ENABLED: Enable Model Context Protocol (default "false")
  • HS_MCP_ENDPOINT: MCP endpoint path (default "/mcp")
  • HS_CSP_WEB_WORKER_SUPPORT: Enable Web Worker CSP headers (default "false")

Example configuration file (options.json):

{
  "addr": ":3000",
  "tls": true,
  "cert_file": "server.crt",
  "key_file": "server.key",
  "run_health_server": true,
  "hardened_mode": true
}

Package hyperserve provides a lightweight, high-performance HTTP server framework with zero external dependencies (except golang.org/x/time/rate for rate limiting).

Key Features:

  • Zero configuration with sensible defaults
  • Built-in middleware for logging, recovery, and metrics
  • Graceful shutdown handling
  • Health check endpoints for Kubernetes
  • Model Context Protocol (MCP) support for AI assistants
  • TLS/HTTPS support with automatic certificate management
  • Rate limiting and authentication
  • Template rendering support
  • Server-Sent Events (SSE) support

Basic Usage:

srv, err := hyperserve.NewServer()
if err != nil {
	log.Fatal(err)
}

srv.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "Hello, World!")
})

srv.Run() // Blocks until shutdown signal

With Options:

srv, err := hyperserve.NewServer(
	hyperserve.WithAddr(":8080"),
	hyperserve.WithHealthServer(),
	hyperserve.WithTLS("cert.pem", "key.pem"),
	hyperserve.WithMCPSupport("MyApp", "1.0.0"),
)

Index

Constants

View Source
const (
	ErrorCodeParseError     = -32700
	ErrorCodeInvalidRequest = -32600
	ErrorCodeMethodNotFound = -32601
	ErrorCodeInvalidParams  = -32602
	ErrorCodeInternalError  = -32603
)

Standard JSON-RPC error codes

View Source
const (
	// LevelDebug enables debug-level logging with detailed information
	LevelDebug = slog.LevelDebug
	// LevelInfo enables info-level logging for general information
	LevelInfo = slog.LevelInfo
	// LevelWarn enables warning-level logging for important but non-critical events
	LevelWarn = slog.LevelWarn
	// LevelError enables error-level logging for error conditions only
	LevelError = slog.LevelError
)

Log level constants for server configuration. These wrap slog levels to provide a consistent API while hiding the logging implementation details.

View Source
const GlobalMiddlewareRoute = "*"

GlobalMiddlewareRoute is a special route identifier that applies middleware to all routes. Use this constant when registering middleware that should run for every request.

View Source
const JSONRPCVersion = "2.0"

JSONRPCVersion is the JSON-RPC 2.0 version identifier

View Source
const (
	MCPVersion = "2024-11-05"
)

MCP Protocol constants

Variables

View Source
var (
	Version   = "dev"     // Version from git tags
	BuildHash = "unknown" // Git commit hash
	BuildTime = "unknown" // Build timestamp
)

Build information set at compile time using -ldflags

Functions

func EnsureTrailingSlash

func EnsureTrailingSlash(dir string) string

EnsureTrailingSlash ensures that a directory path ends with a trailing slash. This utility function is used to normalize directory paths for consistent handling.

func GetVersionInfo added in v0.9.7

func GetVersionInfo() string

GetVersionInfo returns formatted version information

func HealthCheckHandler

func HealthCheckHandler(w http.ResponseWriter, r *http.Request)

HealthCheckHandler returns a 204 No Content status code for basic health checks. This handler can be used as a simple liveness or readiness probe.

func NewStdioTransport

func NewStdioTransport(logger *slog.Logger) *stdioTransport

NewStdioTransport creates a new stdio transport

func NewStdioTransportWithIO

func NewStdioTransportWithIO(r io.Reader, w io.Writer, logger *slog.Logger) *stdioTransport

NewStdioTransportWithIO creates a new stdio transport with custom IO

func PanicHandler

func PanicHandler(w http.ResponseWriter, r *http.Request)

PanicHandler simulates a panic situation in a handler to test proper recovery middleware. This handler is intended for testing purposes only and should not be used in production.

func RecoveryMiddleware

func RecoveryMiddleware(next http.Handler) http.HandlerFunc

RecoveryMiddleware returns a middleware function that recovers from panics in request handlers. Catches panics, logs the error, and returns a 500 Internal Server Error response.

func RequestLoggerMiddleware

func RequestLoggerMiddleware(next http.Handler) http.HandlerFunc

RequestLoggerMiddleware returns a middleware function that logs structured request information. It captures and logs:

  • Client IP address
  • HTTP method and URL path
  • Trace ID (if present in X-Trace-ID header)
  • Response status code
  • Request duration
  • Response size in bytes

This middleware is included by default in NewServer(). For high-traffic applications, consider the performance impact of logging.

func ResponseTimeMiddleware

func ResponseTimeMiddleware(next http.Handler) http.HandlerFunc

ResponseTimeMiddleware returns a middleware function that logs only the request duration. This is a lighter alternative to RequestLoggerMiddleware when only timing information is needed.

func TraceMiddleware

func TraceMiddleware(next http.Handler) http.HandlerFunc

TraceMiddleware returns a middleware function that adds trace IDs to requests. Generates unique trace IDs for request tracking and distributed tracing.

Types

type CalculatorTool

type CalculatorTool struct{}

CalculatorTool implements MCPTool for basic mathematical operations

func NewCalculatorTool

func NewCalculatorTool() *CalculatorTool

NewCalculatorTool creates a new calculator tool

func (*CalculatorTool) Description

func (t *CalculatorTool) Description() string

func (*CalculatorTool) Execute

func (t *CalculatorTool) Execute(params map[string]interface{}) (interface{}, error)

func (*CalculatorTool) Name

func (t *CalculatorTool) Name() string

func (*CalculatorTool) Schema

func (t *CalculatorTool) Schema() map[string]interface{}

type ConfigResource

type ConfigResource struct {
	// contains filtered or unexported fields
}

ConfigResource implements MCPResource for server configuration access

func NewConfigResource

func NewConfigResource(options *ServerOptions) *ConfigResource

NewConfigResource creates a new configuration resource

func (*ConfigResource) Description

func (r *ConfigResource) Description() string

func (*ConfigResource) List

func (r *ConfigResource) List() ([]string, error)

func (*ConfigResource) MimeType

func (r *ConfigResource) MimeType() string

func (*ConfigResource) Name

func (r *ConfigResource) Name() string

func (*ConfigResource) Read

func (r *ConfigResource) Read() (interface{}, error)

func (*ConfigResource) URI

func (r *ConfigResource) URI() string

type DataFunc

type DataFunc func(r *http.Request) interface{}

DataFunc is a function type that generates data for template rendering. It receives the current HTTP request and returns data to be passed to the template.

type FileReadTool

type FileReadTool struct {
	// contains filtered or unexported fields
}

FileReadTool implements MCPTool for reading files from the filesystem

func NewFileReadTool

func NewFileReadTool(rootDir string) (*FileReadTool, error)

NewFileReadTool creates a new file read tool with optional root directory restriction

func (*FileReadTool) Description

func (t *FileReadTool) Description() string

func (*FileReadTool) Execute

func (t *FileReadTool) Execute(params map[string]interface{}) (interface{}, error)

func (*FileReadTool) Name

func (t *FileReadTool) Name() string

func (*FileReadTool) Schema

func (t *FileReadTool) Schema() map[string]interface{}

type HTTPRequestTool

type HTTPRequestTool struct {
	// contains filtered or unexported fields
}

HTTPRequestTool implements MCPTool for making HTTP requests

func NewHTTPRequestTool

func NewHTTPRequestTool() *HTTPRequestTool

NewHTTPRequestTool creates a new HTTP request tool

func (*HTTPRequestTool) Description

func (t *HTTPRequestTool) Description() string

func (*HTTPRequestTool) Execute

func (t *HTTPRequestTool) Execute(params map[string]interface{}) (interface{}, error)

func (*HTTPRequestTool) Name

func (t *HTTPRequestTool) Name() string

func (*HTTPRequestTool) Schema

func (t *HTTPRequestTool) Schema() map[string]interface{}
type Header struct {
	// contains filtered or unexported fields
}

Header represents an HTTP header key-value pair used in middleware configuration.

type JSONRPCEngine

type JSONRPCEngine struct {
	// contains filtered or unexported fields
}

JSONRPCEngine handles JSON-RPC 2.0 request processing

func NewJSONRPCEngine

func NewJSONRPCEngine() *JSONRPCEngine

NewJSONRPCEngine creates a new JSON-RPC engine

func (*JSONRPCEngine) GetRegisteredMethods

func (engine *JSONRPCEngine) GetRegisteredMethods() []string

GetRegisteredMethods returns a list of all registered method names

func (*JSONRPCEngine) ProcessRequest

func (engine *JSONRPCEngine) ProcessRequest(requestData []byte) []byte

ProcessRequest processes a JSON-RPC request and returns a response

func (*JSONRPCEngine) ProcessRequestDirect

func (engine *JSONRPCEngine) ProcessRequestDirect(request *JSONRPCRequest) *JSONRPCResponse

ProcessRequestDirect processes a JSON-RPC request object directly and returns a response object

func (*JSONRPCEngine) RegisterMethod

func (engine *JSONRPCEngine) RegisterMethod(name string, handler JSONRPCMethodHandler)

RegisterMethod registers a method handler with the JSON-RPC engine

type JSONRPCError

type JSONRPCError struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data,omitempty"`
}

JSONRPCError represents a JSON-RPC 2.0 error object

type JSONRPCMethodHandler

type JSONRPCMethodHandler func(params interface{}) (interface{}, error)

JSONRPCMethodHandler defines the signature for JSON-RPC method handlers

type JSONRPCRequest

type JSONRPCRequest struct {
	JSONRPC string      `json:"jsonrpc"`
	Method  string      `json:"method"`
	Params  interface{} `json:"params,omitempty"`
	ID      interface{} `json:"id,omitempty"`
}

JSONRPCRequest represents a JSON-RPC 2.0 request message

type JSONRPCResponse

type JSONRPCResponse struct {
	JSONRPC string        `json:"jsonrpc"`
	Result  interface{}   `json:"result,omitempty"`
	Error   *JSONRPCError `json:"error,omitempty"`
	ID      interface{}   `json:"id"`
}

JSONRPCResponse represents a JSON-RPC 2.0 response message

type ListDirectoryTool

type ListDirectoryTool struct {
	// contains filtered or unexported fields
}

ListDirectoryTool implements MCPTool for listing directory contents

func NewListDirectoryTool

func NewListDirectoryTool(rootDir string) (*ListDirectoryTool, error)

NewListDirectoryTool creates a new directory listing tool

func (*ListDirectoryTool) Description

func (t *ListDirectoryTool) Description() string

func (*ListDirectoryTool) Execute

func (t *ListDirectoryTool) Execute(params map[string]interface{}) (interface{}, error)

func (*ListDirectoryTool) Name

func (t *ListDirectoryTool) Name() string

func (*ListDirectoryTool) Schema

func (t *ListDirectoryTool) Schema() map[string]interface{}

type LogResource

type LogResource struct {
	// contains filtered or unexported fields
}

LogResource implements MCPResource for recent log entries (if available)

func NewLogResource

func NewLogResource(maxSize int) *LogResource

NewLogResource creates a new log resource with a maximum number of entries

func (*LogResource) AddLogEntry

func (r *LogResource) AddLogEntry(entry string)

AddLogEntry adds a log entry to the resource (called by log handler if implemented)

func (*LogResource) Description

func (r *LogResource) Description() string

func (*LogResource) List

func (r *LogResource) List() ([]string, error)

func (*LogResource) MimeType

func (r *LogResource) MimeType() string

func (*LogResource) Name

func (r *LogResource) Name() string

func (*LogResource) Read

func (r *LogResource) Read() (interface{}, error)

func (*LogResource) URI

func (r *LogResource) URI() string

type LoggingCapability

type LoggingCapability struct{}

Individual capability structs

type MCPCapabilities

type MCPCapabilities struct {
	Experimental map[string]interface{} `json:"experimental,omitempty"`
	Logging      *LoggingCapability     `json:"logging,omitempty"`
	Prompts      *PromptsCapability     `json:"prompts,omitempty"`
	Resources    *ResourcesCapability   `json:"resources,omitempty"`
	Tools        *ToolsCapability       `json:"tools,omitempty"`
	Sampling     *SamplingCapability    `json:"sampling,omitempty"`
}

MCPCapabilities represents the server's MCP capabilities

type MCPClientInfo

type MCPClientInfo struct {
	Name    string `json:"name"`
	Version string `json:"version"`
}

MCPClientInfo represents MCP client information

type MCPHandler

type MCPHandler struct {
	// contains filtered or unexported fields
}

MCPHandler manages MCP protocol communication

func NewMCPHandler

func NewMCPHandler(serverInfo MCPServerInfo) *MCPHandler

NewMCPHandler creates a new MCP handler instance

func (*MCPHandler) GetMetrics added in v0.9.2

func (h *MCPHandler) GetMetrics() map[string]interface{}

GetMetrics returns the current MCP metrics summary

func (*MCPHandler) ProcessRequest

func (h *MCPHandler) ProcessRequest(requestData []byte) []byte

ProcessRequest processes an MCP request

func (*MCPHandler) ProcessRequestWithTransport

func (h *MCPHandler) ProcessRequestWithTransport(transport MCPTransport) error

ProcessRequestWithTransport processes an MCP request using the provided transport

func (*MCPHandler) RegisterResource

func (h *MCPHandler) RegisterResource(resource MCPResource)

RegisterResource registers an MCP resource

func (*MCPHandler) RegisterTool

func (h *MCPHandler) RegisterTool(tool MCPTool)

RegisterTool registers an MCP tool

func (*MCPHandler) RunStdioLoop

func (h *MCPHandler) RunStdioLoop() error

RunStdioLoop runs the MCP handler in stdio mode The loop continues processing requests until EOF is received on stdin. EOF is treated as a normal shutdown signal (e.g., when stdin is closed). This behavior is appropriate for stdio servers which typically run for the lifetime of the parent process.

func (*MCPHandler) ServeHTTP

func (h *MCPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP implements the http.Handler interface for MCP

type MCPInitializeParams

type MCPInitializeParams struct {
	ProtocolVersion string        `json:"protocolVersion"`
	Capabilities    interface{}   `json:"capabilities"`
	ClientInfo      MCPClientInfo `json:"clientInfo"`
}

MCPInitializeParams represents the parameters for the initialize method

type MCPInitializeResult

type MCPInitializeResult struct {
	ProtocolVersion string          `json:"protocolVersion"`
	Capabilities    MCPCapabilities `json:"capabilities"`
	ServerInfo      MCPServerInfo   `json:"serverInfo"`
}

MCPInitializeResult represents the result of the initialize method

type MCPMetrics added in v0.9.2

type MCPMetrics struct {
	// contains filtered or unexported fields
}

MCPMetrics tracks performance metrics for MCP operations

func (*MCPMetrics) GetMetricsSummary added in v0.9.2

func (m *MCPMetrics) GetMetricsSummary() map[string]interface{}

GetMetricsSummary returns a summary of collected metrics

type MCPResource

type MCPResource interface {
	URI() string
	Name() string
	Description() string
	MimeType() string
	Read() (interface{}, error)
	List() ([]string, error)
}

MCP Resource interface defines the contract for MCP resources

type MCPResourceContent

type MCPResourceContent struct {
	URI      string      `json:"uri"`
	MimeType string      `json:"mimeType"`
	Text     interface{} `json:"text"`
}

MCPResourceContent represents the content of a resource

type MCPResourceInfo

type MCPResourceInfo struct {
	URI         string `json:"uri"`
	Name        string `json:"name"`
	Description string `json:"description"`
	MimeType    string `json:"mimeType"`
}

MCPResourceInfo represents information about a resource

type MCPResourceReadParams

type MCPResourceReadParams struct {
	URI string `json:"uri"`
}

MCPResourceReadParams represents the parameters for reading a resource

type MCPServerInfo

type MCPServerInfo struct {
	Name    string `json:"name"`
	Version string `json:"version"`
}

MCPServerInfo represents MCP server information

type MCPTool

type MCPTool interface {
	Name() string
	Description() string
	Schema() map[string]interface{}
	Execute(params map[string]interface{}) (interface{}, error)
}

MCP Tool interface defines the contract for MCP tools

type MCPToolCallParams

type MCPToolCallParams struct {
	Name      string                 `json:"name"`
	Arguments map[string]interface{} `json:"arguments"`
}

MCPToolCallParams represents the parameters for calling a tool

type MCPToolInfo

type MCPToolInfo struct {
	Name        string                 `json:"name"`
	Description string                 `json:"description"`
	InputSchema map[string]interface{} `json:"inputSchema"`
}

MCPToolInfo represents information about a tool

type MCPToolResult

type MCPToolResult struct {
	Content []map[string]interface{} `json:"content"`
}

MCPToolResult represents the result of a tool execution

type MCPToolWithContext added in v0.9.2

type MCPToolWithContext interface {
	MCPTool
	ExecuteWithContext(ctx context.Context, params map[string]interface{}) (interface{}, error)
}

MCPToolWithContext is an enhanced interface that supports context for cancellation and timeouts

type MCPTransport

type MCPTransport interface {
	// Send sends a JSON-RPC response message
	Send(response *JSONRPCResponse) error
	// Receive receives a JSON-RPC request message
	Receive() (*JSONRPCRequest, error)
	// Close closes the transport
	Close() error
}

MCPTransport defines the interface for MCP communication transports

type MCPTransportConfig

type MCPTransportConfig func(*mcpTransportOptions)

MCPTransportConfig is a function that configures MCP transport options

func MCPOverHTTP

func MCPOverHTTP(endpoint string) MCPTransportConfig

MCPOverHTTP configures MCP to use HTTP transport with the specified endpoint

func MCPOverStdio

func MCPOverStdio() MCPTransportConfig

MCPOverStdio configures MCP to use stdio transport

type MCPTransportType

type MCPTransportType int

MCPTransportType represents the type of transport for MCP communication

const (
	// HTTPTransport represents HTTP-based MCP communication
	HTTPTransport MCPTransportType = iota
	// StdioTransport represents stdio-based MCP communication
	StdioTransport
)

type MetricsResource

type MetricsResource struct {
	// contains filtered or unexported fields
}

MetricsResource implements MCPResource for server metrics access

func NewMetricsResource

func NewMetricsResource(server *Server) *MetricsResource

NewMetricsResource creates a new metrics resource

func (*MetricsResource) Description

func (r *MetricsResource) Description() string

func (*MetricsResource) List

func (r *MetricsResource) List() ([]string, error)

func (*MetricsResource) MimeType

func (r *MetricsResource) MimeType() string

func (*MetricsResource) Name

func (r *MetricsResource) Name() string

func (*MetricsResource) Read

func (r *MetricsResource) Read() (interface{}, error)

func (*MetricsResource) URI

func (r *MetricsResource) URI() string

type MiddlewareFunc

type MiddlewareFunc func(http.Handler) http.HandlerFunc

MiddlewareFunc is a function type that wraps an http.Handler and returns a new http.HandlerFunc. This is the standard pattern for HTTP middleware in Go.

func AuthMiddleware

func AuthMiddleware(options *ServerOptions) MiddlewareFunc

AuthMiddleware returns a middleware function that validates bearer tokens in the Authorization header. Requires requests to include a valid Bearer token, otherwise returns 401 Unauthorized.

func ChaosMiddleware

func ChaosMiddleware(options *ServerOptions) MiddlewareFunc

ChaosMiddleware returns a middleware handler that simulates random failures for chaos engineering. When chaos mode is enabled, can inject random latency, errors, throttling, and panics. Useful for testing application resilience and error handling.

func HeadersMiddleware

func HeadersMiddleware(options *ServerOptions) MiddlewareFunc

HeadersMiddleware returns a middleware function that adds security headers to responses. Includes headers for XSS protection, content type sniffing prevention, HSTS, CSP, and CORS. Automatically handles CORS preflight requests.

func MetricsMiddleware

func MetricsMiddleware(srv *Server) MiddlewareFunc

MetricsMiddleware returns a middleware function that collects request metrics. It tracks total request count and response times for performance monitoring.

func RateLimitMiddleware

func RateLimitMiddleware(srv *Server) MiddlewareFunc

RateLimitMiddleware returns a middleware function that enforces rate limiting per client IP address. Uses token bucket algorithm with configurable rate limit and burst capacity. Returns 429 Too Many Requests when rate limit is exceeded. Optimized for Go 1.24's Swiss Tables map implementation.

type MiddlewareRegistry

type MiddlewareRegistry struct {
	// contains filtered or unexported fields
}

MiddlewareRegistry manages middleware stacks for different routes. It allows route-specific middleware configuration and supports exclusion of specific middleware.

func NewMiddlewareRegistry

func NewMiddlewareRegistry(globalMiddleware MiddlewareStack) *MiddlewareRegistry

NewMiddlewareRegistry creates a new MiddlewareRegistry with optional global middleware. If globalMiddleware is provided, it will be applied to all routes by default.

func (*MiddlewareRegistry) Add

func (mwr *MiddlewareRegistry) Add(route string, middleware MiddlewareStack)

Add registers a MiddlewareStack for a specific route in the registry. Use GlobalMiddlewareRoute ("*") to apply middleware to all routes.

func (*MiddlewareRegistry) Get

func (mwr *MiddlewareRegistry) Get(route string) MiddlewareStack

Get retrieves the MiddlewareStack for a specific route. Returns an empty MiddlewareStack if no middleware is registered for the route.

func (*MiddlewareRegistry) RemoveStack

func (mwr *MiddlewareRegistry) RemoveStack(route string)

RemoveStack removes all middleware for a specific route from the registry. Does nothing if no middleware is registered for the route.

type MiddlewareStack

type MiddlewareStack []MiddlewareFunc

MiddlewareStack is a collection of middleware functions that can be applied to an http.Handler. Middleware in the stack is applied in order, with the first middleware being the outermost.

func DefaultMiddleware

func DefaultMiddleware(server *Server) MiddlewareStack

DefaultMiddleware returns a predefined middleware stack with essential server functionality. Includes metrics collection, request logging, and panic recovery. This middleware is applied by default unless explicitly excluded.

func FileServer

func FileServer(options *ServerOptions) MiddlewareStack

FileServer returns a middleware stack optimized for serving static files. Includes appropriate security headers for file serving.

func SecureAPI

func SecureAPI(srv *Server) MiddlewareStack

SecureAPI returns a middleware stack configured for secure API endpoints. Includes authentication and rate limiting middleware.

func SecureWeb

func SecureWeb(options *ServerOptions) MiddlewareStack

SecureWeb returns a middleware stack configured for secure web endpoints. Includes security headers middleware for web applications.

type PromptsCapability

type PromptsCapability struct{}

type ResourcesCapability

type ResourcesCapability struct {
	Subscribe   bool `json:"subscribe,omitempty"`
	ListChanged bool `json:"listChanged,omitempty"`
}

type SSEMessage

type SSEMessage struct {
	Event string `json:"event"` // Optional: Allows sending multiple event types
	Data  any    `json:"data"`  // The actual data payload
}

SSEMessage represents a Server-Sent Events message with an optional event type and data payload. It follows the SSE format with event and data fields that can be sent to clients.

func NewSSEMessage

func NewSSEMessage(data any) *SSEMessage

NewSSEMessage creates a new SSE message with the given data and a default "message" event type. This is a convenience function for creating standard SSE messages.

func (*SSEMessage) String

func (sse *SSEMessage) String() string

String formats the SSE message according to the Server-Sent Events specification. Returns a string in the format "event: <event>\ndata: <data>\n\n".

type SamplingCapability

type SamplingCapability struct{}

type Server

type Server struct {
	Options *ServerOptions
	// contains filtered or unexported fields
}

Server represents an HTTP server with built-in middleware support, health checks, template rendering, and various configuration options.

The Server manages both the main HTTP server and an optional health check server. It handles graceful shutdown, request metrics, and can be extended with custom middleware.

Example:

srv, _ := hyperserve.NewServer(
	hyperserve.WithAddr(":8080"),
	hyperserve.WithHealthServer(),
)

srv.HandleFunc("/api/users", handleUsers)
srv.Run()

func NewServer

func NewServer(opts ...ServerOptionFunc) (*Server, error)

NewServer creates a new instance of the Server with the given options. By default, the server includes request logging, panic recovery, and metrics collection middleware. The server will listen on ":8080" unless configured otherwise.

Options can be provided to customize the server behavior:

srv, err := hyperserve.NewServer(
	hyperserve.WithAddr(":3000"),
	hyperserve.WithHealthServer(),          // Enable health checks on :8081
	hyperserve.WithTLS("cert.pem", "key.pem"), // Enable HTTPS
	hyperserve.WithRateLimit(100, 200),     // 100 req/s, burst of 200
)

Returns an error if any of the options fail to apply.

func (*Server) AddMiddleware

func (srv *Server) AddMiddleware(route string, mw MiddlewareFunc)

AddMiddleware adds a single middleware function to the specified route. Use "*" as the route to apply middleware globally to all routes.

func (*Server) AddMiddlewareStack

func (srv *Server) AddMiddlewareStack(route string, mw MiddlewareStack)

AddMiddlewareStack adds a collection of middleware functions to the specified route. The middleware stack is applied in the order provided.

func (*Server) Handle

func (srv *Server) Handle(pattern string, handlerFunc http.HandlerFunc)

Handle registers the handler function for the given pattern. This is a wrapper around http.ServeMux.Handle that integrates with the server's middleware system. Example usage:

srv.Handle("/static", http.FileServer(http.Dir("./static")))

func (*Server) HandleFunc

func (srv *Server) HandleFunc(pattern string, handler http.HandlerFunc)

HandleFunc registers the handler function for the given pattern. The pattern follows the standard net/http ServeMux patterns:

  • "/path" matches exactly
  • "/path/" matches the path and any subpaths
  • Patterns are matched in order of specificity

Registered handlers automatically benefit from any global middleware (logging, recovery, metrics) plus any route-specific middleware.

Example:

srv.HandleFunc("/api/users", func(w http.ResponseWriter, r *http.Request) {
    users := getUsersFromDB()
    json.NewEncoder(w).Encode(users)
})

srv.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK)
    fmt.Fprintln(w, "OK")
})

func (*Server) HandleFuncDynamic

func (srv *Server) HandleFuncDynamic(pattern, tmplName string, dataFunc DataFunc) error

HandleFuncDynamic registers a handler that renders templates with dynamic data. The dataFunc is called for each request to generate the data passed to the template. Returns an error if template parsing fails.

func (*Server) HandleStatic

func (srv *Server) HandleStatic(pattern string)

HandleStatic registers a handler for serving static files from the configured static directory. The pattern should typically end with a wildcard (e.g., "/static/"). Uses os.Root for secure file access when available (Go 1.24+).

func (*Server) HandleTemplate

func (srv *Server) HandleTemplate(pattern, t string, data interface{}) error

HandleTemplate registers a handler that renders a specific template with static data. Unlike HandleFuncDynamic, the data is provided once at registration time. Returns an error if template parsing fails.

func (*Server) MCPEnabled

func (srv *Server) MCPEnabled() bool

MCPEnabled returns true if MCP support is enabled

func (*Server) RegisterMCPResource

func (srv *Server) RegisterMCPResource(resource MCPResource) error

RegisterMCPResource registers a custom MCP resource This must be called after server creation but before Run()

func (*Server) RegisterMCPTool

func (srv *Server) RegisterMCPTool(tool MCPTool) error

RegisterMCPTool registers a custom MCP tool This must be called after server creation but before Run()

func (*Server) Run

func (srv *Server) Run() error

Run starts the server and blocks until a shutdown signal is received. It automatically:

  • Starts the main HTTP/HTTPS server
  • Starts the health check server (if enabled)
  • Sets up graceful shutdown on SIGINT/SIGTERM
  • Handles cleanup of resources
  • Waits for active requests to complete before shutting down

The method will block until the server is shut down, either by signal or error. Returns an error if the server fails to start or encounters a fatal error.

Example:

if err := srv.Run(); err != nil {
    log.Fatal("Server failed:", err)
}

func (*Server) Stop

func (srv *Server) Stop() error

Stop gracefully stops the server with a default timeout of 10 seconds

func (*Server) WithOutStack

func (srv *Server) WithOutStack(stack MiddlewareStack) error

type ServerOptionFunc

type ServerOptionFunc func(srv *Server) error

ServerOptionFunc is a function type used to configure Server instances. It follows the functional options pattern for flexible server configuration.

func WithAddr

func WithAddr(addr string) ServerOptionFunc

WithAddr sets the address and port for the server to listen on. The address must be in the format "host:port" (e.g., ":8080", "localhost:3000").

func WithAuthTokenValidator

func WithAuthTokenValidator(validator func(token string) (bool, error)) ServerOptionFunc

WithAuthTokenValidator sets the token validator for the server.

func WithCSPWebWorkerSupport added in v0.9.6

func WithCSPWebWorkerSupport() ServerOptionFunc

WithCSPWebWorkerSupport enables Content Security Policy support for Web Workers using blob: URLs. This is required for modern web applications that use libraries like Tone.js, PDF.js, or other libraries that create Web Workers with blob: URLs for performance optimization. By default, this is disabled for security reasons and must be explicitly enabled.

func WithEncryptedClientHello

func WithEncryptedClientHello(echKeys ...[]byte) ServerOptionFunc

WithEncryptedClientHello enables Encrypted Client Hello (ECH) for enhanced privacy. ECH encrypts the SNI in TLS handshakes to prevent eavesdropping on the server name.

func WithFIPSMode

func WithFIPSMode() ServerOptionFunc

WithFIPSMode enables FIPS 140-3 compliant mode for government and enterprise deployments. This restricts TLS cipher suites and curves to FIPS-approved algorithms only.

func WithHardenedMode

func WithHardenedMode() ServerOptionFunc

WithHardenedMode enables hardened security mode for enhanced security headers. In hardened mode, the server header is suppressed and additional security measures are applied.

func WithHealthServer

func WithHealthServer() ServerOptionFunc

WithHealthServer enables the health server on a separate port. The health server provides /healthz/, /readyz/, and /livez/ endpoints for monitoring.

func WithLogger

func WithLogger(l *slog.Logger) ServerOptionFunc

WithLogger replaces the default logger with a custom slog.Logger instance. This allows for custom log formatting, output destinations, and log levels.

func WithLoglevel

func WithLoglevel(level slog.Level) ServerOptionFunc

WithLoglevel sets the global log level for the server. Accepts slog.Level values (LevelDebug, LevelInfo, LevelWarn, LevelError).

func WithMCPBuiltinResources added in v0.9.3

func WithMCPBuiltinResources(enabled bool) ServerOptionFunc

WithMCPBuiltinResources enables the built-in MCP resources (config, metrics, system info, logs) By default, built-in resources are disabled and must be explicitly enabled

func WithMCPBuiltinTools added in v0.9.3

func WithMCPBuiltinTools(enabled bool) ServerOptionFunc

WithMCPBuiltinTools enables the built-in MCP tools (read_file, list_directory, http_request, calculator) By default, built-in tools are disabled and must be explicitly enabled

func WithMCPEndpoint

func WithMCPEndpoint(endpoint string) ServerOptionFunc

WithMCPEndpoint configures the MCP endpoint path. Default is "/mcp" if not specified.

func WithMCPFileToolRoot

func WithMCPFileToolRoot(rootDir string) ServerOptionFunc

WithMCPFileToolRoot configures a root directory for MCP file operations. If specified, file tools will be restricted to this directory using os.Root for security.

func WithMCPResourcesDisabled

func WithMCPResourcesDisabled() ServerOptionFunc

WithMCPResourcesDisabled disables MCP resources. Tools will still be available if enabled. Deprecated: Use WithMCPBuiltinResources(false) instead

func WithMCPServerInfo

func WithMCPServerInfo(name, version string) ServerOptionFunc

WithMCPServerInfo configures the MCP server identification. This information is returned to MCP clients during initialization. Deprecated: Use WithMCPSupport(WithServerInfo(name, version)) instead for a more concise API.

func WithMCPSupport

func WithMCPSupport(name, version string, configs ...MCPTransportConfig) ServerOptionFunc

WithMCPSupport enables MCP (Model Context Protocol) support on the server. This allows AI assistants to connect and use tools/resources provided by the server. Server name and version are required as they identify your server to MCP clients. By default, MCP uses HTTP transport on the "/mcp" endpoint. Example: WithMCPSupport("MyServer", "1.0.0")

func WithMCPToolsDisabled

func WithMCPToolsDisabled() ServerOptionFunc

WithMCPToolsDisabled disables MCP tools. Resources will still be available if enabled. Deprecated: Use WithMCPBuiltinTools(false) instead

func WithRateLimit

func WithRateLimit(limit rateLimit, burst int) ServerOptionFunc

WithRateLimit configures rate limiting for the server. limit: maximum number of requests per second per client IP burst: maximum number of requests that can be made in a short burst

func WithTLS

func WithTLS(certFile, keyFile string) ServerOptionFunc

WithTLS enables TLS on the server with the specified certificate and key files. Returns a ServerOptionFunc that configures TLS settings and validates file existence.

func WithTemplateDir

func WithTemplateDir(dir string) ServerOptionFunc

WithTemplateDir sets the directory path where HTML templates are located. Templates in this directory can be used with HandleTemplate and HandleFuncDynamic methods. Returns an error if the specified directory does not exist or is not accessible.

func WithTimeouts

func WithTimeouts(readTimeout, writeTimeout, idleTimeout time.Duration) ServerOptionFunc

WithTimeouts configures the HTTP server timeouts. readTimeout: maximum duration for reading the entire request writeTimeout: maximum duration before timing out writes of the response idleTimeout: maximum time to wait for the next request when keep-alives are enabled

type ServerOptions

type ServerOptions struct {
	Addr                   string        `json:"addr,omitempty"`
	EnableTLS              bool          `json:"tls,omitempty"`
	TLSAddr                string        `json:"tls_addr,omitempty"`
	TLSHealthAddr          string        `json:"tls_health_addr,omitempty"`
	KeyFile                string        `json:"key_file,omitempty"`
	CertFile               string        `json:"cert_file,omitempty"`
	HealthAddr             string        `json:"health_addr,omitempty"`
	RateLimit              rateLimit     `json:"rate_limit,omitempty"`
	Burst                  int           `json:"burst,omitempty"`
	ReadTimeout            time.Duration `json:"read_timeout,omitempty"`
	WriteTimeout           time.Duration `json:"write_timeout,omitempty"`
	IdleTimeout            time.Duration `json:"idle_timeout,omitempty"`
	StaticDir              string        `json:"static_dir,omitempty"`
	TemplateDir            string        `json:"template_dir,omitempty"`
	RunHealthServer        bool          `json:"run_health_server,omitempty"`
	ChaosMode              bool          `json:"chaos_mode,omitempty"`
	ChaosMaxLatency        time.Duration `json:"chaos_max_latency,omitempty"`
	ChaosMinLatency        time.Duration `json:"chaos_min_latency,omitempty"`
	ChaosErrorRate         float64       `json:"chaos_error_rate,omitempty"`
	ChaosThrottleRate      float64       `json:"chaos_throttle_rate,omitempty"`
	ChaosPanicRate         float64       `json:"chaos_panic_rate,omitempty"`
	AuthTokenValidatorFunc func(token string) (bool, error)
	FIPSMode               bool     `json:"fips_mode,omitempty"`
	EnableECH              bool     `json:"enable_ech,omitempty"`
	ECHKeys                [][]byte `json:"-"` // ECH keys are sensitive, don't serialize
	HardenedMode           bool     `json:"hardened_mode,omitempty"`
	// MCP (Model Context Protocol) configuration
	MCPEnabled          bool             `json:"mcp_enabled,omitempty"`
	MCPEndpoint         string           `json:"mcp_endpoint,omitempty"`
	MCPServerName       string           `json:"mcp_server_name,omitempty"`
	MCPServerVersion    string           `json:"mcp_server_version,omitempty"`
	MCPToolsEnabled     bool             `json:"mcp_tools_enabled,omitempty"`
	MCPResourcesEnabled bool             `json:"mcp_resources_enabled,omitempty"`
	MCPFileToolRoot     string           `json:"mcp_file_tool_root,omitempty"`
	MCPLogResourceSize  int              `json:"mcp_log_resource_size,omitempty"`
	MCPTransport        MCPTransportType `json:"mcp_transport,omitempty"`

	// CSP (Content Security Policy) configuration
	CSPWebWorkerSupport bool `json:"csp_web_worker_support,omitempty"`
	// contains filtered or unexported fields
}

ServerOptions contains all configuration settings for the HTTP server. Options can be set via WithXXX functions when creating a new server, environment variables, or a configuration file.

Zero values are sensible defaults for most applications.

func NewServerOptions

func NewServerOptions() *ServerOptions

NewServerOptions creates a new ServerOptions instance with values loaded in priority order: 1. Environment variables (highest priority) 2. Configuration file (options.json) 3. Default values (lowest priority) Returns a fully initialized ServerOptions struct ready for use.

type SystemResource

type SystemResource struct{}

SystemResource implements MCPResource for system information

func NewSystemResource

func NewSystemResource() *SystemResource

NewSystemResource creates a new system resource

func (*SystemResource) Description

func (r *SystemResource) Description() string

func (*SystemResource) List

func (r *SystemResource) List() ([]string, error)

func (*SystemResource) MimeType

func (r *SystemResource) MimeType() string

func (*SystemResource) Name

func (r *SystemResource) Name() string

func (*SystemResource) Read

func (r *SystemResource) Read() (interface{}, error)

func (*SystemResource) URI

func (r *SystemResource) URI() string

type ToolsCapability

type ToolsCapability struct {
	ListChanged bool `json:"listChanged,omitempty"`
}

Directories

Path Synopsis
examples
auth command
Example of how to use the auth package of Hyperserve
Example of how to use the auth package of Hyperserve
best-practices command
Package main demonstrates best practices for using hyperserve.
Package main demonstrates best practices for using hyperserve.
chaos command
complete command
configuration command
enterprise command
Enterprise example demonstrating FIPS 140-3 compliance and enhanced security features
Enterprise example demonstrating FIPS 140-3 compliance and enhanced security features
hello-world command
htmx-dynamic command
htmx-stream command
json-api command
mcp command
Package main demonstrates hyperserve's Model Context Protocol (MCP) support.
Package main demonstrates hyperserve's Model Context Protocol (MCP) support.
mcp-stdio command
Package main demonstrates hyperserve's MCP support as a stdio server for Claude Desktop.
Package main demonstrates hyperserve's MCP support as a stdio server for Claude Desktop.
static-files command
web-worker-csp command
go module

Jump to

Keyboard shortcuts

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