googleapis/mcp-toolbox · error
error setting up OpenTelemetry: %w
Error message
error setting up OpenTelemetry: %w
What it means
MCP Toolbox wraps any failure from telemetry.SetupOTel — which initializes OpenTelemetry exporters (OTLP, GCP) and the global tracer/meter provider — with this message and aborts startup. It is thrown during command Setup, before the server or invocation begins, whenever tracing/metrics cannot be configured.
Source
Thrown at cmd/internal/options.go:111
}
// Handle logger separately from config
logger, err := log.NewLogger(opts.Cfg.LoggingFormat.String(), opts.Cfg.LogLevel.String(), loggerOut, opts.IOStreams.ErrOut)
if err != nil {
return ctx, nil, fmt.Errorf("unable to initialize logger: %w", err)
}
ctx = util.WithLogger(ctx, logger)
opts.Logger = logger
ctx = util.WithIgnoreUnknownTools(ctx, opts.Cfg.IgnoreUnknownTools)
logger.InfoContext(ctx, fmt.Sprintf("Starting MCP Toolbox for Databases version %s", opts.Cfg.Version))
// Set up OpenTelemetry
otelShutdown, err := telemetry.SetupOTel(ctx, opts.Cfg.Version, opts.Cfg.TelemetryOTLP, opts.Cfg.TelemetryGCP, opts.Cfg.TelemetryGCPProject, opts.Cfg.TelemetryServiceName)
if err != nil {
errMsg := fmt.Errorf("error setting up OpenTelemetry: %w", err)
logger.ErrorContext(ctx, errMsg.Error())
return ctx, nil, errMsg
}
shutdownFunc := func(ctx context.Context) error {
err := otelShutdown(ctx)
if err != nil {
errMsg := fmt.Errorf("error shutting down OpenTelemetry: %w", err)
logger.ErrorContext(ctx, errMsg.Error())
return err
}
return nil
}
instrumentation, err := telemetry.CreateTelemetryInstrumentation(opts.Cfg.Version)
if err != nil {
errMsg := fmt.Errorf("unable to create telemetry instrumentation: %w", err)
logger.ErrorContext(ctx, errMsg.Error())View on GitHub (pinned to 8cc6e09de2)
Solutions
- Check the wrapped root cause (%w) printed after this message — it names the actual telemetry failure
- If using GCP telemetry, set valid Application Default Credentials (gcloud auth application-default login) and a correct project ID
- Validate the OTLP endpoint URL and remove invalid OTEL_* env vars
- If telemetry is not needed, disable all telemetry flags (telemetryOTLP, telemetryGCP) so no exporter is created
Example fix
// before telemetryOTLP: "localhost:4317" // missing scheme // after telemetryOTLP: "http://localhost:4317"
Defensive patterns
Strategy: validation
Validate before calling
// before starting toolbox, validate telemetry inputs
if cfg.TelemetryGCP && os.Getenv("GOOGLE_APPLICATION_CREDENTIALS") == "" {
log.Fatal("telemetryGCP requires Application Default Credentials")
}
if cfg.TelemetryOTLP != "" {
if _, err := url.Parse(cfg.TelemetryOTLP); err != nil {
log.Fatalf("invalid telemetryOTLP endpoint: %v", err)
}
} Try / catch
otelShutdown, err := telemetry.SetupOTel(ctx, ...)
if err != nil {
return fmt.Errorf("error setting up OpenTelemetry: %w", err)
} Prevention
- Set credentials and project IDs before enabling telemetry flags
- Validate OTLP endpoint URLs in deployment config linting
- Avoid exporting raw OTEL_* env vars into the toolbox container unless intended
When it happens
Trigger: telemetry.SetupOTel returns an error: invalid telemetryOTLP endpoint, failed GCP/Cloud Trace client creation, missing or unusable telemetryGCPProject, or an exporter/provider construction failure.
Common situations: Setting telemetryGCP or telemetryGCPProject without valid GCP credentials (GOOGLE_APPLICATION_CREDENTIALS), pointing telemetryOTLP at a malformed URL, or a broken OTEL_* environment variable leaking into the exporter config.
Related errors
- error shutting down OpenTelemetry: %w
- unable to create telemetry instrumentation: %w
- unable to initialize logger: %w
- failed to discover OIDC config: %w
- unable to initialize tool %q: %w
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/b1a2a65283c61a9b.
Report an issue: GitHub.