Tool filtering can now be controlled directly from main/start opts and the CLI, without needing config files. Also fixes deps_grep to require the :type parameter and filter out binary file entries.
- Tool filtering CLI opts: New
:enable-tools,:disable-tools,:add-tools, and:remove-toolsoptions formain/startandclojure -Tmcp start, allowing programmatic and CLI control over which tools are exposed:enable-tools/:disable-tools— absolute overrides that replace config values:add-tools/:remove-tools— relative modifiers applied after config resolution (:add-toolswins on overlap)- Useful for combining with
:config-profile :cli-assistto selectively re-enable or disable tools
deps_grep: Now requires the:typeparameter and filters out binary file entries from results
Major update to the LLM model ecosystem: upgrades LangChain4j to 1.12.2, adds 55 built-in model configurations across five providers (OpenAI, Anthropic, Google, Mistral, and reasoning variants), and introduces short model aliases for faster CLI usage. Mistral models now work out of the box with MISTRAL_API_KEY.
- Updated from 1.8.0 to 1.12.2, bringing improved Anthropic tool features, streaming error handling, OpenAI streaming fixes, and MCP spec updates
- 7 Mistral models available out of the box:
mistral-large,mistral-medium,mistral-small,codestral,devstral,magistral-medium,magistral-small - Automatically detects
MISTRAL_API_KEYenvironment variable — no configuration needed - Routes through the OpenAI-compatible API with Mistral's base URL
- Short aliases resolve to full model keys — use
-m sonnetinstead of-m :anthropic/claude-sonnet-4-6 - Aliases for all providers:
:sonnet,:opus,:haiku,:flash,:gemini,:mistral,:codestral,:codex,:gpt-5-4, and many more
- New Anthropic models: Claude Opus 4.6, Sonnet 4.6, Haiku 4.5 (with reasoning variants)
- New OpenAI models: GPT-5 Pro, GPT-5.1/5.2/5.4, GPT-5 Codex variants, o1-pro
- New Google models: Gemini 3 Flash, Gemini 3 Pro, Gemini 3.1 Flash Lite, Gemini 3.1 Pro
- 55 total built-in models across all providers (up from 21)
:shadow-cljs-repl-messageconfig flag: Disable REPL mode status messages in shadow-cljs environments
- cli-assist profiles: Enabled
clojure_edit_replace_sexpas a fallback tool (same pattern asclojure_edit) - cli-assist profiles: Disabled
Clojure Project Inforesource to reduce noise for CLI assistants
- Fixed
clojure_editreference toclojure_edit_agentin cli-assist-agent profile - Fixed SSE core to use updated API in MCP Java SDK
- cljfmt partial formatting: New
:partialmode formats only replaced forms, preserving surrounding formatting (#154, #155)
Security hardening for the deps_read tool.
deps_readpath validation: Jar paths are now validated to ensure they reside under~/.m2/repositoryor~/.clojure-mcp/deps_cache, preventing path traversal attacks from reading arbitrary jar files outside dependency caches
New tools for searching and reading dependency source code, plus a cli-assist configuration tweak.
deps_greptool: Search for patterns inside dependency jar files on the classpath, with support for regex, glob filtering, and multiple output modes (#147)deps_readtool: Read files from inside dependency jars using paths fromdeps_grepresults (#147)deps_listtool: List all dependencies on the project classpath with Maven coordinates, useful for discovering library names fordeps_grep(#147)
- cli-assist configs: Disabled
clojure_inspect_projecttool in cli-assist profiles to keep the toolset minimal
This release fixes MCP client compatibility for clients sending the newer elicitation.form capability field, and adds a new tool for repairing delimiter errors in Clojure files.
paren_repairMCP tool: Fix unbalanced parentheses, brackets, and braces in Clojure files using parinfer (#144)
- MCP client compatibility: Updated MCP Java SDK to 0.17.2 to handle
elicitation.formfield from newer clients (e.g., OpenAI Codex)
- MCP Java SDK update: Updated to version 0.17.1 to handle unknown protocol fields (#146)
.orgfile detection: Fixed issue where Emacs Org-mode files were misdetected as Lotus Organizer binary format (#139)
- Reorganized README for two primary use cases: CLI assistants (Claude Code, Codex, Gemini CLI) and Claude Desktop
- Clarified clojure-mcp-light vs ClojureMCP: Added guidance on when to use each tool and how they complement each other
- Extracted troubleshooting guide to
doc/troubleshooting.md - Added nREPL setup guide at
doc/nrepl.md - Streamlined table of contents and fixed heading hierarchy
clojure -Ttoolsinstallation: ClojureMCP can now be installed globally viaclojure -Ttools install-latest :lib io.github.bhauman/clojure-mcp :as mcp, makingclojure -Tmcp startavailable from any directory
- Fixed git SHA in README install instructions
This release focuses on developer experience improvements with new tools for nREPL discovery, enhanced configuration flexibility through config profiles and environment variables, and a structural editing agent for Clojure code.
list_nrepl_portstool: Discover all running nREPL servers on your machine with environment type detection (clj, bb, shadow, etc.) and project directory informationclojure_edit_agent: New structural editing agent for Clojure code - use as a fallback when the Edit tool has trouble with delimiter matching
- Config profiles: New
:config-profileCLI option for resource-based configuration overlays - easily switch between different tool configurations - Environment variable support:
ENABLE_TOOLSandDISABLE_TOOLSenvironment variables for controlling which tools are loaded
- Environment/namespace reporting: Eval tool output now includes environment and namespace information
- Optional nREPL in prompt-cli: nREPL connection is now optional for the prompt CLI
- Improved shadow-cljs detection: Better detection in
list_nrepl_portswith helpful messages about listing builds - Simplified nREPL output format: Cleaner, more readable output from
list_nrepl_ports
directory_treetool: Removed in favor of other exploration methods- Unused tools: Removed
unified_clojure_edittool and sexp/match utilities
This release introduces lazy nREPL initialization, allowing ClojureMCP to start without an immediate REPL connection. It also includes logging improvements, SDK updates, and significant code cleanup.
- Start without REPL connection: ClojureMCP can now start without connecting to an nREPL server immediately. REPL initialization happens lazily on first
eval-codecall. - New entry point
clojure-mcp.main/start: Automatically sets:project-dirto current working directory. Use:not-cwd trueto disable this behavior. - Per-port state tracking: Each port now tracks its own
env-type,initialized?, andproject-dirstate. .nrepl-portfile fallback: The eval tool, bash tool, and inspect-project tool can discover the nREPL port from.nrepl-portfile in the project directory when no port is configured.
- Migrated to Timbre: Replaced
clojure.tools.loggingwithtaoensso.timbrefor pure Clojure logging with better configuration options. - Centralized logging configuration: New
clojure-mcp.loggingnamespace with namespace filtering and customizable options. - Logging disabled by default: Enable with
:enable-logging? truein config.
clojure-mcp.main/startentry point: Simplified startup for CLI tools running from project directory- Per-port lazy initialization:
ensure-port-initialized!,with-port,with-port-initializedfunctions - Port state accessors:
get-port-env-type,set-port-env-type!,port-initialized?,get-port-project-dir .nrepl-portfile reading:read-nrepl-port-filefunction for automatic port discovery
- MCP SDK updated to 0.15.0: Compatibility updates for latest SDK
- UTF-8 encoding standardized: File I/O now uses UTF-8 encoding across all platforms
- Edamame for delimiter checking: Replaced clj-kondo with edamame for more permissive parsing
- deps.edn simplified: Removed hardcoded
:port 7888defaults, updated aliases to use newstartfunction
- Unused tools: Removed think tool, clojure-edit-agent, edit location tracking
- Unused prompts: Cleaned up unused prompt definitions
- Unused functions: Removed dead code from form_edit/core, form_edit/pipeline, paren-utils
- other_tools directory: Removed unused tools and associated tests
- Emacs notification support: Removed unused notification code
- Comment forms: Cleaned up development comment blocks
- clj-kondo warnings: Fixed unused imports, redundant let bindings, docstring placement
- Error semantics: Reverted error semantics change, made edamame more permissive
- Dialect functions moved:
detect-nrepl-env-type,initialize-environment,load-repl-helpersmoved fromdialects.cljtonrepl.cljto avoid circular dependencies - Simplified
create-additional-connection: Now uses lazy initialization pattern
This release changes the project license to EPL 2.0, adds an experimental prompt CLI, and includes several configuration improvements and dependency updates.
- Changed license from AGPL 3.0 to Eclipse Public License 2.0 - The project now uses EPL 2.0, providing more flexibility for commercial use and integration with proprietary code while still requiring sharing of modifications
- Experimental Prompt CLI (
clojure -M:prompt-cli) for command-line AI interaction with session persistence and resume functionality - See documentation - Prompt to save custom user prompts to config (#117)
- Babashka script detection: Improved detection of Babashka scripts with regex pattern matching for shebangs
- dry_run parameter for file editing tools (#121, #122) - Allows preview of edits before applying, this is mainly for integration in to ECA https://github.com/editor-code-assistant/eca
- bash-over-nrepl default: Changed default to
falseBash commands now run locally by default instead of over nREPL. - LangChain4j update: Updated to latest version
- Model updates: Updated model configurations and definitions
- Test suite: Fixed failing tests after model.clj changes
- Form edit pipeline: Simplified error messages
- Port parsing: Improved patterns to prevent FlowStorm false positives (#113)
- Documentation: Fixed inaccurate mentions and spelling issues
- clojure_edit_replace_comment_block: Removed outdated tool references
Recent changes to Claude Desktop and Claude Code prompted me to reconsider how ClojureMCP tools use the error flag in their responses.
Claude Desktop and Claude Code are now limiting the view of results when a tool responds with the error flag set to true.
Before this commit, the error flag was incorrectly triggered for errors arising from normal tool operation (such as invalid parameters or expected failure conditions). This approach made tool results less accessible when a tool was used incorrectly, even though the tool itself was functioning properly.
Going forward, the error flag will only be set to true for runtime Exceptions that indicate actual tool malfunctions. This change ensures tool results remain legible and expandable when users make mistakes in tool usage, while still clearly signaling genuine system errors.
- Prevent validation errors from sending MCP tool result error flag - validation/processing errors now appear in results without signaling protocol-level errors
- Fix truncation message showing file size in bytes instead of line count (#107)
Launching an nREPL server is now incredibly simple! Just provide :start-nrepl-cmd and the MCP server handles everything else - perfect for Claude Code and other CLI-based AI tools.
From your project directory, just run:
# For Leiningen projects
clojure -X:mcp :start-nrepl-cmd '["lein" "repl" ":headless"]'
# For deps.edn projects
clojure -X:mcp :start-nrepl-cmd '["clojure" "-M:nrepl"]'
# For Babashka scripts
clojure -X:mcp :start-nrepl-cmd '["bb" "nrepl-server"]'That's it! The MCP server will:
- Start your nREPL server automatically
- Discover the port from the output
- Connect and manage the process lifecycle
- Clean up when you're done
This feature is especially valuable for Claude Code users who want to start coding immediately without managing separate terminal windows:
- Open Claude Code in your Clojure project directory
- The nREPL starts automatically when Claude connects
- Start coding with full REPL support!
You can also configure this in .clojure-mcp/config.edn:
{:start-nrepl-cmd ["clojure" "-M:nrepl"]}Important: Claude Desktop does not start MCP servers from your project directory, so :start-nrepl-cmd will not work unless you also provide :project-dir pointing to your specific project:
# For Claude Desktop, you must specify the project directory:
clojure -X:mcp :start-nrepl-cmd '["lein" "repl" ":headless"]' :project-dir '"/path/to/your/clojure/project"'This limitation does not affect Claude Code or other CLI-based tools that you run directly from your project directory.
If you prefer a specific port, just add it:
clojure -X:mcp :start-nrepl-cmd '["lein" "repl" ":headless"]' :port 7888- Removed
:parse-nrepl-port: This confusing option has been eliminated. The MCP server now intelligently determines whether to parse the port based on whether:portis provided. Simple!
If you were using :parse-nrepl-port, just remove it:
- Old:
:start-nrepl-cmd ["..."] :parse-nrepl-port true - New:
:start-nrepl-cmd ["..."]
- You can now define agents, prompts, and resources in the clojure-mcp config.edn file
- You can now have a user based ~/.clojure-mcp/config.edn file that will be merged into your project local config file.
- For Claude Code and other CLI based llm client users, clojure-mcp can now start your nrepl for you and pass off the dynamic port number to clojure-mcp.
- Let me repeat, you can create sub-agents in the clojure-mcp configuration Configuring Agents. This coupled with being able to define LLM models allows a tremendous amount of flexibility in your tooling.
All this and much much more!
- Automatic nREPL Server Startup: New
:start-nrepl-cmdconfiguration option to automatically start nREPL servers (#86)- Automatically starts nREPL when specified in CLI args or config file
- Supports common nREPL commands like
lein repl :headless,clj -M:nrepl, etc. - Port discovery from command output with
:parse-nrepl-portoption - Process management with graceful shutdown and timeout handling
- Vector format required for commands (e.g.,
["lein" "repl" ":headless"])
- Home Directory Config Support: Config files can now be loaded from
~/.config/clojure-mcp/config.edn(#99)- Provides user-level default configuration across all projects
- Project-level
.clojure-mcp/config.edntakes precedence over home directory config - Supports merging of configurations with proper precedence
- Configuration Validation: Malli based configuration validation to help with configuration errors
- Agent Tool Builder System: Dynamic agent creation from configurations
- Configuration-based agent definitions via
:agentsin.clojure-mcp/config.edn - Tool-specific configurations merge with default agents via
:tools-config - Supports custom model selection per agent
- See Configuring Agents and Tools Configuration guides
- Configuration-based agent definitions via
- Resource Configuration System: New ability to control which files are exposed as resources
:enable-resourcesand:disable-resourcesfor selective resource exposure- Control which documentation, project files, and prompts are available to AI assistants
- Filter resources by name to reduce context and focus on relevant materials
- See Configuring Resources guide
- Prompt Configuration System: Fine-grained control over AI prompts
:enable-promptsand:disable-promptsfor prompt filtering- Selectively enable only the prompts needed for your workflow
- See Configuring Prompts and Component Filtering guides
- REPL Helpers Improvements: Enhanced REPL interaction utilities (#98)
- Agent Context Management: Better isolation for file operations and conversation context
- Agents now properly reset context between conversations
- Improved file operation tracking
- Configuration Documentation: Reorganized and cleaned up configuration documentation in README (#99)
- Improved clarity and organization of configuration options
- Better examples and explanations for common use cases
- MCP SDK Dependency: Updated to version 0.12.1
- Agent Architecture: Refactored all agents to use generalized agent library
- Dispatch agent system message moved to resource file
- Centralized tool construction via
tools.clj - Eliminated circular dependencies
- SQL File Support: Mitigated errors when reading SQL files (#91)
- Agent context management now properly handles reset on every chat
- Test suite updated for refactored agent system
- Added namespace editing example to
clojure_edittool description - Updated PROJECT_SUMMARY.md to reflect agent tools refactoring
- Initial draft of new configuration documentation (#97)
- Various documentation improvements and noise reduction
- Removed 600+ lines of redundant hardcoded agent implementations
- Refactored
tools.cljto eliminate circular dependencies - Consolidated agent functionality into generalized agent library
Special thanks to all the contributors who made this release possible:
- Hugo Duncan (@hugoduncan) - For implementing the automatic nREPL server startup feature with port discovery (#86)
- Jonathon McKitrick (@jmckitrick) - For configuration improvements, home directory config support, and documentation (#97, #99)
- Kenny Williams (@kennyjwilli) - For numerous REPL helpers improvements (#98)
- Mark Stuart (@markaddleman) - For fixing SQL file reading support (#91)
This release brings major configuration enhancements and improved Clojure code editing.
In terms of Clojure editing, these improvements are significant. There used to be some edit thrashing when editing functions with comments that directly preceed them. This is now fixed. When the LLM wants to replace a function along with its preceeding comments, clojure-mcp does the right thing.
The sexp replacement has been revamped yet again. Sexpr replacement will now succeed most of the time while being preceeding comment aware as well.
The other big step forward is the addition of custom model
configuration in the config.edn. This is a direct result of
langchain4j improving its model support. Now you can define custom
model configurations to be used by the agent tools.
Other .clojure-mcp/config.edn configuration improvements allow you to
:enable-tools:disable-tools:enable-prompts:disable-prompts:enable-resources:disable-resources- add tool specific configuration in
:tools-config
With all these changes, I'm going to be removing the -alpha from the next release tag.
** Key Highlights:**
- Custom LLM Models - Define your own model configurations in
.clojure-mcp/config.ednwith environment variable support for API keys - Scittle Support - Connect directly to Scittle nREPL without configuration - fun stuff!
- Component Filtering - Choose exactly which tools, prompts, and resources your server exposes
- Improved Code Editing - Much better handling of preceeding comments and sexp editing
- Tool Configuration - Configure individual tools with custom settings including model selection
Example Model Configuration:
:models {;; use the OpenAI client to connect to other models
:openai/glm {:model-name "z-ai/glm-4.5"
:api-key [:env "OPENROUTER_API_KEY"]
:base-url [:env "OPENROUTER_BASE_URL"]
:temperature 1}
:anthropic/my-claude {:model-name "claude-3-5-sonnet-20241022"
:temperature 0.7}}
:tools-config {:dispatch_agent {:model :openai/my-fast}}Currently these defined models are mainly used for the built-in agents, but if clojure-mcp had a cli that you could send prompts to...
Documentation:
These docs are incomplete but should get you started...
- Component Filtering Guide - Control which components are exposed
- Model Configuration Guide
- Tools Configuration Guide
- Default Models
Coming Soon:
- Editing agent for cleaner context management
- Expanded tool configuration options
- Custom resources, prompts, tools, and agents definable in config
Complete support for user-defined LLM model configurations via .clojure-mcp/config.edn:
- Named model definitions: Define custom models under the
:modelskey with provider-specific settings - Environment API key support with
[:env "VAR_NAME"]syntax - Support for OpenAI, Anthropic, Google Gemini including setting the
:base-urlfor the OpenAi client - Built-in default models remain available when custom ones aren't defined
New :tools-config key for configuring individual tools:
- Per-tool settings: Configure tools like
dispatch_agent,architect, andcode_critiquewith custom models - Example:
:tools-config {:dispatch_agent {:model :openai/o3}}
Fine-grained control over which components are enabled:
- Tool filtering:
:enable-toolsand:disable-toolsconfiguration options - Prompt filtering:
:enable-promptsand:disable-promptsfor controlling AI prompts - Resource filtering:
:enable-resourcesand:disable-resourcesfor managing exposed files
Major revamp of how s-expression editing works:
- Better pattern matching: More reliable matching of Clojure forms
- Private function support:
clojure_editnow matches privatedef-anddefn-forms flexibly - Comment-aware editing: Improved handling of comments in top-level forms
- Scittle support: Initial support for Scittle (browser Clojure) files
- Basilisp extension:
.lpyfiles now recognized as Clojure for editing
- Claude 4.1 and GPT-5 models: Support for latest AI models
- 5 additional OpenAI models: Expanded model selection with simplified names
- Code index documentation: Initial documentation for code indexing feature (#76)
- Bash tool enhancements:
- Configurable timeout with
timeout_msparameter - Additional configuration options for execution control
- Configurable timeout with
- Write-file-guard default: Changed from
:full-readto:partial-readfor better usability - LangChain4j upgrade: Updated to version 1.2.0 for improved model support
- Dispatch agent context: Added project info to dispatch agent context (#78, fixes #71)
- Tool call prefixing: Added note about correctly prefixing tool calls to system prompt
Note the major changes listed in 0.1.7-alpha-pre below which are part of this release.
Moving out of pre-release with several code fixes. A new configuration option allows the dispatch_agent to load files as context. The :dispatch-agent-context setting accepts either:
true- automatically loadsPROJECT_SUMMARY.md(if available) and./.clojure-mcp/code_index.txt(the new default output location forclojure-mcp.code-indexer)- A vector of file paths - loads the specified files into the dispatch_agent context
This enables dispatch_agent to have better project awareness through pre-loaded context files.
- Race condition in nREPL session creation - Fixed critical race condition in
clojure-mcp.nrepl/new-sessionthat could cause session initialization failures - Working directory handling - Shell commands now properly use the working directory when executing
- :mcp-client-hint configuration - New config option for providing hints to MCP clients about tool capabilities, used in scratch_pad tool schema - currently this allows me to experiment with using the more specific scratch_pad schema on claude desktop...
- :dispatch-agent-context configuration - New config option for providing context to dispatch agents
- Updated to latest Clojure version - Project now uses the most recent Clojure release
- Code simplification - Various internal simplifications to improve maintainability
- Dual Shadow mode documentation - Added documentation for dual Shadow CLJS mode setup
- Minor grammar fixes - Improved clarity in various documentation sections
- Updated PROJECT_SUMMARY prompt - Corrected command name in documentation
- Fixed nREPL server function invocation
- Moved default code indexer output in preparation for dispatch-agent-content configuration
- Minor deps.edn configuration adjustments
Thanks to Jonathon McKitrick for documenting dual Shadow mode and Thomas Mattacchione for the PROJECT_SUMMARY prompt update.
Fixed critical issue where ClojureMCP was scanning the home directory, causing extremely slow startup times. The fix includes:
- Project inspection optimization: Reduced from multiple glob calls to a single optimized call
- Path validation: Fixed bad paths being passed to glob functions that caused excessive filesystem scanning
Initial support for non-JVM Clojure dialects including Babashka and Basilisp:
- Reduced Initializing Clojure Evals: Minimized reliance on Clojure code evaluation on startup
- Multimethod dispatch: Added
:nrepl-env-typebased dispatch for dialect-specific behavior - Configuration: Use
:project-dircommand-line option to specify working directory for alternative dialects - Note: Disable
:bash-over-nreplin.clojure-mcp/config.ednfor non-JVM environments
The scratch pad now automatically saves to .clojure-mcp/scratch_pad.edn on every change:
- Explicit loading: Use
scratch_pad_loadprompt to load saved data - Snapshot saving: Use
scratch_pad_save_asprompt to save snapshots to named files - Configurable filename: Set
:scratch-pad-filein config to use different filenames - Auto-load on startup: Enable with
:scratch-pad-load truein config Many thanks to Mark Addleman for working on this.
- Multi-dialect support infrastructure:
:nrepl-env-typeconfiguration parameter for dialect detection- Multimethod dispatch system for dialect-specific behavior
- Support for Babashka, and Basilisp environments
- Scratch pad persistence with flexible configuration via
.clojure-mcp/config.edn::scratch-pad-loadboolean flag for auto-loading on startup (default:false):scratch-pad-fileto specify filename within.clojure-mcp/directory (default:"scratch_pad.edn")- Automatic saving on every change
- New prompts for scratch pad file operations:
ACT/scratch_pad_loadprompt for loading EDN files into scratch padACT/scratch_pad_save_asprompt for saving scratch pad snapshots to named files
- Project directory override with
:project-dircommand-line option - Pattern-based collapsed view for text files in
read_filetool:- Shows only lines matching patterns with 20 lines of context
- Works with
content_patternorname_patternparameters
- Bash execution isolation:
:bash-over-nreplconfig option to control execution mode (default:true)- Separate nREPL session for bash commands to prevent REPL pollution
- Output truncation for local bash execution
- Project inspection performance: Optimized glob operations from multiple calls to single call
- grep and glob_files tools now properly launch from working directory
- Bash tool enhanced with configurable execution modes
- Configuration loading no longer attempts to fetch remote configs
- Added table of contents to README
- Hopefully improved setup instructions
- Added Shadow CLJS section to README
- Updated README with
:project-dirusage information
- Improved string building performance in various tools
- Enhanced configuration handling for cleaner code structure
- Optimized
clojure_inspect_projectwith ~3.8x speedup by reducing glob operations from 5 calls to 1 using brace expansion patterns - Added ripgrep recommendation to README prerequisites for better
grepandglob_filesperformance
- Issue #13: Replaced external diff utility with native Java library (java-diff-utils) to eliminate shell command dependencies (Many thanks to @burinc for this!)
- Project inspection file discovery - Fixed issue where the tool was failing to find files in some configurations
- Grep tool now properly handles file patterns
- Scratch pad schema simplified to resolve issue #42, improving compatibility with tool description overrides
- Added comprehensive test suite for diff.clj with 38 assertions covering edge cases
- Removed debug printlns from codebase
- Minor description revert for clarity
The project has undergone a significant refactor to make creating custom MCP servers dramatically easier. The new pattern uses factory functions and a single entry point, reducing custom server creation to just a few lines of code.
- Factory function pattern for creating custom MCP servers with
make-tools,make-prompts, andmake-resourcesfunctions - Code indexer tool (
clojure -X:index) for creating condensed codebase maps showing function signatures - Reader conditional support in collapsed view for
.cljcfiles with platform-specific code - Multi-tool support in
glob_fileswith intelligent fallback (ripgrep → find → Java NIO) - Add-dir prompt allowing you to add directories to allowed paths
- Project inspection tool completely refactored for 97% reduction in nREPL payload by moving file operations to local execution
- Unified read_file tool replacing legacy implementations with pattern-based code exploration
- Main entry point simplified to use
core/build-and-start-mcp-serverwith factory functions - glob_files enhanced with better truncation messages and cross-platform compatibility
- File collection in project tool now uses local glob operations instead of remote nREPL
- Documentation updated throughout to reflect new patterns and accurate tool information
- Issue #43: grep tool now correctly handles patterns starting with
-character - Path existence validation in file operations
- MCP server closing behavior when client atom is not set
- Legacy
read_filetool implementations - Unused collapsed file view code
- Complex manual setup patterns in favor of simplified factory approach
- Added
:cljfmtoption to.clojure-mcp/config.ednto disable code formatting when set tofalse
- PROJECT_SUMMARY.md updated with accurate tool names and descriptions
- Custom server guide rewritten for new simplified pattern
- Added examples for SSE transport and pattern variations
- File timestamp behavior improved with better logging
- Code organization enhanced with docstrings for core functions
- Examples updated to use new interface patterns
After a bunch of refinements the scratch_pad tool has matured into a very interesting tool - a freeform JSON data structure shared across all chat sessions in chat client.
- Persistent memory: Data survives across conversations
- Flexible storage: Any JSON data (objects, arrays, strings, numbers)
- Path operations: Use
set_path/get_path/delete_pathfor precise data manipulation - AI workspace: Serves as both thinking tool and progress tracker
For complex features, use the new plan-and-execute prompt which leverages scratch_pad to:
- Research problems thoroughly
- Break down tasks into manageable subtasks
- Track progress with structured todo lists
- Maintain context throughout development
- Ripgrep (rg) support in grep tool with intelligent fallback hierarchy (rg > grep > Java)
- Smart path operations in scratch_pad tool for automatic string-to-number conversion and data structure initialization
- Tool rename:
fs_grep→grepfor better consistency - Enhanced scratch_pad with smart path munging for vector indices
- Improved error handling for streaming operations with null parameters
- Streaming errors when receiving null parameters in MCP operations
- Schema validation errors in tool operations
- General code linting and cleanup across multiple files
- Improved documentation and README content
- Configurable file timestamp tracking via
:write-file-guardoption (:full-read,:partial-read, orfalse) - File existence validation in
unified_read_filetool - FAQ.md documenting file timestamp tracking behavior
- Docker support (
:dkr-nreplalias) plan-and-executeprompt for structured planning workflows- Test coverage for new features
- Enhanced scratch_pad prompt to encourage planning usage
- Clojure files always read as text format
- nREPL aliases now bind to 0.0.0.0 for network access
- Cleaned up unused prompt definitions
- FAQ with table of contents explaining timestamp tracking
- Updated system prompts and README with Wiki link
- Added configuration helper functions (
get-write-file-guard,write-guard?) - File validation utilities (
path-exists?)