手把手教你构建Clojure MCP自定义服务器:工厂函数模式全解析
手把手教你构建Clojure MCP自定义服务器工厂函数模式全解析【免费下载链接】clojure-mcpClojure MCP项目地址: https://gitcode.com/gh_mirrors/cl/clojure-mcpClojure MCPclojure-mcp是一个把 LLM 客户端如 Claude、Cursor接入 Clojure 项目的 MCP 服务器提供 REPL 求值、括号修复和 Clojure 感知的编辑工具。如果你想打造一个只属于自己的 AI 开发助手构建 Clojure MCP自定义服务器比你想象中简单得多——从 v0.5.0 起项目引入了全新的工厂函数模式你只需要定义三个工厂函数再调用核心入口build-and-start-mcp-server一个完全定制化的服务器就诞生了。本文将从零开始带你彻底搞懂这套模式。为什么你需要一个自定义的 MCP 服务器默认的 Clojure MCP服务器已经集成了精心挑选的工具集参考src/clojure_mcp/main.clj但每个团队、每个项目都有自己的工作流。自定义服务器的价值在于个性化只保留你真正用得到的工具减少启动时间和认知负担安全控制构建只读服务器让 AI 只探索、不修改专属资源把团队文档、架构说明暴露给 AI 作为上下文技术栈集成为 Shadow-cljs、Figwheel 等添加专属工具核心思路一句话复用默认组件 按需替换工厂函数。核心概念工厂函数模式到底是什么工厂函数模式是 clojure-mcp 提供的一种装配式扩展机制。整个服务器由三部分组成每一部分都对应一个工厂函数工厂函数职责统一签名make-tools-fn生成工具Tools列表(fn [nrepl-client-atom working-dir] ...)make-prompts-fn生成提示词Prompts列表(fn [nrepl-client-atom working-dir] ...)make-resources-fn生成资源Resources列表(fn [nrepl-client-atom working-dir] ...)你只需把这三大工厂函数打包成一个 map交给core/build-and-start-mcp-server核心模块就会自动完成 nREPL 连接、配置加载、组件注册等全部复杂工作。想了解底层实现可以查看src/clojure_mcp/core.clj中的build-components和register-components。 小贴士三个工厂函数都是可选的。不提供某个函数对应类别就不会被注册。第一步搭建最小可运行的自定义服务器最简单的方式是完全复用main的工厂函数几行代码就能得到一个功能完整的服务器(ns my-company.mcp-server (:require [clojure-mcp.core :as core] [clojure-mcp.main :as main])) (defn start-mcp-server [opts] (core/build-and-start-mcp-server opts {:make-tools-fn main/make-tools :make-prompts-fn main/make-prompts :make-resources-fn main/make-resources}))没错就是这样这已经是一个开箱即用的完整 MCP 服务器。接下来我们在这个基础上逐步定制。第二步定制你的工具集打造只读安全服务器很多团队希望 AI 先看得懂再动手改。只加载读取类工具就能让探索更安全(defn make-read-only-tools [nrepl-client-atom _working-dir] [(directory-tree-tool/directory-tree-tool nrepl-client-atom) (unified-read-file-tool/unified-read-file-tool nrepl-client-atom) (new-grep-tool/grep-tool nrepl-client-atom) (glob-files-tool/glob-files-tool nrepl-client-atom) (eval-tool/eval-code nrepl-client-atom) (project-tool/inspect-project-tool nrepl-client-atom)])把make-tools-fn换成make-read-only-tools一个只读探索模式的服务器就完成了。各个工具的命名空间可以在src/clojure_mcp/tools/下找到例如tools/unified_read_file/tool.clj、tools/grep/tool.clj。在默认工具之上追加自定义工具如果你有自己的专属工具比如数据库查询工具用conj直接追加即可(defn make-tools [nrepl-client-atom working-directory] (conj (main/make-tools nrepl-client-atom working-directory) (db-tool/database-query-tool nrepl-client-atom)))第三步添加自定义资源与提示词用资源把团队文档喂给 AIMCP 资源Resources是 AI 可以直接读取的上下文。clojure-mcp.resources提供了两个现成工厂create-file-resource读取文件和create-string-resource直接传字符串。源码见src/clojure_mcp/resources.clj。(defn make-resources [nrepl-client-atom working-dir] (concat (main/make-resources nrepl-client-atom working-dir) [(resources/create-file-resource custom://architecture ; 资源 URL ARCHITECTURE.md ; 资源名称 系统架构文档 ; 描述 text/markdown ; MIME 类型 (.getCanonicalPath (io/file working-dir docs/ARCHITECTURE.md)))]))这样AI 助手就能在需要时读取你的架构文档给出更贴合项目的建议。添加团队专属提示词提示词Prompts可以标准化 AI 的行为。比如为数据库迁移定义一个模板让 AI 严格按团队的格式生成代码(defn make-prompts [nrepl-client-atom working-dir] (concat (main/make-prompts nrepl-client-atom working-dir) [{:name database-migration :description 生成数据库迁移代码 :arguments [{:name table-name :description 要迁移的表名 :required? true}] :prompt-fn (fn [_ args callback] (callback {:description 数据库迁移助手 :messages [{:role :user :content (str 请为表 (get args table-name) 生成数据库迁移代码使用团队标准格式。)}]}))}]))进阶技巧修改现有工具而不只是新增工厂函数返回的只是普通的 map因此你可以对已有工具改名、改描述、甚至删除。这非常实用改名防冲突合并多来源工具时用update :name加前缀例如把bash改成shell_command调整描述工具描述直接影响 AI 何时调用它比如强调读取文件前先看 README安全移除用remove过滤掉bash等危险工具参考doc/custom-mcp-server.md中的完整示例里面有逐行注释的改造模板。真实案例为 ClojureScript 项目扩展服务器项目自带两个真实示例是最佳的学习范本src/clojure_mcp/main_examples/figwheel_main.clj在默认工具上追加 Figwheel 的 ClojureScript 求值工具src/clojure_mcp/main_examples/shadow_main.clj演示 Shadow CLJS 的单连接/双连接两种模式甚至能复用 nREPL 创建额外连接它们的共同套路是先调用main/make-tools拿到全部默认工具再用conj追加专属工具最后传给build-and-start-mcp-server。跟着抄一遍你就能举一反三。配置 deps.edn 并启动写好自己的start-mcp-server后在deps.edn中注册执行入口{:aliases {:my-mcp {:deps {com.bhauman/clojure-mcp {:local/root ~/workspace/clojure-mcp}} :extra-paths [src] ; 你的自定义服务器代码所在目录 :exec-fn my-company.custom-mcp-server/start-mcp-server :exec-args {:port 7888}}}}然后一条命令启动clojure -X:my-mcp如需获取源码可执行git clone https://gitcode.com/gh_mirrors/cl/clojure-mcp。更多玩法HTTP 传输与环境切换工厂函数模式还支持传输层的切换。例如改用 Streamable HTTP 传输MCP 新一代标准单一/mcp端点只需调用streamable-http-core/build-and-start-mcp-server参考src/clojure_mcp/streamable_http_core.clj适合远程部署场景。另一个高频模式是环境差异化根据opts里的:env字段在开发环境加载全部工具、在生产环境只加载只读工具一套代码两种行为。常见问题与成功建议❓工厂函数签名记不住怎么办记住统一签名[nrepl-client-atom working-directory]即可这是硬性约定。❓默认配置才是最好的建议先复用main的工厂函数跑通再逐项定制每次只改一处并测试。最后送你六条心法从简开始、增量测试、注释决策、纳入版本控制、与团队共享配置、始终参考doc/custom-mcp-server.md与src/clojure_mcp/main.clj。掌握工厂函数模式后打造你的专属 Clojure MCP自定义服务器就是这么简单【免费下载链接】clojure-mcpClojure MCP项目地址: https://gitcode.com/gh_mirrors/cl/clojure-mcp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

