Skip to content

Commit 8d90170

Browse files
committed
Add showMessage notification
1 parent f45e180 commit 8d90170

File tree

6 files changed

+51
-8
lines changed

6 files changed

+51
-8
lines changed

docs/protocol.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ A notification sent from the client to the server to terminate the connection. T
211211
_Notification:_
212212

213213
* method: `exit`
214-
* params: none
214+
* params: none
215215

216216
## Code Assistant Features
217217

@@ -594,3 +594,30 @@ Soon
594594
### Add MCP (↩️)
595595

596596
Soon
597+
598+
## General features
599+
600+
### showMessage (⬅️)
601+
602+
A notification from server telling client to present a message to user.
603+
604+
_Request:_
605+
606+
* method: `$/showMessage`
607+
* params: `ShowMessageParams` defined as follows:
608+
609+
```typescript
610+
interface ShowMessageParams {
611+
/**
612+
* The message type. See {@link MessageType}.
613+
*/
614+
type: MessageType;
615+
616+
/**
617+
* The actual message.
618+
*/
619+
message: string;
620+
}
621+
622+
export type MessageType = 'error' | 'warning' | 'info';
623+
```

resources/simplelogger.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
org.slf4j.simpleLogger.showThreadName=false
2+
org.slf4j.simpleLogger.showDateTime=false
3+
org.slf4j.simpleLogger.showLogName=false

src/eca/features/mcp.clj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
(.build)))
3737
(.build)))
3838

39-
(defn initialize! [db* config]
39+
(defn initialize! [{:keys [on-error]} db* config]
4040
(doseq [[name server-config] (:mcpServers config)]
4141
(try
4242
(when-not (get-in @db* [:mcp-clients name])
@@ -47,7 +47,8 @@
4747
(.addRoot client (McpSchema$Root. uri name)))
4848
(.initialize client)))
4949
(catch Exception e
50-
(logger/warn logger-tag (format "Could not initialize MCP server %s. Error: %s" name (.getMessage e)))))))
50+
(logger/warn logger-tag (format "Could not initialize MCP server %s. Error: %s" name (.getMessage e)))
51+
(on-error name e)))))
5152

5253
(defn tools-cached? [db]
5354
(boolean (:mcp-tools db)))

src/eca/handlers.clj

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
[eca.features.chat :as f.chat]
66
[eca.features.mcp :as f.mcp]
77
[eca.llm-api :as llm-api]
8-
[eca.logger :as logger]))
8+
[eca.logger :as logger]
9+
[eca.messenger :as messenger]))
910

1011
(set! *warn-on-reflection* true)
1112

@@ -21,7 +22,7 @@
2122
{}
2223
ollama-models)))))
2324

24-
(defn initialize [{:keys [db*]} params]
25+
(defn initialize [{:keys [db* messenger]} params]
2526
(logger/logging-task
2627
:eca/initialize
2728
(swap! db* assoc
@@ -32,7 +33,14 @@
3233
(let [config (config/all @db*)]
3334
(initialize-extra-models! db*)
3435
;; TODO initialize async with progress support
35-
(f.mcp/initialize! db* config)
36+
(f.mcp/initialize!
37+
{:on-error (fn [mcp-server-name error]
38+
(messenger/showMessage
39+
messenger
40+
{:type :error
41+
:message (format "MCP server %s not initialized. Error %s" mcp-server-name (.getMessage error))}))}
42+
db*
43+
config)
3644
{:models (keys (:models @db*))
3745
:chat-default-model (f.chat/default-model @db*)
3846
:chat-behaviors (:chat-behaviors @db*)

src/eca/messenger.clj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
(set! *warn-on-reflection* true)
66

77
(defprotocol IMessenger
8-
(chat-content-received [this data]))
8+
(chat-content-received [this data])
9+
(showMessage [this msg]))

src/eca/server.clj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@
7373

7474
(chat-content-received [_this content]
7575
(lsp.server/discarding-stdout
76-
(lsp.server/send-notification server "chat/contentReceived" content))))
76+
(lsp.server/send-notification server "chat/contentReceived" content)))
77+
(showMessage [_this msg]
78+
(lsp.server/discarding-stdout
79+
(lsp.server/send-notification server "$/showMessage" msg))))
7780

7881
(defn start-server! [server]
7982
(let [db* (atom db/initial-db)

0 commit comments

Comments
 (0)