@@ -132,6 +132,16 @@ func CloseMCPClients() {
132132 }
133133}
134134
135+var mcpInitRequest = mcp.InitializeRequest{
136+ Params: mcp.InitializeParams{
137+ ProtocolVersion: mcp.LATEST_PROTOCOL_VERSION,
138+ ClientInfo: mcp.Implementation{
139+ Name: "Crush",
140+ Version: version.Version,
141+ },
142+ },
143+}
144+
135145func doGetMCPTools(ctx context.Context, permissions permission.Service, cfg *config.Config) []tools.BaseTool {
136146 var wg sync.WaitGroup
137147 result := csync.NewSlice[tools.BaseTool]()
@@ -143,15 +153,25 @@ func doGetMCPTools(ctx context.Context, permissions permission.Service, cfg *con
143153 wg.Add(1)
144154 go func(name string, m config.MCPConfig) {
145155 defer wg.Done()
146− c, err := doGetClient(m)
156+ c, err := createMcpClient(m)
147157 if err != nil {
148− slog.Error("error creating mcp client", "error", err)
158+ slog.Error("error creating mcp client", "error", err, "name", name)
149159 return
150160 }
151− if err := doInitClient(ctx, name, c); err != nil {
152− slog.Error("error initializing mcp client", "error", err)
161+ if err := c.Start(ctx); err != nil {
162+ slog.Error("error starting mcp client", "error", err, "name", name)
163+ _ = c.Close()
153164 return
154165 }
166+ if _, err := c.Initialize(ctx, mcpInitRequest); err != nil {
167+ slog.Error("error initializing mcp client", "error", err, "name", name)
168+ _ = c.Close()
169+ return
170+ }
171+
172+ slog.Info("Initialized mcp client", "name", name)
173+ mcpClients.Set(name, c)
174+
155175 result.Append(getTools(ctx, name, permissions, c, cfg.WorkingDir())...)
156176 }(name, m)
157177 }
@@ -159,25 +179,7 @@ func doGetMCPTools(ctx context.Context, permissions permission.Service, cfg *con
159179 return slices.Collect(result.Seq())
160180}
161181
162−func doInitClient(ctx context.Context, name string, c *client.Client) error {
163− initRequest := mcp.InitializeRequest{
164− Params: mcp.InitializeParams{
165− ProtocolVersion: mcp.LATEST_PROTOCOL_VERSION,
166− ClientInfo: mcp.Implementation{
167− Name: "Crush",
168− Version: version.Version,
169− },
170− },
171− }
172− if _, err := c.Initialize(ctx, initRequest); err != nil {
173− c.Close()
174− return err
175− }
176− mcpClients.Set(name, c)
177− return nil
178−}
179−
180−func doGetClient(m config.MCPConfig) (*client.Client, error) {
182+func createMcpClient(m config.MCPConfig) (*client.Client, error) {
181183 switch m.Type {
182184 case config.MCPStdio:
183185 return client.NewStdioMCPClient(