mcp bb clj
用clojure为babashka编写的MCP服务器/客户端
MCP协议的实施(https://modelcontextprotocol.io/specification/2025-06-18/schema)仅使用babashka(clojure)库 https://book.babashka.org/#libraries
拆分实施:
- 通过纯函数进行数据操作
- 使用http skit服务器公开该函数。
- 也做一个客户。
灵感来源:
- https://github.com/hugoduncan/mcp-clj
工具
服务器附带了几个内置工具:
- cljfmt:使用格式化Clojure代码 cljfmt.
- 输入: code (字符串)
- zprint:使用以下格式格式化Clojure代码或EDN zprint.
- 输入: code (字符串), options (可选EDN字符串)
- 查找格式错误的分隔符:检查Clojure代码中的分隔符是否格式错误。
- 输入: code (字符串)
- clj kondo:Lints Clojure代码使用 clj kondo.
- 输入: code (字符串) - 先决条件:The clj-kondo 二进制文件必须在系统PATH中安装并可用。
- 回声:回显输入文本。
- Malli工具:使用Malli模式的工具(
validate-schema,generate-sample,infer-schema).
添加新工具和提示
添加工具
要添加新工具,请将其定义为映射并在中注册 src/mcp_bb_clj/core.clj.
- 定义工具:
工具定义需要 :name, :description, :inputSchema (JSON模式),以及 :implementation 功能。
例子:
(def my-tool
{:name "my-tool"
:description "A custom tool description"
:inputSchema {:type "object"
:properties {"arg" {:type "string"}}
:required ["arg"]}
:implementation (fn [{:keys [arg]}]
{:content [{:type "text" :text (str "You said: " arg)}]})})- 注册该工具:
将工具添加到 mcp-server/add-tool! 打电话 src/mcp_bb_clj/core.clj.
(mcp-server/add-tool! mcp-server
{:tools [echo-tool
my-tool]})添加提示
提示可以类似地定义并用作模板。
- 定义提示:
(def my-prompt
{:name "explain-code"
:description "Explains the provided code."
:arguments {:type "object"
:properties {"code" {:type "string"}}
:required ["code"]}
:messages [{:role "user"
:content "Explain this code:\n\n{{code}}"}]})