MCP server that gives AI assistants access to efficient Julia code execution. Avoids Julia's startup and compilation costs by keeping sessions alive across calls, and persists state (variables, functions, loaded packages) between them — so each iteration is fast.
- Sessions start on demand, persist state between calls, and recover from crashes — no manual management
- Each project directory gets its own isolated Julia process
- Pure stdio transport — no open ports or sockets
- julia_eval(code, env_path?, timeout?) — execute Julia code in a persistent session.
env_pathsets the Julia project directory (omit for a temporary session).timeoutdefaults to 60s and is auto-disabled forPkgoperations. - julia_restart(env_path?) — restart a session, clearing all state. If
env_pathis omitted, restarts the temporary session. - julia_list_sessions — list active sessions and their status
- uv (you might already have it installed)
- Julia – any version,
juliabinary must be inPATH- Recommended packages – used automatically if available in the global environment:
- Revise.jl - to pick code changes up without restarting
- TestEnv.jl — to properly activate test environment when
env_pathpoints to/test/
The server itself is written in Python since the Python MCP protocol implementation is very mature.
First, clone the repository:
cd /any_directory
git clone https://github.com/aplavin/julia-mcp.gitThen register the server with your client of choice (see below).
That's it! Your AI assistant can now execute Julia code more efficiently, saving of TTFX.
User-wide (recommended — makes Julia available in all projects):
claude mcp add --scope user julia -- uv run --directory /any_directory/julia-mcp python server.pyProject-scoped (only available in the current project):
claude mcp add --scope project julia -- uv run --directory /any_directory/julia-mcp python server.pyCustom Julia CLI arguments
Append Julia flags after server.py to override the defaults (--startup-file=no --threads=auto):
claude mcp add --scope user julia -- uv run --directory /any_directory/julia-mcp python server.py --threads=1 --startup-file=yesAdd to claude_desktop_config.json:
{
"mcpServers": {
"julia": {
"command": "uv",
"args": ["run", "--directory", "/any_directory/julia-mcp", "python", "server.py"]
}
}
}Custom Julia CLI arguments
Append Julia flags after server.py to override the defaults (--startup-file=no --threads=auto):
{
"mcpServers": {
"julia": {
"command": "uv",
"args": ["run", "--directory", "/any_directory/julia-mcp", "python", "server.py", "--threads=1", "--startup-file=yes"]
}
}
}User-wide — makes Julia available in all projects:
codex mcp add julia -- uv run --directory /any_directory/julia-mcp server.py
Custom Julia CLI arguments
Append Julia flags after server.py to override the defaults (--startup-file=no --threads=auto):
codex mcp add julia -- uv run --directory /any_directory/julia-mcp server.py --threads=1 --startup-file=yes
Add to .vscode/settings.json:
{
"mcp": {
"servers": {
"julia": {
"command": "uv",
"args": ["run", "--directory", "/path/to/julia-mcp", "python", "server.py"]
}
}
}
}Custom Julia CLI arguments
Append Julia flags after server.py to override the defaults (--startup-file=no --threads=auto):
{
"mcp": {
"servers": {
"julia": {
"command": "uv",
"args": ["run", "--directory", "/path/to/julia-mcp", "python", "server.py", "--threads=1", "--startup-file=yes"]
}
}
}
}- Each unique
env_pathgets its own isolated Julia session. Omittingenv_pathuses a temporary session that is cleaned up on MCP shutdown. - If
env_pathends in/test/, the parent directory is used as the project andTestEnvis activated automatically. For this to work,TestEnvmust be installed in the base environment. - Julia is launched with
--threads=autoand--startup-file=noby default. Pass custom Julia CLI flags afterserver.pyto override these defaults entirely.
Other projects that give AI agents access to Julia:
- MCPRepl.jl and REPLicant.jl require you to manually start and manage Julia sessions.
julia-mcphandles this automatically. - DaemonConductor.jl (linux only) runs Julia scripts, but calls are independent and don't share variables.
julia-mcpretains state between calls.