CodeJung
FreeNot checkedMCP server that exposes the self-hosted codeJung code-review service as tools, enabling PR and local directory reviews through any MCP client.
About
MCP server that exposes the self-hosted codeJung code-review service as tools, enabling PR and local directory reviews through any MCP client.
README
An MCP server that exposes the self-hosted codeJung code-review service as tools any MCP client can call — Claude Code, Claude Desktop, Cursor, Codex CLI, Windsurf, and web/URL-based clients.
It's a thin client over codeJung's stable /v1 HTTP API. There are two ways
to connect (see Installation):
- Remote (recommended): point your client at the hosted URL — nothing to install, works from anywhere.
- Local: run the stdio server (
codejung_mcp.py) from a clone of this repo.
Tools
| Tool | Purpose |
|---|---|
review_pr(pr_url, wait_secs=300, post_comments=True) |
Submit a GitHub PR, wait up to wait_secs, return review markdown + findings. |
submit_review(pr_url, post_comments=True) |
Submit a PR and return jobId immediately (for long reviews). |
get_review(job_id) |
Status, plus result once the job has succeeded. |
review_dir(path, wait_secs=300) |
Review a local directory (full-file scan, no PR needed). Local stdio + SSH mode only. |
The selected LLM in your client is irrelevant — the client (not the model) drives the server, so it works with any tool-calling model (GPT, Claude, Gemini, Grok, …). MCP tools run in the client's Agent mode.
Review-only (don't post to the PR)
review_pr / submit_review take post_comments (default True). Pass
post_comments=False to review a PR without posting inline comments — the
findings come back to you (findings array + summaryMarkdown) and the PR is
left untouched. Good for "review-then-decide" agent workflows.
Expect a few minutes
A review runs a multi-model pipeline and typically takes ~3–5 minutes
(sometimes longer under load). That's normal, not a hang. Tell the user a review
is in progress; a "running" status just means "check back shortly." Model
calls are individually deadline-capped and retried, so a review can't hang
indefinitely — it just isn't instant.
Blocking vs non-blocking
review_pr / review_dir wait at most wait_secs, emitting progress to
stderr, then return {"status":"running","jobId":...} if not finished — they
never block indefinitely. Fetch a still-running result later with
get_review(job_id). Set wait_secs=0 to return right after submit. For clients
with short tool-call timeouts, prefer submit_review → get_review.
Installation
Pick one of the two options below. You'll need a codeJung API token
either way. Tokens are issued per user by the maintainer — you can't
self-provision one, so contact the maintainer to request your own key. Use
the token they give you wherever <TOKEN> appears below; keep it to yourself
(don't share or paste it in public channels).
Option A — Remote URL (recommended; nothing to install)
The service is hosted at https://codejung.wint3rmute.com/mcp — always on,
TLS, bearer-token gated. No clone, no Python, no SSH; works from any network.
Cursor — merge into ~/.cursor/mcp.json (under mcpServers):
{
"mcpServers": {
"codejung": {
"url": "https://codejung.wint3rmute.com/mcp",
"headers": { "Authorization": "Bearer <TOKEN>" }
}
}
}
Claude Code — one command:
claude mcp add --transport http codejung https://codejung.wint3rmute.com/mcp \
--header "Authorization: Bearer <TOKEN>"
Claude Desktop / Windsurf / other URL-capable clients — add the same
url + headers entry to that client's MCP config file.
Then restart the client, switch to Agent mode, and try: "review https://github.com/owner/repo/pull/123 with codejung".
Web clients (ChatGPT/Grok) can point at the same URL, but their MCP client and auth support vary by product/plan (some expect OAuth rather than a static bearer header). The endpoint is a standards-compliant streamable-HTTP MCP server; whether a given product accepts it depends on that product.
Option B — Local stdio server (from a clone)
Run the stdio server yourself. Needed for review_dir (local-directory reviews),
or if you'd rather not use the hosted URL.
- Clone + install deps:
git clone [email protected]:beardfaceguy/codeJung-mcp.git cd codeJung-mcp pip install -r requirements.txt # installs `mcp`; needs python3 ≥ 3.10 - Choose how it reaches codeJung (via env vars — see Configuration):
- Remote API over HTTPS (works anywhere):
CODEJUNG_API_URL=https://codejung.wint3rmute.com+CODEJUNG_API_TOKEN=<token> - SSH-to-loopback (on the home LAN; the token is read on the host and
never leaves it):
CODEJUNG_SSH_HOST=codejung+ passwordless SSH to that host.
- Remote API over HTTPS (works anywhere):
- Register with your client, e.g. Claude Code (remote-API mode):
claude mcp add codejung -s user \ -e CODEJUNG_API_URL=https://codejung.wint3rmute.com \ -e CODEJUNG_API_TOKEN=<token> \ -- python3 /ABS/PATH/codeJung-mcp/codejung_mcp.py- Cursor / Claude Desktop / Windsurf: merge
client-configs/mcp.json(thecommand/args/envform), editing the absolute path + env. - Codex CLI: merge
client-configs/codex-config.tomlinto~/.codex/config.toml.
- Cursor / Claude Desktop / Windsurf: merge
review_dirrequires SSH mode (it rsyncs the target dir to the host); it is unavailable in remote-URL mode and returns a clear error there.
Configuration (env vars)
| Var | Default | Meaning |
|---|---|---|
CODEJUNG_API_URL |
(unset) | If set, the stdio server calls the public REST API over HTTPS (remote mode). |
CODEJUNG_API_TOKEN |
(unset) | Bearer token for remote mode (required when CODEJUNG_API_URL is set). |
CODEJUNG_SSH_HOST |
codejung |
SSH host running the service (SSH mode, when CODEJUNG_API_URL is unset). |
CODEJUNG_ENV_PATH |
~/codeJung/deploy/codejung.env |
Path to codejung.env on the host (SSH mode; holds the token). |
CODEJUNG_REVIEW_STAGING |
~/cj-review-staging |
Host staging dir for review_dir (SSH mode). |
Verifying (Option B)
pip install -r requirements.txt
# tools register?
python3 -c "import asyncio, codejung_mcp as m; print([t.name for t in asyncio.run(m.mcp.list_tools())])"
# end-to-end (remote mode): set the env first, then submit a real PR
CODEJUNG_API_URL=https://codejung.wint3rmute.com CODEJUNG_API_TOKEN=<token> \
python3 -c "import codejung_mcp as m; print(m.review_pr('https://github.com/OWNER/REPO/pull/N', post_comments=False)['status'])"
For Option A, just confirm the endpoint is reachable:
curl https://codejung.wint3rmute.com/v1/health # -> {"status":"ok"}
Security notes
- The bearer token gates all
/v1/jobs*endpoints (constant-time check) and the/mcpendpoint. Keep it secret; don't paste it in shared channels. - In SSH mode the token is read on the host and never transits to the client.
- PR URLs and job IDs are strictly validated before interpolation into any remote command (prevents shell injection).
review_dircopies the target dir to the host (excluding.git,node_modules, virtualenvs, build output) and removes the staged copy after.
How it's hosted (maintainer reference)
codeJung is served permanently at https://codejung.wint3rmute.com via the
router's nginx reverse proxy (a vhost on the shared :443, alongside other
services), terminating a Let's Encrypt cert and proxying to the Pi's Caddy, which
routes / → codeJung REST API and /mcp → the streamable-HTTP MCP server
(codejung_mcp_http.py).
Host-side pieces:
- Remote MCP server:
codejung_mcp_http.pyruns on the host (venv~/.codejung-mcp-venv), systemd unitcodejung-mcp-http.service, binds127.0.0.1:8765. - Caddy
/mcproute: bearer-gated viaCJ_MCP_TOKEN, rewrites upstream Host to127.0.0.1:8765(the MCP SDK's DNS-rebinding guard only trusts localhost).
Redeploy codejung_mcp_http.py after editing:
scp codejung_mcp_http.py codejung:~/codeJung-mcp-http.py
ssh codejung 'sudo systemctl restart codejung-mcp-http'
Installing CodeJung
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/beardfaceguy/codeJung-mcpFAQ
Is CodeJung MCP free?
Yes, CodeJung MCP is free — one-click install via Unyly at no cost.
Does CodeJung need an API key?
No, CodeJung runs without API keys or environment variables.
Is CodeJung hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install CodeJung in Claude Desktop, Claude Code or Cursor?
Open CodeJung on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare CodeJung with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
