jimsynz
Erl_dist_mcp - An MCP server for distribution
erl_dist_mcp — Give your AI assistant direct access to your running BEAM nodes
Hey all,
I’ve just released erl_dist_mcp, an MCP server that connects AI assistants directly to your Erlang/BEAM nodes via the distribution protocol. It gives tools like Claude, Cursor, and other MCP-compatible editors the ability to introspect, debug, and trace your running systems.
What it does
It exposes 30+ tools over the Model Context Protocol, including:
- Process inspection — list, search, and inspect processes, top-N by memory/reductions/message queue
- OTP introspection — supervision trees, GenServer state and status, application info
- System monitoring — memory breakdown, scheduler utilisation, ETS tables
- Function tracing — safe tracing via recon (with dbg fallback), with structured output
- Log capture — auto-installs an OTP logger handler to capture and retrieve recent log events
- Code evaluation — sandboxed
eval_codeandrpc_call(opt-in with--allow-eval)
Output is formatted in your language of choice: Elixir, Erlang, Gleam, or LFE.
Why?
I wanted to be able to say things like “connect to my local node and show me which processes are using the most memory” or “trace calls to MyApp.Repo.query/2 and show me what’s happening” — and have the AI actually do it, rather than telling me how to do it myself.
Getting started
cargo install erl_dist_mcp
Or grab a binary from the releases page (Linux, macOS, Windows).
Add it to your Claude Desktop config (or Cursor, Continue.dev, Cline, Claude Code — any MCP client):
{
"mcpServers": {
"erlang": {
"command": "erl_dist_mcp",
"args": ["--mode", "elixir"]
}
}
}
Then just ask your AI to connect:
Connect to my_app@localhost with cookie MYSECRETCOOKIE
The README has full setup and usage docs.
Technical details
It’s written in Rust using the erl_dist crate for the distribution protocol and rmcp for the MCP server. No dependencies on the target node — it connects as a hidden node and uses standard RPC via the rex process.
Apache-2.0 licensed. Feedback and contributions welcome.
Most Liked
lawik
Interesting! This can be very useful.
What does sandboxed code eval mean in this circumstance?
lawik
I’d put code eval behind a config flag. It is incredibly useful, especially for dev, but absolutely bad for some cases, especially in prod.
jimsynz
It’s covered in the README, but I think calling it a sandbox is probably overstating it.
The
eval_codetool includes safety mechanisms:
Process-level sandbox: Evaluation runs in a separate process with resource limits
Heap size limit: Prevents memory exhaustion
Timeout: Prevents infinite loops
Low priority: Reduces impact on system performance
Function whitelist: Only safe operations allowed (arithmetic, comparisons, list/map operations)
Blocks dangerous operations: No file I/O, network, process spawning, or code loading
Note: These safety mechanisms are NOT a complete sandbox. Skilled attackers may find ways to bypass restrictions. Only use on nodes you control.
Popular in Announcing
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #hex
- #security









