Initialize MCP/LSP servers in serve mode at startup

ober

acdb00d6e1af6ff9e1fecb80b97e9438ffafc501

diff --git a/lib/jcode/provider/provider.sls b/lib/jcode/provider/provider.sls
index a92f3cd..f789f2b 100644
--- a/lib/jcode/provider/provider.sls
+++ b/lib/jcode/provider/provider.sls
@@ -10,10 +10,10 @@
     (except (chezscheme) make-hash-table hash-table? iota \x31;+ \x31;-
       getenv path-extension path-absolute? thread? make-mutex
       mutex? mutex-name)
-    (std text json) (except (std net request) http-post-stream)
-    (std net tls-rustls) (std net tcp) (std misc string)
-    (std misc retry) (jcode core log) (jcode core message)
-    (jerboa core) (jerboa runtime))
+    (std text json) (std net request) (std net tls-rustls)
+    (std net tcp) (std misc string) (std misc retry)
+    (jcode core log) (jcode core message) (jerboa core)
+    (jerboa runtime))
   (def logger (make-logger "provider"))
   (def *api-retry-policy* (make-retry-policy 3 1.0 30.0 #t))
   (def (retryable-error? e)
diff --git a/lib/jcode/ui/serve.sls b/lib/jcode/ui/serve.sls
index 0bcce25..d3ec415 100644
--- a/lib/jcode/ui/serve.sls
+++ b/lib/jcode/ui/serve.sls
@@ -13,7 +13,8 @@
     (std os path) (std net tcp) (jcode core log)
     (jcode core config) (jcode core models) (jcode core session)
     (jcode core agent) (jcode tool registry) (jcode mcp client)
-    (jcode tool lsp) (jerboa core) (jerboa runtime))
+    (jcode tool lsp) (std misc thread) (jerboa core)
+    (jerboa runtime))
   (def logger (make-logger "serve"))
   (def *mutating-tools*
        '("write" "edit" "multi-edit" "patch" "bash" "git_commit"))
@@ -390,6 +391,10 @@
                    "[INFO] no token found (run with --port to generate)~n"))
              (flush-output-port (current-error-port))
              (exit 0)))
+         (let ([t-mcp (spawn init-mcp-tools)]
+               [t-lsp (spawn init-lsp-tools)])
+           (thread-join! t-mcp)
+           (thread-join! t-lsp))
          (let ([port-opt (assoc 'port opts)])
            (if port-opt
                (begin
diff --git a/src/jcode/provider/provider.ss b/src/jcode/provider/provider.ss
index bc70721..0e3a122 100644
--- a/src/jcode/provider/provider.ss
+++ b/src/jcode/provider/provider.ss
@@ -9,7 +9,7 @@
         provider-model)
 
 (import :std/text/json
-        (except (std net request) http-post-stream)
+        :std/net/request
         :std/net/tls-rustls
         :std/net/tcp
         :std/misc/string
diff --git a/src/jcode/ui/serve.ss b/src/jcode/ui/serve.ss
index fb5acfc..e4dd4b3 100644
--- a/src/jcode/ui/serve.ss
+++ b/src/jcode/ui/serve.ss
@@ -42,7 +42,8 @@
         :jcode/core/agent
         :jcode/tool/registry
         :jcode/mcp/client
-        :jcode/tool/lsp)
+        :jcode/tool/lsp
+        :std/misc/thread)
 
 (def logger (make-logger "serve"))
 
@@ -439,6 +440,11 @@
           (fprintf (current-error-port) "[INFO] no token found (run with --port to generate)~n"))
         (flush-output-port (current-error-port))
         (exit 0)))
+    ;; Initialize MCP and LSP connections (same as CLI/TUI)
+    (let ((t-mcp (spawn init-mcp-tools))
+          (t-lsp (spawn init-lsp-tools)))
+      (thread-join! t-mcp)
+      (thread-join! t-lsp))
     ;; Dispatch to TCP or stdio mode
     (let ((port-opt (assoc 'port opts)))
       (if port-opt