@@ -141,36 +141,52 @@ func getClientConfigPath(client string) (string, error) {
141
141
}
142
142
143
143
// getDefangMCPConfig returns the default MCP config for Defang
144
- func getDefangMCPConfig () MCPServerConfig {
145
- return MCPServerConfig {
146
- Command : "npx" ,
147
- Args : [] string { "-y" , "defang@latest" , "mcp" , "serve" },
144
+ func getDefangMCPConfig () ( * MCPServerConfig , error ) {
145
+ currentPath , err := os . Executable ()
146
+ if err != nil {
147
+ return nil , err
148
148
}
149
+
150
+ return & MCPServerConfig {
151
+ Command : currentPath ,
152
+ Args : []string {"mcp" , "serve" },
153
+ }, nil
149
154
}
150
155
151
156
// getVSCodeDefangMCPConfig returns the default MCP config for Defang in VSCode format
152
- func getVSCodeDefangMCPConfig () VSCodeMCPServerConfig {
153
- return VSCodeMCPServerConfig {
154
- Type : "stdio" ,
155
- Command : "npx" ,
156
- Args : []string {"-y" , "defang@latest" , "mcp" , "serve" },
157
+ func getVSCodeDefangMCPConfig () (* VSCodeMCPServerConfig , error ) {
158
+ currentPath , err := os .Executable ()
159
+ if err != nil {
160
+ return nil , err
157
161
}
162
+ return & VSCodeMCPServerConfig {
163
+ Type : "stdio" ,
164
+ Command : currentPath ,
165
+ Args : []string {"mcp" , "serve" },
166
+ }, nil
158
167
}
159
168
160
169
// getVSCodeServerConfig returns a map with the VSCode-specific MCP server config
161
- func getVSCodeServerConfig () map [string ]interface {} {
162
- config := getVSCodeDefangMCPConfig ()
170
+ func getVSCodeServerConfig () (map [string ]interface {}, error ) {
171
+ config , err := getVSCodeDefangMCPConfig ()
172
+ if err != nil {
173
+ return nil , err
174
+ }
163
175
return map [string ]interface {}{
164
176
"type" : config .Type ,
165
177
"command" : config .Command ,
166
178
"args" : config .Args ,
167
- }
179
+ }, nil
168
180
}
169
181
170
182
// handleVSCodeConfig handles the special case for VSCode settings.json
171
183
func handleVSCodeConfig (configPath string ) error {
172
184
// Create or update the config file
173
185
var existingData map [string ]interface {}
186
+ config , err := getVSCodeServerConfig ()
187
+ if err != nil {
188
+ return fmt .Errorf ("failed to get VSCode MCP config: %w" , err )
189
+ }
174
190
175
191
// Check if the file exists
176
192
if _ , err := os .Stat (configPath ); err == nil {
@@ -192,7 +208,7 @@ func handleVSCodeConfig(configPath string) error {
192
208
// Create new mcp section
193
209
existingData ["mcp" ] = map [string ]interface {}{
194
210
"servers" : map [string ]interface {}{
195
- "defang" : getVSCodeServerConfig () ,
211
+ "defang" : config ,
196
212
},
197
213
}
198
214
} else {
@@ -205,7 +221,7 @@ func handleVSCodeConfig(configPath string) error {
205
221
serversData , ok := mcpMap ["servers" ]
206
222
if ! ok {
207
223
mcpMap ["servers" ] = map [string ]interface {}{
208
- "defang" : getVSCodeServerConfig () ,
224
+ "defang" : config ,
209
225
}
210
226
} else {
211
227
serversMap , ok := serversData .(map [string ]interface {})
@@ -214,7 +230,7 @@ func handleVSCodeConfig(configPath string) error {
214
230
}
215
231
216
232
// Add or update the Defang MCP server config
217
- serversMap ["defang" ] = getVSCodeServerConfig ()
233
+ serversMap ["defang" ] = config
218
234
219
235
mcpMap ["servers" ] = serversMap
220
236
}
@@ -226,7 +242,7 @@ func handleVSCodeConfig(configPath string) error {
226
242
existingData = map [string ]interface {}{
227
243
"mcp" : map [string ]interface {}{
228
244
"servers" : map [string ]interface {}{
229
- "defang" : getVSCodeServerConfig () ,
245
+ "defang" : config ,
230
246
},
231
247
},
232
248
}
@@ -302,8 +318,12 @@ func SetupClient(client string) error {
302
318
config .MCPServers = make (map [string ]MCPServerConfig )
303
319
}
304
320
321
+ defangConfig , err := getDefangMCPConfig ()
322
+ if err != nil {
323
+ return fmt .Errorf ("failed to get Defang MCP config: %w" , err )
324
+ }
305
325
// Add or update the Defang MCP server config
306
- config .MCPServers ["defang" ] = getDefangMCPConfig ()
326
+ config .MCPServers ["defang" ] = * defangConfig
307
327
308
328
// Write the config to the file
309
329
data , err := json .MarshalIndent (config , "" , " " )
0 commit comments