Skip to content

Commit 8426723

Browse files
committed
Finish mcp servers view
1 parent 39e826f commit 8426723

File tree

3 files changed

+80
-47
lines changed

3 files changed

+80
-47
lines changed

eca-mcp.el

Lines changed: 63 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
:type 'alist
2424
:group 'eca)
2525

26+
(defface eca-mcp-details-tool-face
27+
'((t (:inherit hl-line :slant italic)))
28+
"Face for tools showed in mcp details buffer."
29+
:group 'eca)
30+
2631
;; Internal
2732

2833
(defvar eca-mcp-details-buffer-name "<eca-mcp-details>")
@@ -35,40 +40,66 @@
3540
"Create the eca mcp details buffer for current session."
3641
(get-buffer-create (generate-new-buffer-name eca-mcp-details-buffer-name)))
3742

43+
(defun eca-mcp--refresh-server-details ()
44+
"Refresh the MCP server details."
45+
(with-current-buffer (eca-mcp--get-details-buffer)
46+
(erase-buffer)
47+
(insert (propertize "MCP servers" 'font-lock-face 'helpful-heading))
48+
(insert "\n\n")
49+
(seq-doseq (server (-sort (lambda (a b)
50+
(string-lessp (plist-get a :name)
51+
(plist-get b :name)))
52+
(eca-vals (eca--session-mcp-servers eca--session))))
53+
(-let (((&plist :name name :command command :args args
54+
:status status :tools tools) server))
55+
(insert (propertize name 'font-lock-face 'bold))
56+
(insert " - ")
57+
(insert (propertize status
58+
'font-lock-face (pcase status
59+
("running" 'success)
60+
("starting" 'warning)
61+
("failed" 'error)
62+
("stopped" 'default)
63+
("disabled" 'shadow))))
64+
(insert "\n")
65+
(if (seq-empty-p tools)
66+
(insert (propertize "No tools available" 'font-lock-face font-lock-doc-face))
67+
(progn
68+
(insert (propertize "Tools: " 'font-lock-face font-lock-doc-face))
69+
(seq-doseq (tool tools)
70+
(insert (propertize (plist-get tool :name) 'font-lock-face 'eca-mcp-details-tool-face) " "))))
71+
(insert "\n")
72+
(insert (propertize "Command: " 'font-lock-face font-lock-doc-face))
73+
(insert (concat command " " (string-join args " ")))
74+
(when (string= "failed" status)
75+
(insert "\n")
76+
(insert (propertize (format "Failed to start, check %s for details"
77+
(buttonize
78+
"eca stderr buffer"
79+
(lambda(_) (eca-process-show-stderr))))
80+
'font-lock-face 'error))))
81+
(insert "\n\n"))))
82+
3883
;; Public
3984

4085
(define-derived-mode eca-mcp-details-mode fundamental-mode "eca-mcp-details"
4186
"Major mode for ECA mcp details."
4287
:group 'eca
43-
(insert (propertize "MCP servers" 'font-lock-face 'helpful-heading))
44-
(insert "\n\n")
45-
(seq-doseq (server (eca-vals (eca--session-mcp-servers eca--session)))
46-
(-let (((&plist :name name :command command :args args
47-
:status status :tools tools) server))
48-
(insert (propertize name 'font-lock-face 'bold))
49-
(insert " - ")
50-
(insert (propertize status
51-
'font-lock-face (pcase status
52-
("running" 'success)
53-
("starting" 'warning)
54-
("failed" 'error)
55-
("stopped" 'default)
56-
("disabled" 'shadow))))
57-
(insert "\n")
58-
(insert (if (seq-empty-p tools)
59-
(propertize "No tools available." 'font-lock-face font-lock-doc-face)
60-
"..."))
61-
(insert "\n")
62-
(insert (propertize "Command: " 'font-lock-face font-lock-doc-face))
63-
(insert (concat command " " (string-join args " ")))
64-
(when (string= "failed" status)
65-
(insert "\n")
66-
(insert (propertize (format "Failed to start, check %s for details"
67-
(buttonize
68-
"eca stderr buffer"
69-
(lambda(_) (eca-process-show-stderr))))
70-
'font-lock-face 'error))))
71-
(insert "\n\n")))
88+
(eca-mcp--refresh-server-details))
89+
90+
(defun eca-mcp--handle-mcp-server-updated (_server)
91+
"Handle mcp SERVER updated."
92+
(eca-mcp--refresh-server-details))
93+
94+
(defun eca-mcp-details-exit ()
95+
"Exit the ECA mcp details."
96+
(when (buffer-live-p (get-buffer eca-mcp-details-buffer-name))
97+
(with-current-buffer (eca-mcp--get-details-buffer)
98+
(goto-char (point-max))
99+
(setq-local mode-line-format '("*Closed session*"))
100+
(rename-buffer (concat (buffer-name) ":closed") t)
101+
(when-let* ((window (get-buffer-window (eca-mcp--get-details-buffer))))
102+
(quit-window nil window)))))
72103

73104
;;;###autoload
74105
(defun eca-mcp-details ()
@@ -82,10 +113,9 @@
82113
(eca-mcp-details-mode))
83114
(if (window-live-p (get-buffer-window (buffer-name)))
84115
(select-window (get-buffer-window (buffer-name)))
85-
(let ((buffer (current-buffer)))
86-
(display-buffer buffer eca-mcp-details-position-params)
87-
(select-window (get-buffer-window buffer))
88-
(set-window-buffer (get-buffer-window buffer) buffer)))))
116+
(display-buffer (current-buffer) eca-mcp-details-position-params)
117+
(select-window (get-buffer-window (current-buffer)))
118+
(set-window-buffer (get-buffer-window (current-buffer)) (current-buffer)))))
89119

90120
(provide 'eca-mcp)
91121
;;; eca-mcp.el ends here

eca-process.el

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,5 +249,18 @@ Call HANDLE-MSG for new msgs processed."
249249
(select-window (get-buffer-window (buffer-name)))
250250
(display-buffer (current-buffer)))))
251251

252+
;;;###autoload
253+
(defun eca-install-server ()
254+
"Download the eca server if not downloaded."
255+
(interactive)
256+
(eca-process--download-server (lambda ())))
257+
258+
;;;###autoload
259+
(defun eca-uninstall-server ()
260+
"Remove downloaded eca server if present."
261+
(interactive)
262+
(eca-process--uninstall-server)
263+
(eca-info "Server uninstalled!"))
264+
252265
(provide 'eca-process)
253266
;;; eca-process.el ends here

eca.el

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
(require 'eca-process)
2626
(require 'eca-api)
2727
(require 'eca-chat)
28+
(require 'eca-mcp)
2829

2930
(defgroup eca nil
3031
"ECA group."
@@ -69,7 +70,8 @@
6970
(eca-assoc (eca--session-mcp-servers eca--session)
7071
(plist-get server :name)
7172
server))
72-
(eca-chat--handle-mcp-server-updated server))
73+
(eca-chat--handle-mcp-server-updated server)
74+
(eca-mcp--handle-mcp-server-updated server))
7375

7476
(defun eca--handle-server-notification (notification)
7577
"Handle NOTIFICATION sent by server."
@@ -156,21 +158,9 @@
156158
(eca-api-notify :method "exit")
157159
(eca-process-stop))
158160
(eca-chat-exit)
161+
(eca-mcp-details-exit)
159162
(setq eca--session nil))
160163

161-
;;;###autoload
162-
(defun eca-install-server ()
163-
"Download the eca server if not downloaded."
164-
(interactive)
165-
(eca--download-server (lambda ())))
166-
167-
;;;###autoload
168-
(defun eca-uninstall-server ()
169-
"Remove downloaded eca server if present."
170-
(interactive)
171-
(eca--uninstall-server)
172-
(eca-info "Server uninstalled!"))
173-
174164
;;;###autoload
175165
(defun eca-workspaces ()
176166
"Return workspaces used by current session."

0 commit comments

Comments
 (0)