jCodeMunch is an MCP server, so it plugs into any MCP-capable client. jcodemunch-mcp init auto-configures the common ones (Claude Code, Claude Desktop, Cursor, Windsurf, Continue, Codex CLI, opencode, Gemini CLI, Cline, VS Code/Copilot). This page collects the tested configurations for everything else, plus the client-specific gotchas.
For the general install flow, start at QUICKSTART.md.
Claude Code · Claude Desktop · Cursor · Windsurf · Codex CLI · opencode · Continue · Cline · Roo Code · Zed · Goose · Hermes Agent · Paperclip · Gemini CLI · Qwen Code · Kiro — and more.
Tested configurations:
| Platform | Config |
|---|---|
| Autohand Code | autohand mcp add jcodemunch uvx jcodemunch-mcp (CLI details); add --scope project before jcodemunch for project configuration |
| Claude Code / Claude Desktop | jcodemunch-mcp init (auto-detects and patches config) |
| Cursor / Windsurf / Continue | jcodemunch-mcp init or manual mcp.json |
| Antigravity (Google) | Add a jcodemunch entry to ~/.gemini/config/mcp_config.json (shared by Antigravity 2.0 / IDE / CLI). See below. |
| Gemini CLI (Google) | jcodemunch-mcp init, or add a jcodemunch entry under mcpServers in ~/.gemini/settings.json (or project .gemini/settings.json) — a different file from Antigravity's ~/.gemini/config/mcp_config.json above. (config per vendor docs) |
| Qwen Code | Add under mcpServers in ~/.qwen/settings.json (or project .qwen/settings.json). (config per vendor docs) |
| Kiro (AWS) | Add under mcpServers in .kiro/settings/mcp.json (workspace) or ~/.kiro/settings/mcp.json (user). (config per vendor docs) |
| JetBrains AI Assistant | Settings, then Tools, then AI Assistant, then Model Context Protocol (MCP), then Add. In the JSON configuration field, set command to uvx and args to ["jcodemunch-mcp"]. If Claude Desktop already has jCodeMunch, Import from Claude adds every server configured there. Each server can be global or for the current project. (config per vendor docs, checked 2026-10-28; not tested here) |
| Junie (JetBrains) | Add under mcpServers in .junie/mcp/mcp.json at the project root, or ~/.junie/mcp/mcp.json for all projects. Junie CLI and Junie in JetBrains IDEs use the same MCP JSON format. (config per vendor docs, checked 2026-10-28; not tested here) |
| OpenAI Codex CLI | jcodemunch-mcp init, or add an [mcp_servers.jcodemunch] block to ~/.codex/config.toml by hand (see below — do not use uvx here) |
| opencode | jcodemunch-mcp init, or add a jcodemunch entry under the top-level mcp key in ~/.config/opencode/opencode.json. ⚠ Not the mcpServers shape — see below. (config per vendor docs) |
| Cline / Roo Code | jcodemunch-mcp init writes the Cline CLI config (~/.cline/mcp.json). For the IDE extension use the MCP marketplace UI, or paste command: uvx, args: ["jcodemunch-mcp"] — Cline does not document the extension's settings path per-platform, so init does not guess at it. |
| Zed | Add to settings.json under context_servers |
| Goose (Block) | goose configure → Add Extension → command uvx jcodemunch-mcp |
| Hermes Agent | Add to ~/.hermes/config.yaml — see skill |
| Paperclip | .mcp.json at workspace root (auto-detected) |
| Any other MCP client | stdio: jcodemunch-mcp, HTTP: jcodemunch-mcp serve --transport streamable-http (SSE still available but deprecated by the MCP 2026-07-28 spec) |
| VS Code (any MCP client) | Install the jCodeMunch VS Code extension for on-save auto-reindex under Copilot Chat / Continue / Cline — closes the staleness gap when the host doesn't fire PostToolUse hooks |
| GitHub Copilot (VS Code) | jcodemunch-mcp init writes .vscode/mcp.json when the workspace has a .vscode/ directory. ⚠ Top-level key is servers, not mcpServers — see below. (config per vendor docs) |
| GitHub Copilot CLI / cloud agent | jcodemunch-mcp init --copilot-hooks writes .github/hooks/hooks.json with a postToolUse rule for auto-reindex |
| Odysseus (self-hosted AI workspace) | SSE transport: run jcodemunch-mcp serve --transport sse on the host (token unset), register the URL in the MCP Registry (see below) — community-tested |
Codex CLI config
jcodemunch-mcp init detects Codex and writes this for you — including
resolving the binary path. ⚠ If no jcodemunch-mcp executable is on your
PATH, init declines to configure Codex rather than falling back to
uvx, and tells you to run uv tool install jcodemunch-mcp first. That
refusal is deliberate; the paragraph below is why.
Recommended (pre-installed binary, no uvx). Codex's rmcp transport
is strict about the first JSON-RPC frame on stdout. uvx's install
chatter on first run can poison the handshake, which historically
manifests as a silent multi-hour hang. Install it once with uv, which
also means there's no download when Codex first starts the server:
uv tool install jcodemunch-mcp
jcodemunch-mcp initOn Windows, when jcodemunch-mcp on your PATH is the install init is
configuring, init writes the bare name, so the entry keeps working after a
reinstall moves the binary. When PATH finds a different install, or none,
it writes the absolute path instead. On macOS and Linux it always writes the
absolute path: Codex started from a GUI or a non-login shell can have a
narrower PATH than the shell you ran init in, and bare-name launch was
tested on Windows only.
# ~/.codex/config.toml
[mcp_servers.jcodemunch]
command = "jcodemunch-mcp"Or install into a project venv and point Codex at the binary directly:
python3 -m venv .venv
.venv/bin/pip install -U jcodemunch-mcp
.venv/bin/jcodemunch-mcp --help # confirm the binary resolves# ~/.codex/config.toml
[mcp_servers.jcodemunch]
command = "/absolute/path/to/.venv/bin/jcodemunch-mcp"
# (no args required)If the handshake still doesn't complete, set
JCODEMUNCH_HANDSHAKE_TIMEOUT=5 (the default) and watch stderr — v1.82.1+
emits a one-line hint when the client doesn't call any handler within
the window.
Note for codex review --background and other non-interactive runs.
Codex's MCP elicitation/approval system can silently decline tool
calls to unrecognized servers in non-interactive mode (visible in
~/.codex/logs_2.sqlite as ResolveElicitation { decision: Decline }
with no chatter on the server side). Interactive codex runs are
unaffected. Codex has a per-server approval key,
default_tools_approval_mode, and its writes value "prompts for tools
that aren't marked read-only". Every jCodeMunch tool that only reads
carries the MCP readOnlyHint annotation, so with writes the read
tools run without a prompt and indexing still asks (on the full
surface; on counter, order and route are writers and still ask, see
"Fewer approval prompts" below):
[mcp_servers.jcodemunch]
command = "jcodemunch-mcp"
default_tools_approval_mode = "writes"A single tool can be overridden with
[mcp_servers.jcodemunch.tools.<tool>] and an approval_mode value.
Codex's docs don't say how these modes behave in a non-interactive run,
so check a background run's log after changing them. Source:
Codex MCP docs,
checked 2026-10-28.
Legacy uvx config (kept for reference; works on tolerant clients,
not recommended for Codex):
[mcp_servers.jcodemunch]
command = "uvx"
args = ["jcodemunch-mcp"]
# The first run filled 251 MB of uv cache before the server answered.
startup_timeout_sec = 30Codex waits 10 seconds for a server to start unless startup_timeout_sec
says otherwise (Codex MCP docs).
Measured on 2026-10-28 (Windows, home broadband, uvx alone rather than
inside Codex): 7.0 s to the first reply with an empty uv cache, then 2.6 s
and 2.5 s once cached. A slower link can pass 10 s on the first run.
opencode config
jcodemunch-mcp init detects opencode and writes this for you. The manual
form, for a global install:
// ~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jcodemunch": {
"type": "local",
"command": ["uvx", "jcodemunch-mcp"],
"enabled": true
}
}
}Project-level config goes in opencode.json at the project root; opencode
searches the current directory and walks up to the nearest Git directory.
⚠ Three ways this differs from every other JSON client on this page, and
none of them error. The top-level key is mcp, not mcpServers. Each
server needs an explicit "type": "local". And command is a single
array carrying the executable and its arguments, rather than separate
command / args keys. Paste the shape used elsewhere in this file and
opencode parses the config happily, registers nothing, and reports no
problem — you just get an agent with no jCodeMunch tools.
⚠ The global path is ~/.config/opencode/ on every platform, Windows
included. opencode documents it as a fixed location and does not document
XDG_CONFIG_HOME support, so honouring that variable would write a file
opencode never reads.
GitHub Copilot (VS Code) config
jcodemunch-mcp init writes this when the workspace already has a
.vscode/ directory. The manual form:
// .vscode/mcp.json
{
"servers": {
"jcodemunch": {
"command": "uvx",
"args": ["jcodemunch-mcp"]
}
}
}⚠ The top-level key is servers, not mcpServers — the third distinct
schema on this page, and like opencode's it fails quietly. VS Code reads the
file, finds nothing under the key it expects, and reports no error. type
is optional and defaults to "stdio" for a local server, so it is left off.
⚠ init requires an existing .vscode/ directory rather than looking for
code on your PATH. The executable is present on most developer machines,
so detecting on it would create .vscode/mcp.json in whatever directory you
happened to run init from — a file you might then commit without meaning to.
VS Code's user-level MCP config is reached through the
MCP: Open User Configuration command rather than a documented path, and
it moves with the active profile, so init does not write it. Use that
command and paste the servers block above.
Antigravity (Google) config
Antigravity (2.0, IDE, and CLI) loads MCP servers from a single shared file at
~/.gemini/config/mcp_config.json (HOME-level only — project-local
.antigravitycli/mcp_config.json is read but not loaded). Add:
// ~/.gemini/config/mcp_config.json
{
"mcpServers": {
"jcodemunch": {
"command": "uvx",
"args": ["jcodemunch-mcp"]
}
}
}Restart Antigravity so it re-reads the config; tools appear under
mcp(jcodemunch/*). To grant the jcodemunch agent skill to all Antigravity
tools, drop the bundle from jcodemunch-mcp install claude-code --skills
(at ~/.claude/skills/jcodemunch/SKILL.md) into the shared skills dir
~/.gemini/skills/jcodemunch/ (or the CLI-only ~/.gemini/antigravity-cli/skills/).
Hermes Agent config
# ~/.hermes/config.yaml
mcp_servers:
jcodemunch:
command: "uvx"
args: ["jcodemunch-mcp"]Odysseus config (self-hosted AI workspace)
Odysseus runs in Docker and indexes nothing itself; jCodeMunch indexes your code on the host. Run jCodeMunch as an SSE server on the host and register its URL in Odysseus. Its SSE client connects by URL only (no auth header), so leave the token unset and secure the endpoint by network binding instead.
SSE deprecation note: the MCP 2026-07-28 spec deprecates the SSE transport. jCodeMunch keeps serving SSE for hosts like Odysseus that don't offer streamable-http yet; once Odysseus adds a streamable-http registry option, switch to
serve --transport streamable-httpand URLhttp://host.docker.internal:8848/mcp.
1. Start jCodeMunch on the host (no token):
jcodemunch-mcp index .
jcodemunch-mcp serve --transport sse --host 0.0.0.0 --port 8848Leave JCODEMUNCH_HTTP_TOKEN unset — Odysseus's SSE client sends no
Authorization header, so a token returns 401 on connect.
2. In Odysseus → Settings → MCP Registry → Add server:
- Transport: SSE
- URL:
http://host.docker.internal:8848/sse(Linux: addextra_hosts: ["host.docker.internal:host-gateway"]to the Odysseus service indocker-compose.yml)
3. Secure by network, not token. Because the SSE path is unauthenticated,
bind jCodeMunch so only the Odysseus container can reach it (host-gateway
interface / firewall), not a public interface. JCODEMUNCH_RATE_LIMIT adds a
throttle.
4. Restart Odysseus. All jCodeMunch tools appear in chat + agents. Keep the
index fresh with jcodemunch-mcp watch .; use Odysseus's per-server
disabled_tools to trim the surface.
jCodeMunch is read-only by charter, and its get_* / search_* / find_* /
check_* tool naming satisfies Odysseus's plan-mode read-only gate, so the
suite stays usable in plan mode.
Community-tested: the MCP protocol round-trip (SSE connect + tool discovery) is verified; the container-to-host network dial depends on your Docker setup.
Most jCodeMunch tools only read the index. Each of those carries the MCP
readOnlyHint annotation. The tools that change index, session or config state
(indexing, cache invalidation, weight tuning, handoff records) are marked
as writers. If your client asks before every tool call, you can allow the
read tools and keep the prompt for the rest.
These steps name the tools of the full surface. A first-ever install
starts on the counter surface, which serves three front-door tools
instead: menu only reads, while order and route are marked as writers
because they can dispatch any tool, indexing included. There the client
keeps asking before each order and route call. To allow the read tools
by name, set "tool_surface": "full" in your global config.jsonc
(~/.code-index/ by default, or under CODE_INDEX_PATH), or set
JCODEMUNCH_TOOL_SURFACE=full, which wins over the file.
Claude Code. In .claude/settings.json (the project, committable) or
~/.claude/settings.json (you), list the tools to allow. Tool names are
mcp__<server>__<tool>, and the server name init writes is jcodemunch:
{
"permissions": {
"allow": [
"mcp__jcodemunch__resolve_repo",
"mcp__jcodemunch__plan_turn",
"mcp__jcodemunch__search_symbols",
"mcp__jcodemunch__search_text",
"mcp__jcodemunch__get_symbol_source",
"mcp__jcodemunch__get_file_outline",
"mcp__jcodemunch__get_ranked_context",
"mcp__jcodemunch__find_references",
"mcp__jcodemunch__check_references",
"mcp__jcodemunch__get_repo_outline",
"mcp__jcodemunch__get_file_tree"
]
}
}"mcp__jcodemunch__*" allows every tool, indexing included.
(per Claude Code permissions, checked 2026-10-28)
Codex. Set default_tools_approval_mode = "writes" on the server
entry; see the Codex block above.
VS Code (Copilot Chat). When a jCodeMunch tool asks, you can approve
it for the session, the workspace, or all future calls. Tools are grouped
by server, so you can trust the whole server at once. Setting
chat.tools.eligibleForAutoApproval to false for a tool keeps it
manual. chat.tools.global.autoApprove removes prompts for every tool
from every server, so it isn't a way to allow just this one.
(per VS Code approvals, checked 2026-10-28)
Cursor. Cursor asks before using MCP tools by default. In Auto-review mode, allowlisted MCP tools run immediately, and an Enterprise admin can set a tool allowlist for each approved server. (per Cursor MCP docs, checked 2026-10-28)
Commit a .mcp.json at the repo root and everyone who clones it gets the
same servers. This one adds jCodeMunch beside Context7 (library docs):
{
"mcpServers": {
"jcodemunch": {
"command": "uvx",
"args": ["jcodemunch-mcp"]
},
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp"
}
}
}Claude Code asks each person to approve project servers the first time.
GitHub Copilot CLI reads the same file, from the working directory or any
parent up to the repo root, and loads it after you confirm folder trust
on first launch. An entry with no type is a local server to both.
(per Claude Code MCP docs and Copilot CLI docs, checked 2026-10-28)
VS Code reads a different file (.vscode/mcp.json, top-level key
servers); see the Copilot block above.
Each developer still needs uv.
Keep API keys out of a committed file. Personal, academic and other
non-commercial use is free; use inside a for-profit company needs a
commercial license (buying guide).
jCodeMunch can serve over HTTP for a team or a container instead of running per developer over stdio:
JCODEMUNCH_HTTP_TOKEN=change-me jcodemunch-mcp serve --transport streamable-httpIt listens on 127.0.0.1:8901 by default (--host, --port). Clients
connect to http://<host>:8901/mcp and send
Authorization: Bearer change-me; without the token they get 401. The
token is optional and everyone shares it; there are no per-user accounts.
The server has no TLS of its own. To reach it from other machines, put it
behind your own HTTPS reverse proxy rather than opening --host 0.0.0.0
to the network.
Every client sees the same repos and the same index. Saves from different clients wait for each other, but indexing itself isn't coordinated, so don't index the same repo from two clients at once.
To cap requests, set JCODEMUNCH_RATE_LIMIT (requests per minute per
client IP, off by default; over the limit returns HTTP 429 with
Retry-After). Behind a reverse proxy every request comes from the
proxy's IP, so it becomes one shared limit. You run and secure the host;
there is no hosted jCodeMunch service.
If you’re using Paperclip (the multi-agent orchestration platform), add a .mcp.json to your workspace root:
{
"mcpServers": {
"jcodemunch": {
"type": "stdio",
"command": "uvx",
"args": ["jcodemunch-mcp"]
},
"jdocmunch": {
"type": "stdio",
"command": "uvx",
"args": ["jdocmunch-mcp"]
}
}
}Paperclip’s Claude Code agents auto-detect .mcp.json at startup. Add both servers to give your agents symbol search + doc navigation without blowing the token budget.