别再裸奔了!用GetQzonehistory备份QQ空间,历史说说一键导出Excel

别再裸奔了!用GetQzonehistory备份QQ空间,历史说说一键导出Excel

别再裸奔了!用GetQzonehistory备份QQ空间,历史说说一键导出Excel 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你有没有过这样的瞬间:深夜里突然想…

2026/10/12 19:54:35 阅读更多 →
pgrust 的 WAL 机制:预写日志在 Rust 中的安全实现

pgrust 的 WAL 机制:预写日志在 Rust 中的安全实现

pgrust 的 WAL 机制:预写日志在 Rust 中的安全实现 【免费下载链接】pgrust Postgres rewritten in Rust, now faster than Postgres and Clickhouse 项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust 数据库崩溃后如何保证数据不丢?答案…

2026/10/9 13:12:50 阅读更多 →
新建项目上传gitee

新建项目上传gitee

1.在项目根目录下打开黑窗口执行初始化 git init2.复制码云上新建仓库地址3.本地仓库和远程仓库建立连接 远程仓库地址是之前复制的仓库地址,复制后直接在命令窗口中鼠标右键Paste即可在命令窗口粘贴出来 git remote add origin 远程仓库地址当你在本地仓库运行 git…

2026/9/28 19:17:52 阅读更多 →

