_ Local-first JuiceFS storage for Linux, with MCP tools for Cursor, Claude Code, and Hermes.
_
Most AI agents can read files — but only if you point them at random folders on your laptop. That’s fragile, hard to isolate, and useless when you want durable storage (multi-volume, quotas, web UI) that agents can use safely.
MeshDrive is a local-first Linux storage layer (JuiceFS + SQLite metadata) with a terminal UI, loopback Filebrowser, and a free MCP server so agents can list, read, and write files only inside an isolated root (/opt/meshdrive by default).
No cloud required for the free tier.. Your data stays on your disks.
GitHub:vix-gateway/MeshDrive
Docs: MCP clients guide
Requirements: Ubuntu/Debian amd64, FUSE, Python 3.10+, outbound HTTPS on first install.
curl https://github.com/Hardik94/vix-gateway/releases/download/v2.0.0/meshdrive_2.0.0_amd64.deb
sudo dpkg -i meshdrive_2.0.0_amd64.deb
Verify:
meshdrive doctor
meshdrive status
sudo systemctl status meshdrive-agent
Create storage (one-time)
meshdrive-tui
In the TUI: Storage → Add backend → Mount. Then open Filebrowser: http://127.0.0.1:8080
sudo meshdrive-addons install mcp
Smoke test (no LLM needed — proves MCP works):
/opt/meshdrive/venv/bin/python packaging/mcp-smoke-test.py --stdio
You should see: tools (8) and health_check → PASS.
Run Cursor on the same machine as MeshDrive (or use SSH — see below).
Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json globally):
{
"mcpServers": {
"meshdrive": {
"command": "/opt/meshdrive/bin/meshdrive-mcp",
"args": [],
"env": {
"MESHDRIVE_ROOT": "/opt/meshdrive",
"MESHDRIVE_MCP_TRANSPORT": "stdio"
}
}
}
}
Why stdio? Cursor’s URL mode often uses Streamable HTTP. MeshDrive’s HTTP mode is legacy SSE (GET /sse + POST /messages/). stdio avoids that mismatch entirely.
{
"mcpServers": {
"meshdrive": {
"command": "ssh",
"args": [
"user@YOUR_SERVER_IP",
"MESHDRIVE_ROOT=/opt/meshdrive",
"MESHDRIVE_MCP_TRANSPORT=stdio",
"/opt/meshdrive/bin/meshdrive-mcp"
]
}
}
}
Set up passwordless SSH first (ssh-copy-id).
On the MeshDrive host:
claude mcp add meshdrive \
--env MESHDRIVE_ROOT=/opt/meshdrive \
-- /opt/meshdrive/bin/meshdrive-mcp
claude mcp list
In a session: “Call meshdrive health_check and list_storage_backends.”
Project-level config (.mcp.json) — same JSON as Cursor’s mcpServers block.
Run Hermes on the MeshDrive machine (same host as Ollama). Do not use HTTP/SSE for local models — many never trigger tool_calls.
~/.hermes/config.yaml:
mcp_servers:
meshdrive:
command: /opt/meshdrive/bin/meshdrive-mcp
args: []
env:
MESHDRIVE_ROOT: /opt/meshdrive
MESHDRIVE_MCP_TRANSPORT: stdio
enabled: true
hermes mcp test meshdrive
Use a model with solid function-calling (e.g. Qwen2.5, Llama 3.1+). Set context ≥ 8192 so tool schemas aren’t truncated.
~/.hermes/config.yaml:
mcp_servers:
meshdrive:
url: "http://localhost:9000/sse"
transport: sse
enabled: true
connect_timeout: 30
Release message: “MeshDrive MCP works today with Cursor, Claude Code, and Hermes via stdio.”
AI client (stdio) → meshdrive-mcp → isolated paths under /opt/meshdrive → JuiceFS mounts
Humans use Filebrowser; agents use MCP. Same storage, different interfaces.
Try it
Issues & feedback: GitHub Issues on that repo.
MeshDrive 2.0 — local-first storage for the agentic era. Built by Vistrix Labs.