Emacs MCP Server
# Emacs MCP Server
Model Context Protocol (MCP) server for Emacs. Enables generating and running elisp code in a running Emacs process.
## Tools
The server exposes two tools:
- `generate_emacs_lisp_code`: generates elisp for a given task
- `execute_emacs_lisp_code`: passes elisp to a running Emacs (via `emacsclient`) to eval and execute it.
## Invocation
The project is managed with `uv`. First, run `uv sync` to install all dependencies. Then `source .venv/bin/activate` to activate the resulting venv.
To run the MCP server in the inspector:
```sh
mcp dev emacs_mcp_server.py
```
To install the MCP server so that Claude Desktop can use it:
```sh
mcp install emacs_mcp_server.py
```
But you will have to edit the resulting JSON config in `claude_desktop_config.json` to include API keys and the full path to `emacsclient`. It should look something like this:
```json
"Emacs-MCP-Server": {
"command": "/Users/haldar/.local/bin/uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with",
"smartfunc",
"mcp",
"run",
"/Users/haldar/repos/gh/emacs-mcp-server/emacs_mcp_server.py"
],
"env": {
"OPENAI_API_KEY": "sk-xxxx",
"EMACSCLIENT": "/your/path/to/emacsclient"
}
}
```TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one executes Emacs Lisp code, while the other generates it. There is no overlap or ambiguity between these functions, making it easy for an agent to select the appropriate tool based on the task.
Both tools follow a consistent verb_noun pattern with 'execute_emacs_lisp_code' and 'generate_emacs_lisp_code'. The naming is uniform, using snake_case and clear verbs that accurately describe each tool's action.
With only two tools, the server feels thin for an Emacs integration, as it lacks operations like editing files, managing buffers, or handling common Emacs commands. This minimal set may limit agents in performing typical Emacs-related tasks.
The tool surface is severely incomplete for an Emacs server, covering only code execution and generation. It misses essential CRUD/lifecycle operations such as opening files, saving changes, or interacting with Emacs modes, which are core to the domain.