Octofs — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Octofs (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="center">
Give your AI assistant filesystem superpowers
The fastest, most capable filesystem MCP server. Built in Rust for AI agents that actually ship.
Installation • Quick Start • Features • Tools Reference
</div>
Your AI coding assistant (Cursor, Claude, Windsurf, etc.) is smart—but it's blind to your filesystem. Octofs bridges that gap, giving your AI:
┌─────────────────────────────────────────────────────────────┐
│ You: "Refactor all error handling to use anyhow::Context" │
├─────────────────────────────────────────────────────────────┤
│ AI without Octofs: │
│ • "I can't see your project structure" │
│ • "Please paste the relevant files" │
│ • *Wastes 10 minutes on back-and-forth* │
├─────────────────────────────────────────────────────────────┤
│ AI with Octofs: │
│ • Scans entire codebase in milliseconds │
│ • Finds all 47 error handling patterns │
│ • Suggests atomic batch edits │
│ • Applies changes with your approval │
└─────────────────────────────────────────────────────────────┘| Feature | Octofs | Others |
|---|---|---|
| Speed | Rust-powered, sub-millisecond responses | Python/Node-based, slower |
| 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 + HTTP (Streamable HTTP) | STDIO only |
| Shell Integration | Background process support | Limited or none |
| Safety | Gitignore-aware, path validation | Full filesystem access |
Requires Rust 1.92+.
# Clone and build
git clone https://github.com/muvon/octofs
cd octofs
cargo build --release
# Binary will be at ./target/release/octofs
# Optionally install globally
cargo install --path .Download from GitHub Releases for your platform.
Cursor (~/.cursor/mcp.json):
{
"mcpServers": {
"octofs": {
"command": "/path/to/octofs"
}
}
}Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"octofs": {
"command": "/path/to/octofs"
}
}
}Windsurf (~/.windsurf/mcp.json):
{
"mcpServers": {
"octofs": {
"command": "/path/to/octofs"
}
}
}The MCP server will start automatically when your AI assistant connects.
Ask your AI assistant to:
unwrap() in the codebase"test.rs".gitignore patterns during directory traversal-1 = last line)Octofs supports two modes for identifying lines in files:
#### Number Mode (default)
Lines are identified by 1-indexed line numbers:
1: fn main() {
2: println!("Hello");
3: }Use for: Simple operations, one-off edits.
#### Hash Mode
Lines are identified by 4-character hex hashes derived from content:
a3bd: fn main() {
c7f2: println!("Hello");
e9f1: }Use for: Complex multi-step edits where line numbers would shift. Hashes stay stable across edits.
Enable hash mode:
{
"mcpServers": {
"octofs": {
"command": "/path/to/octofs",
"args": ["--line-mode", "hash"]
}
}
}#### STDIO (default)
Standard input/output transport. Works with all MCP clients.
octofs # defaults to STDIO#### HTTP
Streamable HTTP transport for remote access or multi-client scenarios.
octofs --bind 0.0.0.0:12345Connect clients to http://localhost:12345/mcp.
By default, Octofs operates in the current directory. Specify a different root:
{
"mcpServers": {
"octofs": {
"command": "/path/to/octofs",
"args": ["--path", "/path/to/your/project"]
}
}
}view — Read files, list directories, search contentFile reading:
{"paths": ["src/main.rs"]}
{"paths": ["src/main.rs"], "lines": [10, 20]}
{"paths": ["src/main.rs"], "lines": ["a3bd", "c7f2"]} // hash modeMulti-file reading (max 50):
{"paths": ["src/main.rs", "src/lib.rs", "src/cli.rs"]}Directory listing:
{"paths": ["src/"]}
{"paths": ["src/"], "pattern": "*.rs"}
{"paths": ["src/"], "max_depth": 2, "include_hidden": true}Content search:
{"paths": ["src"], "content": "fn main"}
{"paths": ["src"], "content": "unwrap()", "context": 3}text_editor — Create, edit, replace textCreate file:
{"command": "create", "path": "src/new.rs", "content": "pub fn new() {}"}Replace string:
{
"command": "str_replace",
"path": "src/main.rs",
"old_text": "fn old()",
"new_text": "fn new()"
}Undo last edit:
{"command": "undo_edit", "path": "src/main.rs"}batch_edit — Atomic multi-operation editsPerform multiple insert/replace operations on a single file atomically.
Insert at beginning:
{
"path": "src/main.rs",
"operations": [
{"operation": "insert", "line_range": 0, "content": "// Header\n"}
]
}Replace lines:
{
"path": "src/main.rs",
"operations": [
{"operation": "replace", "line_range": [10, 15], "content": "new code here"}
]
}Hash mode (stable across edits):
{
"path": "src/main.rs",
"operations": [
{"operation": "replace", "line_range": ["a3bd", "c7f2"], "content": "new code"}
]
}extract_lines — Copy lines between files{
"from_path": "src/utils.rs",
"from_range": [10, 25],
"append_path": "src/new.rs",
"append_line": -1
}shell — Execute commandsForeground:
{"command": "cargo test"}
{"command": "cd foo && cargo build"}Background:
{"command": "python -m http.server 8000", "background": true}
// Returns PID, kill later with: {"command": "kill 12345"}workdir — Manage working directoryGet current:
{}Set new:
{"path": "/path/to/project"}Reset to session root:
{"reset": true}octofs/
├── src/
│ ├── main.rs # Entry point, STDIO/HTTP server setup
│ ├── cli.rs # CLI argument parsing (clap)
│ └── mcp/
│ ├── server.rs # MCP protocol handler (rmcp SDK)
│ ├── shared_utils.rs # Shared utilities
│ ├── hint_accumulator.rs # Tool feedback hints
│ └── fs/ # Filesystem tools
│ ├── core.rs # view, batch_edit, extract_lines, text_editor
│ ├── text_editing.rs # str_replace, undo, batch operations
│ ├── directory.rs # Directory traversal
│ ├── file_ops.rs # File operations
│ ├── search.rs # Content search
│ ├── shell.rs # Command execution
│ ├── workdir.rs # Working directory management
│ └── fs_tests.rs # Unit tests
└── src/utils/
├── glob.rs # Glob pattern matching
├── line_hash.rs # Content-based line hashing
└── truncation.rs # Smart content truncationKey components:
# Build
cargo build --release
# Run tests
cargo test
# Lint (zero warnings policy)
cargo clippy
# Format
cargo fmt
# Run locally
cargo run# All tests
cargo test
# Specific test
cargo test test_view_file
# With output
cargo test -- --nocaptureWe 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
<div align="center">
Built with 🦀 by [Muvon](https://muvon.io)
Star us on GitHub if Octofs helps you ship faster! ⭐
</div>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.