Skip to main content
Glama

#+TITLE: elisp-dev-mcp: MCP-Server für agentische Elisp-Entwicklung

[[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]]

  • Übersicht

=elisp-dev-mcp= ist ein Emacs-Paket, das einen MCP-Server (Machine Code Protocol) für agentische Elisp-Entwicklung bereitstellt. Es ermöglicht KI-Agenten, bei Elisp-Programmieraufgaben zu unterstützen, indem es eine strukturierte API zur Interaktion mit Emacs und zur Manipulation von Elisp-Code bietet.

Dieses Paket nutzt [[https://github.com/laurynas-biveinis/mcp-server-lib.el][mcp-server-lib.el]] für die zugrunde liegende MCP-Infrastruktur.

  • Installation

Über [[https://melpa.org/#/elisp-dev-mcp][MELPA]] oder [[https://stable.melpa.org/#/elisp-dev-mcp][MELPA Stable]]:

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

  • Verwendung

** Registrierung bei einem MCP-Client

Nachdem =mcp-server-lib= ordnungsgemäß installiert wurde (einschließlich =M-x mcp-server-lib-install=), registrieren Sie =elisp-dev-mcp= bei Ihrem MCP-Client:

#+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

Bevor Sie den MCP-Server verwenden, müssen Sie ihn in Emacs mit =M-x mcp-server-lib-start= starten. Stoppen Sie ihn bei Bedarf mit =M-x mcp-server-lib-stop=.

** Verfügbare MCP-Handler

*** Elisp-Funktionsdokumentation

  • Name: =elisp-describe-function=

  • Beschreibung: Vollständige Dokumentation für eine Emacs Lisp-Funktion abrufen

  • Parameter:

    • =function=: Der Name der zu beschreibenden Funktion (String)

  • Rückgabewerte:

    • =description=: Die Dokumentation der Funktion (String)

    • oder =error=: Fehlermeldung, falls etwas schiefgelaufen ist (String)

*** Elisp-Funktionsdefinition

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

  • Beschreibung: Den Quellcode einer Emacs Lisp-Funktion abrufen

  • Parameter:

    • =function=: Der Name der abzurufenden Funktion (String)

  • Rückgabewerte:

    • Für Elisp-Funktionen:

      • =source=: Der Quellcode der Funktion, einschließlich Header-Kommentaren, falls vorhanden (String)

      • =file-path=: Pfad zur Datei, in der die Funktion definiert ist (String)

      • =start-line=: Zeilennummer des Beginns der Definition einschließlich Header-Kommentaren (Integer, 1-basiert)

      • =end-line=: Zeilennummer des Endes der Definition (Integer, 1-basiert)

    • Für in C implementierte Funktionen:

      • =is-c-function=: Boolescher Indikator, dass dies eine C-Funktion ist (immer wahr)

      • =function-name=: Der Name der Funktion (String)

      • =message=: Eine Nachricht, die angibt, dass die Funktion im C-Quellcode implementiert ist (String)

*** Elisp-Variablenbeschreibung

  • Name: =elisp-describe-variable=

  • Beschreibung: Informationen über eine Emacs Lisp-Variable abrufen, ohne ihren Wert preiszugeben

  • Parameter:

    • =variable=: Der Name der zu beschreibenden Variable (String)

  • Rückgabewerte:

    • =name=: Variablenname (String)

    • =bound=: Ob die Variable aktuell gebunden ist (Boolean, falsch für deklarierte, aber ungebundene Variablen)

    • =value-type=: Typ des Wertes (String, z. B. "cons", "string", "integer")

    • =documentation=: Variablendokumentation oder null, falls keine vorhanden (String oder null)

    • =source-file=: Pfad zur Datei, in der die Variable definiert ist (String)

    • =is-custom=: Ob es sich um eine anpassbare Variable handelt (Boolean)

    • =custom-group=: Die Custom-Gruppe, zu der diese Variable gehört (String, nur bei anpassbaren Variablen vorhanden)

    • =custom-type=: Die Spezifikation des Custom-Typs (String, nur bei anpassbaren Variablen vorhanden)

    • =is-obsolete=: Ob die Variable als veraltet markiert ist (Boolean)

    • =obsolete-since=: Version, seit der die Variable veraltet ist (String, nur vorhanden, wenn veraltet)

    • =obsolete-replacement=: Empfohlener Ersatz für die veraltete Variable (String, nur vorhanden, wenn veraltet)

    • =is-alias=: Ob die Variable ein Alias für eine andere Variable ist (Boolean)

    • =alias-target=: Die Variable, für die dies ein Alias ist (String, nur vorhanden, wenn Alias)

    • =is-special=: Ob die Variable eine spezielle (dynamisch gebundene) Variable ist (Boolean)

    • oder =error=: Fehlermeldung, falls etwas schiefgelaufen ist (String)

*** Elisp Info-Dokumentationssuche

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

  • Beschreibung: Elisp-Symbole in der Info-Dokumentation nachschlagen und den vollständigen Dokumentationsknoten zurückgeben

  • Parameter:

    • =symbol=: Das nachzuschlagende Elisp-Symbol (String)

  • Rückgabewerte:

    • =found=: Ob die Dokumentation gefunden wurde (Boolean)

    • =symbol=: Das Symbol, das nachgeschlagen wurde (String)

    • =node=: Der Name des Info-Knotens, der die Dokumentation enthält (String, falls gefunden)

    • =manual=: Der Name des Info-Handbuchs, normalerweise 'elisp' (String, falls gefunden)

    • =content=: Der vollständige Inhalt des Info-Knotens einschließlich aller Beispiele, Querverweise und zugehöriger Informationen (String, falls gefunden)

    • =info-ref=: Info-Referenz wie '(elisp)Node Name' für den direkten Zugriff (String, falls gefunden)

    • =message=: Fehler- oder Nicht-gefunden-Meldung (String, falls nicht gefunden)

*** Elisp-Quellcodedatei-Leser

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

  • Beschreibung: Elisp-Quellcodedateien aus Emacs-Systemverzeichnissen oder ELPA-Paketen lesen. Akzeptiert entweder Bibliotheksnamen oder absolute Dateipfade.

  • Parameter:

    • =library-or-path=: Bibliotheksname (z. B. ="subr"=, ="org"=) oder absoluter Pfad zur =.el=-Datei (String)

  • Rückgabewerte:

    • Der vollständige Dateiinhalt als String

    • oder =error=: Fehlermeldung, falls Bibliothek nicht gefunden, Datei nicht gefunden, ungültiges Format oder Zugriff verweigert (String)

  • Eingabemodi:

    1. Bibliotheksnamen (empfohlen für integrierte und installierte Pakete):

      • Einfache Namen ohne Pfadtrennzeichen: ="subr"=, ="files"=, ="org"=

      • Aufgelöst über die Emacs-Funktion =locate-library= (durchsucht =load-path=)

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

    2. Absolute Pfade (für Kompatibilität mit anderen =elisp-dev=-Werkzeugen):

      • Vollständige Pfade, die auf =.el= enden

      • Zurückgegeben von =elisp-get-function-definition=

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

  • Sicherheit:

    • Liest nur aus Emacs-System-Lisp-Verzeichnissen und ELPA-Verzeichnissen

    • Lehnt Pfade mit =..=-Traversierung ab

    • Löst symbolische Links auf, um ein Entkommen aus erlaubten Verzeichnissen zu verhindern

    • Bibliotheksnamen müssen zu Pfaden innerhalb erlaubter Verzeichnisse aufgelöst werden

  • Funktionen:

    • Verarbeitet transparent komprimierte =.el.gz=-Dateien

    • Funktioniert sowohl mit integrierten Emacs-Bibliotheken als auch mit installierten Paketen

    • Gibt den vollständigen Dateiinhalt als String zurück

** Konfiguration für alternative Paketmanager

Standardmäßig kann =elisp-read-source-file= nur auf Emacs-Systemverzeichnisse und Standard-=ELPA=-Pakete zugreifen. Für Benutzer alternativer Paketmanager wie straight.el, elpaca oder benutzerdefinierte Paket-Setups können Sie zusätzliche erlaubte Verzeichnisse konfigurieren:

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

Sicherheitshinweis: Fügen Sie nur Verzeichnisse hinzu, denen Sie vertrauen, da dies dem MCP-Server ermöglicht, alle =.el=-Dateien an diesen Orten zu lesen.

  • Ähnliche Pakete

  • Lizenz

Dieses Projekt ist unter der GNU General Public License v3.0 (GPLv3) lizenziert - siehe die Datei LICENSE für Details.

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