Function: eca-mcp--render-server-details

eca-mcp--render-server-details is a natively compiled function defined in eca-mcp.el.

Signature

(eca-mcp--render-server-details SESSION BUFFER)

Documentation

Render MCP server details for SESSION into BUFFER.

Works with both standalone and settings panel buffers.

Source Code

;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-mcp.el
(defun eca-mcp--render-server-details (session buffer)
  "Render MCP server details for SESSION into BUFFER.
Works with both standalone and settings panel buffers."
  (when (buffer-live-p buffer)
    (with-current-buffer buffer
      (let ((inhibit-read-only t)
            (keymap (or (current-local-map)
                        eca-settings-mode-map))
            (saved-pos (point)))
        (erase-buffer)
        (insert "\n")
        (insert (propertize "All MCP servers configured in ECA" 'font-lock-face 'eca-settings-heading))
        (insert "\n\n")
        (if eca-mcp--add-form-state
            (eca-mcp--render-add-form session keymap)
          (insert (eca-buttonize
                   keymap
                   (propertize "[+ Add MCP server]"
                               'font-lock-face 'eca-mcp-details-button-face)
                   (lambda () (eca-mcp--open-add-form session)))
                  "\n\n"))
        (seq-doseq (server (-sort  (lambda (a b)
                                     (string-lessp (plist-get a :name)
                                                   (plist-get b :name)))
                                   (eca-vals (eca--session-tool-servers session))))
          (-let (((&plist :name name :command command :args args
                          :status status :tools tools) server))
            (insert (propertize (eca-mcp--status-emoji status)
                                'eca-mcp-status status
                                'face (eca-mcp--status-face status)
                                'help-echo status))
            (insert " ")
            (insert (propertize name 'font-lock-face 'bold))
            (insert "   ")
            (cond
             ((and eca-mcp--confirming-remove
                   (string= name eca-mcp--confirming-remove))
              (insert (propertize "Remove? " 'font-lock-face 'warning))
              (insert (eca-buttonize
                       keymap
                       (propertize "[Yes]"
                                   'font-lock-face 'eca-mcp-details-button-stop-face)
                       (lambda () (eca-mcp--submit-remove-server session name))))
              (insert " ")
              (insert (eca-buttonize
                       keymap
                       (propertize "[Cancel]"
                                   'font-lock-face 'eca-mcp-details-button-face)
                       (lambda () (eca-mcp--cancel-confirm-remove session)))))
             (t
              (pcase status
              ("requires-auth"
               (insert (eca-buttonize
                        keymap
                        (propertize "connect"
                                    'font-lock-face 'eca-mcp-details-button-face)
                        (lambda ()
                          (eca-mcp--notify-server-action
                           session server 'connect)))))
              ((or "running" "starting")
               (insert (eca-buttonize
                        keymap
                        (propertize "stop"
                                    'font-lock-face 'eca-mcp-details-button-stop-face)
                        (lambda ()
                          (eca-mcp--notify-server-action
                           session server 'stop))))
               (if (plist-get server :disabled)
                   (insert " "
                           (eca-buttonize
                            keymap
                            (propertize "enable"
                                        'font-lock-face 'eca-mcp-details-button-enable-face)
                            (lambda () (eca-api-notify session
                                                        :method "mcp/enableServer"
                                                        :params (list :name name)))))
                 (insert " "
                         (eca-buttonize
                          keymap
                          (propertize "disable"
                                      'font-lock-face 'eca-mcp-details-button-disable-face)
                          (lambda () (eca-api-notify session
                                                      :method "mcp/disableServer"
                                                      :params (list :name name))))))
               (when (plist-get server :hasAuth)
                 (insert " "
                         (eca-buttonize
                          keymap
                          (propertize "logout"
                                      'font-lock-face 'eca-mcp-details-button-logout-face)
                          (lambda () (eca-api-notify session
                                                      :method "mcp/logoutServer"
                                                      :params (list :name name)))))))
              ("disabled"
               (insert (eca-buttonize
                        keymap
                        (propertize "start"
                                    'font-lock-face 'eca-mcp-details-button-face)
                        (lambda ()
                          (eca-mcp--notify-server-action
                           session server 'start))))
               (insert " "
                       (eca-buttonize
                        keymap
                        (propertize "enable"
                                    'font-lock-face 'eca-mcp-details-button-enable-face)
                        (lambda () (eca-api-notify session
                                                    :method "mcp/enableServer"
                                                    :params (list :name name))))))
              (_
               (insert (eca-buttonize
                        keymap
                        (propertize "start"
                                    'font-lock-face 'eca-mcp-details-button-face)
                        (lambda ()
                          (eca-mcp--notify-server-action
                           session server 'start))))
               (when (plist-get server :disabled)
                 (insert " "
                         (eca-buttonize
                          keymap
                          (propertize "enable"
                                      'font-lock-face 'eca-mcp-details-button-enable-face)
                          (lambda () (eca-api-notify session
                                                      :method "mcp/enableServer"
                                                      :params (list :name name))))))))
              (unless (string= name "ECA")
                (insert " "
                        (eca-buttonize
                         keymap
                         (propertize "remove"
                                     'font-lock-face 'eca-mcp-details-button-stop-face)
                         (lambda () (eca-mcp--request-confirm-remove session name)))))))
            (insert "\n")
            (if (seq-empty-p tools)
                (insert (propertize "No tools available" 'font-lock-face font-lock-doc-face))
              (progn
                (insert (propertize "Tools: " 'font-lock-face font-lock-doc-face))
                (seq-doseq (tool tools)
                  (insert (propertize (plist-get tool :name)
                                      'eca-mcp-tool tool
                                      'font-lock-face (if (plist-get tool :disabled)
                                                          'eca-mcp-details-tool-disabled-face
                                                        'eca-mcp-details-tool-face)) " "))))
            (when-let* ((prompts (plist-get server :prompts))
                        (_ (not (seq-empty-p prompts))))
              (insert "\n")
              (insert (propertize "Prompts: " 'font-lock-face font-lock-doc-face))
              (seq-doseq (prompt prompts)
                (insert (propertize (plist-get prompt :name)
                                    'font-lock-face 'eca-mcp-details-tool-face) " ")))
            (when-let* ((resources (plist-get server :resources))
                        (_ (not (seq-empty-p resources))))
              (insert "\n")
              (insert (propertize "Resources: " 'font-lock-face font-lock-doc-face))
              (seq-doseq (resource resources)
                (insert (propertize (plist-get resource :name)
                                    'font-lock-face 'eca-mcp-details-tool-face) " ")))
            (when command
              (insert "\n")
              (insert (propertize "Command: " 'font-lock-face font-lock-doc-face))
              (insert (propertize (concat command " " (string-join args " "))
                                 'font-lock-face 'eca-mcp-details-command-value-face)))
            (when-let* ((url (plist-get server :url)))
              (insert "\n")
              (insert (propertize "URL: " 'font-lock-face font-lock-doc-face))
              (insert (propertize url
                                 'font-lock-face 'eca-mcp-details-command-value-face)))
            (when (string= "failed" status)
              (insert "\n")
              (insert (propertize (format "Failed to start, check %s for details"
                                          (buttonize
                                           "eca stderr buffer"
                                           (lambda(_) (eca-process-show-stderr session))))
                                  'font-lock-face 'error))))
          (insert "\n\n"))
        (goto-char (min saved-pos (point-max)))))))