Function: claude-code-ide-mcp-create-session
claude-code-ide-mcp-create-session is a natively compiled function
defined in claude-code-ide-mcp.el.
Signature
(claude-code-ide-mcp-create-session PROJECT-DIR SESSION-ID &optional INSTANCE-NAME)
Documentation
Create a new MCP session for PROJECT-DIR with SESSION-ID.
INSTANCE-NAME is the user-visible instance name, or nil for the unnamed instance. Always creates a fresh session with its own WebSocket server, port and lockfile; a project may own any number of concurrent sessions. Returns the session object.
Source Code
;; Defined in /nix/store/yjvbhwl7p6zrbw9xlnni7y4hra8sa3pl-emacs-packages-deps/share/emacs/site-lisp/claude-code-ide-mcp.el
;;; Public API
(defun claude-code-ide-mcp-create-session (project-dir session-id &optional instance-name)
"Create a new MCP session for PROJECT-DIR with SESSION-ID.
INSTANCE-NAME is the user-visible instance name, or nil for the
unnamed instance. Always creates a fresh session with its own
WebSocket server, port and lockfile; a project may own any number of
concurrent sessions. Returns the session object."
(claude-code-ide-debug "=== Starting MCP server ===")
(let* ((project-dir (expand-file-name project-dir))
(session (make-claude-code-ide-mcp-session
:session-id session-id
:instance-name instance-name
:project-dir project-dir
:last-used (float-time)
:deferred (make-hash-table :test 'equal)
:active-diffs (make-hash-table :test 'equal)
:original-tab (when (fboundp 'tab-bar--current-tab)
(tab-bar--current-tab))))
(server-and-port (claude-code-ide-mcp--find-free-port session))
(server (car server-and-port))
(port (cdr server-and-port)))
;; Set port and server in session
(setf (claude-code-ide-mcp-session-port session) port
(claude-code-ide-mcp-session-server session) server)
;; Anything fallible must happen BEFORE the session is registered:
;; a failure past registration would leak a phantom session holding
;; a live server that no cleanup path can ever reap
(claude-code-ide-debug "Project directory: %s" project-dir)
(claude-code-ide-debug "Creating lockfile for port %d" port)
(condition-case err
(claude-code-ide-mcp--create-lockfile port project-dir)
((error quit)
(ignore-errors (websocket-server-close server))
(signal (car err) (cdr err))))
;; Store session
(puthash session-id session claude-code-ide-mcp--sessions)
;; Set up hooks for selection and buffer tracking (add-hook is idempotent)
(add-hook 'post-command-hook #'claude-code-ide-mcp--track-selection)
(add-hook 'post-command-hook #'claude-code-ide-mcp--track-active-buffer)
(claude-code-ide-debug "MCP server ready on port %d" port)
(claude-code-ide-debug "MCP server started on port %d for %s" port
(file-name-nondirectory (directory-file-name project-dir)))
session))