返回市场
MCP-客户端

MCP-客户端

作者:hugoduncan51 星标更新:2025-11-08

项目介绍

mcp-clj

一个具有最小依赖项并集成自包含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以及为什么使用它

mcp-clj 提供了Clojure中的MCP服务器和客户端实现:

  • 自包含REPL:在服务器进程中直接评估Clojure(无需nREPL依赖)
  • 低依赖性:仅需org.clojure/data.json
  • 多种传输方式:SSE(HTTP)、stdio和内存测试
  • 内置工具:Clojure评估(clj-eval)和文件列表(ls),支持gitignore
  • MCP客户端:从Clojure连接到其他MCP服务器

何时使用mcp-clj:

  • 将Clojure REPL功能暴露给Claude Desktop或其他MCP客户端
  • 构建消费MCP服务的Clojure应用程序
  • 简单部署,无需外部REPL依赖

与clojure-mcp相比的权衡:

  • ✅ 更简单的设置,自包含评估
  • ❌ 无法连接到现有的远程REPL
  • ❌ 内置工具较少

安装

Git依赖(推荐)

;; 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设置

Claude Code可以使用stdio传输连接到mcp-clj服务器。

1. 将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"]}}}

2. 配置Claude Code

使用Claude Code的CLI添加MCP服务器:

claude mcp add mcp-clj clojure -M:mcp

3. 测试连接

# 验证MCP服务器已配置且可访问
claude mcp list

你应该能看到mcp-clj在可用服务器列表中。Claude Code现在可以在你的项目上下文中访问clj-evalls工具。

Claude Desktop设置

Claude Desktop可以直接使用stdio传输连接到mcp-clj,无需额外代理工具。

1. 将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"]}}}

2. 配置Claude Desktop

添加到~/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路径)。

3. 重启Claude Desktop

Claude现在可以在你的项目上下文中访问clj-evalls工具。

开发

设置

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

REPL开发

;; 在添加依赖项到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

贡献

  1. 分叉仓库
  2. 创建功能分支
  3. 修改并确保测试通过:clj -M:kaocha:dev:test
  4. 提交拉取请求

许可证

MIT许可证。详情见LICENSE文件。