Skip to content

Commit 5f591dc

Browse files
committed
Fix MCP tool calls
1 parent c76956c commit 5f591dc

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
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+
- Fix mcp tool calls.
6+
57
## 0.15.0
68

79
- Support MCP resources as a new context.

src/eca/features/tools/mcp.clj

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131

3232
(set! *warn-on-reflection* true)
3333

34+
;; TODO create tests for this ns
35+
3436
(def ^:private logger-tag "[MCP]")
3537

3638
(def ^:private env-var-regex
@@ -130,13 +132,6 @@
130132
(logger/debug logger-tag "Could not list resources:" (.getMessage e))
131133
[])))
132134

133-
(defn ^:private mcp-client-from-db [pred db]
134-
(->> (vals (:mcp-clients db))
135-
(keep (fn [{:keys [client resources]}]
136-
(when (some pred resources)
137-
client)))
138-
first))
139-
140135
(defn ^:private initialize-server! [name db* config on-server-updated]
141136
(let [db @db*
142137
workspaces (:workspace-folders @db*)
@@ -192,7 +187,11 @@
192187
(:mcp-clients db)))
193188

194189
(defn call-tool! [^String name ^Map arguments db]
195-
(let [mcp-client (mcp-client-from-db #(= name (:name %)) db)
190+
(let [mcp-client (->> (vals (:mcp-clients db))
191+
(keep (fn [{:keys [client tools]}]
192+
(when (some #(= name (:name %)) tools)
193+
client)))
194+
first)
196195
result (try
197196
(let [result (.callTool ^McpSyncClient mcp-client
198197
(McpSchema$CallToolRequest. name arguments))]
@@ -218,7 +217,11 @@
218217
(:mcp-clients db)))
219218

220219
(defn get-prompt! [^String name ^Map arguments db]
221-
(let [mcp-client (mcp-client-from-db #(= name (:name %)) db)
220+
(let [mcp-client (->> (vals (:mcp-clients db))
221+
(keep (fn [{:keys [client prompts]}]
222+
(when (some #(= name (:name %)) prompts)
223+
client)))
224+
first)
222225
prompt (.getPrompt ^McpSyncClient mcp-client (McpSchema$GetPromptRequest. name arguments))
223226
result {:description (.description prompt)
224227
:messages (mapv (fn [^McpSchema$PromptMessage message]
@@ -229,7 +232,11 @@
229232
result))
230233

231234
(defn get-resource! [^String uri db]
232-
(let [mcp-client (mcp-client-from-db #(= uri (:uri %)) db)
235+
(let [mcp-client (->> (vals (:mcp-clients db))
236+
(keep (fn [{:keys [client resources]}]
237+
(when (some #(= uri (:uri %)) resources)
238+
client)))
239+
first)
233240
resource (.readResource ^McpSyncClient mcp-client (McpSchema$ReadResourceRequest. uri))
234241
result {:contents (mapv ->resource-content (.contents resource))}]
235242
(logger/debug logger-tag "Resource result:" result)

0 commit comments

Comments
 (0)