🔀

clojure-mcp を claude desktop で実行したときの接続の流れをメモ

に公開

先週から Clojurian Slack の #ai-assisted-coding チャンネルで大話題になっている bhauman/clojure-mcp: Clojure MCP を私のマシンで試して見ました。

そのメモを残します。

1. 通信図

(私の理解が正しければ)MCP-Client ⇔ Clojure-MCP (MCP server) ⇔ 自分のClojure Project は以下の図のような通信でつながっています。

  • nREPL ポートは7888で開けたものとしています。

2. セッティング

Claude Desktop はインストール済みであると仮定しています。

2.1. MCP Client (Claude Desktop) と MCP Server (Clojure-MCP)

  1. clojure-mcp を Clone
    git clone git@github.com:bhauman/clojure-mcp.git
    
  2. Claude Desktop セッティング
    ~/.config/Claude/claude_desktop_config.json (このパスが見つからない場合は、Claude Desktop > ファイル > 設定 > 開発者 > 構成を編集 で見つかります。)
    claude_desktop_config.json
    {
        "mcpServers": {
            "clojure-mcp": {
                "command": "/bin/sh",
                "args": [
                    "-c",
                    "cd /to/your/path/clojure-mcp && PATH=/opt/homebrew/bin:$PATH && clojure -X:mcp :port 7888"
                ]
            }
        }
    }
    
    • /to/your/path/clojure-mcp は先程 clone した clojure-mcp のローカルディレクトリへのパス
    • /opt/homebrew/binwhich clojure コマンドで返るパス
  3. .clojure/deps.edn の更新
    • グローバル deps.edn である .clojure/deps.edn にエイリアスとして、mcp を追加する。
    • (TODO:あとでローカルの環境でも試す)
    .clojure/deps.edn
    {: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/sha "latest-main-branch-sha"}}
             :exec-fn clojure-mcp.main/start-mcp-server
             :exec-args {:port 7888}}}}
    
    • latest-main-branch-sha には、github から最新の SHA をコピーして貼り付け
    • この文字列です:

2.2. MCP Server (Clojure-MCP) と 自分のClojure Project

  1. 自分のProject でnREPL サーバを立ち上げる
    • 例として簡単なClojureプロジェクトを作ります。
    mkdir myapp 
    cd myapp 
    touch deps.edn 
    
    deps.edn
    {:paths ["src"]
     :aliases {}
     ;; nREPL server for AI to connect to
     :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"]}} 
    
    
    clojure -M:nrepl
    
  2. Claude Desktop を起動(再起動)
    • + ボタンで確認

3. 接続の流れ

Claude Desktopが起動したときに起きる、接続の流れは(おそらく)以下の通りです。

  1. 起動 -> Claude Desktopが MCP-server の設定をclaude_desktop_config.json で確認。
  2. clojure-mcp のセッション開始準備
    cd /to/your/path/clojure-mcp 
    PATH=/opt/homebrew/bin:$PATH 
    
    • cd はこのあとstart-mcp-server 関数を実行するための cd
  3. .clojure/deps.edn:mcp を確認。:exec-fn clojure-mcp.main/start-mcp-server に従って、MCP-Serverを立ち上げる。
    clojure -X:mcp :port 7888
    
    • -X オプションは、:exec-fn または main-opts で定義された関数を実行するためのオプション
    • -X:mcp にすることで、:mcp:exec-fnを実行している。
    • clojure-mcp.main/start-mcp-serverはこれ↓。この中で port を引数に取って、nREPLへの接続を行っている。

https://github.com/bhauman/clojure-mcp/blob/main/src/clojure_mcp/main.clj#L111-L127

この流れで図で示した接続を作っているみたいです。

Discussion