最新新闻

AnyPS5项目解析:从命名歧义看技术代号规范的重要性

AnyPS5项目解析:从命名歧义看技术代号规范的重要性

项目标题为“AnyPS5”,但提供的输入内容中,项目正文、关键词、摘要描述等核心字段全部为空,相关热搜词与网络搜索内容也未给出实质性信息(仅显示空代码块)。在无任何有效上下文、领域指向、功能描述或技术线索的前提下…

2026/10/12 19:54:12 阅读更多 →
AI工具包设计指南:从Function Calling到WorkMate实战踩坑

AI工具包设计指南:从Function Calling到WorkMate实战踩坑

最近一直在折腾 WorkMate 这套内置工具包,越用越觉得,AI 这东西能不能真正“干活”,关键不在模型本身有多聪明,而在于你给它配没配齐一套趁手的工具。WorkMate 内置工具包解决的核心问题,就是让一个只会“说”的对话模…

2026/10/12 19:54:12 阅读更多 →
Anolis OS 23.4全面支持RVA23:RISC-V云原生落地的关键一步

Anolis OS 23.4全面支持RVA23:RISC-V云原生落地的关键一步

近两年尝试在RISC-V开发板上跑Linux的人,多半都有一种"什么都差一点"的体验:源码能编译,换块板子却要重新调参数;发行版有镜像,但包版本可能落后几个月;架构确实开放,每家芯片厂商却又…

2026/10/12 19:54:12 阅读更多 →
你清楚Skills和Rules吗:Cursor Agent 的 SKILL.md 与 Rules 配置拆解

你清楚Skills和Rules吗:Cursor Agent 的 SKILL.md 与 Rules 配置拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 19:54:12 阅读更多 →
拳打DeepSeek R1,比肩GPT-5,百度文心X1.1真有这么强?TaoToken实测智能体调用

拳打DeepSeek R1,比肩GPT-5,百度文心X1.1真有这么强?TaoToken实测智能体调用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 19:54:12 阅读更多 →
亲子沟通一谈就崩?用AI记录做家庭对话复盘:从情绪梳理到成长档案的实操指南

亲子沟通一谈就崩?用AI记录做家庭对话复盘:从情绪梳理到成长档案的实操指南

很多家长都有类似经历:本来想好好聊聊,结果三句话不到就变成催促、反驳、沉默。事后回想,只记得孩子摔门,却说不清矛盾到底从哪一句开始。亲子沟通的难,往往不在于没有爱,而在于情绪一上来,信息…

2026/10/12 19:53:12 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →