<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hardik Patel</title>
    <description>The latest articles on DEV Community by Hardik Patel (@hardikprl94).</description>
    <link>https://dev.to/hardikprl94</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4123167%2Fa25e5bf7-1e0f-4d6e-8a42-f14ce724f7b5.png</url>
      <title>DEV Community: Hardik Patel</title>
      <link>https://dev.to/hardikprl94</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hardikprl94"/>
    <language>en</language>
    <item>
      <title>Give your AI agent a real local drive — MeshDrive 2.0 + MCP (stdio)</title>
      <dc:creator>Hardik Patel</dc:creator>
      <pubDate>Sun, 13 Sep 2026 13:40:34 +0000</pubDate>
      <link>https://dev.to/hardikprl94/give-your-ai-agent-a-real-local-drive-meshdrive-20-mcp-stdio-472a</link>
      <guid>https://dev.to/hardikprl94/give-your-ai-agent-a-real-local-drive-meshdrive-20-mcp-stdio-472a</guid>
      <description>&lt;p&gt;_ Local-first JuiceFS storage for Linux, with MCP tools for Cursor, Claude Code, and Hermes.&lt;br&gt;
_&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;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 &lt;strong&gt;durable storage&lt;/strong&gt; (multi-volume, quotas, web UI) that agents can use safely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MeshDrive&lt;/strong&gt; is a local-first Linux storage layer (JuiceFS + SQLite metadata) with a terminal UI, loopback Filebrowser, and a &lt;strong&gt;free MCP server&lt;/strong&gt; so agents can list, read, and write files &lt;strong&gt;only inside an isolated root&lt;/strong&gt; (/opt/meshdrive by default).&lt;/p&gt;

&lt;p&gt;No cloud required for the free tier.. Your data stays on your disks.&lt;/p&gt;
&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JuiceFS volumes&lt;/strong&gt; mounted under one install root&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filebrowser&lt;/strong&gt; on &lt;a href="http://127.0.0.1:8080" rel="noopener noreferrer"&gt;http://127.0.0.1:8080&lt;/a&gt; (human UI)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP tools&lt;/strong&gt; for AI clients: health_check, list_storage_backends, read_file, write_file, list_directory, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path isolation&lt;/strong&gt; — agents cannot escape the MeshDrive root&lt;/li&gt;
&lt;li&gt;Optional OpenFGA for authorization (free add-on)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub:&lt;a href="https://github.com/Hardik94/vix-gateway/tree/master" rel="noopener noreferrer"&gt;vix-gateway/MeshDrive&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://github.com/Hardik94/vix-gateway/blob/master/meshdrive/docs/mcp-clients.md" rel="noopener noreferrer"&gt;MCP clients guide&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Install on Ubuntu/Debian (.deb)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Ubuntu/Debian amd64, FUSE, Python 3.10+, outbound HTTPS on first install.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl https://github.com/Hardik94/vix-gateway/releases/download/v2.0.0/meshdrive_2.0.0_amd64.deb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo dpkg -i meshdrive_2.0.0_amd64.deb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;meshdrive doctor
meshdrive status
sudo systemctl status meshdrive-agent

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create storage (one-time)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;meshdrive-tui&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In the TUI: &lt;strong&gt;Storage → Add backend → Mount&lt;/strong&gt;. Then open Filebrowser: &lt;a href="http://127.0.0.1:8080" rel="noopener noreferrer"&gt;http://127.0.0.1:8080&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Enable the MCP add-on (free)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;sudo meshdrive-addons install mcp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smoke test&lt;/strong&gt; (no LLM needed — proves MCP works):&lt;/p&gt;

&lt;p&gt;/opt/meshdrive/venv/bin/python packaging/mcp-smoke-test.py --stdio&lt;/p&gt;

&lt;p&gt;You should see: tools (8) and health_check → PASS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect Cursor (stdio — recommended)
&lt;/h2&gt;

&lt;p&gt;Run &lt;strong&gt;Cursor on the same machine&lt;/strong&gt; as MeshDrive (or use SSH — see below).&lt;/p&gt;

