clojure mcp灯
这不是MCP。
用于使用Clojure的LLM编码助手的简单CLI工具。
太长,读不下去了 使用LLM编码助手进行Clojure开发的三个CLI工具:
clj-nrepl-eval-从命令行进行nREPL评估clj-paren-repair-claude-hook-通过钩子自动固定分隔符(克劳德代码)clj-paren-repair-按需修正分隔符(Gemini CLI、Codex等)
问题
LLM在编辑Clojure代码时会产生分隔符错误——括号、方括号和大括号不匹配。这导致了 “Paren编辑死亡循环” 其中AI反复无法修复分隔符错误,浪费令牌并阻碍进度。
次要问题:LLM编码助手需要连接到有状态的Clojure REPL进行评估。
这些工具解决了这两个问题。
快速参考
| 工具 | 用例 |
|---|---|
clj-nrepl-eval | 任何法学硕士的REPL评估 |
clj-paren-repair-claude-hook | Claude Code(或任何支持Claude钩子的LLM) |
clj-paren-repair | Gemini CLI、Codex CLI、任何带shell的LLM |
快速安装
安装挂钩工具:
bbin install https://github.com/bhauman/clojure-mcp-light.git --tag v0.2.2注: 除非进行配置,否则挂钩将无法工作 ~/.claude/settings.json -请参阅下面的配置部分。
安装nREPL评估工具:
bbin install https://github.com/bhauman/clojure-mcp-light.git --tag v0.2.2 --as clj-nrepl-eval --main-opts '["-m" "clojure-mcp-light.nrepl-eval"]'安装按需维修工具:
bbin install https://github.com/bhauman/clojure-mcp-light.git --tag v0.2.2 --as clj-paren-repair --main-opts '["-m" "clojure-mcp-light.paren-repair"]'有关重要的配置和使用细节,请参阅下面的各个工具部分。
需求
- 巴巴什卡 -快速Clojure脚本(包括cljfmt)
- 注: 使用Codex和其他沙盒bash执行工具时,需要1.12.212或更高版本
- 波音 -Babashka包经理
可选:
- 帕林菲尔锈 -可用时更快地修复分隔符
______________________________________________________________________
clj-nrepl-eval 无MCP的LLM nREPL连接
nREPL客户端,用于从命令行评估Clojure代码。
这为编码助手提供了通过shell访问REPL eval的权限 电话。它专为LLM交互而设计,并允许 LLM可以发现和管理其REPL会话,而无需 以配置MCP服务器。
它有什么帮助
- 让LLM评估正在运行的REPL中的代码
- 为每个目标维护持久会话
- 自动发现nREPL端口
- 评估前自动修复分隔符
- 指导LLM的有用输出
安装
安装分为两个步骤,安装命令行工具和 然后告诉编码助手 clj-nrepl-eval.
bbin install https://github.com/bhauman/clojure-mcp-light.git --tag v0.2.2 --as clj-nrepl-eval --main-opts '["-m" "clojure-mcp-light.nrepl-eval"]'或者从本地结账:
bbin install . --as clj-nrepl-eval --main-opts '["-m" "clojure-mcp-light.nrepl-eval"]'通过启动nREPL并执行测试评估来验证它是否已安装并正常工作。
# this missing paren is there to demonstrate that delimiters are repaired automatically
clj-nrepl-eval -p 7888 "(+ 1 2 3"
# => 6告诉LLM clj-nrepl-eval
选择其中一种或多种方法。每种都有权衡:
| 方法 | 可用性 | 何时使用信息 | 最适合 |
|---|---|---|---|
| 自定义说明 | 所有LLM客户端 | 始终处于上下文中 | 最简单、最有效 |
| Slash命令 | 大多数编码助手 | 当你调用它时 | 按需感知 |
| 技能 | 仅限Claude Code | LLM在需要时拉取 | 自动、上下文感知 |
每个都可以安装 本地 (每个项目)或 全球范围内 (所有项目)。
自定义说明
最简单,也许也是最有效的方法。与所有LLM编码助理一起工作。
添加到您的自定义说明文件中:
- 全球:
~/.claude/CLAUDE.md,~/.gemini/GEMINI.md,~/.codex/AGENTS.md - 本地:
./CLAUDE.md,./GEMINI.md,./AGENTS.md在项目根中
# Clojure REPL Evaluation
The command `clj-nrepl-eval` is installed on your path for evaluating Clojure code via nREPL.
**Discover nREPL servers:**
`clj-nrepl-eval --discover-ports`
**Evaluate code:**
`clj-nrepl-eval -p
""`
With timeout (milliseconds)
`clj-nrepl-eval -p
--timeout 5000 ""`
The REPL session persists between evaluations - namespaces and state are maintained.
Always use `:reload` when requiring namespaces to pick up changes.斜杠命令
允许您在需要时将REPL意识插入到对话中。大多数编码助手都提供此功能(安装方式因客户而异)。
- /启动nrepl -在后台启动nREPL服务器并报告端口
- /clojure nrepl -提供详细的使用信息
clj-nrepl-eval
克劳德代码 -用途 .md 文件在 commands/ 目录:
# Global: ~/.claude/commands/
# Local: .claude/commands/
mkdir -p ~/.claude/commands
cp commands/*.md ~/.claude/commands/双子星命令行工具 -用途 .toml 文件(文档):
# Global: ~/.gemini/commands/
# Local: .gemini/commands/Codex 命令行界面 -用途 .md 文件(文档):
# Global: ~/.codex/prompts/技能
允许LLM在实际需要时提取REPL信息。目前只有克劳德代码。
# Global (all projects)
mkdir -p ~/.claude/skills
cp -r skills/clojure-eval ~/.claude/skills/
# Local (this project only)
mkdir -p .claude/skills
cp -r skills/clojure-eval .claude/skills/使用提示
最简单的策略: 在编码会话之前启动nREPL
在要求LLM使用nREPL之前,先启动nREPL。这样就可以了 只需在当前项目中查找服务器的端口 随着 --discover-ports开始与REPL互动的最低仪式。
高级: 让LLM开始并管理您的nREPL会话
Claude和其他LLM完全有能力启动你的nREPL 服务器处于后台,并从输出中读取端口。他们 如果服务器挂在错误的eval上,也可以杀死服务器。
根据您的工作流程进行自定义
一旦你开始与 clj-nrepl-eval 在编码助手内部, 很快就会清楚如何调整上述提示以适应 您的特定项目和工作流程。
______________________________________________________________________
clj-paren修复克劳德钩
克劳德代码挂钩 让你跑 在Claude的工具调用之前或之后执行shell命令。这个钩子 拦截写入/编辑操作并自动修复分隔符 在它们到达文件系统之前发生错误。
在我的使用中,这些钩子已经修复了100%检测到的错误。
注: 其目的是在其他LLM客户端添加钩子支持时,创建和发布特定于客户端的钩子工具。例如,当Gemini CLI添加钩子时 clj-paren-repair-gemini-hook 工具将可用。
为什么使用钩子而不是MCP工具?
使用基于MCP的编辑工具,您将失去Claude Code的原生UI 集成——工具调用的格式很差,很难 阅读。Hooks使Claude Code能够正常运行其原生代码 编辑/写入工具,保留您习惯的干净差异UI,同时 在幕后透明地修复分隔符错误。
它有什么帮助
- 在将错误写入磁盘之前透明地修复错误
- 用途 零令牌 -发生在LLM调用之外
- 保留Claude Code的原生差异UI和工具集成
- 全局安装一次,适用于所有Clojure文件编辑
安装
bbin install https://github.com/bhauman/clojure-mcp-light.git --tag v0.2.2或者从本地结账:
bbin install .配置
添加 ~/.claude/settings.json:
{
"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-使用cljfmt启用自动代码格式化--stats-启用统计跟踪(日志到~/.clojure-mcp-light/stats.log)--log-level LEVEL-设置日志级别(跟踪、调试、信息、警告、错误)--log-file PATH-日志文件的路径(默认:./.clojure-mcp-light-hooks.log)-h, --help-显示帮助消息
运作原理
- PreTool使用挂钩 在写入/编辑操作之前运行,在写入之前修复内容
- PostTool使用挂钩 在编辑操作后运行,修复引入的任何问题
- 会话结束挂钩 Claude Code会话结束时清理临时文件
写入操作:如果检测到分隔符错误,则在写入之前通过parinfer修复内容。如果无法修复,则写入被阻止。
编辑操作:在编辑之前创建备份。编辑后,如果存在分隔符错误,则会自动修复。如果无法修复,则从备份中还原文件。
统计跟踪
统计跟踪有助于验证这些工具是否正常工作。 在某些时候,Clojurists可能不需要它们——要么是因为模型停止了 产生分隔符错误,或因为助手包括parinfer 内部。追踪有助于我们知道那一天何时到来。
添加 --stats 要跟踪分隔符事件,请执行以下操作:
clj-paren-repair-claude-hook --cljfmt --stats统计数据已写入 ~/.clojure-mcp-light/stats.log 作为EDN:
{:event-type :delimiter-error, :hook-event "PreToolUse", :timestamp "2025-11-09T14:23:45.123Z", :file-path "/path/to/file.clj"}
{:event-type :delimiter-fixed, :hook-event "PreToolUse", :timestamp "2025-11-09T14:23:45.234Z", :file-path "/path/to/file.clj"}使用附带的统计摘要脚本:
./scripts/stats-summary.bb样本输出:
clojure-mcp-light Utility Validation
============================================================
Delimiter Repair Metrics
========================
Total Writes/Edits: 829
Clean Code (no errors): 794 ( 95.8% of total)
Errors Detected: 35 ( 4.2% of total)
Successfully Fixed: 35 (100.0% of errors)
Failed to Fix: 0 ( 0.0% of errors)
Parse Errors: 0 ( 0.0% of fix attempts)
日志记录
启用调试日志记录:
# Debug level
clj-paren-repair-claude-hook --log-level debug --cljfmt
# Trace level (maximum verbosity)
clj-paren-repair-claude-hook --log-level trace --log-file ~/hook-debug.log验证安装
echo '{"hook_event_name":"PreToolUse","tool_name":"Write","tool_input":{"file_path":"test.clj","content":"(def x 1)"}}' | clj-paren-repair-claude-hook验证挂钩是否在Claude代码中运行:
Claude Code编辑Clojure文件后,展开工具输出以查看 钩子消息。在终端中,按 ctrl-r (或单击编辑)和 查找围绕差异的这些消息:
⎿ PreToolUse:Edit hook succeeded:
... edit diff ...
⎿ PostToolUse:Edit hook succeeded:如果您没有看到这些消息,请检查您的 ~/.claude/settings.json 挂钩配置正确。
测试分隔符修复:
提示Claude代码故意编写格式错误的Clojure(例如,缺失 关闭paren)以验证钩子是否自动固定。
专业提示
与…结合 clj-paren-repair 为了实现完全覆盖,钩子可以处理编辑/写入工具,但LLM也可以通过Bash(sed、awk)进行编辑。拥有这两种工具可以解决所有问题。
______________________________________________________________________
clj-paren维修
不支持钩子的LLM编码助手的shell命令 (如Gemini CLI和Codex CLI)。当LLM遇到分隔符时 错误,它调用此工具进行修复,而不是尝试手动修复。
关键见解: 当我们在“Paren-Edit死亡循环”中反复观察AI时 未能修复分隔符错误——我们正在拼命寻找解决方案。 clj-paren-repair 提供了一条使这种行为短路的逃生路线。
为什么这样做: 现代SOTA模型只需 小分隔符差异。这些错误很小,不会出错 可以可靠地修复它们。这个简单的解决方案效果惊人。
吊钩与电缆修复: 钩子在可用时是明显的赢家——它们 使用零令牌,无需LLM调用即可发生。然而, clj-paren-repair 适用于任何具有shell访问权限的LLM。当Gemini CLI获得 钩子支撑,我们应该使用它们。在那之前, clj-paren-repair 足够了。
两者结合使用: 即使配置了钩子,也具有 clj-paren-repair 提供完整的覆盖范围。钩子处理编辑/写入工具,但LLM 还可以通过Bash(sed、awk等)编辑文件。拥有这两种工具可以解决所有问题。
它有什么帮助
- 提供“Paren编辑死亡循环”的逃生路线
- LLM在遇到分隔符错误时调用它
- 适用于 任何 具有shell访问权限的LLM
- 使用cljfmt自动格式化文件
安装
bbin install https://github.com/bhauman/clojure-mcp-light.git --tag v0.2.2 --as clj-paren-repair --main-opts '["-m" "clojure-mcp-light.paren-repair"]'或者从本地结账:
bbin install . --as clj-paren-repair --main-opts '["-m" "clojure-mcp-light.paren-repair"]'用法
clj-paren-repair path/to/file.clj
clj-paren-repair src/core.clj src/util.clj test/core_test.clj
clj-paren-repair --help设置:自定义说明
添加到全局或本地自定义说明文件 (GEMINI.md, AGENTS.md, CLAUDE.md 等等):
# Clojure Parenthesis Repair
The command `clj-paren-repair` is installed on your path.
Examples:
`clj-paren-repair `
`clj-paren-repair path/to/file1.clj path/to/file2.clj path/to/file3.clj`
**IMPORTANT:** Do NOT try to manually repair parenthesis errors.
If you encounter unbalanced delimiters, run `clj-paren-repair` on the file
instead of attempting to fix them yourself. If the tool doesn't work,
report to the user that they need to fix the delimiter error manually.
The tool automatically formats files with cljfmt when it processes them.______________________________________________________________________
同时使用多种工具
Claude Code用户的最佳实践:
- 配置钩子以自动固定(零令牌)
- 也有
clj-paren-repair可用于基于Bash的编辑 - 使用
clj-nrepl-eval用于REPL评估
对于其他LLM客户端(Gemini CLI、Codex等):
- 安装
clj-paren-repair并添加自定义说明 - 使用
clj-nrepl-eval用于REPL评估
______________________________________________________________________
这些工具解决(和不解决)什么
问题A:输出中的分隔符错误 -已解决
这些工具修复了编辑结果中不匹配/缺失的括号。
问题B:old_string匹配失败 -未解决
有时LLMs很难产生 old_string 这与文件内容完全匹配,导致编辑失败。这在较新的型号中不太常见。
关于问题B的完整解决方案: ClojureMCP sexp编辑工具。
______________________________________________________________________
为什么不直接使用ClojureMCP?
ClojureMCP 提供了全面的Clojure工具,但:
- ClojureMCP工具不是客户端的原生工具——没有差异UI,没有集成的输出格式
- ClojureMCP与客户端已有的工具重复/冲突
- 这些CLI工具有效 *随着* 客户端的原生工具,而不是替换它们
你可以两者结合使用。将ClojureMCP配置为仅公开 :clojure_eval 如果需要:
;; .clojure-mcp/config.edn
{:enable-tools [:clojure_eval]
:enable-prompts []
:enable-resources []}您还可以使用ClojureMCP的提示、资源和代理 创建一套跨LLM客户端工作的工具的功能。
______________________________________________________________________
贡献
欢迎投稿和想法!请随意:
- 带有建议或错误报告的未决问题
- 提交带有改进的PR
- 分享你的实验以及哪些有效(或无效)
许可证
Eclipse公共许可证版本2.0(EPL-2.0)
看 许可证.md 获取完整的许可证文本。
