Skip to main content
Glama

#+TITLE: elisp-dev-mcp: Servidor MCP para el desarrollo agente de 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]]

  • Descripción general

=elisp-dev-mcp= es un paquete de Emacs que proporciona un servidor MCP (Machine Code Protocol) para el desarrollo agente de Elisp. Permite a los agentes de IA ayudar con tareas de programación en Elisp proporcionando una API estructurada para interactuar con Emacs y manipular código Elisp.

Este paquete aprovecha [[https://github.com/laurynas-biveinis/mcp-server-lib.el][mcp-server-lib.el]] para la infraestructura MCP subyacente.

  • Instalación

Desde [[https://melpa.org/#/elisp-dev-mcp][MELPA]] o [[https://stable.melpa.org/#/elisp-dev-mcp][MELPA Stable]]:

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

  • Uso

** Registro con un cliente MCP

Después de que =mcp-server-lib= se haya instalado correctamente (incluyendo =M-x mcp-server-lib-install=), registre =elisp-dev-mcp= con su cliente 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

Antes de usar el servidor MCP, debe iniciarlo en Emacs con =M-x mcp-server-lib-start=. Deténgalo con =M-x mcp-server-lib-stop= cuando haya terminado.

** Controladores MCP disponibles

*** Documentación de funciones de Elisp

  • Nombre: =elisp-describe-function=

  • Descripción: Obtener la documentación completa de una función de Emacs Lisp

  • Parámetros:

    • =function=: El nombre de la función a describir (cadena)

  • Retorna:

    • =description=: La documentación de la función (cadena)

    • o =error=: Mensaje de error si algo salió mal (cadena)

*** Definición de funciones de Elisp

  • Nombre: =elisp-get-function-definition=

  • Descripción: Obtener la definición del código fuente de una función de Emacs Lisp

  • Parámetros:

    • =function=: El nombre de la función a recuperar (cadena)

  • Retorna:

    • Para funciones de Elisp:

      • =source=: El código fuente de la función, incluyendo comentarios de cabecera si están presentes (cadena)

      • =file-path=: Ruta al archivo donde está definida la función (cadena)

      • =start-line=: Número de la primera línea de la definición, incluyendo comentarios de cabecera (entero basado en 1)

      • =end-line=: Número de la última línea de la definición (entero basado en 1)

    • Para funciones implementadas en C:

      • =is-c-function=: Indicador booleano de que esta es una función en C (siempre verdadero)

      • =function-name=: El nombre de la función (cadena)

      • =message=: Un mensaje indicando que la función está implementada en código fuente C (cadena)

*** Descripción de variables de Elisp

  • Nombre: =elisp-describe-variable=

  • Descripción: Obtener información sobre una variable de Emacs Lisp sin exponer su valor

  • Parámetros:

    • =variable=: El nombre de la variable a describir (cadena)

  • Retorna:

    • =name=: Nombre de la variable (cadena)

    • =bound=: Si la variable está vinculada actualmente (booleano, falso para variables declaradas pero no vinculadas)

    • =value-type=: Tipo del valor (cadena, p. ej., "cons", "string", "integer")

    • =documentation=: Documentación de la variable o nulo si no hay ninguna (cadena o nulo)

    • =source-file=: Ruta al archivo donde está definida la variable (cadena)

    • =is-custom=: Si es una variable personalizable (booleano)

    • =custom-group=: El grupo personalizado al que pertenece esta variable (cadena, solo presente para variables personalizadas)

    • =custom-type=: La especificación del tipo personalizado (cadena, solo presente para variables personalizadas)

    • =is-obsolete=: Si la variable está marcada como obsoleta (booleano)

    • =obsolete-since=: Versión en la que la variable quedó obsoleta (cadena, solo presente si es obsoleta)

    • =obsolete-replacement=: Reemplazo sugerido para la variable obsoleta (cadena, solo presente si es obsoleta)

    • =is-alias=: Si la variable es un alias de otra variable (booleano)

    • =alias-target=: La variable de la cual es alias (cadena, solo presente si es alias)

    • =is-special=: Si la variable es una variable especial (de ámbito dinámico) (booleano)

    • o =error=: Mensaje de error si algo salió mal (cadena)

*** Búsqueda de documentación en Info de Elisp

  • Nombre: =elisp-info-lookup-symbol=

  • Descripción: Buscar símbolos de Elisp en la documentación Info y devolver el nodo de documentación completo

  • Parámetros:

    • =symbol=: El símbolo de Elisp a buscar (cadena)

  • Retorna:

    • =found=: Si se encontró la documentación (booleano)

    • =symbol=: El símbolo que se buscó (cadena)

    • =node=: El nombre del nodo Info que contiene la documentación (cadena, cuando se encuentra)

    • =manual=: El nombre del manual Info, típicamente 'elisp' (cadena, cuando se encuentra)

    • =content=: El contenido completo del nodo Info, incluyendo todos los ejemplos, referencias cruzadas e información relacionada (cadena, cuando se encuentra)

    • =info-ref=: Referencia Info como '(elisp)Node Name' para acceso directo (cadena, cuando se encuentra)

    • =message=: Mensaje de error o de no encontrado (cadena, cuando no se encuentra)

*** Lector de archivos fuente de Elisp

  • Nombre: =elisp-read-source-file=

  • Descripción: Leer archivos fuente de Elisp desde directorios del sistema de Emacs o paquetes ELPA. Acepta nombres de bibliotecas o rutas de archivo absolutas.

  • Parámetros:

    • =library-or-path=: Nombre de la biblioteca (p. ej., ="subr"=, ="org"=) o ruta absoluta al archivo =.el= (cadena)

  • Retorna:

    • El contenido completo del archivo como una cadena

    • o =error=: Mensaje de error si no se encuentra la biblioteca, el archivo, formato inválido o acceso denegado (cadena)

  • Modos de entrada:

    1. Nombres de bibliotecas (recomendado para paquetes integrados e instalados):

      • Nombres simples sin separadores de ruta: ="subr"=, ="files"=, ="org"=

      • Resueltos mediante la función =locate-library= de Emacs (busca en =load-path=)

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

    2. Rutas absolutas (para compatibilidad con otras herramientas =elisp-dev=):

      • Rutas completas que terminan en =.el=

      • Devueltas por =elisp-get-function-definition=

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

  • Seguridad:

    • Solo lee desde directorios lisp del sistema de Emacs y directorios ELPA

    • Rechaza rutas con recorrido =..=

    • Resuelve enlaces simbólicos para evitar escapar de los directorios permitidos

    • Los nombres de las bibliotecas deben resolverse en rutas dentro de los directorios permitidos

  • Características:

    • Maneja de forma transparente archivos comprimidos =.el.gz=

    • Funciona tanto con bibliotecas integradas de Emacs como con paquetes instalados

    • Devuelve el contenido completo del archivo como cadena

** Configuración para gestores de paquetes alternativos

Por defecto, =elisp-read-source-file= solo puede acceder a directorios del sistema de Emacs y paquetes =ELPA= estándar. Para usuarios de gestores de paquetes alternativos como straight.el, elpaca o configuraciones de paquetes personalizadas, puede configurar directorios permitidos adicionales:

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

Nota de seguridad: Solo añada directorios en los que confíe, ya que esto permite al servidor MCP leer cualquier archivo =.el= en estas ubicaciones.

  • Paquetes similares

  • Licencia

Este proyecto está bajo la Licencia Pública General de GNU v3.0 (GPLv3) - consulte el archivo LICENSE para obtener más detalles.

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