Skip to main content
Glama

#+TITLE: elisp-dev-mcp: 에이전트 기반 Elisp 개발을 위한 MCP 서버

[[https://github.com/laurynas-biveinis/elisp-dev-mcp/actions/workflows/elisp-test.yml][https://github.com/laurynas-biveinis/elisp-dev-mcp/actions/workflows/elisp-test.yml/badge.svg]] [[https://github.com/laurynas-biveinis/elisp-dev-mcp/actions/workflows/super-linter.yml][https://github.com/laurynas-biveinis/elisp-dev-mcp/actions/workflows/super-linter.yml/badge.svg]] [[https://melpa.org/#/elisp-dev-mcp][https://melpa.org/packages/elisp-dev-mcp-badge.svg]] [[https://stable.melpa.org/#/elisp-dev-mcp][file:https://stable.melpa.org/packages/elisp-dev-mcp-badge.svg]]

  • 개요

=elisp-dev-mcp=는 에이전트 기반 Elisp 개발을 위한 MCP(Machine Code Protocol) 서버를 제공하는 Emacs 패키지입니다. 이 패키지는 AI 에이전트가 Emacs와 상호 작용하고 Elisp 코드를 조작할 수 있는 구조화된 API를 제공하여 Elisp 코딩 작업을 지원하도록 합니다.

이 패키지는 기본 MCP 인프라를 위해 [[https://github.com/laurynas-biveinis/mcp-server-lib.el][mcp-server-lib.el]]을 활용합니다.

  • 설치

[[https://melpa.org/#/elisp-dev-mcp][MELPA]] 또는 [[https://stable.melpa.org/#/elisp-dev-mcp][MELPA Stable]]에서 설치:

=M-x package-install RET elisp-dev-mcp RET=

  • 사용법

** MCP 클라이언트에 등록

=mcp-server-lib=가 올바르게 설치된 후(=M-x mcp-server-lib-install= 포함), MCP 클라이언트에 =elisp-dev-mcp=를 등록합니다:

#+begin_example claude mcp add -s user -t stdio elisp-dev -- ~/.emacs.d/emacs-mcp-stdio.sh --init-function=elisp-dev-mcp-enable --stop-function=elisp-dev-mcp-disable --server-id=elisp-dev-mcp #+end_example

MCP 서버를 사용하기 전에 Emacs에서 =M-x mcp-server-lib-start=로 시작해야 합니다. 완료 후에는 =M-x mcp-server-lib-stop=으로 중지하십시오.

** 사용 가능한 MCP 핸들러

*** Elisp 함수 문서화

  • 이름: =elisp-describe-function=

  • 설명: Emacs Lisp 함수에 대한 전체 문서 가져오기

  • 매개변수:

    • =function=: 설명할 함수의 이름 (문자열)

  • 반환값:

    • =description=: 함수의 문서 (문자열)

    • 또는 =error=: 문제가 발생한 경우 오류 메시지 (문자열)

*** Elisp 함수 정의

  • 이름: =elisp-get-function-definition=

  • 설명: Emacs Lisp 함수의 소스 코드 정의 가져오기

  • 매개변수:

    • =function=: 가져올 함수의 이름 (문자열)

  • 반환값:

    • Elisp 함수의 경우:

      • =source=: 헤더 주석을 포함한 함수의 소스 코드 (문자열)

      • =file-path=: 함수가 정의된 파일 경로 (문자열)

      • =start-line=: 헤더 주석을 포함한 정의의 첫 번째 줄 번호 (1부터 시작하는 정수)

      • =end-line=: 정의의 마지막 줄 번호 (1부터 시작하는 정수)

    • C로 구현된 함수의 경우:

      • =is-c-function=: C 함수임을 나타내는 불리언 값 (항상 true)

      • =function-name=: 함수의 이름 (문자열)

      • =message=: 함수가 C 소스 코드로 구현되었음을 나타내는 메시지 (문자열)

*** Elisp 변수 설명

  • 이름: =elisp-describe-variable=

  • 설명: 값을 노출하지 않고 Emacs Lisp 변수에 대한 정보 가져오기

  • 매개변수:

    • =variable=: 설명할 변수의 이름 (문자열)

  • 반환값:

    • =name=: 변수 이름 (문자열)

    • =bound=: 변수가 현재 바인딩되어 있는지 여부 (불리언, 선언되었으나 바인딩되지 않은 변수는 false)

    • =value-type=: 값의 유형 (문자열, 예: "cons", "string", "integer")

    • =documentation=: 변수 문서 또는 없는 경우 null (문자열 또는 null)

    • =source-file=: 변수가 정의된 파일 경로 (문자열)

    • =is-custom=: 사용자 정의 가능한 변수인지 여부 (불리언)

    • =custom-group=: 이 변수가 속한 사용자 정의 그룹 (문자열, 사용자 정의 변수에만 존재)

    • =custom-type=: 사용자 정의 유형 사양 (문자열, 사용자 정의 변수에만 존재)

    • =is-obsolete=: 변수가 사용되지 않음(obsolete)으로 표시되었는지 여부 (불리언)

    • =obsolete-since=: 변수가 사용되지 않게 된 버전 (문자열, 사용되지 않는 경우에만 존재)

    • =obsolete-replacement=: 사용되지 않는 변수에 대한 권장 대체 항목 (문자열, 사용되지 않는 경우에만 존재)

    • =is-alias=: 변수가 다른 변수의 별칭인지 여부 (불리언)

    • =alias-target=: 이 변수가 별칭으로 가리키는 변수 (문자열, 별칭인 경우에만 존재)

    • =is-special=: 변수가 특수(동적 범위) 변수인지 여부 (불리언)

    • 또는 =error=: 문제가 발생한 경우 오류 메시지 (문자열)

*** Elisp Info 문서 조회

  • 이름: =elisp-info-lookup-symbol=

  • 설명: Info 문서에서 Elisp 심볼을 찾아 전체 문서 노드 반환

  • 매개변수:

    • =symbol=: 조회할 Elisp 심볼 (문자열)

  • 반환값:

    • =found=: 문서를 찾았는지 여부 (불리언)

    • =symbol=: 조회된 심볼 (문자열)

    • =node=: 문서가 포함된 Info 노드 이름 (문자열, 찾은 경우)

    • =manual=: Info 매뉴얼 이름, 일반적으로 'elisp' (문자열, 찾은 경우)

    • =content=: 모든 예제, 상호 참조 및 관련 정보를 포함한 전체 Info 노드 내용 (문자열, 찾은 경우)

    • =info-ref=: 직접 액세스를 위한 '(elisp)Node Name'과 같은 Info 참조 (문자열, 찾은 경우)

    • =message=: 오류 또는 찾을 수 없음 메시지 (문자열, 찾지 못한 경우)

*** Elisp 소스 파일 리더

  • 이름: =elisp-read-source-file=

  • 설명: Emacs 시스템 디렉토리 또는 ELPA 패키지에서 Elisp 소스 파일을 읽습니다. 라이브러리 이름 또는 절대 파일 경로를 허용합니다.

  • 매개변수:

    • =library-or-path=: 라이브러리 이름(예: ="subr"=, ="org"=) 또는 =.el= 파일의 절대 경로 (문자열)

  • 반환값:

    • 문자열로 된 전체 파일 내용

    • 또는 =error=: 라이브러리를 찾을 수 없거나, 파일을 찾을 수 없거나, 형식이 잘못되었거나, 액세스가 거부된 경우 오류 메시지 (문자열)

  • 입력 모드:

    1. 라이브러리 이름 (내장 및 설치된 패키지에 권장):

      • 경로 구분자가 없는 간단한 이름: ="subr"=, ="files"=, ="org"=

      • Emacs =locate-library= 함수를 통해 확인 (=load-path= 검색)

      • 예: ="subr"=, ="mcp-server-lib"=, ="org"=

    2. 절대 경로 (다른 =elisp-dev= 도구와의 호환성을 위해):

      • =.el=로 끝나는 전체 경로

      • =elisp-get-function-definition=에 의해 반환됨

      • 예: ="/opt/homebrew/.../lisp/files.el"=, ="/Users/name/.emacs.d/elpa/package-1.0/package.el"=

  • 보안:

    • Emacs 시스템 lisp 디렉토리 및 ELPA 디렉토리에서만 읽기 가능

    • =..= 탐색이 포함된 경로 거부

    • 허용된 디렉토리를 벗어나지 않도록 심볼릭 링크 확인

    • 라이브러리 이름은 허용된 디렉토리 내의 경로로 확인되어야 함

  • 기능:

    • =.el.gz= 압축 파일을 투명하게 처리

    • 내장 Emacs 라이브러리와 설치된 패키지 모두에서 작동

    • 전체 파일 내용을 문자열로 반환

** 대체 패키지 관리자를 위한 구성

기본적으로 =elisp-read-source-file=은 Emacs 시스템 디렉토리와 표준 =ELPA= 패키지에만 액세스할 수 있습니다. straight.el, elpaca 또는 사용자 정의 패키지 설정과 같은 대체 패키지 관리자를 사용하는 사용자는 추가로 허용된 디렉토리를 구성할 수 있습니다:

#+begin_src elisp (setq elisp-dev-mcp-additional-allowed-dirs '("/.emacs.d/straight/build/" "/.emacs.d/straight/repos/" "~/my-elisp-packages/")) #+end_src

보안 참고: MCP 서버가 이 위치에 있는 모든 =.el= 파일을 읽을 수 있게 되므로 신뢰하는 디렉토리만 추가하십시오.

  • 유사 패키지

  • 라이선스

이 프로젝트는 GNU 일반 공중 사용 허가서 v3.0(GPLv3)에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하십시오.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Read, inspect and navigate codebase symbols by connecting to a Language Server
    57 npm
    3
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Provides LLMs with live introspective access to a running Emacs instance to evaluate Elisp and inspect the internal environment. It enables tools for reading documentation, browsing Info manuals, querying completions, and accessing source code for functions and variables.
    18
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Multi-language code-graph MCP server with 18 tools for structural code queries — find_symbol, callers, callees, blast_radius, dead_code, and cross-stack dataflow_trace from HTTP request through service layers to SQL. Tree-sitter parsing for Python, TypeScript, JavaScript, and Go; local-first, no API key required.
    17
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables code analysis of JavaScript, TypeScript, TSX, Python, and Rust files using Tree-sitter, providing symbol listing, definition/reference lookup, AST queries, LSP-style features, and SQLite indexing for efficient cross-file searches.
    8 npm
    MIT