file_utils MCP
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., "@file_utils MCPprepend '#!/usr/bin/env python3' to script.py"
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.
file_utils MCP
An anchor-based file reading and editing MCP server for large text files where
the built-in read_file tool fails ("readline was closed") or where encoding
issues (e.g. mojibake em-dashes) cause string-matching tools to miss their
targets.
The headline insight: content-addressed anchors survive line shifts; line numbers don't. When a file is edited mid-session (by you in the IDE, by a formatter, by another tool), line numbers go stale silently. Anchors travel with the content.
The full design lives in SPEC.md; the implementation plan lives in
TODO.md.
Tools
Five stdio MCP tools are exposed (see SPEC.md for full parameter
tables, responses, and error codes):
Tool | Purpose |
| Read a contiguous span, addressed by anchors (primary) or line numbers (fallback). Returns a |
| Replace a contiguous span with new content, with an optional |
| Insert content before/after a single target line without replacing it. |
| Concatenate content at the start of a file (optional |
| Concatenate content at the end of a file (optional |
Anchor matching is substring-based and case-sensitive with a
progressive-disclosure ambiguity guard (occurrence / total). Line numbers are
1-based and support negative indexing (-1 = last line). Edits are written via
an atomic temp-file → fsync → rename. The span content_hash is a SHA-256 of
the raw on-disk bytes, so it is encoding-independent.
Related MCP server: Deskaid
Requirements
Python 3.10+
uvfor environment and dependency managementThe
mcpPython SDK (declared inpyproject.toml; installed automatically byuv)
This project is managed with uv. pyproject.toml is the
single source of truth for dependencies — there is no requirements.txt. Do not
call python, pip, or pytest directly; go through uv so the correct
environment is used.
Installing uv
If uv is not already installed, use the official Astral installer (PowerShell):
powershell -ExecutionPolicy ByPass -Command "irm https://astral.sh/uv/install.ps1 | iex"uv installs to C:\Users\<you>\.local\bin and is added to PATH by the
installer. A newly opened terminal will have uv / uvx on PATH; an
already-open terminal may need to be reopened.
Setup & usage
Sync the environment
uv sync --extra devRun the server
The server speaks the MCP JSON-RPC protocol over stdio. Run it directly:
uv run server.pyRun from a Git repo with uvx
The project is installable as a tool, so uvx can clone the repo into its
cache, build the wheel, install it plus dependencies into an isolated
environment, and run the file-utils entry point — exactly like npx.
From a published GitHub repo:
uvx --from git+https://github.com/JEL-LL/file_utils.git file-utilsOnly committed content is used (it clones from the repo), so commit and
push before a new version becomes available. Use --refresh to pick up new
commits.
Install into a local venv
uv pip install "git+https://github.com/JEL-LL/file_utils.git"Run the tests
uv run --extra dev pytestRun quietly with uv run --extra dev pytest -q.
VS Code / Kilo Code configuration
Recommended: launch globally via uvx straight from the Git repo so any project
gets the tool without a local checkout. Add this to your global
mcp_settings.json:
{
"mcpServers": {
"file_utils": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/JEL-LL/file_utils.git",
"file-utils"
],
"alwaysAllow": []
}
}
}Alternatively, to run from a local working copy through uv (so dependencies
resolve from pyproject.toml):
{
"mcpServers": {
"file_utils": {
"command": "uv",
"args": ["run", "--directory", "/path/to/file_utils", "server.py"],
"env": {}
}
}
}Each spawned process is unique to one agent/session. In-memory state (such as a
remembered project_root) is per-process and safe across calls within a session.
Path resolution
Every tool accepts an optional project_root parameter. Once supplied, it is
remembered in memory for the rest of the session.
Path type |
| Result |
Absolute | Any | Used as-is; |
Relative | Set | Resolved against the remembered |
Relative | Not set |
|
Anchor selection tips
Good anchors are Markdown section headers (## Phase 10), unique prose phrases,
and pure ASCII. Avoid lines containing em-dashes or curly quotes when the file
has encoding issues, very short strings that appear many times, and line numbers
(use from_line / to_line only as a fallback). See
SPEC.md for the full
discipline.
License
Licensed under the MIT License. Copyright (c) 2026 LaserLinc Inc.
Authored by Joshua Lansford. Released as open source with the permission of LaserLinc Inc.
Available Tools
6 toolsappend_to_fileA
Append content to the end of a file (byte concatenation). Optional ensure_newline_before. Writes atomically.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or workspace-relative path to the file. | |
| content | Yes | Text to append, written byte-for-byte. The caller is responsible for all line endings and spacing. | |
| encoding | No | File encoding. Default: utf-8. Pass utf-8-sig to strip a BOM. | utf-8 |
| project_root | No | Sets (and remembers) the project root for resolving relative paths for this and subsequent calls in the session. | |
| ensure_newline_before | No | If true, insert a single dominant-style line terminator between the original last line and content, but only if the file lacks a trailing one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses 'byte concatenation' and 'Writes atomically,' which are meaningful behavioral traits. However, it does not mention whether the file must already exist, is created if missing, or what errors/return values to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with the core purpose front-loaded in the first phrase and only essential additional details (atomic writes, optional newline). No filler or redundant explanations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema and simple append operation, the description covers the core behavior adequately. However, without annotations or an output schema, it leaves gaps around file creation behavior, permission requirements, and return/error semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal value beyond the schema, merely highlighting 'ensure_newline_before' and atomic writes, while the schema already documents byte-for-byte writing and caller responsibility for line endings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: appending content to the end of a file, emphasizing 'byte concatenation' to indicate raw, unmodified appending. This distinguishes it from sibling tools like prepend_to_file and insert_at, which target different positions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the operation name and description—append when you want to add to the end of a file—but there is no explicit guidance about when to use this over prepend_to_file or insert_at, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_file_rangeA
Replace a contiguous span of a file with new content, addressed by anchors (primary) or line numbers (fallback). Optional expected_content_hash guards against stale edits; writes atomically. IMPORTANT: the from_anchor line and the to_anchor line are BOTH included in the replaced span — they are consumed, not preserved. If you want to keep the boundary lines, you must include them verbatim in new_content. Common mistake: anchoring on the last line of content you want to keep and then omitting it from new_content — that line will be silently dropped.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or workspace-relative path to the file. | |
| to_line | No | 1-based end line, inclusive. Supports negative indexing. Mutually exclusive with to_anchor. | |
| encoding | No | File encoding. Default: utf-8. Pass utf-8-sig to strip a BOM. | utf-8 |
| from_line | No | 1-based start line. Supports negative indexing (-1 = last line). Mutually exclusive with from_anchor. | |
| to_anchor | No | Stop at the matching line after the start (inclusive). Mutually exclusive with to_line. | |
| from_anchor | No | Start at the matching line (inclusive, substring, case-sensitive). Mutually exclusive with from_line. | |
| new_content | Yes | Replacement text, written byte-for-byte after encoding. The caller is responsible for correct line endings and trailing newline. | |
| project_root | No | Sets (and remembers) the project root for resolving relative paths for this and subsequent calls in the session. | |
| to_anchor_total | No | Expected total occurrences of to_anchor after the start. Optional: if omitted, the ambiguity guard is skipped and the to_anchor_occurrence-th match after the start is selected. Supply a value to re-enable the guard (ANCHOR_AMBIGUOUS on mismatch). | |
| from_anchor_total | No | Expected total occurrences of from_anchor in the file. | |
| to_anchor_occurrence | No | Which occurrence of to_anchor (after the start) to use. | |
| expected_content_hash | No | SHA-256 hex digest of the span's current raw bytes (as returned by read_file_range). If provided and the current span does not match, the edit is rejected with HASH_MISMATCH. | |
| from_anchor_occurrence | No | Which occurrence of from_anchor to use (1-based). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on full behavioral disclosure. It discloses atomic writes, the inclusive consumption of both anchor lines, and a common mistake, which is substantial context beyond basic function. It does not cover error conditions or permissions, but the critical behavioral traps are addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the primary purpose, followed by a high-value warning and a concrete mistake example. Every sentence provides meaningful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex edit tool with a complete parameter schema, the description covers the central behavioral risk and provides enough context to select and invoke it correctly. It lacks mention of error types or file prerequisites, but the given information is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters, so the baseline is 3. The description adds value by explaining expected_content_hash's role as a stale-edit guard and by emphasizing that from_anchor/to_anchor lines are included in the replacement, deepening understanding beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Replace a contiguous span of a file with new content' with a specific verb and resource, and clearly distinguishes itself from sibling insert/prepend/append tools. The mention of anchors and line numbers further defines the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context that this tool replaces a span is clear, implying use over insert/append, but it does not explicitly name alternatives or state when not to use it. The guidance on anchors versus line numbers ('primary' and 'fallback') provides useful selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_atA
Insert content before or after a single target line (anchor or line number) without replacing existing content. Writes atomically.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or workspace-relative path to the file. | |
| anchor | No | Target line (substring, case-sensitive). Mutually exclusive with line_number. | |
| encoding | No | File encoding. Default: utf-8. Pass utf-8-sig to strip a BOM. | utf-8 |
| position | No | Where to splice relative to the target line. | after |
| line_number | No | Target line (positive = 1-based, negative = from end). Mutually exclusive with anchor. | |
| new_content | Yes | Text to insert, written byte-for-byte. The caller is responsible for any line endings needed to keep the insertion on its own line. | |
| anchor_total | No | Expected total occurrences of anchor in the file. | |
| project_root | No | Sets (and remembers) the project root for resolving relative paths for this and subsequent calls in the session. | |
| anchor_occurrence | No | Which occurrence of anchor to use (1-based). | |
| expected_content_hash | No | SHA-256 hex digest of the target line's raw bytes (including its terminator). Rejected with HASH_MISMATCH if it doesn't match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses atomic writing and the non-replacing nature, but doesn't mention error handling (e.g., anchor not found, hash mismatch), permissions, or whether the file is created if missing. This leaves significant behavioral gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core purpose and a key behavioral detail (atomicity). No redundant or irrelevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters and no annotations or output schema, the description is too sparse to provide sufficient context. It doesn't explain when to use anchor vs line_number, tie the parameters together, or describe failure modes, leaving the agent to infer from schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides complete descriptions for all 10 parameters (100% coverage), so the baseline is 3. The tool description doesn't add any extra parameter semantics beyond the schema, so it remains at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: inserting content before or after a specific target line without replacing existing content. It distinguishes itself from replacing or prepending/appending tools by emphasizing the targeted insertion and atomic write.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for inserting at a specific line in the middle of a file, distinguishing it from prepend/append. However, it doesn't explicitly mention alternative tools or provide exclusions beyond 'without replacing existing content.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepend_to_fileB
Insert content at the very beginning of a file (byte concatenation). Optional ensure_newline_after. Writes atomically.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or workspace-relative path to the file. | |
| content | Yes | Text to prepend, written byte-for-byte. The caller is responsible for all line endings and spacing. | |
| encoding | No | File encoding. Default: utf-8. Pass utf-8-sig to strip a BOM. | utf-8 |
| project_root | No | Sets (and remembers) the project root for resolving relative paths for this and subsequent calls in the session. | |
| ensure_newline_after | No | If true, insert a single dominant-style line terminator between content and the original first line, but only if the boundary lacks one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses two valuable behavioral traits: content is inserted as byte concatenation (no automatic newline handling) and the write is atomic. However, with no annotations, it omits other important details like file-existence behavior, permissions, and error/return semantics, leaving gaps for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using one statement and two fragments to convey core action, byte-level behavior, and atomicity. Every element serves a purpose and is front-loaded, with no redundant or fluffy language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the schema fully covers parameters, the description lacks usage differentiation from sibling tools, error handling for missing files, and return-value details (no output schema exists). The atomicity and byte-level semantics help, but an agent still has open questions for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already thoroughly documents all parameters (100% coverage), including the byte-for-byte semantics of content and the ensure_newline_after behavior. The description's mention of 'Optional ensure_newline_after' merely repeats schema information and adds no extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Insert content'), the resource ('a file'), and the specific scope ('at the very beginning'), which distinguishes it from append at a glance. However, it does not explicitly contrast with sibling tools like append_to_file or insert_at, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as append_to_file or insert_at, nor any prerequisites (e.g., whether the file must exist) or exclusions. The only hint is the location 'very beginning,' but no direct usage context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_file_rangeA
Read a contiguous span of a file, addressed by anchors (primary) or line numbers (fallback). Streams large files and returns a content_hash for staleness-guarded edits.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or workspace-relative path to the file. | |
| to_line | No | 1-based end line, inclusive. Supports negative indexing. Mutually exclusive with to_anchor. | |
| encoding | No | File encoding. Default: utf-8. Pass utf-8-sig to strip a BOM. | utf-8 |
| from_line | No | 1-based start line. Supports negative indexing (-1 = last line). Mutually exclusive with from_anchor. | |
| to_anchor | No | Stop at the matching line after the start (inclusive). Mutually exclusive with to_line. | |
| from_anchor | No | Start at the matching line (inclusive, substring, case-sensitive). Mutually exclusive with from_line. | |
| project_root | No | Sets (and remembers) the project root for resolving relative paths for this and subsequent calls in the session. | |
| to_anchor_total | No | Expected total occurrences of to_anchor after the start. Optional: if omitted, the ambiguity guard is skipped and the to_anchor_occurrence-th match after the start is selected. Supply a value to re-enable the guard (ANCHOR_AMBIGUOUS on mismatch). | |
| max_output_chars | No | Maximum number of characters of content to return. If the resolved span exceeds this budget, OUTPUT_TOO_LARGE is returned (reporting the actual size) instead of a truncated body. | |
| from_anchor_total | No | Expected total occurrences of from_anchor in the file. | |
| to_anchor_occurrence | No | Which occurrence of to_anchor (after the start) to use. | |
| from_anchor_occurrence | No | Which occurrence of from_anchor to use (1-based). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It adds two non-obvious behavioral traits: streaming for large files and the return of a content_hash for staleness-guarded edits. It does not mention error behaviors like OUTPUT_TOO_LARGE, but those are already documented in the input schema, so the description adds valuable context without repeating schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the core function stated first and supporting behaviors second. Every phrase adds value: the addressing modes, streaming, and hash for edits. There is no redundancy or filler, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with 12 parameters and no output schema, yet the description combines with the rich schema descriptions to provide adequate context. It highlights key aspects (anchors vs lines, streaming, hash) that are not fully captured in the schema. It does not describe the exact return structure, but for a read operation that is implied. Slightly incomplete, but strong overall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% parameter coverage, so the baseline is 3. The description adds meaningful semantics by defining the precedence of anchors over line numbers, which helps disambiguate mutually exclusive parameter groups. It also clarifies that the tool reads a contiguous span, giving context to from/to parameters. This justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read a contiguous span of a file,' a specific verb+resource combination that clearly states the tool's function. It also distinguishes between anchor-based and line-based addressing, and the read-only nature is obvious from the verb 'Read' contrasted with sibling mutation tools like edit_file_range and insert_at.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: reading a span in preparation for edits, as indicated by 'returns a content_hash for staleness-guarded edits' and 'Streams large files.' It also instructs that anchors are the primary addressing method with line numbers as fallback. It does not explicitly name alternatives or exclusions, but the use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strip_conflict_markersA
Remove all Git merge conflict markers (<<<<<<< , =======, >>>>>>>) from a file in a single operation, keeping both sides of every conflict. Reports which lines the markers were on and how many conflicts were resolved. Writes atomically.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or workspace-relative path to the file. | |
| encoding | No | File encoding. Default: utf-8. Pass utf-8-sig to strip a BOM. | utf-8 |
| project_root | No | Sets (and remembers) the project root for resolving relative paths for this and subsequent calls in the session. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behaviors: removes all markers, keeps both sides of every conflict, reports line numbers and conflict count, and writes atomically. This is substantial, though it could mention edge cases like what happens when no markers are present or malformed markers exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no fluff. It front-loads the core action, then provides behavioral details (keep both sides, report, atomic write). Every sentence adds value and is well-structured for scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 params, no output schema, no nested objects), the description is mostly complete: it explains the operation, side effects, and report output. It's missing when-to-use guidance and potential error conditions (e.g., no markers found), but overall it's sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — all three parameters (path, encoding, project_root) are described in the schema. The description adds no extra parameter semantics beyond referring to 'a file,' so a baseline score of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb+resource: 'Remove all Git merge conflict markers' from a file, which clearly states the tool's function. It distinguishes itself from sibling editing tools (edit_file_range, insert_at, etc.) by targeting a specific cleanup task rather than general file editing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description doesn't explicitly name alternatives, the context is clear: use this tool when a file contains Git merge conflict markers and you want to remove them in one operation. It implies when to use over general editing tools, but lacks explicit exclusions like 'do not use if you need to manually resolve conflicts.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct action and target: stripping conflict markers, reading a range, editing a range, inserting at a line, prepending, and appending. No two tools overlap in purpose; even the similar insert/prepend/append are clearly differentiated by operation type and location.
All tool names are snake_case and begin with a verb, but the pattern is inconsistent: some use verb_noun (read_file_range, edit_file_range, strip_conflict_markers) while others use verb_preposition (insert_at, prepend_to_file, append_to_file). This is a minor deviation that could be improved by renaming insert_at to insert_at_line for consistency.
Six tools is a well-scoped set for a file utilities server, covering read, edit, insert, prepend, append, and conflict marker cleanup. It is neither too sparse nor overwhelming, and each tool serves a distinct purpose.
The set covers the core file modification lifecycle: read a range, replace a range, insert line(s), prepend, append, and clean conflict markers. The main gap is the lack of an explicit delete operation, though edit_file_range with empty content can serve that purpose. Minor but workable.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for developer documentation, generated by doc2mcp.
An MCP server that provides congressional transcripts
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA TypeScript-based MCP server that provides tools for making precise line-based edits to text files within allowed directories.34MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides tools for reading, writing, and editing files on the local filesystem.1,608Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that provides line-oriented text file editing capabilities through a standardized API. Optimized for LLM tools with efficient partial file access to minimize token usage.MIT
- AlicenseAqualityBmaintenanceAn MCP server that provides surgical read/write access to individual sections of Markdown files, allowing agents to fetch, edit, or delete specific slices without touching the entire file.71MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/JEL-LL/file_utils'
If you have feedback or need assistance with the MCP directory API, please join our Discord server