github/github-mcp-server · error

failed to open log file: %w

Error message

failed to open log file: %w

What it means

Error "failed to open log file: %w" thrown in github/github-mcp-server.

Source

Thrown at internal/ghmcp/server.go:293

			authModes++
		}
	}
	if authModes > 1 {
		return fmt.Errorf("choose exactly one authentication mode: a static Token, OAuthManager, or TokenProvider")
	}

	// Create app context
	ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
	defer stop()

	t, dumpTranslations := translations.TranslationHelper()

	var slogHandler slog.Handler
	var logOutput io.Writer
	if cfg.LogFilePath != "" {
		file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)
		if err != nil {
			return fmt.Errorf("failed to open log file: %w", err)
		}
		logOutput = file
		slogHandler = slog.NewTextHandler(logOutput, &slog.HandlerOptions{Level: slog.LevelDebug})
	} else {
		logOutput = os.Stderr
		slogHandler = slog.NewTextHandler(logOutput, &slog.HandlerOptions{Level: slog.LevelInfo})
	}
	logger := slog.New(slogHandler)
	logger.Info("starting server", "version", cfg.Version, "host", cfg.Host, "readOnly", cfg.ReadOnly, "lockdownEnabled", cfg.LockdownMode)

	// Determine the scope set used to filter tools. Classic PATs expose their
	// granted scopes via the API; OAuth uses the requested scopes (the default
	// set hides nothing, a narrower explicit set filters accordingly). Other
	// token types don't advertise scopes, so filtering is skipped.
	var tokenScopes []string
	switch {
	case strings.HasPrefix(cfg.Token, "ghp_"):
		fetchedScopes, err := fetchTokenScopesForHost(ctx, cfg.Token, cfg.Host)

View on GitHub (pinned to 0ea1f775a7)

When it happens

Trigger: Thrown at internal/ghmcp/server.go:293 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of github/github-mcp-server@0ea1f775a7 (2026-08-15). Data as JSON: /api/errors/82a0102050a46410. Report an issue: GitHub.