Clojure MCP:人工智能辅助下的REPL驱动开发
ClojureMCP是Clojure的MCP服务器!
目录
什么是ClojureMCP?
ClojureMCP是一个连接LLM客户端(如Claude)的MCP服务器 代码或克劳德桌面)到您的Clojure项目。它提供REPL 工具和支持Clojure的编辑工具,旨在处理Clojure 括号和格式可靠。
根据您的法学硕士客户,ClojureMCP可以:
- 提供a 全套支持Clojure的代码辅助工具 适用于Claude desktop等桌面聊天应用程序,或
- 填补Clojure特定的空白 CLI助手 已经拥有强大的文件编辑和shell工具(如REPL集成+Clojure感知编辑)。
我该如何使用它?
- 安装ClojureMCP(
clojure -Ttools install-latest ...). - 在LLM客户端中将其注册为MCP服务器。
如果您使用的是CLI助手,您通常更喜欢保留CLI的本机文件编辑工具,并使用ClojureMCP主要用于REPL集成(并作为编辑回退)。
如果你使用的是桌面聊天应用程序,你通常会使用完整的ClojureMCP工具链。
主要特点
- Clojure REPL连接 -在评估之前修复分隔符
- Clojure感知编辑 -使用parinfer、cljfmt和clj重写
- Clojure开发的优化工具集
帮助和社区资源
- 这 #Clojurians Slack上的人工智能辅助编码通道 非常活跃,我花了很多时间。
- 这 ClojureMCP维基 有关于各种集成和沙盒的信息。
📋 安装
先决条件
安装ClojureMCP
使用Clojure工具安装程序安装ClojureMCP:
clojure -Ttools install-latest :lib io.github.bhauman/clojure-mcp :as mcp这将在全球范围内安装ClojureMCP,使 clojure -Tmcp start 可从任何目录访问。
CLI助理
CLI编码助手(Claude Code、Codex、Gemini CLI)已经拥有强大的内联差异编辑和shell工具。
从...开始 clojure mcp灯 -它提供REPL集成和分隔符修复,同时保留CLI的原生内联差异显示。这对大多数Clojure开发都很有效。
考虑添加ClojureMCP 随着 :cli-assist 个人资料,如果你愿意:
- 结构编辑回退 -clojure mcp light可以在编辑成功后修复parens,但在查找/替换匹配字符串与代码不匹配时(发生率\功能>代码执行和文件创建,然后将其关闭。
你可能也想转身 人工制品 也关了。
除Claude Desktop之外的其他客户端
请参阅 维基 为了 有关设置其他MCP客户端的信息。
在Claude Desktop中开始新对话
一旦一切准备就绪,我建议用克劳德开始新的聊天。
您要做的第一件事是初始化上下文 关于nREPL附带的对话中的Clojure项目。
在Claude Desktop中,单击 + 工具和可选添加
- 资源
PROJECT_SUMMARY.md-(让LLM创建这个)见下文 - 资源
Clojure Project Info-对nREPL互联项目的反思 - 资源
LLM_CODE_STYLE.md-这是您的个人编码风格说明(将此仓库中的说明复制到项目的根目录) - 提示
clojure_repl_system_prompt-如何编写代码的说明-从Claude code中抄袭了一堆代码
然后开始聊天。
我会先陈述一个问题,然后与法学硕士聊天 交互式设计解决方案。你可以让克劳德“提出一个解决方案供我审查”。
对此进行一点迭代,然后要么:
A.在REPL中编码并验证想法。
不要低估LLMs使用REPL的能力!目前的LLM是 非常擅长使用Clojure REPL。
B.要求LLM对源代码进行更改,然后在文件编辑后让它验证REPL中的代码。
C.要求进行测试。 D.要求提交更改。
创建一个分支,让LLM经常提交,这样就不会因为方向不好而破坏好的工作。
项目总结管理
该项目包括一个维护LLM友好的工作流程 PROJECT_SUMMARY.md 这有助于助手快速理解代码库结构。
运作原理
- 创建摘要:要生成或更新PROJECT_SUMARY.md文件,请使用
+>clojure-mcp菜单create-update-project-summary。此提示将:
- 分析代码库结构 - 记录关键文件、依赖关系和可用工具 - 以针对法学硕士助理优化的格式生成全面的文档
- 使用摘要:与助手开始新对话时:
- “项目摘要”资源会自动加载Project_SUMARY.md - 这为助理提供了有关项目结构的即时上下文 - 助手可以提供更准确的帮助,而无需长时间的探索
- 保持更新:在添加了新功能或组件的富有成效的会议结束时:
- 调用 create-update-project-summary 再次提示 - 系统将使用新添加的功能更新PROJECT_SUMARY.md - 这确保了摘要与正在进行的开发保持同步
此工作流程创建了一个良性循环,每个会话都建立在以前会话积累的知识之上,使助手随着项目的发展而变得越来越有效。
聊天会话总结和恢复
Clojure MCP服务器提供了一对提示,用于启用 使用聊天会话的对话连续性 scratch_pad 工具。默认情况下,数据被存储 仅在内存中 本届会议。 要在服务器重新启动时保留摘要,您必须启用草稿板 使用划痕板部分中描述的配置选项进行持久化。
运作原理
系统使用两个互补的提示:
chat-session-summarize:创建当前对话的摘要
- 将详细摘要保存到草稿栏 - 记录已完成的工作、正在进行的工作以及下一步的工作 - 接受可选 chat_session_key 参数(默认为 "chat_session_summary")
chat-session-resume:从以前的对话中恢复上下文
- 读取PROJECT_SUMMARY.md文件 - 呼叫 clojure_inspect_project 当前项目状态 - 从草稿本检索上一个会话摘要 - 提供一个简短的8行摘要,总结事情的重点 - 接受可选 chat_session_key 参数(默认为 "chat_session_summary")
使用流程
结束会话:
- 在富有成效的对话结束时,调用
chat-session-summarize提示 - 助理将在记事本中存储一份全面的摘要
- 由于草稿板的全局状态,此摘要在会话中持续存在
开始新会话:
- 继续工作时,调用
chat-session-resume提示 - 助理将加载所有相关上下文并提供简短摘要
- 然后,您可以继续使用完整的上下文
多会话高级用法
您可以使用自定义键来维护多个并行对话上下文:
# For feature development
chat-session-summarize with key "feature-auth-system"
# For bug fixing
chat-session-summarize with key "debug-memory-leak"
# Resume specific context
chat-session-resume with key "feature-auth-system"这允许在不同的开发上下文之间切换,同时保持每个对话线程的完整状态。
使用多个REPL
随着 list_nrepl_ports,代理可以同时发现您的Clojure和shadow cljs REPL。该工具识别哪些REPL是影子cljs实例,允许代理使用 clojure_eval 与适当 port 参数。
LLM API密钥
使用Clojure MCP服务器不需要这样做。
重要提示:如果您在 环境,然后ClojureMCP将在您使用时调用它们 这dispatch_agent,architect和code_critique工具。这些 调用将产生API费用。
提供了一些MCP工具,它们本身就是代理,它们需要API密钥才能发挥作用。
若要使用代理工具,您需要来自以下一个或多个提供程序的API密钥:
GEMINI_API_KEY-适用于Google Gemini型号
- 获取API密钥:https://makersuite.google.com/app/apikey - 使用人: dispatch_agent, architect, code_critique
OPENAI_API_KEY-对于GPT型号
- 获取API密钥:https://platform.openai.com/api-keys - 使用人: dispatch_agent, architect, code_critique
ANTHROPIC_API_KEY-适用于克劳德模特
- 获取API密钥:https://console.anthropic.com/ - 使用人: dispatch_agent
设置环境变量
选项1:在shell中导出
export ANTHROPIC_API_KEY="your-anthropic-api-key-here"
export OPENAI_API_KEY="your-openai-api-key-here"
export GEMINI_API_KEY="your-gemini-api-key-here"选项2:添加到您的shell配置文件 (.bashrc, .zshrc等等)
# Add these lines to your shell profile
export ANTHROPIC_API_KEY="your-anthropic-api-key-here"
export OPENAI_API_KEY="your-openai-api-key-here"
export GEMINI_API_KEY="your-gemini-api-key-here"为Claude Desktop配置LLM密钥
设置Claude Desktop时,请确保它可以通过更新配置来访问您的环境变量。
就我个人而言 source 它们就在bash命令中:
{
"mcpServers": {
"clojure-mcp": {
"command": "/bin/sh",
"args": [
"-c",
"source ~/.api_credentials.sh && PATH=/your/bin/path:$PATH && clojure -Tmcp start :not-cwd true :port 7888"
]
}
}
}备注:代理工具将使用任何可用的API密钥。您不需要这三种工具,只需设置您有权访问的工具即可。这些工具将自动从可用模型中进行选择。目前,ANTHROPIC API仅限于dispatch_agent。
🧰 可用工具
中包含的默认工具 main.clj 按类别组织,以支持不同的工作流程:
只读工具
| 工具名称 | 描述 | 示例用法 |
|---|---|---|
LS | 返回文件和目录的递归树视图 | 探索项目结构 |
read_file | 基于模式的Clojure文件探索智能文件阅读器 | 使用折叠视图读取文件,模式匹配 |
grep | 使用正则表达式进行快速内容搜索 | 查找包含特定模式的文件 |
glob_files | 基于模式的文件查找 | 按名称模式查找文件,如 *.clj |
代码评估
| 工具名称 | 描述 | 示例用法 |
|---|---|---|
clojure_eval | 评估当前命名空间中的Clojure代码;支持可选 port 多REPL工作流的参数 | 测试表达式,连接到不同的REPL |
list_nrepl_ports | 发现计算机上正在运行nREPL服务器 | 查找可连接的可用REPL |
bash | 在主机系统上执行shell命令 | 运行测试、git命令、文件操作 |
文件编辑工具
| 工具名称 | 描述 | 示例用法 |
|---|---|---|
clojure_edit | Clojure表单的结构感知编辑 | 替换/插入函数,处理defmethod |
clojure_edit_replace_sexp | 修改函数内的表达式 | 更改特定的s表达式 |
file_edit | 通过替换文本字符串来编辑文件 | 如果需要,请在编辑后进行修复 |
file_write | 写入带有安全检查的完整文件 | 创建新文件,用验证覆盖 |
代理工具(需要API密钥)
| 工具名称 | 描述 | 示例用法 |
|---|---|---|
dispatch_agent | 使用只读工具启动代理以进行复杂搜索 | 多步文件探索和分析 |
architect | 技术规划和实施指导 | 系统设计、架构决策 |
实验工具
| 工具名称 | 描述 | 示例用法 |
|---|---|---|
scratch_pad | 用于结构化数据存储的持久工作区 | 任务跟踪、规划、工具间通信,可选文件持久性(默认禁用) |
code_critique | 交互式代码审查和改进建议 | 迭代代码质量改进 |
主要工具功能
智能文件读取(read_file)
- 折叠视图:仅显示大型Clojure文件的函数签名
- 模式匹配:使用
name_pattern按名称查找函数,content_pattern搜索内容 - defmethod支持:处理调度值,如
"area :rectangle"或矢量调度 - 多语言:Clojure文件获得智能功能,其他文件显示原始内容
结构感知编辑(clojure_edit)
- 基于表单的操作:按类型和标识符定位函数,不匹配文本
- 多项操作:替换、插入前、插入后
- 语法验证:内置linting可防止括号不平衡
- defmethod处理:使用限定名称和调度值
代码评估(clojure_eval)
- REPL集成:在连接的nREPL会话中执行
- Helper函数:内置命名空间和符号探索工具
- 多个表达式:计算和分割多个表达式
Shell命令(bash)
- 可配置执行:可以在nREPL上运行,也可以根据配置在本地运行
- 会话隔离:使用nREPL模式时,在单独的会话中运行以防止REPL干扰
- 输出截断:通过智能stderr/ststdout分配,一致的8500个字符限制
- 路径安全:根据允许的目录验证文件系统路径
代理系统(dispatch_agent)
- 自主搜索:处理复杂的多步骤勘探任务
- 只读访问:代理具有只读工具访问权限
- 详细结果:回报分析和调查结果
防刮垫(scratch_pad)
- 持久工作区:存储结构化数据,用于规划和工具间通信
- 内存模式:数据仅存储在内存中,会话结束时丢失(默认行为)
- 基于路径的操作:使用
set_path,get_path,delete_path用于精确的数据操作 - JSON兼容性:存储任何兼容JSON的数据(对象、数组、字符串、数字、布尔值)
🔧 定制
ClojureMCP的设计是高度可定制的。在alpha阶段,创建自己的自定义MCP服务器是根据您的特定需求配置系统的主要方式。
您可以自定义:
- 工具 -选择要包含的工具,使用多方法或简单映射创建新工具
- 提示 -为工作流添加特定于项目的提示
- 资源 -公开您的文档、配置和项目信息
- 工具选择 -创建只读服务器、开发服务器或专用配置
定制方法既简单又强大——你本质上是在构建自己的个性化人工智能开发伙伴。
📖 完整的定制文档
快速入门: 创建自己的自定义MCP服务器 -这是大多数用户应该开始的地方。
CLI选项
传递给的值 clojure -Tmcp start 是EDN值。
:port
可选的 -要连接的nREPL服务器端口。使用时 :start-nrepl-cmd 没有 :port,将从命令输出中自动发现端口。
:port 7888
:host
可选的 -nREPL服务器主机。如果未指定,则默认为localhost。
:host "localhost" 或 :host "0.0.0.0"
:not-cwd
可选的 -如果为true,则不要将当前工作目录用作项目目录。需要 :port 待指定。MCP服务器将对nREPL连接进行自检,以发现项目的工作目录。
这对于在项目目录之外启动MCP服务器的Claude Desktop和其他客户端来说至关重要。通过连接到项目中运行的nREPL,ClojureMCP可以自动确定正确的工作目录。
:not-cwd true
:start-nrepl-cmd
可选的 -如果nREPL服务器尚未运行,则自动启动该服务器的命令。必须指定为字符串的向量。MCP服务器将启动此过程并管理其生命周期。
当不使用时 :port,MCP服务器将自动从命令的输出中解析端口。与一起使用时 :port,它将使用该固定端口。
重要:此选项需要启动 clojure-mcp 从您的项目目录(您的 deps.edn 或 project.clj 位于)。nREPL服务器将在当前工作目录中启动。这对于Claude Code和其他命令行LLM客户端特别有用,在这些客户端中,您希望在没有手动进程管理的情况下自动启动nREPL。
Claude Desktop用户注意事项:Claude Desktop不会从您的项目目录启动MCP服务器,因此 :start-nrepl-cmd 除非你也提供 :project-dir 作为指向特定项目的命令行参数。例如: :project-dir '"/path/to/your/clojure/project"'。此限制不影响从项目目录运行的Claude Code或其他基于CLI的工具。
:start-nrepl-cmd ["lein" "repl" ":headless"] 或 :start-nrepl-cmd ["clojure" "-M:nrepl"]
:config-file
可选的 -指定配置文件的位置。必须是现有文件的路径。
:config-file "/path/to/config.edn"
:project-dir
可选的 -指定代码库的工作目录。这会覆盖nREPL连接对项目目录的自动自检。必须是指向现有目录的路径。
:project-dir "/path/to/your/clojure/project"
:nrepl-env-type
可选的 -指定我们通过nREPL连接连接到的环境类型。这会覆盖自动检测。有效选项包括:
:clj适用于Clojure或ClojureScript:bb为了 巴巴什卡 -用于脚本编写的原生、快速启动的Clojure解释器:basilisp为了 Basilisp -面向Python 3.9的Clojure兼容Lisp方言+:scittle为了 Scittle -直接从浏览器脚本标签执行ClojureScript
:nrepl-env-type :bb
:shadow-cljs-repl-message
可选的 -控制shadow cljs REPL模式状态消息是否包含在eval结果中(默认值: true).当连接到影子cljs-nREPL时,每个eval结果前面都会添加一条关于cljs模式的状态消息。设置为 false 禁用此消息。
:shadow-cljs-repl-message false
:config-profile
可选的 -加载一个内置的配置文件,用于调整工具的可用性和描述。可用于根据特定用例定制ClojureMCP。
可用配置文件:
:cli-assist-CLI编码助手的最小工具集(Claude Code、Codex、Gemini CLI)。禁用冗余工具并进行配置clojure_edit作为本机编辑失败时的后备方案。
:config-profile :cli-assist
:enable-tools
可选的 -工具关键字允许列表。提供时,替换任何 :enable-tools 配置中的值。只有列出的工具可用。
:enable-tools [:clojure_eval :read_file]
:disable-tools
可选的 -工具关键字的阻止列表。提供时,替换任何 :disable-tools 配置中的值。列出的工具将被禁用。
:disable-tools [:bash :dispatch_agent]
:add-tools
可选的 -配置解析后强制启用特定工具。从禁用列表中删除工具,如果其中一个工具处于活动状态,则将其添加到启用列表中。这对于有选择地重新启用配置文件禁用的工具非常有用。
:add-tools [:my_custom_agent]
:remove-tools
可选的 -配置解析后强制禁用特定工具。将工具添加到禁用列表中,如果有工具处于活动状态,则将其从启用列表中删除。这对于有选择地禁用工具而不替换整个配置非常有用。
:remove-tools [:clojure_eval]
工具筛选应用程序顺序
- 配置已加载(主页+项目+配置文件合并)
:enable-tools/:disable-tools从opts替换配置值(如果提供):remove-tools已应用(强制禁用):add-tools已应用(强制启用--赢得:remove-tools重叠)ENABLE_TOOLS/DISABLE_TOOLS环境变量仍然赢得了一切
看 组件过滤 有关启用/禁用列表如何在配置文件中工作的详细信息。
示例用法
# Basic usage with just port
clojure -Tmcp start :port 7888
# With automatic nREPL server startup and port discovery
# Perfect for CLI assistants - run this from your project directory
clojure -Tmcp start :start-nrepl-cmd '["lein" "repl" ":headless"]'
# For deps.edn projects (from project directory)
clojure -Tmcp start :start-nrepl-cmd '["clojure" "-M:nrepl"]'
# Auto-start with explicit port (uses fixed port, no parsing)
clojure -Tmcp start :port 7888 :start-nrepl-cmd '["clojure" "-M:nrepl"]'
# For Claude Desktop: must provide project-dir since it doesn't run from your project
clojure -Tmcp start :start-nrepl-cmd '["lein" "repl" ":headless"]' :project-dir '"/path/to/your/clojure/project"'
# With custom host and project directory
clojure -Tmcp start :port 7888 :host '"0.0.0.0"' :project-dir '"/path/to/project"'
# Using a custom config file
clojure -Tmcp start :port 7888 :config-file '"/path/to/custom-config.edn"'
# Specifying Babashka environment
clojure -Tmcp start :port 7888 :nrepl-env-type :bb
# Using cli-assist profile for CLI coding assistants
clojure -Tmcp start :config-profile :cli-assist
# cli-assist with a custom agent tool re-enabled
clojure -Tmcp start :config-profile :cli-assist :add-tools '[:my_custom_agent]'
# cli-assist but also remove clojure_eval
clojure -Tmcp start :config-profile :cli-assist :remove-tools '[:clojure_eval]'
# Full override — only these two tools
clojure -Tmcp start :enable-tools '[:clojure_eval :read_file]'备注:shell需要正确引用字符串值,因此 '"value"' 字符串的语法。
⚙️ 配置
Clojure MCP服务器支持最小的项目特定配置 通过a .clojure-mcp/config.edn 项目根目录中的文件 目录。此配置提供安全控制和 MCP服务器的自定义选项。
配置文件位置
创建一个 .clojure-mcp/config.edn 项目根目录中的文件:
your-project/
├── .clojure-mcp/
│ └── config.edn
├── src/
├── deps.edn
└── ...配置选项
配置有大量文件记录 这里.
配置示例
{:allowed-directories ["."
"src"
"test"
"resources"
"dev"
"/absolute/path/to/shared/code"
"../sibling-project"]
:write-file-guard :partial-read
:cljfmt false
:bash-over-nrepl false}配置详情
路径解析:
- 相对路径(如
"src","../other-project")相对于您的项目根进行解析 - 绝对路径(如
"/home/user/shared")按原样使用 - 项目根目录会自动包含在允许的目录中
安全:
- 工具根据允许的目录验证所有文件操作
- 尝试访问允许目录外的文件将失败,并出现错误
- 这可以防止意外访问敏感的系统文件
- Bash工具不尊重这些界限,所以要小心
默认行为:
- 如果没有配置文件,则只能访问项目目录及其子目录
- nREPL工作目录会自动添加到允许的目录中
备注:MCP服务器启动时加载配置。更改配置后重新启动服务器(或聊天代理)。
📝 许可证
Eclipse公共许可证-v 2.0
版权所有(c)2025布鲁斯·豪曼
本计划和随附材料可在 Eclipse公共许可证2.0的条款,可在 http://www.eclipse.org/legal/epl-2.0
许可证摘要
- ✅ 自由使用 用于个人项目、内部业务工具和开发
- ✅ 修改和分发 -欢迎改进和分叉
- ✅ 商业用途 -企业可以不受限制地在商业上使用它
- ✅ 灵活的许可 -可以与专有代码结合使用
- 📤 分享改进 -源代码在分发时必须可用
