|
31 | 31 |
|
32 | 32 | (set! *warn-on-reflection* true) |
33 | 33 |
|
| 34 | +;; TODO create tests for this ns |
| 35 | + |
34 | 36 | (def ^:private logger-tag "[MCP]") |
35 | 37 |
|
36 | 38 | (def ^:private env-var-regex |
|
130 | 132 | (logger/debug logger-tag "Could not list resources:" (.getMessage e)) |
131 | 133 | []))) |
132 | 134 |
|
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 | | - |
140 | 135 | (defn ^:private initialize-server! [name db* config on-server-updated] |
141 | 136 | (let [db @db* |
142 | 137 | workspaces (:workspace-folders @db*) |
|
192 | 187 | (:mcp-clients db))) |
193 | 188 |
|
194 | 189 | (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) |
196 | 195 | result (try |
197 | 196 | (let [result (.callTool ^McpSyncClient mcp-client |
198 | 197 | (McpSchema$CallToolRequest. name arguments))] |
|
218 | 217 | (:mcp-clients db))) |
219 | 218 |
|
220 | 219 | (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) |
222 | 225 | prompt (.getPrompt ^McpSyncClient mcp-client (McpSchema$GetPromptRequest. name arguments)) |
223 | 226 | result {:description (.description prompt) |
224 | 227 | :messages (mapv (fn [^McpSchema$PromptMessage message] |
|
229 | 232 | result)) |
230 | 233 |
|
231 | 234 | (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) |
233 | 240 | resource (.readResource ^McpSyncClient mcp-client (McpSchema$ReadResourceRequest. uri)) |
234 | 241 | result {:contents (mapv ->resource-content (.contents resource))}] |
235 | 242 | (logger/debug logger-tag "Resource result:" result) |
|
0 commit comments