@@ -72,8 +72,22 @@ type (
7272 }
7373)
7474
75- // NewServer creates a new MCP server
76- func NewServer (logger * zap.Logger , port int , store storage.Store , sessionStore session.Store , a auth.Auth , forwardConfig config.ForwardConfig , traceCapture apptrace.CaptureConfig ) (* Server , error ) {
75+ // ServerOption allows configuring optional server features without breaking callers.
76+ type ServerOption func (* Server )
77+
78+ // WithTraceCapture sets the trace capture configuration.
79+ func WithTraceCapture (c apptrace.CaptureConfig ) ServerOption {
80+ return func (s * Server ) { s .traceCapture = c }
81+ }
82+
83+ // WithForwardConfig sets the forward proxy configuration.
84+ func WithForwardConfig (cfg config.ForwardConfig ) ServerOption {
85+ return func (s * Server ) { s .applyForwardConfig (cfg ) }
86+ }
87+
88+ // NewServer creates a new MCP server. Required params are explicit; optional
89+ // features are configured via ServerOption (e.g., tracing, forward config).
90+ func NewServer (logger * zap.Logger , port int , store storage.Store , sessionStore session.Store , a auth.Auth , opts ... ServerOption ) (* Server , error ) {
7791 s := & Server {
7892 logger : logger ,
7993 port : port ,
@@ -84,15 +98,13 @@ func NewServer(logger *zap.Logger, port int, store storage.Store, sessionStore s
8498 shutdownCh : make (chan struct {}),
8599 toolRespHandler : CreateResponseHandlerChain (),
86100 auth : a ,
87- forwardConfig : forwardConfig ,
88- traceCapture : traceCapture ,
89- caseInsensitive : forwardConfig .Header .CaseInsensitive ,
90101 }
91102
92- // Pre-parse header lists for efficient runtime lookup (only if forward is enabled)
93- if forwardConfig .Enabled {
94- s .ignoreHeaders = parseHeaderList (forwardConfig .Header .IgnoreHeaders , forwardConfig .Header .CaseInsensitive )
95- s .allowHeaders = parseHeaderList (forwardConfig .Header .AllowHeaders , forwardConfig .Header .CaseInsensitive )
103+ // Apply options
104+ for _ , opt := range opts {
105+ if opt != nil {
106+ opt (s )
107+ }
96108 }
97109
98110 // Load HTML templates
@@ -105,6 +117,19 @@ func NewServer(logger *zap.Logger, port int, store storage.Store, sessionStore s
105117 return s , nil
106118}
107119
120+ // applyForwardConfig sets forward config and recomputes derived fields.
121+ func (s * Server ) applyForwardConfig (cfg config.ForwardConfig ) {
122+ s .forwardConfig = cfg
123+ s .caseInsensitive = cfg .Header .CaseInsensitive
124+ if cfg .Enabled {
125+ s .ignoreHeaders = parseHeaderList (cfg .Header .IgnoreHeaders , cfg .Header .CaseInsensitive )
126+ s .allowHeaders = parseHeaderList (cfg .Header .AllowHeaders , cfg .Header .CaseInsensitive )
127+ } else {
128+ s .ignoreHeaders = nil
129+ s .allowHeaders = nil
130+ }
131+ }
132+
108133// RegisterRoutes registers routes with the given router for MCP servers
109134func (s * Server ) RegisterRoutes (ctx context.Context ) error {
110135 s .router .GET ("/health_check" , func (c * gin.Context ) {
0 commit comments