Skip to main content
Glama

#+TITLE: elisp-dev-mcp: MCP-сервер для агентской разработки на Elisp

[[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= — это пакет для Emacs, предоставляющий MCP-сервер (Machine Code Protocol) для агентской разработки на Elisp. Он позволяет ИИ-агентам помогать в написании кода на Elisp, предоставляя структурированный API для взаимодействия с Emacs и манипулирования кодом на Elisp.

Этот пакет использует [[https://github.com/laurynas-biveinis/mcp-server-lib.el][mcp-server-lib.el]] в качестве базовой инфраструктуры MCP.

  • Установка

Из [[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=), зарегистрируйте =elisp-dev-mcp= в вашем 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-since=: Версия, когда переменная стала устаревшей (строка, присутствует только если устарела)

    • =obsolete-replacement=: Предлагаемая замена для устаревшей переменной (строка, присутствует только если устарела)

    • =is-alias=: Является ли переменная псевдонимом другой переменной (логическое значение)

    • =alias-target=: Переменная, для которой это является псевдонимом (строка, присутствует только если это псевдоним)

    • =is-special=: Является ли переменная специальной (динамически областью видимости) (логическое значение)

    • или =error=: Сообщение об ошибке, если что-то пошло не так (строка)

*** Поиск документации Elisp Info

  • Имя: =elisp-info-lookup-symbol=

  • Описание: Поиск символов Elisp в документации Info и возврат полного узла документации

  • Параметры:

    • =symbol=: Символ Elisp для поиска (строка)

  • Возвращает:

    • =found=: Была ли найдена документация (логическое значение)

    • =symbol=: Символ, который искали (строка)

    • =node=: Имя узла Info, содержащего документацию (строка, если найдено)

    • =manual=: Имя руководства Info, обычно 'elisp' (строка, если найдено)

    • =content=: Полное содержимое узла Info, включая все примеры, перекрестные ссылки и связанную информацию (строка, если найдено)

    • =info-ref=: Ссылка Info, например '(elisp)Node Name' для прямого доступа (строка, если найдено)

    • =message=: Сообщение об ошибке или отсутствии (строка, если не найдено)

*** Читатель исходных файлов Elisp

  • Имя: =elisp-read-source-file=

  • Описание: Чтение исходных файлов Elisp из системных каталогов Emacs или пакетов ELPA. Принимает либо имена библиотек, либо абсолютные пути к файлам.

  • Параметры:

    • =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"=

  • Безопасность:

    • Читает только из системных каталогов lisp Emacs и каталогов 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 General Public License 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