这不是一个MCP服务器。
TL;DR:
该项目的目标是通过几个简单的CLI工具,为Claude Code提供类似ClojureMCP的体验。
这些工具共同提供了更好的Clojure开发体验与Claude Code。
它们帮助解决两个主要问题:
但您可能想要尝试这种方法的主要原因是,它可以让您在处理Clojure代码时获得纯净的Claude Code体验。
由于这个项目依赖于与默认Claude Code编辑工具一起工作的钩子,因此将其集成到您的Claude Code设置中不会影响UI。也就是说,您可以阅读并确认代码差异,并且不会再看到格式不佳的clojure-mcp工具调用。
您可以一次性设置
clojure-mcp-light,然后在没有任何额外配置的情况下使用Claude Code编辑任何Clojure项目。
这些脚本从ClojureMCP开发和验证的模式中受益。
可以与ClojureMCP一起使用,因为没有硬性不兼容性,实际上,您可以在Claude Code配置的根级别安装这些钩子,以便能够无误地编辑Clojure文件。
⚠️ 实验性: 该项目尚处于早期阶段。我仍在大量使用它以评估其效果。预计会有更改,包括仓库名称的更改。
该项目探索了使用Claude Code进行Clojure开发的最小工具集。我们不是使用全面的MCP服务器,而是测试智能parinfer应用结合强大的REPL评估CLI脚本是否足以实现高效的Clojure开发。
为什么选择最小工具集?
这与clojure-mcp有何不同?
ClojureMCP是一个完整的编码助手(不包括LLM循环),具有全面的Clojure工具集。而这个项目采取相反的方法:寻找最少的必要工具,以利用Claude Code的原生能力,获得良好的Clojure支持。
如果这种最小化的方法被证明足够,那么它表明Clojure开发者可以通过以下方式取得良好结果:
Clojure-mcp-light提供了两个主要工具:
自动分隔符修复钩子(clj-paren-repair-claude-hook)- 在使用Claude Code处理Clojure文件时检测并修复分隔符错误(括号、圆括号、大括号不匹配)。钩子系统拦截文件操作,在出现问题之前透明地修复分隔符问题。
nREPL评估工具(clj-nrepl-eval)- 一个命令行工具,用于通过nREPL评估Clojure代码,带有自动分隔符修复、超时处理和格式化输出。
--cljfmt标志启用写入/编辑操作后的自动代码格式化--stats标志启用分隔符错误、修复和成功的事件跟踪可选:
如果尚未安装,请先安装bbin:
安装clojure-mcp-light(运行两个命令):
从GitHub:
bbin install https://github.com/bhauman/clojure-mcp-light.git --tag v0.2.0
bbin install https://github.com/bhauman/clojure-mcp-light.git --tag v0.2.0 --as clj-nrepl-eval --main-opts '["-m" "clojure-mcp-light.nrepl-eval"]'
或从本地检出:
bbin install .
bbin install . --as clj-nrepl-eval --main-opts '["-m" "clojure-mcp-light.nrepl-eval"]'
这是为了安装两个命令:
clj-paren-repair-claude-hook - 自动分隔符修复钩子clj-nrepl-eval - nREPL评估工具在~/.claude/settings.json中配置Claude Code钩子:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "clj-paren-repair-claude-hook --cljfmt"
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "clj-paren-repair-claude-hook --cljfmt"
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "clj-paren-repair-claude-hook --cljfmt"
}
]
}
]
}
}
配置说明:
--cljfmt标志启用自动代码格式化(使用捆绑在babashka中的cljfmt)--stats以启用分隔符事件跟踪至~/.clojure-mcp-light/stats.log--log-level debug(或trace)以调试钩子操作--log-file PATH自定义日志文件位置--cljfmt验证安装:
# 测试nREPL评估(需要在7888端口上运行nREPL服务器)
clj-nrepl-eval -p 7888 "(+ 1 2 3)"
# 手动测试钩子
echo '{"hook_event_name":"PreToolUse","tool_name":"Write","tool_input":{"file_path":"test.clj","content":"(def x 1)"}}' | clj-paren-repair-claude-hook
# 测试带有cljfmt标志的钩子
clj-paren-repair-claude-hook --help
实验性
该项目包括针对Claude Code的自定义斩号命令,以简化您的Clojure工作流程:
.nrepl-port文件clj-nrepl-eval进行REPL驱动开发的信息将命令文件复制或符号链接到项目的.claude/commands/目录:
# 如果不存在,创建命令目录
mkdir -p .claude/commands
# 复制命令
cp commands/*.md .claude/commands/
# 或创建符号链接(推荐 - 保持同步更新)
ln -s $(pwd)/commands/clojure-nrepl.md .claude/commands/clojure-nrepl.md
ln -s $(pwd)/commands/start-nrepl.md .claude/commands/start-nrepl.md
设置完成后,您可以在Claude Code对话中使用这些命令:
/start-nrepl
这将自动启动nREPL服务器并设置.nrepl-port文件。
/clojure-nrepl
这将为Claude提供关于REPL评估的上下文信息,使其更容易与正在运行的Clojure环境交互。
用于自动分隔符修复,可选代码格式化和日志记录的钩子命令。
# 基本使用(静默,无日志)
clj-paren-repair-claude-hook
# 带有自动代码格式化
clj-paren-repair-claude-hook --cljfmt
# 带有调试日志到默认位置(./.clojure-mcp-light-hooks.log)
clj-paren-repair-claude-hook --log-level debug --cljfmt
# 带有跟踪日志到自定义文件
clj-paren-repair-claude-hook --log-level trace --log-file /tmp/hook-debug.log
# 显示帮助
clj-paren-repair-claude-hook --help
--cljfmt - 启用写入/编辑操作后的自动代码格式化--stats - 启用分隔符事件的统计跟踪(日志到~/.clojure-mcp-light/stats.log)--log-level LEVEL - 设置文件日志的级别(trace, debug, info, warn, error, fatal, report)--log-file PATH - 日志文件路径(默认:./.clojure-mcp-light-hooks.log)-h, --help - 显示帮助信息默认情况下,钩子运行时是静默的,没有日志。要启用日志以进行调试:
# 调试级别日志(推荐用于故障排除)
clj-paren-repair-claude-hook --log-level debug
# 跟踪级别日志(最大详细程度)
cl-paren-repair-claude-hook --log-level trace
# 自定义日志文件位置
clj-paren-repair-claude-hook --log-level debug --log-file ~/hook-debug.log
日志文件包括时间戳、命名空间、行号和结构化输出,便于调试。
在钩子中启用日志:
要在作为Claude Code钩子运行时启用日志,请在钩子命令中添加--log-level标志。例如:
clj-paren-repair-claude-hook --log-level debug --cljfmt
--stats标志启用分隔符事件的跟踪,有助于分析LLM生成的代码质量。将其添加到您的钩子命令中:
clj-paren-repair-claude-hook --cljfmt --stats
跟踪的事件类型:
:delimiter-error - 在生成的代码中检测到分隔符错误:delimiter-fixed - 成功自动修复分隔符错误:delimiter-fix-failed - 无法自动修复分隔符错误:delimiter-ok - 没有分隔符错误(干净代码)日志格式:
统计数据写入~/.clojure-mcp-light/stats.log作为EDN条目:
{:event-type :delimiter-error, :hook-event "PreToolUse", :timestamp "2025-11-09T14:23:45.123Z", :file-path "/Users/me/project/src/core.clj"}
{:event-type :delimiter-fixed, :hook-event "PreToolUse", :timestamp "2025-11-09T14:23:45.234Z", :file-path "/Users/me/project/src/core.clj"}
{:event-type :delimiter-ok, :hook-event "PostToolUse", :timestamp "2-11-09T14:25:10.456Z", :file-path "/Users/me/project/src/util.clj"}
分析统计数据:
使用包含的统计数据摘要脚本快速概览:
# 显示综合统计数据摘要
./scripts/stats-summary.bb
# 示例输出:
# 分隔符事件统计数据
# ============================================================
#
# 总事件数:42
#
# 按类型分类的事件
# ==============
# delimiter-ok 28 ( 66.7%)
# delimiter-error 8 ( 19.0%)
# delimiter-fixed 5 ( 11.9%)
# delimiter-fix-failed 1 ( 2.4%)
#
# 按钩子分类的事件
# ==============
# PreToolUse:Write 30
# PostToolUse:Edit 12
#
# 按事件数量排序的前10个文件
# ===========================
# 8 src/core.clj
# 6 src/util.clj
# 4 test/core_test.clj
#
# 成功指标
# ===============
# 清洁代码(无错误): 28
# 检测到的错误: 8
# 成功修复: 5
# 未能修复: 1
#
# 修复成功率: 62.5%
# 清洁代码率: 77.8%
或者使用Babashka进行自定义分析:
# 计算总事件数
cat ~/.clojure-mcp-light/stats.log | wc -l
# 按事件类型过滤
bb -e "(require '[clojure.edn :as edn]) \
(->> (slurp \"$HOME/.clojure-mcp-light/stats.log\") \
(clojure.string/split-lines) \
(map edn/read-string) \
(filter #(= :delimiter-error (:event-type %))) \
(count))"
# 按事件类型分组
bb -e "(require '[clojure.edn :as edn]) \
(->> (slurp \"$HOME/.clojure-mcp-light/stats.log\") \
(clojure.string/split-lines) \
(map edn/read-string) \
(group-by :event-type) \
(map (fn [[k v]] [k (count v)])) \
(into {}))"
# 查找分隔符错误最多的文件
bb -e "(require '[clojure.edn :as edn]) \
(->> (slurp \"$HOME/.clojure-mcp-light/stats.log\") \
(clojure.string/split-lines) \
(map edn/read-string) \
(filter #(= :delimiter-error (:event-type %))) \
(group-by :file-path) \
(map (fn [[k v]] [k (count v)])) \
(sort-by second >) \
(take 5))"
主要的命令行工具,用于通过nREPL评估Clojure代码,带有自动分隔符修复。
--discover-ports标志发现服务器(查找当前目录中的nREPL服务器)--connected-ports标志跟踪连接(显示先前连接的会话)# 发现当前目录中的nREPL服务器
clj-nrepl-eval --discover-ports
# 检查先前连接的会话
clj-nrepl-eval --connected-ports
# 评估代码(需要端口)
clj-nrepl-eval -p 7888 "(+ 1 2 3)"
# 显式指定端口
clj-nrepl-eval --port 7888 "(println \"Hello\")"
# 设置超时(以毫秒为单位)
clj-nrepl-eval -p 7888 --timeout 5000 "(Thread/sleep 1000