Standalone MCP filesystem tools server β view, edit, shell, workdir.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Give your AI assistant filesystem superpowers
Standalone Rust binary that exposes filesystem tools over the Model Context Protocol. Built on rmcp 3.0, tokio, and axum.
Installation Β· Quick Start Β· Features Β· Tools Reference Β· Architecture
MCP Registry: io.github.Muvon/octofs
Your AI coding assistant (Cursor, Claude, Windsurf, etc.) is smart β but it's blind to your filesystem. Octofs bridges that gap, giving your AI:
ssh:// URLs| Feature | Octofs | Typical Alternatives |
|---|---|---|
| Implementation | Compiled Rust binary, no runtime | Python/Node script |
| Content Search | Built-in search with context lines | String matching only |
| Batch Operations | Atomic multi-edit on single file | One-at-a-time |
| Line Modes | Hash-based (stable across edits) or number-based | Number-only |
| Transport | STDIO + Streamable HTTP | STDIO only |
| Shell Integration | Foreground + background process support | Limited or none |
| Remote Files | Transparent SSH/SFTP on every file tool | None |
| Safety | Gitignore-aware, stale-write detection, path validation | Full filesystem access |
Download from GitHub Releases for your platform:
| Platform | Target |
|---|---|
| Linux (x86_64) | x86_64-unknown-linux-musl |
| Linux (ARM64) | aarch64-unknown-linux-musl |
| Windows (x86_64) | x86_64-pc-windows-msvc |
| Windows (ARM64) | aarch64-pc-windows-msvc |
| macOS (Intel) | x86_64-apple-darwin |
| macOS (Apple Silicon) | aarch64-apple-darwin |
One-click install via the MCP Registry entry io.github.Muvon/octofs.
Requires Rust 1.95+.
The CLI uses a mcp subcommand β your config must pass ["mcp"] as args.
Cursor (~/.cursor/mcp.json):
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
Windsurf (~/.windsurf/mcp.json):
If Octofs isn't on your
PATH, use the full path to the binary (e.g./usr/local/bin/octofsor./target/release/octofs).
The MCP server starts automatically when your AI assistant connects.
Ask your AI assistant to:
unwrap() in the codebase"test.rs"view in parallel for several), list directories with glob patterns, search content.gitignore patterns during directory traversal-1 = last line)ssh://user@host:port/path URLs (see Remote Filesystem)Octofs supports two modes for identifying lines in files, set once at startup:
Lines are identified by 1-indexed line numbers:
Use for: Simple operations, one-off edits.
Lines are identified by 4-character hex hashes (FNV-1a, position-dependent β same content at different lines produces different hashes):
Use for: Complex multi-step edits where line numbers would shift. Hashes stay stable across edits.
Enable hash mode:
Octofs detects shell misuse β commands like cat, grep, find, or sed that should use the dedicated MCP tools instead β and enforces it in two modes:
The command is rejected with an error explaining which tool to use instead. The call fails; nothing executes.
The command runs anyway, and the guidance is appended to the tool response as a β οΈ hint.
Enable soft mode:
Standard input/output transport. Works with all MCP clients.
Streamable HTTP transport for remote access or multi-client scenarios.
Connect clients to http://localhost:12345/mcp.
By default, Octofs operates in the current directory. Specify a different root:
All path parameters β and --path itself β accept ssh:// or sftp:// URLs:
~/.ssh/config: the agent your config names for the host (IdentityAgent, e.g. 1Password) or $SSH_AUTH_SOCK, then key files β --ssh-key if given, the host's IdentityFile entries, then the defaults in ~/.ssh (id_ed25519, id_ecdsa). If plain ssh host works on your machine, octofs works too β nothing to configure. Passphrase-protected key files are not supported directly; use an agent instead.rsa crate has an unfixed timing side-channel (Marvin attack, RUSTSEC-2023-0071), so octofs is built without RSA entirely. Use an ed25519 key instead (ssh-keygen -t ed25519); ecdsa also works. RSA-only setups fail with a clear error naming the key.~/.ssh/known_hosts with the OpenSSH accept-new policy: unknown hosts are recorded on first use, a changed key fails closed.--ssh-timeout SECS β connection timeout (default 30). Connections are pooled per host, kept alive with transport keepalives, and reconnected automatically if they drop.shell stays local β commands always run on the machine where Octofs runs; only file tools (view, text_editor, batch_edit, extract_lines, workdir) reach remote hosts.view β Read files, list directories, search contentFile reading: (path is a single path; start/end are line numbers or hashes)
To read several files, make multiple view calls β they run in parallel.
Directory listing:
pattern is a glob, not a content search: without / it matches the whole filename at any depth; with / it matches the workdir-relative path. It supports *, ?, character classes such as [abc], and | alternatives such as *.rs|*.toml.
Content search: (literal by default; set regex: true for a Rust regex, (?i) = case-insensitive)
Directory listings annotate each file as path<TAB>NL<TAB>~Nt (line count + estimated tokens) so you can budget reads before opening files; binary files show path<TAB>(binary).
text_editor β Create, edit, replace textCreate file:
Replace string:
Delete file: (recoverable with undo_edit)
Undo last edit:
batch_edit β Atomic multi-operation editsPerform multiple insert/replace operations on a single file atomically.
Each operation has a start (line number or hash). For insert it's the anchor
(0 = file start, -1 = after last line, N = after line N). For replace add end
for a range (omit end for a single line). start and end must be the same kind β
both line numbers or both hashes (no mixing).
Insert at beginning:
Replace lines:
Hash mode (stable across edits):
extract_lines β Copy lines between filesfrom_end is optional (omit to copy a single line). from_start, from_end, and
append_line each accept a line number or a content hash. append_line positions the
copy in the target: 0 = beginning, -1 = end, N = after line N.
shell β Execute commandsForeground:
Background:
On Windows, shutdown cleanup terminates only direct child processes (no Unix process-group semantics); use
taskkill /PID <pid> /Tfor process trees.
workdir β Manage working directoryGet current:
Set new:
Reset to session root:
Key design decisions:
rmcp 3.0) for protocol handlingtokio::fs, never blocking std::fstokio::sync::Mutex prevents concurrent write conflictsio_fingerprint comparison fails edits if the file changed on disk since last viewWe welcome contributions! Please see CONTRIBUTING.md for guidelines.
Quick checklist:
cargo fmt before committingcargo clippy passes with zero warningsSee SECURITY.md for security policy and reporting vulnerabilities.
Apache-2.0 β See LICENSE
Built with π¦ by Muvon
Star us on GitHub if Octofs helps you ship faster! β
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/octofs)<a href="https://allmcps.com/mcp/octofs"><img src="https://allmcps.com/api/badge/octofs?style=directory" alt="Octofs on AllMCPs" /></a>