@@ -70,6 +70,8 @@ type RunFlags struct {
7070 // Telemetry configuration
7171 OtelEndpoint string
7272 OtelServiceName string
73+ OtelTracingEnabled bool
74+ OtelMetricsEnabled bool
7375 OtelSamplingRate float64
7476 OtelHeaders []string
7577 OtelInsecure bool
@@ -174,6 +176,10 @@ func AddRunFlags(cmd *cobra.Command, config *RunFlags) {
174176 "OpenTelemetry OTLP endpoint URL (e.g., https://api.honeycomb.io)" )
175177 cmd .Flags ().StringVar (& config .OtelServiceName , "otel-service-name" , "" ,
176178 "OpenTelemetry service name (defaults to toolhive-mcp-proxy)" )
179+ cmd .Flags ().BoolVar (& config .OtelTracingEnabled , "otel-tracing-enabled" , false ,
180+ "Enable distributed tracing (when OTLP endpoint is configured)" )
181+ cmd .Flags ().BoolVar (& config .OtelMetricsEnabled , "otel-metrics-enabled" , false ,
182+ "Enable OTLP metrics export (when OTLP endpoint is configured)" )
177183 cmd .Flags ().Float64Var (& config .OtelSamplingRate , "otel-sampling-rate" , 0.1 , "OpenTelemetry trace sampling rate (0.0-1.0)" )
178184 cmd .Flags ().StringArrayVar (& config .OtelHeaders , "otel-headers" , nil ,
179185 "OpenTelemetry OTLP headers in key=value format (e.g., x-honeycomb-team=your-api-key)" )
@@ -292,8 +298,8 @@ func setupTelemetryConfiguration(cmd *cobra.Command, runFlags *RunFlags) *teleme
292298 runFlags .OtelEndpoint , runFlags .OtelSamplingRate , runFlags .OtelEnvironmentVariables )
293299
294300 return createTelemetryConfig (finalOtelEndpoint , runFlags .OtelEnablePrometheusMetricsPath ,
295- runFlags .OtelServiceName , finalOtelSamplingRate , runFlags .OtelHeaders , runFlags .OtelInsecure ,
296- finalOtelEnvironmentVariables )
301+ runFlags .OtelServiceName , runFlags .OtelTracingEnabled , runFlags .OtelMetricsEnabled , finalOtelSamplingRate ,
302+ runFlags . OtelHeaders , runFlags . OtelInsecure , finalOtelEnvironmentVariables )
297303}
298304
299305// setupRuntimeAndValidation creates container runtime and selects environment variable validator
@@ -450,7 +456,8 @@ func buildRunnerConfig(
450456 // Set additional configurations that are still needed in old format for other parts of the system
451457 builder = builder .WithOIDCConfig (oidcIssuer , oidcAudience , oidcJwksURL , oidcIntrospectionURL , oidcClientID , oidcClientSecret ,
452458 runFlags .ThvCABundle , runFlags .JWKSAuthTokenFile , runFlags .ResourceURL , runFlags .JWKSAllowPrivateIP ).
453- WithTelemetryConfig (finalOtelEndpoint , runFlags .OtelEnablePrometheusMetricsPath , runFlags .OtelServiceName ,
459+ WithTelemetryConfig (finalOtelEndpoint , runFlags .OtelEnablePrometheusMetricsPath ,
460+ runFlags .OtelTracingEnabled , runFlags .OtelMetricsEnabled , runFlags .OtelServiceName ,
454461 finalOtelSamplingRate , runFlags .OtelHeaders , runFlags .OtelInsecure , finalOtelEnvironmentVariables ).
455462 WithToolsFilter (runFlags .ToolsFilter )
456463
@@ -585,7 +592,7 @@ func createOIDCConfig(oidcIssuer, oidcAudience, oidcJwksURL, oidcIntrospectionUR
585592
586593// createTelemetryConfig creates a telemetry configuration if any telemetry parameters are provided
587594func createTelemetryConfig (otelEndpoint string , otelEnablePrometheusMetricsPath bool ,
588- otelServiceName string , otelSamplingRate float64 , otelHeaders []string ,
595+ otelServiceName string , otelTracingEnabled bool , otelMetricsEnabled bool , otelSamplingRate float64 , otelHeaders []string ,
589596 otelInsecure bool , otelEnvironmentVariables []string ) * telemetry.Config {
590597 if otelEndpoint == "" && ! otelEnablePrometheusMetricsPath {
591598 return nil
@@ -623,6 +630,8 @@ func createTelemetryConfig(otelEndpoint string, otelEnablePrometheusMetricsPath
623630 Endpoint : otelEndpoint ,
624631 ServiceName : serviceName ,
625632 ServiceVersion : telemetry .DefaultConfig ().ServiceVersion ,
633+ TracingEnabled : otelTracingEnabled ,
634+ MetricsEnabled : otelMetricsEnabled ,
626635 SamplingRate : otelSamplingRate ,
627636 Headers : headers ,
628637 Insecure : otelInsecure ,
0 commit comments