package config import ( "log/slog" "github.com/spf13/viper" ) type Config struct { Transport string `mapstructure:"transport"` // stdio | sse } func Load() (*Config, error) { v := viper.New() v.SetConfigName("config") v.SetConfigType("yaml") v.AddConfigPath("./config") v.AddConfigPath(".") v.AddConfigPath("/config") v.SetEnvPrefix("OPS_MCP") v.AutomaticEnv() v.SetDefault("transport", "stdio") // 配置文件不存在不算错误,直接用默认值 + 环境变量 if err := v.ReadInConfig(); err != nil { slog.Warn("no config file found, using defaults and env vars", "err", err) } cfg := &Config{} if err := v.Unmarshal(cfg); err != nil { return nil, err } return cfg, nil }