Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 22 additions & 7 deletions agent-shell.el
Original file line number Diff line number Diff line change
Expand Up @@ -4488,19 +4488,34 @@ normalized server configs."
(apply #'vector
(mapcar (lambda (server)
(setq server (agent-shell--eval-dynamic-values server))
(let ((normalized (copy-alist server)))
(when (map-contains-key normalized 'args)
(let* ((normalized (copy-alist server))
(transport-type (map-elt normalized 'type)))
;; ACP requires transport-specific collection fields,
;; but users often omit them in hand-written configs.
;; Default them to empty vectors before vectorizing any
;; provided list values so agents like Codex accept the
;; resulting payload.
(when (and (assoc 'command normalized)
(not (member transport-type '("http" "sse"))))
(unless (assoc 'args normalized)
(setf (alist-get 'args normalized) []))
(unless (assoc 'env normalized)
(setf (alist-get 'env normalized) [])))
(when (member transport-type '("http" "sse"))
(unless (assoc 'headers normalized)
(setf (alist-get 'headers normalized) [])))
(when (assoc 'args normalized)
(let ((args (map-elt normalized 'args)))
(when (listp args)
(map-put! normalized 'args (apply #'vector args)))))
(when (map-contains-key normalized 'env)
(setf (alist-get 'args normalized) (apply #'vector args)))))
(when (assoc 'env normalized)
(let ((env (map-elt normalized 'env)))
(when (listp env)
(map-put! normalized 'env (apply #'vector env)))))
(when (map-contains-key normalized 'headers)
(setf (alist-get 'env normalized) (apply #'vector env)))))
(when (assoc 'headers normalized)
(let ((headers (map-elt normalized 'headers)))
(when (listp headers)
(map-put! normalized 'headers (apply #'vector headers)))))
(setf (alist-get 'headers normalized) (apply #'vector headers)))))
normalized))
agent-shell-mcp-servers))))

Expand Down
17 changes: 15 additions & 2 deletions tests/agent-shell-tests.el
Original file line number Diff line number Diff line change
Expand Up @@ -933,13 +933,26 @@ code block content
(args . ["-y" "@modelcontextprotocol/server-filesystem" "/tmp"])
(env . []))])))

;; Test server without optional fields
;; Test stdio transport defaults missing ACP collection fields
(let ((agent-shell-mcp-servers
'(((name . "simple")
(command . "simple-server")))))
(should (equal (agent-shell--mcp-servers)
[((name . "simple")
(command . "simple-server"))]))))
(command . "simple-server")
(args . [])
(env . []))])))

;; Test HTTP transport defaults missing ACP collection fields
(let ((agent-shell-mcp-servers
'(((name . "remote")
(type . "http")
(url . "https://example.com/mcp")))))
(should (equal (agent-shell--mcp-servers)
[((name . "remote")
(type . "http")
(url . "https://example.com/mcp")
(headers . []))]))))

(ert-deftest agent-shell--completion-bounds-test ()
"Test `agent-shell--completion-bounds' function."
Expand Down