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

  1. Check the wrapped root cause (%w) printed after this message — it names the actual telemetry failure
  2. If using GCP telemetry, set valid Application Default Credentials (gcloud auth application-default login) and a correct project ID
  3. Validate the OTLP endpoint URL and remove invalid OTEL_* env vars
  4. 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

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


AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05). Data as JSON: /api/errors/b1a2a65283c61a9b. Report an issue: GitHub.