googleapis/mcp-toolbox · error

unable to initialize http log: %w

Error message

unable to initialize http log: %w

What it means

NewServer converts cfg.LogLevel (a severity enum) into a logging level via log.SeverityToLevel before wiring the HTTP request logger. If the configured log level string is not a recognized severity, the HTTP logger cannot be built and server startup aborts.

Source

Thrown at internal/server/server.go:455

		return nil, err
	}

	ctx, span := instrumentation.Tracer.Start(ctx, "toolbox/server/init")
	defer span.End()

	l, err := util.LoggerFromContext(ctx)
	if err != nil {
		return nil, err
	}

	// set up http serving
	r := chi.NewRouter()
	r.Use(middleware.Recoverer)

	// logging
	logLevel, err := log.SeverityToLevel(cfg.LogLevel.String())
	if err != nil {
		return nil, fmt.Errorf("unable to initialize http log: %w", err)
	}

	schema := *httplog.SchemaGCP
	schema.Level = cfg.LogLevel.String()
	schema.Concise(true)
	httpOpts := &httplog.Options{
		Level:  logLevel,
		Schema: &schema,
	}
	logger := l.SlogLogger()
	r.Use(httplog.RequestLogger(logger, httpOpts))

	sourcesMap, authServicesMap, embeddingModelsMap, toolsMap, promptsMap, groupsMap, err := InitializeConfigs(ctx, cfg)
	if err != nil {
		return nil, fmt.Errorf("unable to initialize configs: %w", err)
	}

	addr := net.JoinHostPort(cfg.Address, strconv.Itoa(cfg.Port))

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. Use a supported level: one of DEBUG/INFO/WARN/ERROR (case handled by SeverityToLevel) for --log-level.
  2. Check the value of the log-level flag or environment variable for typos/whitespace.
  3. In code, assign cfg.LogLevel from log.ParseSeverity-style helpers instead of raw strings.

Example fix

// before
toolbox --log-level verbose serve ...

// after
toolbox --log-level info serve ...
Defensive patterns

Strategy: validation

Validate before calling

if _, err := log.SeverityToLevel(cfg.LogLevel.String()); err != nil {
    return fmt.Errorf("invalid --log-level %q: use DEBUG|INFO|WARN|ERROR", cfg.LogLevel.String())
}

Try / catch

if srv, err := server.NewServer(ctx, cfg); err != nil {
    if strings.Contains(err.Error(), "unable to initialize http log") {
        cfg.LogLevel = log.ParseSeverity("info") // safe default
        srv, err = server.NewServer(ctx, cfg)
    }
}

Prevention

When it happens

Trigger: Starting the server with an unrecognized --log-level / LogLevel value (e.g. a typo or a level name the severity parser does not accept) when calling NewServer via the run/runServe commands.

Common situations: Setting LOG_LEVEL env or CLI flag to values like "verbose" or "warn2", or programmatic ServerConfig construction with an invalid LogLevel string.

Related errors


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