Set up the filesystem sandbox
Use Linux or macOS with Elixir 1.18+, Erlang/OTP, Git and Python 3. The daemon materializes regular local files and synchronizes changes over an authenticated WebSocket; FUSE is not required.
1. Build and install the daemon
git clone https://github.com/noizu-labs-ml/elixir-mcp-lib.git
cd elixir-mcp-lib
git checkout cd6925c6f2e3932dc213b9806c2e3c71b6269d58
cd daemon/mcp_mount
mix deps.get
mix escript.build
mkdir -p "$HOME/.local/bin"
install -m 755 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"])')"
# From elixir-mcp-lib/daemon/mcp_mount; keeps the native watcher available:
mix run -e 'McpMount.CLI.main(System.argv())' -- --url wss://mcp.elixirmcp.dev/vfs --mount "$HOME/elixirmcp-demo"
# In another terminal, once the initial sync completes:
cat "$HOME/elixirmcp-demo/README.md"
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"
Run from the source checkout as shown for live write-back on macOS: the escript cannot bundle its native filesystem watcher. Add --ro for a download-only client. Read-only server files stay protected even without that flag.
Settings accept theme (light or dark) and uppercase_echo (true or false). Write a message to /dev/echo and read back the latest response. 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.