@muvon/octofs 0.12.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -16
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
[](https://modelcontextprotocol.io)
|
|
11
11
|
[](https://crates.io/crates/octofs)
|
|
12
12
|
|
|
13
|
-
*Standalone Rust binary that exposes filesystem tools over the Model Context Protocol. Built on `rmcp` 3.
|
|
13
|
+
*Standalone Rust binary that exposes filesystem tools over the Model Context Protocol. Built on `rmcp` 3.x, `tokio`, and `axum`.*
|
|
14
14
|
|
|
15
|
-
[Installation](#installation) · [Quick Start](#quick-start) · [Features](#features) · [Tools Reference](#mcp-tools-reference) · [Architecture](#architecture)
|
|
15
|
+
[Installation](#installation) · [Quick Start](#quick-start) · [Features](#features) · [Tools Reference](#mcp-tools-reference) · [Architecture](#architecture) · [Changelog](CHANGELOG.md)
|
|
16
16
|
|
|
17
|
-
MCP Registry: [`io.github.Muvon/octofs`](https://
|
|
17
|
+
MCP Registry: [`io.github.Muvon/octofs`](https://registry.modelcontextprotocol.io)
|
|
18
18
|
|
|
19
19
|
</div>
|
|
20
20
|
|
|
@@ -53,9 +53,9 @@ Your AI coding assistant (Cursor, Claude, Windsurf, etc.) is smart — but it's
|
|
|
53
53
|
| **Implementation** | Compiled Rust binary, no runtime | Python/Node script |
|
|
54
54
|
| **Content Search** | Built-in search with context lines | String matching only |
|
|
55
55
|
| **Batch Operations** | Atomic multi-edit on single file | One-at-a-time |
|
|
56
|
-
| **Line
|
|
56
|
+
| **Line Addressing** | Composite `N:hh` ids — hash-verified at apply time; stale edits fail with relocation hints | Number-only |
|
|
57
57
|
| **Transport** | STDIO + Streamable HTTP | STDIO only |
|
|
58
|
-
| **Shell Integration** |
|
|
58
|
+
| **Shell Integration** | Automatic foreground-to-background handoff | Limited or none |
|
|
59
59
|
| **Remote Files** | Transparent SSH/SFTP on every file tool | None |
|
|
60
60
|
| **Safety** | Gitignore-aware, stale-write detection, path validation | Full filesystem access |
|
|
61
61
|
|
|
@@ -75,6 +75,25 @@ cargo install octofs
|
|
|
75
75
|
brew install muvon/tap/octofs
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
+
### npm (no Rust toolchain needed)
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npx -y @muvon/octofs --version
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The wrapper downloads the matching pre-built binary on first run. MCP config:
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"mcpServers": {
|
|
89
|
+
"octofs": {
|
|
90
|
+
"command": "npx",
|
|
91
|
+
"args": ["-y", "@muvon/octofs", "mcp"]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
78
97
|
### Pre-built Binaries
|
|
79
98
|
|
|
80
99
|
Download from [GitHub Releases](https://github.com/muvon/octofs/releases) for your platform:
|
|
@@ -88,9 +107,11 @@ Download from [GitHub Releases](https://github.com/muvon/octofs/releases) for yo
|
|
|
88
107
|
| macOS (Intel) | `x86_64-apple-darwin` |
|
|
89
108
|
| macOS (Apple Silicon) | `aarch64-apple-darwin` |
|
|
90
109
|
|
|
110
|
+
Each release also ships `.mcpb` bundles for one-click install in clients that support MCP bundles (e.g. Claude Desktop).
|
|
111
|
+
|
|
91
112
|
### MCP Registry
|
|
92
113
|
|
|
93
|
-
|
|
114
|
+
Published to the [MCP Registry](https://registry.modelcontextprotocol.io) as `io.github.Muvon/octofs`.
|
|
94
115
|
|
|
95
116
|
### From Source
|
|
96
117
|
|
|
@@ -180,7 +201,7 @@ Ask your AI assistant to:
|
|
|
180
201
|
- **Delete** — Remove a file (recoverable via undo)
|
|
181
202
|
- **Undo** — Revert last edit (up to 10 undo levels per file, in-memory)
|
|
182
203
|
- **Batch Edit** — Perform multiple insert/replace operations atomically on a single file
|
|
183
|
-
- **Stale-Write Protection** —
|
|
204
|
+
- **Stale-Write Protection** — Every edit target's `N:hh` id is verified against the file at apply time; a stale id fails with the current content and where it moved, instead of editing the wrong line
|
|
184
205
|
|
|
185
206
|
### 🔍 Code Intelligence
|
|
186
207
|
|
|
@@ -190,7 +211,7 @@ Ask your AI assistant to:
|
|
|
190
211
|
### 🖥️ Shell & System
|
|
191
212
|
|
|
192
213
|
- **Command Execution** — Run shell commands with output capture
|
|
193
|
-
- **Background Processes** —
|
|
214
|
+
- **Background Processes** — Long commands automatically continue in background with completion notifications
|
|
194
215
|
- **Working Directory** — Set/get/reset working directory context for operations
|
|
195
216
|
|
|
196
217
|
---
|
|
@@ -279,7 +300,8 @@ octofs mcp --path ssh://deploy@example.com/var/www/app --ssh-key ~/.ssh/id_ed255
|
|
|
279
300
|
view path="ssh://deploy@example.com/etc/nginx/nginx.conf"
|
|
280
301
|
```
|
|
281
302
|
|
|
282
|
-
- **
|
|
303
|
+
- **OpenSSH config** — host aliases are resolved through the local OpenSSH config (including `Include` and `Match`) and honor `HostName`, `User`, `Port`, and a single `ProxyJump`. Explicit URL values win, so both `ssh://dev/path` and `ssh://user@example.com:2222/path` work as expected. Multi-hop `ProxyJump` and `ProxyCommand` routing are rejected with a clear error.
|
|
304
|
+
- **Authentication** — uses the host's `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`). Passphrase-protected key files are not supported directly; use an agent instead.
|
|
283
305
|
- **RSA keys are not supported** — the Rust `rsa` crate has an unfixed timing side-channel (Marvin attack, [RUSTSEC-2023-0071](https://rustsec.org/advisories/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.
|
|
284
306
|
- **Host keys** — verified against `~/.ssh/known_hosts` with the OpenSSH `accept-new` policy: unknown hosts are recorded on first use, a changed key fails closed.
|
|
285
307
|
- **`--ssh-timeout SECS`** — connection timeout (default 30). Connections are pooled per host, kept alive with transport keepalives, and reconnected automatically if they drop.
|
|
@@ -450,17 +472,21 @@ the file). `append_line` positions the copy in the target: `0` = beginning,
|
|
|
450
472
|
|
|
451
473
|
### `shell` — Execute commands
|
|
452
474
|
|
|
453
|
-
|
|
475
|
+
Commands start in the foreground and return their output normally when they
|
|
476
|
+
finish within about 10 seconds:
|
|
477
|
+
|
|
454
478
|
```json
|
|
455
479
|
{"command": "cargo test"}
|
|
456
480
|
{"command": "cd foo && cargo build"}
|
|
457
481
|
```
|
|
458
482
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
483
|
+
If a command is still running at that boundary, the same process continues in
|
|
484
|
+
the background. The response returns its PID and linked output resource, and a
|
|
485
|
+
completion notification arrives when it exits. There is no `background` flag
|
|
486
|
+
and the command is never killed or restarted during the handoff. Multiple
|
|
487
|
+
distinct commands may run concurrently, including from the same working
|
|
488
|
+
directory. An exact duplicate command in the same working directory is rejected
|
|
489
|
+
while the first copy is still running.
|
|
464
490
|
|
|
465
491
|
> On Windows, shutdown cleanup terminates only direct child processes (no Unix
|
|
466
492
|
> process-group semantics); use `taskkill /PID <pid> /T` for process trees.
|
|
@@ -516,7 +542,7 @@ octofs/
|
|
|
516
542
|
|
|
517
543
|
**Key design decisions:**
|
|
518
544
|
|
|
519
|
-
- **rmcp SDK** — Official Rust MCP SDK (`rmcp` 3.
|
|
545
|
+
- **rmcp SDK** — Official Rust MCP SDK (`rmcp` 3.x) for protocol handling
|
|
520
546
|
- **Tokio** — Async runtime; all file I/O uses `tokio::fs`, never blocking `std::fs`
|
|
521
547
|
- **File locking** — Per-file `tokio::sync::Mutex` prevents concurrent write conflicts
|
|
522
548
|
- **Undo history** — Up to 10 snapshots per file, in-memory (lost on restart)
|