Skip to content

Commit c0520cf

Browse files
committed
Minor log improvement of failed to start MCPs.
1 parent 859023b commit c0520cf

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Unreleased
44

5+
- Minor log improvement of failed to start MCPs.
6+
57
## 0.51.1
68

79
- Bump mcp java sdk to 1.12.1.

src/eca/features/tools/mcp.clj

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
McpSchema$Tool
2929
McpTransport]
3030
[java.time Duration]
31-
[java.util List Map]))
31+
[java.util List Map]
32+
[java.util.concurrent TimeoutException]))
3233

3334
(set! *warn-on-reflection* true)
3435

@@ -68,10 +69,10 @@
6869
(getProcessBuilder [] (-> (ProcessBuilder. ^List pb-init-args)
6970
(.directory (io/file work-dir)))))))
7071

71-
(defn ^:private ->client ^McpSyncClient [name transport config workspaces]
72+
(defn ^:private ->client ^McpSyncClient [name transport init-timeout workspaces]
7273
(-> (McpClient/sync transport)
7374
(.requestTimeout (Duration/ofHours 10)) ;; required any value for initializationTimeout work
74-
(.initializationTimeout (Duration/ofSeconds (:mcpTimeoutSeconds config)))
75+
(.initializationTimeout (Duration/ofSeconds init-timeout))
7576
(.capabilities (-> (McpSchema$ClientCapabilities/builder)
7677
(.roots true)
7778
(.build)))
@@ -152,23 +153,28 @@
152153
(let [db @db*
153154
workspaces (:workspace-folders @db*)
154155
server-config (get-in config [:mcpServers name])
155-
obj-mapper (ObjectMapper.)]
156+
obj-mapper (ObjectMapper.)
157+
init-timeout (:mcpTimeoutSeconds config)
158+
transport (->transport server-config workspaces)
159+
client (->client name transport init-timeout workspaces)]
160+
(on-server-updated (->server name server-config :starting db))
161+
(swap! db* assoc-in [:mcp-clients name] {:client client :status :starting})
156162
(try
157-
(let [transport (->transport server-config workspaces)
158-
client (->client name transport config workspaces)]
159-
(on-server-updated (->server name server-config :starting db))
160-
(swap! db* assoc-in [:mcp-clients name] {:client client :status :starting})
161-
(.initialize client)
162-
(swap! db* assoc-in [:mcp-clients name :tools] (list-server-tools obj-mapper client))
163-
(swap! db* assoc-in [:mcp-clients name :prompts] (list-server-prompts client))
164-
(swap! db* assoc-in [:mcp-clients name :resources] (list-server-resources client))
165-
(swap! db* assoc-in [:mcp-clients name :status] :running)
166-
(on-server-updated (->server name server-config :running @db*)))
163+
(.initialize client)
164+
(swap! db* assoc-in [:mcp-clients name :tools] (list-server-tools obj-mapper client))
165+
(swap! db* assoc-in [:mcp-clients name :prompts] (list-server-prompts client))
166+
(swap! db* assoc-in [:mcp-clients name :resources] (list-server-resources client))
167+
(swap! db* assoc-in [:mcp-clients name :status] :running)
168+
(on-server-updated (->server name server-config :running @db*))
167169
(logger/info logger-tag (format "Started MCP server %s" name))
168170
(catch Exception e
169-
(logger/error logger-tag (format "Could not initialize MCP server %s." name) e)
171+
(let [cause-message (if (instance? TimeoutException (.getCause e))
172+
(format "Timeout of %s secs waiting for server start" init-timeout)
173+
(.getMessage (.getCause e)))]
174+
(logger/error logger-tag (format "Could not initialize MCP server %s: %s: %s" name (.getMessage e) cause-message)))
170175
(swap! db* assoc-in [:mcp-clients name :status] :failed)
171-
(on-server-updated (->server name server-config :failed db))))))
176+
(on-server-updated (->server name server-config :failed db))
177+
(.close client)))))
172178

173179
(defn initialize-servers-async! [{:keys [on-server-updated]} db* config]
174180
(let [db @db*]

0 commit comments

Comments
 (0)