@@ -351,6 +351,9 @@ func createAndInitializeClient(ctx context.Context, name string, m config.MCPCon
351func createMcpClient(m config.MCPConfig) (*client.Client, error) {
351func createMcpClient(m config.MCPConfig) (*client.Client, error) {
352 switch m.Type {
352 switch m.Type {
353 case config.MCPStdio:
353 case config.MCPStdio:
354+ if strings.TrimSpace(m.Command) == "" {
355+ return nil, fmt.Errorf("mcp stdio config requires a non-empty 'command' field")
354 return client.NewStdioMCPClientWithOptions(
357 return client.NewStdioMCPClientWithOptions(
355 m.Command,
358 m.Command,
356 m.ResolvedEnv(),
359 m.ResolvedEnv(),
@@ -358,12 +361,18 @@ func createMcpClient(m config.MCPConfig) (*client.Client, error) {
358 transport.WithCommandLogger(mcpLogger{}),
361 transport.WithCommandLogger(mcpLogger{}),
360 case config.MCPHttp:
363 case config.MCPHttp:
364+ if strings.TrimSpace(m.URL) == "" {
365+ return nil, fmt.Errorf("mcp http config requires a non-empty 'url' field")
361 return client.NewStreamableHttpClient(
367 return client.NewStreamableHttpClient(
363 transport.WithHTTPHeaders(m.ResolvedHeaders()),
369 transport.WithHTTPHeaders(m.ResolvedHeaders()),
364 transport.WithHTTPLogger(mcpLogger{}),
370 transport.WithHTTPLogger(mcpLogger{}),
366 case config.MCPSse:
372 case config.MCPSse:
373+ if strings.TrimSpace(m.URL) == "" {
374+ return nil, fmt.Errorf("mcp sse config requires a non-empty 'url' field")
367 return client.NewSSEMCPClient(
376 return client.NewSSEMCPClient(
369 client.WithHeaders(m.ResolvedHeaders()),
378 client.WithHeaders(m.ResolvedHeaders()),