Function: eca-mcp--submit-add-server

eca-mcp--submit-add-server is a natively compiled function defined in eca-mcp.el.

Signature

(eca-mcp--submit-add-server SESSION)

Documentation

Validate current form state and send mcp/addServer to the server.

Source Code

;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-mcp.el
(defun eca-mcp--submit-add-server (session)
  "Validate current form state and send `mcp/addServer' to the server."
  (let* ((st eca-mcp--add-form-state)
         (name (string-trim (or (plist-get st :name) "")))
         (transport (plist-get st :transport))
         (scope (plist-get st :scope)))
    (cond
     ((string-empty-p name)
      (eca-error "MCP server name is required"))
     ((and (string= transport "stdio")
           (string-empty-p (string-trim (or (plist-get st :command) ""))))
      (eca-error "Command is required for stdio transport"))
     ((and (string= transport "remote")
           (string-empty-p (string-trim (or (plist-get st :url) ""))))
      (eca-error "URL is required for remote transport"))
     ((and (string= scope "workspace")
           (null (eca--session-workspace-folders session)))
      (eca-error "No workspace folder available for workspace scope"))
     (t
      (let ((params (list :name name :scope scope))
            (buf (current-buffer)))
        (if (string= transport "stdio")
            (let ((cmd (string-trim (plist-get st :command)))
                  (args (eca-mcp--parse-args-string (plist-get st :args)))
                  (env (eca-mcp--parse-env-lines (plist-get st :env))))
              (setq params (plist-put params :command cmd))
              (when args (setq params (plist-put params :args (vconcat args))))
              (when env (setq params (plist-put params :env env))))
          (let ((url (string-trim (plist-get st :url)))
                (headers (eca-mcp--parse-header-lines (plist-get st :headers))))
            (setq params (plist-put params :url url))
            (when headers (setq params (plist-put params :headers headers)))))
        (when (string= scope "workspace")
          (when-let ((folder (car (eca--session-workspace-folders session))))
            (setq params (plist-put params :workspaceUri (eca--path-to-uri folder)))))
        (eca-api-request-async
         session
         :method "mcp/addServer"
         :params params
         :success-callback
         (lambda (resp)
           (let ((err (plist-get resp :error)))
             (if err
                 (eca-error "Add MCP failed: %s"
                            (or (plist-get err :message) (format "%S" err)))
               (when (buffer-live-p buf)
                 (with-current-buffer buf
                   (setq eca-mcp--add-form-state nil)))
               (eca-settings-refresh-tab "mcps" session))))
         :error-callback
         (lambda (err)
           (eca-error "Add MCP failed: %s"
                      (or (plist-get err :message) (format "%S" err))))))))))