From a3bc1c378c28a87239e842bc2f6e2abc1c60ffbb Mon Sep 17 00:00:00 2001 From: Amolith Date: Wed, 10 Jun 2026 17:16:35 -0600 Subject: [PATCH] config: resolve MCP HTTP address --- internal/appconfig/config.go | 13 ++++++- internal/appconfig/config_test.go | 61 +++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/internal/appconfig/config.go b/internal/appconfig/config.go index 9b475e73db23c270c34c9c29725f5edf3387e2c3..2b9211fcf076fedc806d8b746b70985da5077371 100644 --- a/internal/appconfig/config.go +++ b/internal/appconfig/config.go @@ -19,7 +19,10 @@ import ( "git.secluded.site/cooked-mcp/internal/configvalue" ) -const defaultBaseURL = "https://cooked.wiki" +const ( + defaultBaseURL = "https://cooked.wiki" + defaultHTTPAddr = "127.0.0.1:8123" +) var userHomeDir = os.UserHomeDir @@ -89,11 +92,19 @@ func Load(ctx context.Context, path string, resolver *configvalue.Resolver) (Con if err != nil { return Config{}, err } + httpAddr := defaultHTTPAddr + if fileConfig.MCP.HTTPAddr != "" { + httpAddr = fileConfig.MCP.HTTPAddr + } + if envHTTPAddr := os.Getenv("COOKED_MCP_HTTP_ADDR"); envHTTPAddr != "" { + httpAddr = envHTTPAddr + } return Config{ Username: username, Password: password, BaseURL: baseURL, + HTTPAddr: httpAddr, }, nil } diff --git a/internal/appconfig/config_test.go b/internal/appconfig/config_test.go index 1e056bf9e1f6ae3e646f50f03098ae2612ee5490..cfaec5a46383def424efdcadccfaa6ad0b2cf610 100644 --- a/internal/appconfig/config_test.go +++ b/internal/appconfig/config_test.go @@ -59,6 +59,67 @@ password = "toml-password" } } +func TestLoadDefaultsHTTPAddr(t *testing.T) { + configPath := filepath.Join(t.TempDir(), "config.toml") + writeConfig(t, configPath, `[user] +name = "toml-user" +password = "toml-password" +`) + + got, err := Load(context.Background(), configPath, configvalue.NewResolver()) + if err != nil { + t.Fatalf("Load() error = %v", err) + } + + if got.HTTPAddr != "127.0.0.1:8123" { + t.Fatalf("HTTPAddr = %q, want default loopback address", got.HTTPAddr) + } +} + +// server.CONFIG.8-2 +func TestLoadACIDServerConfig8_2LoadsTOMLHTTPAddr(t *testing.T) { + configPath := filepath.Join(t.TempDir(), "config.toml") + writeConfig(t, configPath, `[user] +name = "toml-user" +password = "toml-password" + +[mcp] +http_addr = "127.0.0.1:9000" +`) + + got, err := Load(context.Background(), configPath, configvalue.NewResolver()) + if err != nil { + t.Fatalf("Load() error = %v", err) + } + + if got.HTTPAddr != "127.0.0.1:9000" { + t.Fatalf("HTTPAddr = %q, want TOML address", got.HTTPAddr) + } +} + +// server.CONFIG.3 server.CONFIG.8-1 +func TestLoadACIDServerConfig3And8_1EnvironmentOverridesTOMLHTTPAddr(t *testing.T) { + t.Setenv("COOKED_MCP_HTTP_ADDR", "127.0.0.1:9001") + + configPath := filepath.Join(t.TempDir(), "config.toml") + writeConfig(t, configPath, `[user] +name = "toml-user" +password = "toml-password" + +[mcp] +http_addr = "127.0.0.1:9000" +`) + + got, err := Load(context.Background(), configPath, configvalue.NewResolver()) + if err != nil { + t.Fatalf("Load() error = %v", err) + } + + if got.HTTPAddr != "127.0.0.1:9001" { + t.Fatalf("HTTPAddr = %q, want environment address", got.HTTPAddr) + } +} + func TestLoadRejectsMissingExplicitConfigFile(t *testing.T) { _, err := Load(context.Background(), filepath.Join(t.TempDir(), "missing.toml"), configvalue.NewResolver()) if err == nil {