httpsse

package
v0.13.0 Latest Latest
Warning

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

Go to latest
Published: Mar 26, 2026 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Overview

Package httpsse provides an HTTP proxy implementation for Server-Sent Events (SSE) used in communication between the client and MCP server.

Package httpsse provides MCP ping functionality for HTTP SSE proxies.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewMCPPinger added in v0.0.46

func NewMCPPinger(proxy *HTTPSSEProxy) healthcheck.MCPPinger

NewMCPPinger creates a new MCP pinger for HTTP SSE proxies

Types

type HTTPSSEProxy

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

HTTPSSEProxy encapsulates the HTTP proxy functionality for SSE transports. It provides SSE endpoints and JSON-RPC message handling.

func NewHTTPSSEProxy

func NewHTTPSSEProxy(
	host string,
	port int,
	trustProxyHeaders bool,
	prometheusHandler http.Handler,
	middlewares []types.NamedMiddleware,
	opts ...Option,
) *HTTPSSEProxy

NewHTTPSSEProxy creates a new HTTP SSE proxy for transports.

func (*HTTPSSEProxy) ForwardResponseToClients

func (p *HTTPSSEProxy) ForwardResponseToClients(_ context.Context, msg jsonrpc2.Message) error

ForwardResponseToClients forwards a response from the destination to all connected SSE clients.

func (*HTTPSSEProxy) GetMessageChannel

func (p *HTTPSSEProxy) GetMessageChannel() chan jsonrpc2.Message

GetMessageChannel returns the channel for messages to/from the destination.

func (*HTTPSSEProxy) IsRunning added in v0.9.1

func (p *HTTPSSEProxy) IsRunning() (bool, error)

IsRunning checks if the proxy is running.

func (*HTTPSSEProxy) SendMessageToDestination

func (p *HTTPSSEProxy) SendMessageToDestination(msg jsonrpc2.Message) error

SendMessageToDestination sends a message to the destination via the message channel.

func (*HTTPSSEProxy) Start

func (p *HTTPSSEProxy) Start(_ context.Context) error

Start starts the HTTP SSE proxy.

func (*HTTPSSEProxy) Stop

func (p *HTTPSSEProxy) Stop(ctx context.Context) error

Stop stops the HTTP SSE proxy. It is safe to call Stop more than once or concurrently; only the first call performs the shutdown sequence.

type MCPPinger added in v0.0.46

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

MCPPinger implements healthcheck.MCPPinger for HTTP SSE proxies

func (*MCPPinger) Ping added in v0.0.46

func (p *MCPPinger) Ping(ctx context.Context) (time.Duration, error)

Ping sends a JSON-RPC ping request to the MCP server and waits for the response Following the MCP ping specification: https://modelcontextprotocol.io/specification/2025-03-26/basic/utilities/ping

type Option added in v0.13.0

type Option func(*HTTPSSEProxy)

Option configures an HTTPSSEProxy.

func WithSessionStorage added in v0.13.0

func WithSessionStorage(storage session.Storage) Option

WithSessionStorage injects a custom storage backend into the session manager. When not provided, the proxy uses in-memory LocalStorage (single-replica default). Provide a Redis-backed storage for multi-replica deployments so all replicas share the same session store.

Architectural note: HTTPSSEProxy is used by StdioTransport for stdio-backed MCP servers. SSE fan-out (ForwardResponseToClients) and POST handling are both local to the instance holding the live SSE connection, so Redis storage enables cross-replica session metadata sharing but does NOT solve cross-replica message delivery — a POST accepted on replica B won't reach a client whose SSE connection is on replica A. Callers must ensure an external load balancer provides session affinity (sticky sessions) when using distributed storage with this proxy.

Prefer Streamable HTTP (ProxyModeStreamableHTTP), also supported on StdioTransport, which does not have this affinity constraint.

Note: SSE fan-out and graceful disconnect use a separate in-memory liveSSESessions registry, not the session manager, so any Storage implementation is safe to inject here.

type Proxy

type Proxy interface {
	// Start starts the proxy.
	Start(ctx context.Context) error

	// Stop stops the proxy.
	Stop(ctx context.Context) error

	// GetMessageChannel returns the channel for messages to/from the destination.
	GetMessageChannel() chan jsonrpc2.Message

	// GetResponseChannel returns the channel for receiving messages from the destination.
	GetResponseChannel() <-chan jsonrpc2.Message

	// SendMessageToDestination sends a message to the destination.
	SendMessageToDestination(msg jsonrpc2.Message) error

	// ForwardResponseToClients forwards a response from the destination to clients.
	ForwardResponseToClients(ctx context.Context, msg jsonrpc2.Message) error

	// SendResponseMessage sends a message to the response channel.
	SendResponseMessage(msg jsonrpc2.Message) error
}

Proxy defines the interface for proxying messages between clients and destinations.

Jump to

Keyboard shortcuts

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