&lt;p&gt;Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json globally):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"meshdrive"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/opt/meshdrive/bin/meshdrive-mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"MESHDRIVE_ROOT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/opt/meshdrive"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"MESHDRIVE_MCP_TRANSPORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Cursor Settings → MCP → enable meshdrive&lt;/li&gt;
&lt;li&gt;In chat: “Use meshdrive health_check”&lt;/li&gt;
&lt;li&gt;Then: “list_storage_backends” and “list_directory /opt/meshdrive/mnt/…”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why stdio?&lt;/strong&gt; Cursor’s URL mode often uses Streamable HTTP. MeshDrive’s HTTP mode is legacy SSE (GET /sse + POST /messages/). &lt;strong&gt;stdio avoids that mismatch entirely.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cursor on Local, MeshDrive on Remote (SSH bridge)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"meshdrive"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ssh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"user@YOUR_SERVER_IP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"MESHDRIVE_ROOT=/opt/meshdrive"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"MESHDRIVE_MCP_TRANSPORT=stdio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"/opt/meshdrive/bin/meshdrive-mcp"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set up passwordless SSH first (&lt;code&gt;ssh-copy-id&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect Claude Code (stdio)
&lt;/h2&gt;

&lt;p&gt;On the MeshDrive host:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add meshdrive &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;MESHDRIVE_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/opt/meshdrive &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; /opt/meshdrive/bin/meshdrive-mcp

claude mcp list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a session: “&lt;em&gt;Call meshdrive health_check and list_storage_backends.&lt;/em&gt;”&lt;/p&gt;

&lt;p&gt;Project-level config (&lt;strong&gt;.mcp.json&lt;/strong&gt;) — same JSON as Cursor’s &lt;strong&gt;mcpServers&lt;/strong&gt; block.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect Hermes + open-source models (stdio)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Run Hermes on the MeshDrive machine&lt;/strong&gt; (same host as Ollama). Do not use HTTP/SSE for local models — many never trigger tool_calls.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.hermes/config.yaml:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mcp_servers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;meshdrive&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/opt/meshdrive/bin/meshdrive-mcp&lt;/span&gt;
    &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
    &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;MESHDRIVE_ROOT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/opt/meshdrive&lt;/span&gt;
      &lt;span class="na"&gt;MESHDRIVE_MCP_TRANSPORT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stdio&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;hermes mcp test meshdrive&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Use a model with solid function-calling (e.g. Qwen2.5, Llama 3.1+). Set context ≥ 8192 so tool schemas aren’t truncated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect Hermes + open-source models (HTTP/SSE)
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.hermes/config.yaml:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mcp_servers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;meshdrive&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:9000/sse"&lt;/span&gt;
    &lt;span class="na"&gt;transport&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sse&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;connect_timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;hermes mcp test meshdrive&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Release message:&lt;/strong&gt; “&lt;em&gt;MeshDrive MCP works today with Cursor, Claude Code, and Hermes via stdio.&lt;/em&gt;”&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture in one sentence
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    AI client (stdio) → meshdrive-mcp → isolated paths under /opt/meshdrive → JuiceFS mounts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Humans use Filebrowser; agents use MCP. Same storage, different interfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the .deb&lt;/li&gt;
&lt;li&gt;meshdrive-tui → add storage&lt;/li&gt;
&lt;li&gt;meshdrive-addons install mcp&lt;/li&gt;
&lt;li&gt;Paste stdio config into Cursor or Claude or Hermes&lt;/li&gt;
&lt;li&gt;Ask: “Use meshdrive to list my storage backends”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Issues &amp;amp; feedback:&lt;/strong&gt; GitHub Issues on that repo.&lt;/p&gt;

&lt;p&gt;MeshDrive 2.0 — local-first storage for the agentic era. Built by Vistrix Labs. &lt;/p&gt;

</description>
      <category>mcp</category>
      <category>cloudstorage</category>
      <category>opensource</category>
      <category>security</category>
    </item>
  </channel>
</rss>
