Clojure MCP服务器/客户端

一个基于babashka(Clojure)库实现的MCP协议服务器和客户端,提供数据操作和代码格式化等功能。

  • by davidpham87
  • Clojure
  • 本地部署
  • 更新于
在 GitHub 查看 davidpham87/mcp-bb-clj

使用说明

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.

  1. 定义工具:

    工具定义需要 :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)}]})})
    
  2. 注册该工具:

    将工具添加到 mcp-server/add-tool! 打电话 src/mcp_bb_clj/core.clj.

    (mcp-server/add-tool! mcp-server
                          {:tools [echo-tool
                                   my-tool]})
    

添加提示

提示可以类似地定义并用作模板。

  1. 定义提示:

    (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}}"}]})