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))))))))))