File size: 1,589 Bytes
119e586
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(ns snapkitty.lisp.mcp.server
  "MCP server entry point"
  (:require ["@modelcontextprotocol/sdk/server/mcp.js" :refer [McpServer]]
            ["@modelcontextprotocol/sdk/server/stdio.js" :refer [StdioServerTransport]]
            [promesa.core :as p]
            [snapkitty.lisp.mcp.config :as config]
            [snapkitty.lisp.mcp.tools :as tools]
            [snapkitty.lisp.mcp.util :as util]
            [snapkitty.lisp.knowledge.qdrant :as qdrant]
            [snapkitty.lisp.native :as native]))

(defn start! []
  "Start MCP server on stdio transport"
  (let [cfg (config/load-config)
        mcp-server (McpServer. (clj->js {:name "snapkitty-lisp"
                                         :version "1.0.0"}))]
    (util/log "[snapkitty-lisp] Loading configuration...")
    (util/log "[snapkitty-lisp] Qdrant URL:" (:qdrant-url cfg))
    (util/log "[snapkitty-lisp] Collection:" (:collection-name cfg))

    (p/let [_ (qdrant/ensure-collection! cfg)]
      (util/log "[snapkitty-lisp] Collection ready")

      ; Load native ASM library
      (p/let [_ (native/load-native-library! "./native/build/Release/skclisp_native.node")]
        (util/log "[snapkitty-lisp] Native ASM library loaded")

        (tools/register-tools! mcp-server cfg)
        (util/log "[snapkitty-lisp] Tools registered")

        (let [transport (StdioServerTransport.)]
          (p/let [_ (.connect mcp-server transport)]
            (util/log "[snapkitty-lisp] MCP server ready on stdio"))))))))

;; Node.js entry point
(set! (.-default js/module.exports) start!)