一个具有最小依赖项并集成自包含Clojure REPL的Model Context Protocol (MCP) 的Clojure实现。
# 添加到 deps.edn
{:deps {org.hugoduncan/mcp-clj
{:git/url "https://github.com/hugoduncan/mcp-clj"
:git/sha "latest-commit-sha"
:deps/root "projects/server"}}}
;; 启动MCP服务器
(require 'mcp-clj.mcp-server.core)
(def server (mcp-clj.mcp-server.core/create-server {:transport {:type :stdio}}))
;; 服务器提供工具如clj-eval和ls
;; 通过stdio传输连接到Claude Desktop(参见Claude Desktop设置)
跳转到: 安装 • 客户端使用 • Claude Code设置 • Claude Desktop设置 • 开发
mcp-clj 提供了Clojure中的MCP服务器和客户端实现:
org.clojure/data.jsonclj-eval)和文件列表(ls),支持gitignore何时使用mcp-clj:
与clojure-mcp相比的权衡:
;; deps.edn
{:deps {org.hugoduncan/mcp-clj
{:git/url "https://github.com/hugoduncan/mcp-clj"
:git/sha "latest-commit-sha" ; 替换为实际最新的SHA
:deps/root "projects/server"}}}
# 克隆并直接运行
git clone https://github.com/hugoduncan/mcp-clj
cd mcp-clj
# 启动stdio服务器(推荐用于Claude Desktop)
clj -M:stdio-server
# 在默认端口3001上启动SSE服务器(HTTP)
clj -M:sse-server
# 在自定义端口上启动SSE服务器
clj -M:sse-server --port 8080
(require 'mcp-clj.mcp-server.core)
;; stdio服务器(推荐用于Claude Desktop)
(def server (mcp-clj.mcp-server.core/create-server
{:transport {:type :stdio}}))
;; SSE服务器(用于基于HTTP的客户端)
(def server (mcp-clj.mcp-server.core/create-server
{:transport {:type :sse :port 3001}}))
;; 停止服务器
((:stop server))
(def echo-tool
{:name "echo"
:description "回显输入文本"
:inputSchema {:type "object"
:properties {"text" {:type "string"}}
:required ["text"]}
:implementation (fn [{:keys [text]}]
{:content [{:type "text" :text text}]
:isError false})})
;; 带有自定义工具的服务器
(def server (mcp-clj.mcp-server.core/create-server
{:transport {:type :sse :port 3001}
:tools {"echo" echo-tool}}))
;; 动态添加工具
(mcp-clj.mcp-server.core/add-tool! server echo-tool)
clj-eval:评估Clojure表达式
{"name": "clj-eval", "arguments": {"code": "(+ 1 2 3)"}}
// 返回:"6"
ls:列出文件,支持gitignore
{"name": "ls", "arguments": {"path": "src", "max-depth": 2, "max-files": 50}}
// 返回:{"files": [...], "truncated": false, "total-files": 12}
从Clojure连接到其他MCP服务器:
(require 'mcp-clj.mcp-client.core)
;; 连接到stdio MCP服务器
(def client (mcp-clj.mcp-client.core/create-client
{:transport {:type :stdio
:command "clojure"
:args ["-M:stdio-server"]}
:client-info {:name "my-client" :version "1.0.0"}}))
;; 等待连接
(mcp-clj.mcp-client.core/wait-for-ready client)
;; 列出可用工具
(mcp-clj.mcp-client.core/list-tools client)
;; => {:tools [{:name "clj-eval" :description "..." :inputSchema {...}}]}
;; 调用工具
@(mcp-clj.mcp-client.core/call-tool client "clj-eval" {:code "(* 6 7)"})
;; => {:content [{:type "text" :text "42"}] :isError false}
;; 清理
(.close client)
Claude Code可以使用stdio传输连接到mcp-clj服务器。
在你的deps.edn中:
{:aliases
{:mcp {:extra-deps {org.hugoduncan/mcp-clj
{:git/url "https://github.com/hugoduncan/mcp-clj"
:git/sha "latest-commit-sha"
:deps/root "projects/server"}}
:main-opts ["-m" "mcp-clj.stdio-server.main"]}}}
使用Claude Code的CLI添加MCP服务器:
claude mcp add mcp-clj clojure -M:mcp
# 验证MCP服务器已配置且可访问
claude mcp list
你应该能看到mcp-clj在可用服务器列表中。Claude Code现在可以在你的项目上下文中访问clj-eval和ls工具。
Claude Desktop可以直接使用stdio传输连接到mcp-clj,无需额外代理工具。
在你的deps.edn中:
{:deps {org.hugoduncan/mcp-clj
{:git/url "https://github.com/hugoduncan/mcp-clj"
:git/sha "latest-commit-sha"
:deps/root "projects/server"}}
:aliases
{:mcp {:main-opts ["-m" "mcp-clj.stdio-server.main"]}}}
添加到~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"mcp-clj": {
"command": "/opt/homebrew/bin/bash",
"args": [
"-c",
"cd /path/to/your/project && clojure -M:mcp"
],
"env": {
"PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin"
}
}
}
}
注意:替换/path/to/your/project为你实际的项目目录,并根据需要调整bash路径(使用which bash找到你的bash路径)。
Claude现在可以在你的项目上下文中访问clj-eval和ls工具。
git clone https://github.com/hugoduncan/mcp-clj
cd mcp-clj
# 启动带有所有组件的REPL
clj -M:dev
# 快速单元测试(默认)
clj -M:kaocha:dev:test
# 集成测试(启动服务器)
clj -M:kaocha:dev:test --focus :integration
# 所有测试
clj -M:kaocha:dev:test --focus :unit :integration
# 特定命名空间
clj -M:kaocha:dev:test --focus mcp-clj.mcp-server.core-test
;; 在添加依赖项到deps.edn后
(require 'clojure.repl.deps)
(clojure.repl.deps/sync-deps)
;; 重新加载命名空间
(require 'my.namespace :reload)
;; 运行测试
(require 'clojure.test)
(clojure.test/run-tests 'mcp-clj.mcp-server.core-test)
查看CHANGELOG.md以获取发布说明和版本历史。
安装git-cliff:
# macOS
brew install git-cliff
# 或从 https://github.com/orhun/git-cliff/releases 下载
生成更新日志:
# 预览未发布的更改
git cliff --unreleased
# 更新CHANGELOG.md
git cliff -o CHANGELOG.md
mcp-clj 使用多立克风格架构,采用组件化组织:
components/)- 可重用功能(mcp-server、mcp-client、json-rpc、tools等)bases/)- 入口点(sse-server、stdio-server)projects/server/)- 可部署工件mcp-server/ - 带有工具、提示和资源的MCP协议服务器mcp-client/ - 连接到服务器的MCP协议客户端json-rpc/ - JSON-RPC 2.0,自动EDN/JSON转换tools/ - 内置MCP工具(clj-eval、ls)*-transport/ - 多种传输层(SSE、stdio、HTTP、内存)所有组件都使用mcp-clj命名空间,并遵循JSON-RPC 2.0,MCP协议版本2024-11-05。
clj -M:kaocha:dev:testMIT许可证。详情见LICENSE文件。