@@ -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