TL;DR
- Clojure MCP を Claude Code に登録し、nREPL のサーバにつないで動かした。
- REPL駆動開発でスターリンソートを実装させると、
clojure_evalで REPL を使って動作を確かめながら実装した。
背景
Clojure MCP は前から知っていた。直近で参加した Shibuya.lisp lispmeetup #116 で実際に触っている方がいたので、自分も触りたくなった。
環境
- Clojure MCP の README に沿って進めた
- MCP クライアント: Claude Code
- シェル: zsh
- clojure-mcp v0.1.8-alpha
検証
セットアップ
まず clj-new でプロジェクトを作成した。
$ clj -Tclj-new app :name clojure-mcp-example.maindeps.edn の :aliases に nREPL を追加した。
{
;; 省略
:aliases {
:nrepl {:extra-paths ["test"]
:extra-deps {nrepl/nrepl {:mvn/version "1.3.1"}}
:jvm-opts ["-Djdk.attach.allowAttachSelf"]
:main-opts ["-m" "nrepl.cmdline" "--port" "7888"]}}}nREPL のサーバが立ち上がるかを確かめた。
$ clj -M:nrepl続いて、deps.edn の :aliases に、MCP サーバに必要な依存関係と設定を追加した。
{
;; 省略
:aliases {
;; 省略
:mcp {:deps {org.slf4j/slf4j-nop {:mvn/version "2.0.16"}
com.bhauman/clojure-mcp {:git/url "https://github.com/bhauman/clojure-mcp.git"
:git/tag "v0.1.8-alpha"
:git/sha "457f197"}}
:exec-fn clojure-mcp.main/start-mcp-server
:exec-args {:port 7888}}}}MCP サーバが立ち上がるかを確かめた。
$ clj -X:mcp最後に、次のコマンドで Claude Code に MCP サーバの設定を追加した。
$ claude mcp add clojure-mcp -s project -- clj -X:mcp :port 7888このコマンドで、次の .mcp.json が生成された。
{
"mcpServers": {
"clojure-mcp": {
"type": "stdio",
"command": "clj",
"args": ["-X:mcp", ":port", "7888"],
"env": {}
}
}
}実際に動かす
REPL のサーバを立ち上げた。
$ clj -M:nreplそのうえで、Claude Code に次のプロンプトを渡した。
スターリンソートを REPL 駆動開発で実装してください。結果
Claude Code が clojure_eval を何度も呼び出し、REPL で動作を確かめながら実装していた。一方で、トークンは大量に消費された。また、開発中に動作確認のために使った関数も、成果物に含まれていた。
考察
動作確認用の関数が成果物に残ったので、プロンプトで制御する必要がありそうである。REPL 駆動開発に関するソースやドキュメントも用意しておくと、より良くなると思う。