Skip to content
Michael Whitford edited this page May 27, 2025 · 5 revisions

openwebui

Containerfile:

FROM python:3.11-slim 

WORKDIR /app

COPY clojure-mcp-server.sh .
COPY mcpo-config.json .

RUN chmod 0750 clojure-mcp-server.sh
RUN chmod 0644 mcpo-config.json

RUN apt-get update
RUN apt-get upgrade -y

RUN apt-get install -y --no-install-recommends \
    ca-certificates curl  git gnupg gzip jq \
    iproute2 vim-tiny  strace  ncat nmap less \
    openjdk-17-jdk-headless ssh rlwrap tar

# install mcpo and uv
RUN pip install mcpo uv

# install node.js and npm via nodesource
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
    && apt-get update && apt-get install -y nodejs

# install latest npm
#RUN npm install npm -g

# confirm npm and node versions
RUN node -v && npm -v

# setup yarn
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update && apt-get install -y yarn

RUN rm -rf /var/lib/apt/lists/*

# install clojure
RUN curl -L -O https://github.com/clojure/brew-install/releases/latest/download/posix-install.sh
RUN chmod +x posix-install.sh
RUN ./posix-install.sh --prefix /app/clojure
RUN rm ./posix-install.sh

RUN mkdir /app/project

WORKDIR /app/project

# mount your project to /app/project

# expose port 8000
EXPOSE 8000

CMD ["/app/clojure-mcp-server.sh"]

clojure-mcp-server.sh:

#!/usr/bin/env bash

# add clojure to the path
PATH="${PATH}:/app/clojure/bin"

cd /app/project

clojure -M:nrepl 1>> /app/nrepl.out 2>> /app/nrepl.err &

sleep 10

uvx mcpo --host 0.0.0.0 --port 8000 --config /app/mcpo-config.json 1>> /app/mcpo.out 2>> /app/mcpo.err

mcpo-config.json:

{
  "mcpServers": {
    "clojure-mcp": {
      "command": "/app/clojure/bin/clojure",
      "args": ["-X:mcp"]
    }
  }
}

podman build (works for docker too):

podman build -t clojure-mcp .

podman run (mount your git repo project to /app/project):

podman run -d -p 8000:8000 \
    --name clojure-mcp \
    -e OPENAI_API_KEY=sk-..... \
    -v /local/path/to/project:/app/project:rw,Z \
    clojure-mcp

In your project directory make sure you have the :nrepl and :mcp aliases setup in deps.edn (BEFORE YOU RUN THE CONTAINER):

{:paths   ["src"]
 :deps    {}
 :aliases {:mcp   {:extra-deps {ch.qos.logback/logback-classic {:mvn/version "1.4.14"}
                                com.bhauman/clojure-mcp        {:git/url "https://github.com/bhauman/clojure-mcp.git"
                                                                :git/sha "ba8549078d2946b246ab07091c330e22c8866a2a"}}
                   :exec-fn    clojure-mcp.main/start-mcp-server
                   :exec-args  {:port 7888}}

           :nrepl {:extra-paths ["test"]
                   :extra-deps  {nrepl/nrepl                    {:mvn/version "1.3.1"}
                                 ch.qos.logback/logback-classic {:mvn/version "1.4.14"}}
                   :jvm-opts    ["-Djdk.attach.allowAttachSelf"]
                   :main-opts   ["-m" "nrepl.cmdline" "--port" "7888"]}}}

podman run (also works for docker):

Change the /local/path/to/project here to the correct path to your clojure project (best if it's a git repo!).

podman run -d -p 8000:8000 \
    --name clojure-mcp \
    -e OPENAI_API_KEY=sk-..... \
    -v /local/path/to/project:/app/project:rw,Z \
    clojure-mcp

Once the mcpo clojure-mcp container is running you can point openwebui tools at: http://localhost:8000/clojure-mcp

Clone this wiki locally