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= 是一个 Emacs 软件包,为智能体 Elisp 开发提供 MCP(机器代码协议)服务器。它通过提供结构化的 API 来与 Emacs 交互并操作 Elisp 代码,从而使 AI 智能体能够辅助 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=

  • 描述: 在 Info 文档中查找 Elisp 符号并返回完整的文档节点

  • 参数:

    • =symbol=: 要查找的 Elisp 符号(字符串)

  • 返回:

    • =found=: 是否找到文档(布尔值)

    • =symbol=: 查找的符号(字符串)

    • =node=: 包含文档的 Info 节点名称(字符串,找到时返回)

    • =manual=: Info 手册名称,通常为 'elisp'(字符串,找到时返回)

    • =content=: 完整的 Info 节点内容,包括所有示例、交叉引用和相关信息(字符串,找到时返回)

    • =info-ref=: Info 引用,如 '(elisp)Node Name',用于直接访问(字符串,找到时返回)

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