All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.6.0 - 2026-03-31
mcp-server-security--is-sensitive-file: patterns using~/prefix (e.g."~/.ssh/") were never matched because the input path was expanded withexpand-file-namebut the patterns were not, causing the literal~to fail against an absolute path (issue #9)mcp-server-security--is-dangerous-operation: callingsymbol-nameon a string operation ID (e.g."access-sensitive-file:find-file") raisedwrong-type-argument: symbolpinstead of returning a result- Sensitive file check was only applied to four functions (
find-file,find-file-noselect,view-file,insert-file-contents); functions likecopy-fileandrename-filecould still access sensitive files when placed inmcp-server-security-allowed-dangerous-functions
- Glob pattern support (
*,?) inmcp-server-security-sensitive-file-patterns: patterns such as"~/.authinfo*"now correctly match all variants (~/.authinfo.gpg,~/.authinfo.enc, etc.) viawildcard-to-regexp - Sensitive file check now covers
copy-file(args 1 and 2),rename-file(args 1 and 2),write-region(arg 3),append-to-file(arg 3),write-file(arg 1), andinsert-file-contents-literally(arg 1), blocking both reads from and writes to sensitive paths - New entries in default
mcp-server-security-dangerous-functions:append-to-file,async-shell-command,directory-files,directory-files-recursively,insert-file-contents-literally,make-network-process,make-process,open-network-stream,setenv,with-temp-file,write-file - Removed entries from default
mcp-server-security-dangerous-functionsthat were either non-functional or overly broad:process-environment(a variable, not a function; the form walker never matched it),shell-environment(not a standard Emacs function),require(too restrictive for legitimate use),save-current-bufferandset-buffer(low-level context-switching primitives with no inherent danger),switch-to-buffer(interactive UI command with no security impact) - Comprehensive unit test suite for
mcp-server-security(79 ERT tests total) - Known limitation documented and tracked: static form walker does not recurse into
let-binding value positions and cannot detect dynamically-constructed function names (funcall+intern); see issue #10
0.4.0 - 2026-01-08
get-diagnosticstool for flycheck/flymake error reporting- Modular tool system with self-registering plugins in
tools/directory - Selective tool enabling via
mcp-server-emacs-tools-enabled - Runtime tool filtering via
mcp-server-tools-filterpredicate - Automatic server shutdown when Unix socket terminates unexpectedly
- Comprehensive Elisp code conventions in CLAUDE.md
- Security limitations section in README documenting blocklist bypass methods
- Lowered minimum Emacs version from 28.1 to 27.1 (native JSON available since 27.1)
- Tools now use self-registration pattern (register on
require) - Converted
mcp-server-debugandmcp-server-default-transporttodefcustom - Converted security timeouts to
defcustomfor user configuration - Replaced
sleep-forwithsit-forfor proper event handling in main loop - Improved tool cleanup to preserve definitions (only resets runtime state)
- Refactored tool system into modular architecture
- Version mismatch between package header and
mcp-server-versiondefconst - Abstraction violation: transport now uses public
mcp-server-transport-send-rawAPI - Load-path setup for missing file variables
- Removed redundant runtime
requirestatement - Removed backward compatibility aliases causing defvar/defcustom confusion
- Removed autoload cookie from internal
mcp-server-mainfunction
- Backward compatibility variable aliases in security module
0.3.0 - 2026-01-07
- Granular permission prompts with session management
- GNU General Public License v3
- Test runner with safeguards and retries for socket operations
0.2.0 - 2026-01-06
- Enhanced sensitive file and function protection
- Repository badges for tests, license, and Emacs versions
- Emacs 30.x to CI test matrix
- Improved documentation with socat requirement note
0.1.0 - 2026-01-01
- Initial MCP server implementation in pure Elisp
- Unix domain socket transport
eval-elisptool for executing arbitrary Elisp expressions- Security sandbox with dangerous function blocklist
- Permission caching per session
- Multi-client support with independent connection tracking
- Python and shell wrapper scripts for MCP client integration
- Comprehensive test suite
- Demo images for theme change and poem writing