File tree 5 files changed +22
-9
lines changed
5 files changed +22
-9
lines changed Original file line number Diff line number Diff line change
1
+ services :
2
+ mcp_docker :
3
+ image : mcp/docker:latest
4
+ command : serve --mcp --register github:docker/labs-ai-tools-for-devs?path=prompts/bootstrap.md
5
+ volumes :
6
+ - /var/run/docker.sock:/var/run/docker.sock
7
+ - docker-prompts:/prompts
8
+ x-mcp-autoremove : false
9
+
10
+ volumes :
11
+ docker-prompts :
12
+ external : true
Original file line number Diff line number Diff line change 45
45
(add {:register [" github:docker/labs-ai-tools-for-devs?path=prompts/examples/explain_dockerfile.md"
46
46
" github:docker/labs-ai-tools-for-devs?path=prompts/examples/hello_world.md" ]}))
47
47
48
- #_{:clj-kondo/ignore [:redefined-var ]}
49
- (defn merge [{:keys [registry-content] :as opts}]
48
+ (defn merge-dynamic-prompts [{:keys [registry-content] :as opts}]
50
49
(logger/info " adding dynamic prompts" registry-content)
51
50
(try
52
51
(let [{:keys [registry]} (yaml/parse-string registry-content)
Original file line number Diff line number Diff line change 295
295
log-path (logger/setup timbre-logger)
296
296
db* db/db*
297
297
log-ch (async/chan (async/sliding-buffer 20 ))
298
+ ; ; server will start watching stdio/stdout immediately
298
299
server (stdio-server
299
300
(merge
300
301
{; :keyword-function identity
320
321
(logger/error t))))
321
322
; ; register dynamic prompts
322
323
(when (fs/exists? (fs/file " /prompts/registry.yaml" ))
323
- (db/merge (assoc opts :registry-content (slurp " /prompts/registry.yaml" ))))
324
+ (db/merge-dynamic-prompts (assoc opts :registry-content (slurp " /prompts/registry.yaml" ))))
324
325
; ; watch dynamic prompts in background
325
326
(async/thread
326
327
(let [{x :container }
333
334
(let [[_dir _event f] (string/split line #"\s +" )]
334
335
(when (= f " registry.yaml" )
335
336
(try
336
- (db/merge (assoc opts :registry-content (slurp " /prompts/registry.yaml" )))
337
+ (db/merge-dynamic-prompts (assoc opts :registry-content (slurp " /prompts/registry.yaml" )))
337
338
(producer/publish-tool-list-changed producer {})
338
339
(producer/publish-prompt-list-changed producer {})
339
340
(catch Throwable t
345
346
(docker/delete x)))))
346
347
(monitor-server-logs log-ch)
347
348
(logger/info " Starting server..." )
349
+ ; ; only on lsp.server/start will the stdio channels start being used
348
350
[producer (lsp.server/start server components)])))
349
351
350
352
(comment
Original file line number Diff line number Diff line change 1
1
(ns script )
2
2
3
- (defmacro read [path]
3
+ (defmacro read-script-at-compile-time [path]
4
4
(slurp path))
5
5
6
6
(comment
7
- (macroexpand '(read " src/volumes/collect.clj" )))
7
+ (macroexpand '(read-script-at-compile-time " src/volumes/collect.clj" )))
Original file line number Diff line number Diff line change 34
34
:thread-id thread-id
35
35
:command [(json/generate-string
36
36
{:directory " /thread" } keyword)
37
- (script/read " src/volumes/collect.clj" )]})
37
+ (script/read-script-at-compile-time " src/volumes/collect.clj" )]})
38
38
:pty-output
39
39
(json/parse-string keyword))
40
40
(catch Throwable t
41
41
(logger/error t " error collecting mcp resources" )
42
42
{})))
43
43
44
44
(comment
45
- (script/read " src/volumes/collect.clj" ))
45
+ (script/read-script-at-compile-time " src/volumes/collect.clj" ))
46
46
47
47
(comment
48
48
(->
52
52
:workdir " /project"
53
53
:command [(json/generate-string
54
54
{:directory " /project" })
55
- (script/read " src/volumes/collect.clj" )]})
55
+ (script/read-script-at-compile-time " src/volumes/collect.clj" )]})
56
56
:pty-output
57
57
#_(json/parse-string keyword)))
58
58
You can’t perform that action at this time.
0 commit comments