|
59 | 59 | (str "$" var1) |
60 | 60 | (str "${" var2 "}")))))) |
61 | 61 |
|
62 | | -(defn ^:private split-sse-url |
63 | | - "Split an SSE URL into base URI and endpoint path. |
| 62 | +(defn ^:private split-url |
| 63 | + "Split a URL into base URI and endpoint path. |
64 | 64 | Examples: |
65 | 65 | - 'https://api.example.com/v1/sse' -> ['https://api.example.com', '/v1/sse'] |
66 | | - - 'https://mcp.example.com/sse?key=abc' -> ['https://mcp.example.com', '/sse?key=abc']" |
| 66 | + - 'https://mcp.example.com/sse?key=abc' -> ['https://mcp.example.com', '/sse?key=abc'] |
| 67 | + - 'https://api.z.ai/api/mcp/web_reader/mcp' -> ['https://api.z.ai', '/api/mcp/web_reader/mcp']" |
67 | 68 | [^String url] |
68 | 69 | (let [uri (java.net.URI. url) |
69 | 70 | scheme (.getScheme uri) |
|
90 | 91 | (when-let [access-token (get-in db [:mcp-auth server-name :access-token])] |
91 | 92 | (.header builder "Authorization" (str "Bearer " access-token)))))] |
92 | 93 | (if sse? |
93 | | - (let [[base-uri sse-endpoint] (split-sse-url url)] |
| 94 | + (let [[base-uri sse-endpoint] (split-url url)] |
94 | 95 | (logger/info logger-tag (format "Creating SSE transport for server '%s' - base: %s, endpoint: %s" server-name base-uri sse-endpoint)) |
95 | 96 | (-> (HttpClientSseClientTransport/builder base-uri) |
96 | 97 | (.sseEndpoint sse-endpoint) |
97 | 98 | (.httpRequestCustomizer customizer) |
98 | 99 | (.build))) |
99 | | - (do |
100 | | - (logger/info logger-tag (format "Creating HTTP transport for server '%s' at URL: %s" server-name url)) |
101 | | - (-> (HttpClientStreamableHttpTransport/builder url) |
| 100 | + (let [[base-uri endpoint] (split-url url)] |
| 101 | + (logger/info logger-tag (format "Creating HTTP transport for server '%s' - base: %s, endpoint: %s" server-name base-uri endpoint)) |
| 102 | + (-> (HttpClientStreamableHttpTransport/builder base-uri) |
| 103 | + (.endpoint endpoint) |
102 | 104 | (.httpRequestCustomizer customizer) |
103 | 105 | (.build))))) |
104 | 106 |
|
|
266 | 268 | (let [db @db* |
267 | 269 | workspaces (:workspace-folders @db*) |
268 | 270 | server-config (get-in config [:mcpServers name]) |
| 271 | + _ (on-server-updated (->server name server-config :starting db)) |
269 | 272 | url (:url server-config) |
270 | 273 | ;; Skip OAuth entirely if Authorization header is configured |
271 | 274 | has-static-auth? (some-> server-config :headers :Authorization some?) |
|
305 | 308 | (on-server-updated (->server name server-config :running @db*)))) |
306 | 309 | client (->client name transport init-timeout workspaces |
307 | 310 | {:on-tools-change on-tools-change})] |
308 | | - (on-server-updated (->server name server-config :starting db)) |
309 | 311 | (swap! db* assoc-in [:mcp-clients name] {:client client :status :starting}) |
310 | 312 | (try |
311 | 313 | (.initialize client) |
|
0 commit comments