Set up the filesystem sandbox
Use Linux or macOS with Erlang/OTP and Python 3. The daemon materializes regular local files and synchronizes changes over an authenticated WebSocket; FUSE is not required. Latest release — mcp-mount escript plus mcp-fuse binaries for macOS and Linux.
1. Download the client
curl -fSLo mcp-mount.tar.gz https://github.com/noizu-labs-ml/elixir-mcp-lib/releases/latest/download/mcp-mount.tar.gz
tar -xzf mcp-mount.tar.gz
mkdir -p "$HOME/.local/bin"
install -m 755 mcp-mount/mcp-mount "$HOME/.local/bin/mcp-mount"
2. Sign in, authorize and connect
Review the OAuth helper, then sign in with a configured GitHub or Google provider. Credentials are saved to a private file. /mcp and /vfs are two transports for one protected resource: reuse this token file for both.
curl -fSLo oauth-token.py https://elixirmcp.dev/downloads/oauth-token.py
python3 oauth-token.py --resource /mcp --output "$HOME/.config/elixirmcp/demo-token.json"
mkdir -p "$HOME/elixirmcp-demo"
export MCP_MOUNT_TOKEN="$(python3 -c 'import json,pathlib; print(json.loads((pathlib.Path.home()/".config/elixirmcp/demo-token.json").read_text())["access_token"])')"
mcp-mount --url wss://mcp.elixirmcp.dev/vfs --mount "$HOME/elixirmcp-demo"
# In another terminal, once the initial sync completes:
cat "$HOME/elixirmcp-demo/README.md"
cat "$HOME/elixirmcp-demo/workspace/notes.txt"
cat "$HOME/elixirmcp-demo/dev/settings.json"
# Writes (workspace notes, /dev settings and echo) need local write mode — see step 3.
The downloaded escript runs on any host with Erlang/OTP — no Elixir compiler or source checkout needed. The escript cannot bundle its native filesystem watcher, so live write-back support varies by platform; add --ro for a download-only client. The hosted server itself is read-only, so --ro is client-side belt-and-braces, not the write barrier.
Settings accept theme (light or dark) and uppercase_echo (true or false), and /dev/echo replies to messages written to it. On the hosted instance you can read the current settings and echo state; changing them is a write-mode feature — run the demo locally to flip themes or echo messages. These controls affect only your sandbox.
Keep the daemon terminal open. It takes an initial snapshot, subscribes to this session’s changes and uploads local edits. Stop with Ctrl+C; downloaded files remain on disk. Access tokens expire within 15 minutes. Use python3 oauth-token.py --refresh --output "$HOME/.config/elixirmcp/demo-token.json", reload MCP_MOUNT_TOKEN and restart the daemon and engine. After the one-hour window, authorize again for a fresh sandbox. For the long-form walkthrough, see the VFS Mount Guide.
3. Run the demo locally (write mode)
The hosted sandbox is read-only; a local server defaults to read/write, so /workspace and /dev are editable. Clone the repository, run the app and issue a token for localhost — the OAuth helper accepts plain HTTP there.
git clone https://github.com/noizu-labs-ml/elixirmcp.dev.git
cd elixirmcp.dev/app
mix deps.get
mix phx.server
# In another terminal, from the same app/ checkout:
python3 scripts/oauth-token.py --issuer http://localhost:8080 --resource /mcp \
--output "$HOME/.config/elixirmcp/demo-token.json"
export MCP_MOUNT_TOKEN="$(python3 -c 'import json,pathlib; print(json.loads((pathlib.Path.home()/".config/elixirmcp/demo-token.json").read_text())["access_token"])')"
mcp-mount --url ws://localhost:8080/vfs --mount "$HOME/elixirmcp-demo"
# /workspace and /dev are writable on a local server:
printf 'Hello from my filesystem\n' > "$HOME/elixirmcp-demo/workspace/notes.txt"
printf '%s' '{"theme":"dark","uppercase_echo":true}' > "$HOME/elixirmcp-demo/dev/settings.json"
printf 'hello device' > "$HOME/elixirmcp-demo/dev/echo"
Dev and test builds start in write mode (DEMO_READ_ONLY unset). To reproduce the hosted behavior locally, run with DEMO_READ_ONLY=true; a prod-mode local run opts back into writes with DEMO_READ_ONLY=false.