AutoFuse
Mount, heal, wake and run commands on remote Windows/Linux machines over SSHFS from a macOS menu-bar app. 34 tools with MCP behavior annotations (read-only vs destructive) and agent-friendly error hints.
README
AutoFuse
Remote disks that mount themselves — and an MCP server so your AI agent can manage them.
AutoFuse is a macOS menu bar app that keeps remote machines' disks mounted over SSHFS: network auto-discovery, Wake-on-LAN, self-healing reconnection, near-zero idle energy. It ships with a Model Context Protocol server exposing 30+ tools, so Claude Code, Claude Desktop, or any MCP client can mount, heal, wake, browse, and run commands on your workstations — hands-free.
You: "I need the training runs from my GPU workstation"
Agent: wake_and_wait("ml-workstation") → machine is up
mount_disk("ml-workstation", "D") → mounted_lan
~/workstation/training-runs/ is now a local folder.
<p align="center"> <img src="docs/autofuse-demo.gif" width="640" alt="AutoFuse: connect and mount a remote workstation from the command line"> </p>
Why agents work well with it
- One intent-level call (
quick_connect,fix_it,diagnose) instead of fragile ssh/sshfs incantations the model has to compose and debug run_remote_shellover host-key-verified SSH — the agent can operate the remote box, not just read its files- Self-healing mounts — a long agentic task doesn't die because WiFi flapped; AutoFuse reconnects underneath it
- Structured, parseable results — every tool returns machine-readable statuses designed for LLM consumption, not human-formatted text to scrape
For humans: no terminal knowledge required. A step-by-step Setup Guide in the menu bar walks you through everything.
Features
- MCP Server for AI agents — 30+ tools over the Model Context Protocol: mount, heal, wake, discover, diagnose, remote shell (full list)
- Auto-Discovery — Scans your network to find remote computers, imports SSH config, auto-detects disks, MAC address, and OS
- Wake-on-LAN — Wake up sleeping computers directly from the menu bar
- Auto-Heal — Automatically reconnects when your WiFi changes, your Mac wakes from sleep, or a connection drops
- Multi-Computer — Connect to multiple remote computers, each with multiple disks
- Setup Wizard — Step-by-step guide that installs everything you need and configures your first connection
- Native macOS — 300KB Objective-C binary, runs from the menu bar with zero CPU usage when idle
- CLI Tool —
autofusecommand for terminal users and scripting - FUSE-T + macFUSE — Works with either backend, auto-detects which is installed
- Preferences — Native preferences window for SSH, cache, and connection settings
- Team Sharing — Export/import workstation configs for team onboarding
- Connection Health — Latency and throughput monitoring for each mount
- Secure — SSH key authentication, no passwords stored, config file encrypted with 0600 permissions
Screenshots
<table> <tr> <td align="center"><b>Menu Bar</b><br>per-disk status, one-click actions</td> <td align="center"><b>Add Computer</b><br>auto-detect disks, MAC, host key</td> <td align="center"><b>Preferences</b><br>polling, auto-heal, SSH, cache</td> </tr> <tr> <td><img src="docs/screenshots/menu.png" width="280" alt="AutoFuse menu bar"></td> <td><img src="docs/screenshots/add-computer.png" width="240" alt="Add Workstation dialog"></td> <td><img src="docs/screenshots/preferences.png" width="290" alt="Preferences window"></td> </tr> </table>
Installation
What You Need
- macOS 13.0 (Ventura) or later
- FUSE-T (recommended) or macFUSE — lets your Mac see remote files as local folders
Step 1: Install FUSE-T
Open Terminal and run:
brew tap macos-fuse-t/homebrew-cask
brew install fuse-t
brew install fuse-t-sshfs
Don't have Homebrew? Install it first: https://brew.sh
Alternative: If you prefer macFUSE, download it from https://osxfuse.github.io and then run
brew install sshfs. Note: macFUSE requires a kernel extension and may need Recovery Mode on Apple Silicon Macs.
Step 2: Install AutoFuse
Option A — Homebrew cask (recommended):
brew install --cask Fasen24-AI/tap/autofuse
On Homebrew 6+, trust the tap first: brew tap Fasen24-AI/tap && brew trust fasen24-ai/tap.
Option B — Download the App:
- Download
AutoFuse-<version>.zipfrom Releases - Unzip and drag AutoFuse.app to your Applications folder
- Launch AutoFuse — it appears in your menu bar
Option C — CLI Only (Homebrew formula from this repo):
git clone https://github.com/Fasen24-AI/autofuse.git
brew install --formula ./autofuse/autofuse.rb
Step 3: Follow the Setup Guide
Click the AutoFuse icon in your menu bar and select Setup Guide. It will walk you through:
- Verifying FUSE-T is installed
- Creating an SSH key (if you don't have one)
- Finding and connecting to your remote computer
- Mounting your first disk
Quick Start (for experienced users)
# Install dependencies
brew tap macos-fuse-t/homebrew-cask && brew install fuse-t fuse-t-sshfs
# Launch the app
open /Applications/AutoFuse.app
# Or use the CLI
autofuse discover # Scan network for computers
autofuse probe 192.168.1.5 # Detect OS, disks, MAC address
autofuse mount # Mount all configured disks
autofuse status # Show connection status
autofuse wake MyServer # Wake a sleeping computer
autofuse health # Check connection latency and speed
Claude Integration (MCP Server)
AutoFuse includes a Model Context Protocol (MCP) server that exposes all AutoFuse capabilities to Claude Desktop, Claude Code, and other MCP clients. This lets you control AutoFuse directly from Claude conversations.
Quick Setup (One-Click in Menu Bar)
For most users, installation is one click:
- Click the AutoFuse menu bar icon
- Select "Enable Claude Integration..."
- Follow the setup wizard
- Restart Claude Desktop — done!
The wizard will check for Node.js, copy the MCP server to your system, and configure Claude Desktop automatically.
Claude Code (one-liner)
cd mcp-server && npm install && npm run build
claude mcp add autofuse -- node "$(pwd)/dist/index.js"
Other agents (Cursor, Codex CLI, Gemini CLI, OpenClaw, …)
AutoFuse speaks plain stdio MCP — any MCP client can use it. After
cd mcp-server && npm install && npm run build, point your client at
node <repo>/mcp-server/dist/index.js:
| Agent | Where to configure |
|---|---|
| Cursor / Windsurf / Cline | mcp.json → {"mcpServers": {"autofuse": {"command": "node", "args": ["<path>/dist/index.js"]}}} |
| Codex CLI | ~/.codex/config.toml → [mcp_servers.autofuse] with command/args |
| Gemini CLI | ~/.gemini/settings.json → same mcpServers JSON shape |
| OpenClaw & skill-based agents | bridge MCP (e.g. mcporter), or skip MCP entirely and wrap the autofuse CLI — autofuse json status returns JSON (zero parsing), and every command emits stable, parseable output (mounted_lan:/path, failed:<reason>) designed for scripting |
Per-client snippets: mcp-server/README.md.
Advanced: Manual Installation
If you prefer manual setup:
cd mcp-server
./install.sh
The installer automatically configures Claude Desktop or Claude Code. Restart Claude and you'll have access to 30+ AutoFuse tools.
Every tool ships MCP behavior annotations: the 18 read-only tools (status, health, discovery, …) can be safely auto-approved by your client, while destructive ones (
unmount_disk, shells) always warrant a confirmation prompt. Known engine errors come back with ahint:line telling the agent the next step (e.g.host_key_mismatch→ runlearn_host_key).
Available Tools
Quick Actions (high-level, intent-based):
quick_connect- Mount everything in one callquick_disconnect- Unmount everythingfix_it- Detect and repair whatever is brokenlocate- Find where a workstation/disk is mounteddiagnose- Full health + connectivity diagnosticget_recent_activity- Recent mount/heal/wake log entriesget_config- Current config (SSH key path only, never key contents)
Mount Operations:
mount_disk- Mount a remote diskunmount_disk- Unmount a diskget_mount_status- Check a mount's statusget_all_mount_status- See all mounts at once
Workstation Management:
list_workstations- List configured workstationsget_disks- See available disks on a workstationwake_workstation- Send Wake-on-LAN signalwake_and_wait- Wake and wait for connectivityping_workstation- Check if a workstation is reachable
Health & Recovery:
get_health_status- Detailed health monitoringheal_stale_mount- Repair a broken mountpanic_check- Find unhealthy mountspanic_unmount_all- Emergency unmount all
Network Discovery:
scan_network- Scan for available hostsprobe_host- Check specific host connectivitydetect_vpn- Check VPN status
Host-key identity (cross-network same-machine verification):
learn_host_key- Capture the workstation's SSH host-key fingerprint into configverify_host_key- Check each endpoint's current key against the stored fingerprintpick_endpoint- Show which endpoint AutoFuse would use right now (key-verified when a fingerprint is stored)
System:
check_dependencies- Verify all required tools are installed
Finder Access:
open_in_finder- Open a mounted disk in Finderreveal_in_finder- Reveal a path in Finder (restricted to mounted AutoFuse disks)
Unrestricted Shell (single-tenant — see SECURITY.md):
run_local_shell- Run a local shell commandrun_remote_shell- Run a command on a workstation over host-key-verified SSH
Some tools expose backward-compatible aliases (e.g.
reconnect_disk↔heal_stale_mount,check_for_stuck_mounts↔panic_check,force_unmount_all↔panic_unmount_all).
Example Usage in Claude
User: "Mount the D drive on ml-workstation"
Claude: [calls mount_disk(workstation="ml-workstation", disk_letter="D")]
Result: Mount successful, available at ~/workstation-D
User: "Check the health of all my mounts"
Claude: [calls get_health_status()]
Result: All mounts healthy, average latency 45ms
See mcp-server/README.md for complete documentation.
CLI Usage
autofuse Show status of all connections
autofuse mount [name] [disk] Connect a disk (all if no args)
autofuse unmount [name] Disconnect a disk
autofuse status Detailed status with colors
autofuse wake <name> Wake up a sleeping computer
autofuse heal Fix broken connections
autofuse discover Scan network for computers
autofuse probe <host> Detect OS, disks, MAC of a host
autofuse health Show latency and speed per disk
autofuse log Show recent activity log
autofuse config Open config file in your editor
autofuse connect <name> Ping, wake if asleep, mount all its disks
autofuse json [what] JSON output: status|health|list|disks <name>
autofuse raw <cmd> [...] Direct engine access (any mount.sh subcommand)
autofuse version Show version
autofuse help Show all commands
Configuration
Config file: ~/.config/autofuse/config.json
{
"workstations": [
{
"name": "MyPC",
"user": "admin",
"lan_ip": "192.168.1.100",
"vpn_ip": "172.16.0.100",
"mac_address": "AA:BB:CC:DD:EE:FF",
"ssh_key": "~/.ssh/id_ed25519",
"disks": [
{ "letter": "C", "label": "System", "remote_path": "/C:/" },
{ "letter": "D", "label": "Data", "remote_path": "/D:/", "primary": true }
]
}
],
"mount_base": "~/workstation"
}
The primary disk mounts at the base path (~/workstation). Other disks mount at ~/workstation-C, ~/workstation-D, etc.
How It Works
Your Mac Remote Computer
+------------------+ +------------------+
| AutoFuse | SSH tunnel | OpenSSH Server |
| (menu bar app) | ===============>| (built into |
| | | Windows/Linux) |
| FUSE-T/macFUSE | SFTP | |
| translates files |<===============>| Files on disk |
| to Finder | | C:, D:, etc. |
+------------------+ +------------------+
|
v
~/workstation/
(looks like a local folder)
- SSH creates an encrypted tunnel to the remote computer
- SSHFS uses that tunnel to access files via the SFTP protocol
- FUSE-T (or macFUSE) makes those files appear as a normal folder on your Mac
- AutoFuse manages all of this automatically — reconnecting, healing, waking
Architecture
AutoFuse is three thin layers over one source of truth. All mount logic lives in the bash engine; the menu-bar app and the MCP server are two front-ends that call the same commands, so a human clicking the menu and an agent calling a tool always get identical behavior.
Menu-bar app MCP server
(main.m, ObjC) (mcp-server/, TypeScript)
| |
| shells out | shells out
+-------------+--------------+
v
Bash engine ←── single source of truth
(mount.sh + discover.sh)
|
v
ssh · sshfs · wake-on-LAN
| Layer | Files | Responsibility |
|---|---|---|
| Menu-bar app | main.m |
Single-file AppKit app: status item, adaptive poll/heal timers, notifications, preferences, setup wizard. Holds no mount logic of its own — every action shells out to the engine. Compiles to a ~370 KB native binary, no runtime dependencies. |
| Bash engine | mount.sh, discover.sh |
The source of truth: probe, mount, unmount, heal-stale, wake-on-LAN, endpoint selection (LAN/VPN/extra IPs), and host-key verification. Pure bash + ssh/sshfs. Emits line-oriented, parseable status (`host |
| MCP server | mcp-server/ (TypeScript) |
Exposes the engine to AI agents over the Model Context Protocol (stdio). Each tool shells to mount.sh, parses its output, and returns structured JSON carrying behavior annotations (readOnlyHint, destructiveHint, …) so clients can auto-approve safe reads and gate destructive writes. |
Why this shape: the engine is testable in isolation (bash test.sh, 82
cases) and is the only place mount behavior is defined, so the app and the
agent interface can never drift apart. Adding an action means adding one engine
subcommand; both front-ends pick it up. See
CONTRIBUTING.md for the conventions each layer follows.
Team Sharing
Share your computer configs with teammates:
# Export (excludes SSH keys and MAC addresses for security)
autofuse export-config > team-mounts.json
# Import on another Mac
autofuse import-config team-mounts.json
Building from Source
git clone https://github.com/Fasen24-AI/autofuse.git
cd autofuse
# Compile the app
clang -fobjc-arc -framework Cocoa -framework UserNotifications \
-framework ServiceManagement -o AutoFuse main.m
# Build and install the .app bundle
bash build.sh
# Run tests
bash test.sh
Troubleshooting
"App can't be opened because it is from an unidentified developer" Right-click the app → Open → Open. This only needs to be done once.
Connection fails after Mac sleeps AutoFuse auto-heals within 2 minutes. Click "Fix Broken Connections" in the menu for immediate reconnection.
Slow file access Open Preferences (Cmd+,) → Cache tab → increase Cache Timeout and enable Kernel Cache.
Can't connect to Windows PC Make sure OpenSSH Server is enabled on Windows: Settings → System → Optional Features → OpenSSH Server.
"sshfs is not installed" / no FUSE backend
Install a FUSE backend and SSHFS: either FUSE-T + sshfs from fuse-t.org, or brew install macfuse && brew install gromgit/fuse/sshfs-mac. AutoFuse detects either at launch.
"Host key doesn't match" / security check failed The remote SSH identity changed since AutoFuse learned it. If you reinstalled the server, open Edit Workstation → Re-learn Host Key. If you didn't, investigate before reconnecting — this is the warning you want.
A disk shows "stale" and won't clear
The server became unreachable while mounted. AutoFuse force-cleans and re-heals on the next pass; for an immediate fix click Fix Broken Connections, or run autofuse heal <workstation>.
Claude/agent doesn't see the MCP tools
Node 18+ must be on PATH. Check the menu's Claude Integration panel for status, then re-run the one-liner under Claude Integration. Verify the server starts with cd mcp-server && npm test.
See the full Setup Guide for detailed instructions.
Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines on:
- Reporting bugs
- Suggesting features
- Development setup
- Code style
- Pull request process
License
PolyForm Shield License 1.0.0 — see LICENSE for details.
What this means in plain English:
- ✅ You can use AutoFuse for any purpose, including commercially inside your company
- ✅ You can modify the source code for your own needs
- ✅ You can contribute improvements back to this project via pull requests
- ✅ You can redistribute copies (with source and license attached)
- ❌ You cannot create a competing product based on AutoFuse
- ❌ You cannot fork AutoFuse and publish it as a separate commercial product
If unsure about your use case, please open a discussion or contact the author.
Security
Found a security vulnerability? See SECURITY.md for responsible disclosure.
Credits
Built by Fasen24-AI.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.