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