Skip to content

Commit 4b23623

Browse files
committed
fix settings in scripts
1 parent 21f60e3 commit 4b23623

File tree

1 file changed

+37
-59
lines changed

1 file changed

+37
-59
lines changed

cmd/script.go

Lines changed: 37 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/mark3labs/mcphost/internal/config"
1212
"github.com/spf13/cobra"
13+
"github.com/spf13/viper"
1314
"gopkg.in/yaml.v3"
1415
)
1516

@@ -144,20 +145,7 @@ func runScriptCommand(ctx context.Context, scriptFile string, variables map[stri
144145
return fmt.Errorf("failed to parse script file: %v", err)
145146
}
146147

147-
// Store original flag values
148-
originalConfigFile := configFile
149-
originalPromptFlag := promptFlag
150-
originalModelFlag := modelFlag
151-
originalMaxSteps := maxSteps
152-
originalDebugMode := debugMode
153-
originalSystemPromptFile := systemPromptFile
154-
originalProviderAPIKey := providerAPIKey
155-
originalProviderURL := providerURL
156-
originalMaxTokens := maxTokens
157-
originalTemperature := temperature
158-
originalTopP := topP
159-
originalTopK := topK
160-
originalStopSequences := stopSequences
148+
161149

162150
// Create config from script or load normal config
163151
var mcpConfig *config.Config
@@ -177,24 +165,16 @@ func runScriptCommand(ctx context.Context, scriptFile string, variables map[stri
177165
// Override the global config for normal mode
178166
scriptMCPConfig = mcpConfig
179167

180-
// Apply script configuration to global flags (only if not overridden by command flags)
181-
applyScriptFlags(mcpConfig, cmd)
168+
// Set script values in viper (they will have same precedence as config file)
169+
setScriptValuesInViper(mcpConfig)
170+
171+
// Set the prompt flag if it was specified in the script and not overridden by command line
172+
if mcpConfig.Prompt != "" && promptFlag == "" {
173+
promptFlag = mcpConfig.Prompt
174+
}
182175

183-
// Restore original values after execution
176+
// Clean up script config after execution
184177
defer func() {
185-
configFile = originalConfigFile
186-
promptFlag = originalPromptFlag
187-
modelFlag = originalModelFlag
188-
maxSteps = originalMaxSteps
189-
debugMode = originalDebugMode
190-
systemPromptFile = originalSystemPromptFile
191-
providerAPIKey = originalProviderAPIKey
192-
providerURL = originalProviderURL
193-
maxTokens = originalMaxTokens
194-
temperature = originalTemperature
195-
topP = originalTopP
196-
topK = originalTopK
197-
stopSequences = originalStopSequences
198178
scriptMCPConfig = nil
199179
}()
200180

@@ -241,46 +221,44 @@ func mergeScriptConfig(mcpConfig *config.Config, scriptConfig *config.Config) {
241221
}
242222
}
243223

244-
func applyScriptFlags(mcpConfig *config.Config, cmd *cobra.Command) {
245-
// For scripts, we need to respect: flag > script > config > default
246-
// We can use cobra's Changed() method to detect if flags were explicitly set
247-
248-
// Only apply script values if the corresponding flag wasn't explicitly set
249-
if !cmd.Flags().Changed("prompt") && mcpConfig.Prompt != "" {
250-
promptFlag = mcpConfig.Prompt
224+
// setScriptValuesInViper sets script configuration values in viper
225+
// This makes script settings have the same precedence as config file settings
226+
func setScriptValuesInViper(mcpConfig *config.Config) {
227+
if mcpConfig.Prompt != "" {
228+
viper.Set("prompt", mcpConfig.Prompt)
251229
}
252-
if !cmd.Flags().Changed("model") && mcpConfig.Model != "" {
253-
modelFlag = mcpConfig.Model
230+
if mcpConfig.Model != "" {
231+
viper.Set("model", mcpConfig.Model)
254232
}
255-
if !cmd.Flags().Changed("max-steps") && mcpConfig.MaxSteps != 0 {
256-
maxSteps = mcpConfig.MaxSteps
233+
if mcpConfig.MaxSteps != 0 {
234+
viper.Set("max-steps", mcpConfig.MaxSteps)
257235
}
258-
if !cmd.Flags().Changed("debug") && mcpConfig.Debug {
259-
debugMode = mcpConfig.Debug
236+
if mcpConfig.Debug {
237+
viper.Set("debug", mcpConfig.Debug)
260238
}
261-
if !cmd.Flags().Changed("system-prompt") && mcpConfig.SystemPrompt != "" {
262-
systemPromptFile = mcpConfig.SystemPrompt
239+
if mcpConfig.SystemPrompt != "" {
240+
viper.Set("system-prompt", mcpConfig.SystemPrompt)
263241
}
264-
if !cmd.Flags().Changed("provider-api-key") && mcpConfig.ProviderAPIKey != "" {
265-
providerAPIKey = mcpConfig.ProviderAPIKey
242+
if mcpConfig.ProviderAPIKey != "" {
243+
viper.Set("provider-api-key", mcpConfig.ProviderAPIKey)
266244
}
267-
if !cmd.Flags().Changed("provider-url") && mcpConfig.ProviderURL != "" {
268-
providerURL = mcpConfig.ProviderURL
245+
if mcpConfig.ProviderURL != "" {
246+
viper.Set("provider-url", mcpConfig.ProviderURL)
269247
}
270-
if !cmd.Flags().Changed("max-tokens") && mcpConfig.MaxTokens != 0 {
271-
maxTokens = mcpConfig.MaxTokens
248+
if mcpConfig.MaxTokens != 0 {
249+
viper.Set("max-tokens", mcpConfig.MaxTokens)
272250
}
273-
if !cmd.Flags().Changed("temperature") && mcpConfig.Temperature != nil {
274-
temperature = *mcpConfig.Temperature
251+
if mcpConfig.Temperature != nil {
252+
viper.Set("temperature", *mcpConfig.Temperature)
275253
}
276-
if !cmd.Flags().Changed("top-p") && mcpConfig.TopP != nil {
277-
topP = *mcpConfig.TopP
254+
if mcpConfig.TopP != nil {
255+
viper.Set("top-p", *mcpConfig.TopP)
278256
}
279-
if !cmd.Flags().Changed("top-k") && mcpConfig.TopK != nil {
280-
topK = *mcpConfig.TopK
257+
if mcpConfig.TopK != nil {
258+
viper.Set("top-k", *mcpConfig.TopK)
281259
}
282-
if !cmd.Flags().Changed("stop-sequences") && len(mcpConfig.StopSequences) > 0 {
283-
stopSequences = mcpConfig.StopSequences
260+
if len(mcpConfig.StopSequences) > 0 {
261+
viper.Set("stop-sequences", mcpConfig.StopSequences)
284262
}
285263
}
286264

0 commit comments

Comments
 (0)