mcp-fstools
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-fstoolsread ./src/app.js lines 1-50"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-fstools
Minimal MCP server that exposes opencode-style file tools
(read / edit / write) over stdio. Designed for models that handle a
small, structured schema better than a free-form patch grammar.
Why this exists
Alternatives tried:
codex-rsapply_patchshell command — the model has to compose a custom multi-line patch grammar (*** Begin Patch/*** Update File:/-old/+new/*** End Patch) inside a shell argument. Smaller models stumble on this format.mcp-workspace(Python, stdio) — exposes the same opencode shape but enforces two extra boundaries the host already covers: a--project-dirfilter and a.gitignorefilter that blocks reading common ignored files (target/,.env, etc.).
This server keeps the opencode tool shape and drops the extra boundaries, so models get a familiar three-field schema and can reach every file the OS sandbox allows.
Tools
Name | Args | Notes |
|
| Line-numbered output; records file hash for must-read-first. |
|
| Exact match; must be unique; must-read-first enforced. |
|
| Atomic full-file write; creates parent dirs. |
edit mirrors opencode's contract:
You must call
readon the same file first in the session.oldStringmust appear exactly once in the current file content.The file must not have changed since the last
reador since the last successfuledit/writeon that file (hash mismatch → fail).
The hash check runs before the oldString check, so a stale edit
against a changed file reports "file changed" rather than the
misleading "oldString not found".
JSON-RPC arg names
Tool calls accept either casing — pick whichever feels natural. The
schema tools/list reports uses camelCase (MCP convention), but the
server also accepts snake_case at call time, so all of these are
equivalent for edit:
filePath/file_patholdString/old_stringnewString/new_string
If a Pydantic error names a field as missing, check both spellings before assuming truncation — that's the diagnostic FastMCP surfaces when an unknown key is dropped.
Sandbox
None at the application layer. The host (e.g. Codex) provides the
OS-level sandbox (Seatbelt/landlock) which already wraps the spawned
subprocess. This server intentionally does not enforce a
--project-dir boundary or a .gitignore filter.
Install
# First install
uv tool install .
# After source changes — use --reinstall (not --force)
uv tool install --reinstall .Both commands write outside the default Codex sandbox scope
(~/.local/share/uv/tools/, ~/.cache/uv/), so run with
sandbox_permissions: "require_escalated". See AGENTS.md for the
why behind --reinstall.
Entry point: mcp-fstools (stdio MCP server).
Wire into Codex
In ~/.codex/config.toml:
[mcp_servers.mcp_fstools]
command = "mcp-fstools"
default_tools_approval_mode = "approve"Restart Codex after the install. To verify, run a read and an edit
in a fresh session — both should succeed without a permission prompt.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/devrandom/mcp-fstools'
If you have feedback or need assistance with the MCP directory API, please join our Discord server