mcp-clj について
mcp-clj は Clojure で実装された MCP ライブラリで、サーバーとクライアントの両方を提供し、依存関係は最小限です。サーバープロセス内で Clojure を直接評価するため、Claude Desktop などのクライアントから REPL を利用したい開発者に適しています。
主な機能
- 01サーバーとクライアントの実装
- 02組み込みの clj-eval と ls ツール
- 03stdio・SSE・インメモリのトランスポート
- 04org.clojure/data.json のみに依存
- 05nREPL を必要としない自己完結型 REPL
活用シーン
- 01Clojure REPL の機能を Claude Desktop に公開
- 02Clojure アプリケーションから他の MCP サーバーへ接続
- 03外部 REPL を使わないシンプルなデプロイ
MCP 対応
本プロジェクトは stdio または SSE 経由で clj-eval と ls ツールを公開する MCP サーバーとして動作するほか、他の MCP サーバーに接続する MCP クライアントとしても動作します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-clj
最小限の依存関係と、自己完結型の Clojure REPL 統合を備えた、Model Context Protocol(MCP)の Clojure 実装です。
クイックスタート
# Add to deps.edn
{:deps {org.hugoduncan/mcp-clj
{:git/url "https://github.com/hugoduncan/mcp-clj"
:git/sha "latest-commit-sha"
:deps/root "projects/server"}}}
;; Start MCP server
(require 'mcp-clj.mcp-server.core)
(def server (mcp-clj.mcp-server.core/create-server {:transport {:type :stdio}}))
;; Server exposes tools like clj-eval and ls
;; Connect with Claude Desktop via stdio transport (see Claude Desktop Setup)
移動先: インストール • クライアントの使い方 • Claude Code のセットアップ • Claude Desktop のセットアップ • 開発
概要と理由
mcp-clj は、Clojure で MCP サーバーとクライアントの両方を実装しています。
- 自己完結型 REPL:サーバープロセス内で Clojure を直接評価します(nREPL への依存はありません)
- 依存関係が少ない:必要なのは
org.clojure/data.jsonのみです - 複数のトランスポート:SSE(HTTP)、stdio、テスト用のインメモリに対応しています
- 組み込みツール:Clojure の評価(
clj-eval)と、gitignore に対応したファイル一覧表示(ls)を提供します - 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" ; Replace with actual latest SHA
:deps/root "projects/server"}}}
CLI の使い方
# Clone and run directly
git clone https://github.com/hugoduncan/mcp-clj
cd mcp-clj
# Start stdio server (recommended for Claude Desktop)
clj -M:stdio-server
# Start SSE server (HTTP) on port 3001 (default)
clj -M:sse-server
# Start SSE server on custom port
clj -M:sse-server --port 8080
サーバーの使い方
基本的なサーバー
(require 'mcp-clj.mcp-server.core)
;; Stdio server (recommended for Claude Desktop)
(def server (mcp-clj.mcp-server.core/create-server
{:transport {:type :stdio}}))
;; SSE server (for HTTP-based clients)
(def server (mcp-clj.mcp-server.core/create-server
{:transport {:type :sse :port 3001}}))
;; Stop server
((:stop server))
カスタムツール
(def echo-tool
{:name "echo"
:description "Echo the input text"
:inputSchema {:type "object"
:properties {"text" {:type "string"}}
:required ["text"]}
:implementation (fn [{:keys [text]}]
{:content [{:type "text" :text text}]
:isError false})})
;; Server with custom tools
(def server (mcp-clj.mcp-server.core/create-server
{:transport {:type :sse :port 3001}
:tools {"echo" echo-tool}}))
;; Add tools dynamically
(mcp-clj.mcp-server.core/add-tool! server echo-tool)
組み込みツール
clj-eval:Clojure の式を評価します
{"name": "clj-eval", "arguments": {"code": "(+ 1 2 3)"}}
// Returns: "6"
ls:gitignore に対応したファイル一覧を表示します
{"name": "ls", "arguments": {"path": "src", "max-depth": 2, "max-files": 50}}
// Returns: {"files": [...], "truncated": false, "total-files": 12}
クライアントの使い方
Clojure から他の MCP サーバーに接続します。
(require 'mcp-clj.mcp-client.core)
;; Connect to stdio MCP server
(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"}}))
;; Wait for connection
(mcp-clj.mcp-client.core/wait-for-ready client)
;; List available tools
(mcp-clj.mcp-client.core/list-tools client)
;; => {:tools [{:name "clj-eval" :description "..." :inputSchema {...}}]}
;; Call a tool
@(mcp-clj.mcp-client.core/call-tool client "clj-eval" {:code "(* 6 7)"})
;; => {:content [{:type "text" :text "42"}] :isError false}
;; Cleanup
(.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. 接続をテストする
# Verify the MCP server is configured and accessible
claude mcp list
使用可能なサーバーの一覧に mcp-clj が表示されます。これで、Claude Code はプロジェクトのコンテキスト内で clj-eval と ls の各ツールを利用できるようになります。
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 でパスを確認できます)。
3. Claude Desktop を再起動する
これで、Claude はプロジェクトのコンテキスト内で実行される clj-eval と ls の各ツールを利用できるようになります。
開発
セットアップ
git clone https://github.com/hugoduncan/mcp-clj
cd mcp-clj
# Start REPL with all components
clj -M:dev
テスト
# Fast unit tests (default)
clj -M:kaocha:dev:test
# Integration tests (starts servers)
clj -M:kaocha:dev:test --focus :integration
# All tests
clj -M:kaocha:dev:test --focus :unit :integration
# Specific namespace
clj -M:kaocha:dev:test --focus mcp-clj.mcp-server.core-test
REPL を使った開発
;; After adding dependencies to deps.edn
(require 'clojure.repl.deps)
(clojure.repl.deps/sync-deps)
;; Reload namespace
(require 'my.namespace :reload)
;; Run tests
(require 'clojure.test)
(clojure.test/run-tests 'mcp-clj.mcp-server.core-test)
変更履歴
リリースノートとバージョン履歴については、CHANGELOG.md を参照してください。
変更履歴をローカルで生成する
git-cliff をインストールします。
# macOS
brew install git-cliff
# Or download from https://github.com/orhun/git-cliff/releases
変更履歴を生成します。
# Preview unreleased changes
git cliff --unreleased
# Update 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/— EDN と JSON の自動変換に対応した JSON-RPC 2.0tools/— MCP の組み込みツール(clj-eval、ls)*-transport/— 複数のトランスポート層(SSE、stdio、HTTP、インメモリ)
すべてのコンポーネントは mcp-clj 名前空間を使用し、MCP プロトコルバージョン 2024-11-05 に準拠した JSON-RPC 2.0 を使用します。
コントリビューション
- リポジトリをフォークします
- 機能ブランチを作成します
- 変更を加え、テストが通ることを確認します:
clj -M:kaocha:dev:test - プルリクエストを送信します
ライセンス
MIT License。詳細については LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。