Function: mcp--connect-sse

mcp--connect-sse is a byte-compiled function defined in mcp.el.

Signature

(mcp--connect-sse &rest ARGS)

Implementations

(mcp--connect-sse (CONN mcp-http-process-connection)) in `mcp.el'.

Establish SSE (Server-Sent Events) connection for HTTP CONN.

Source Code

;; Defined in /nix/store/5m747x13pb1ddrvbq9raj91c4q1h1kl0-emacs-packages-deps/share/emacs/site-lisp/elpa/mcp-20260615.940/mcp.el
(cl-defmethod mcp--connect-sse ((conn mcp-http-process-connection))
  "Establish SSE (Server-Sent Events) connection for HTTP CONN."
  (let* ((name (jsonrpc-name conn))
         (buffer-name (format "*Mcp %s server*" name))
         (process-name (format "mcp-%s-server" name))
         (host (mcp--host conn))
         (port (mcp--port conn))
         (path (mcp--path conn))
         (proc (progn
                 (get-buffer-create buffer-name)
                 (open-network-stream process-name
                                      buffer-name
                                      host
                                      port
                                      :type (if (mcp--tls conn)
                                                'tls
                                              'network)
                                      :coding 'utf-8-unix))))
    (let* ((stderr-buffer-name (format "*%s stderr*" name))
           (stderr-buffer (jsonrpc--forwarding-buffer stderr-buffer-name "[stderr] " conn))
           (hidden-name (concat " " stderr-buffer-name)))
      (with-current-buffer stderr-buffer
        (ignore-errors (kill-buffer hidden-name))
        (rename-buffer hidden-name)
        (setq buffer-read-only t))
      (process-put proc 'jsonrpc-stderr stderr-buffer))
    (setf (jsonrpc--process conn) proc)
    (set-process-buffer proc (get-buffer-create (format " *%s output*" name)))
    (set-process-filter proc #'mcp--process-filter)
    (set-process-sentinel proc #'jsonrpc--process-sentinel)
    (with-current-buffer (process-buffer proc)
      (buffer-disable-undo)
      (set-marker (process-mark proc) (point-min))
      (let ((inhibit-read-only t))
        (erase-buffer))
      (setq buffer-read-only t))
    (process-put proc 'jsonrpc-connection conn)

    (process-send-string proc
                         (concat
                          (format "GET %s HTTP/1.1\r\n"
                                  path)
                          (format "Host: %s:%s\r\n"
                                  host
                                  port)
                          "Accept: text/event-stream\r\n"
                          (when-let* ((token (mcp--resolve-value (mcp--token conn))))
                            (format "Authorization: Bearer %s\r\n" token))
                          (unless (mcp--sse conn)
                            (format "Mcp-Session-Id: %s\r\n" (mcp--session-id conn)))
                          "Cache-Control: no-cache\r\n"
                          "Connection: keep-alive\r\n\r\n"))))