MCP Filesystem Ultra v4.0.0 consolidates 59 tools down to 17 core tools without losing any functionality. Every feature from v3 is preserved — the tools are just smarter and unified.
Why 17 core? Claude Desktop triggers lazy tool loading when an MCP server exposes more than roughly 30 tools. When lazy loading is active, Claude must issue a tool_search call before it can invoke any tool, adding latency and token overhead to every interaction. By consolidating to 17 core tools — well under the threshold — lazy loading is avoided entirely and every tool is immediately available. Three additional tools (git, minify_js, help) were added later, bringing the current total to 20 .
Four standalone tools have shipped between v4.0.0 and v4.5.25 (2026-07-04):
Tool Version Notes gitv4.5.2 (2026-05-27)Built-in git version control — 9 actions since v4.5.25 (status, diff, log, show, add, commit, restore, branch, init). Hardened across v4.5.20–v4.5.25 and v4.5.29. See Git Tools . minify_jsv4.5.7 (2026-06-07)Pure-Go JavaScript minifier (no Node.js). Supports dry_run, output_path, remove_comments, collapse_whitespace, single_line. Creates a backup before destructive mode. helpv4.5.x Now a standalone discovery tool — no params. Replaces server_info({action:"help"}) for the simple “list all 20 tools” use case. For topic-specific help, still use server_info({action:"help", topic:"..."}). See Core Tools . project_replacev4.5.0 One-call project-wide find/replace; replaces N multi_edit calls. Counts toward the 17 core.
The total today is therefore 20 tools (17 core + git + minify_js + help).
Two “intelligent” behaviours ship on top of the auto-strategy:
--auto-occ (v4.5.17) — automatic optimistic-concurrency control. The session remembers the content_hash of each file it last read OR wrote. On a subsequent edit without an explicit expected_hash, it compares the on-disk hash to the session baseline: warn mode (default) appends a notice, block mode rejects the edit. The session’s own writes refresh the baseline, so only genuinely external changes are flagged.
Go AST post-edit validation (v4.5.15) — for .go files, the post-edit structural check does a real go/parser parse, catching syntax errors a lexical brace-count misses. Only warns when the file parsed before the edit and not after.
See Configuration for --auto-occ (off / warn / block).
The v4.4.0 Claude-Code-name aliases (View, Edit, Write, Replace, LS, GlobTool, GrepTool) and the 6 common aliases (read_text_file, search, edit, write, create_file, directory_tree) are defined in tools_aliases.go but NOT registered in registerTools() (tools_core.go:103-105). Direct callers should use the canonical names: read_file, write_file, edit_file, etc.
// git (schema since v4.5.25 — paths is a native array, rev replaces commit_range/source)
git ({ action: " status " })
git ({ action: " add " , paths: [ " src/main.go " ] })
git ({ action: " commit " , message: " feat: add api " })
git ({ action: " log " , limit: 5 })
git ({ action: " show " , rev: " HEAD " , output: " stat " })
minify_js ({ path: " app.js " , dry_run: true })
minify_js ({ path: " app.js " })
// project_replace (already documented above)
project_replace ({ path: " . " , find: " oldFunc " , replace: " newFunc " , file_types: " .go " })
How? Each v4 tool absorbs multiple v3 tools through three patterns:
Pattern How it works Example Auto-routing A mode or action parameter selects the behavior edit_file with mode:"regex" replaces regex_transform_fileAuto-deduction The tool infers intent from which parameters are present backup() with no params lists backups; with backup_id shows detailsIntelligent I/O The tool auto-selects the optimal strategy based on file size read_file replaces chunked_read_file and intelligent_read
v3 Tool How to call in v4 Notes read_fileread_file({ path })Same behavior chunked_read_fileread_file({ path })Chunking is now automatic for large files intelligent_readread_file({ path })Intelligence is built-in (auto-selects I/O strategy) read_file_rangeread_file({ path, start_line: 10, end_line: 50 })Use start_line/end_line params read_base64read_file({ path, encoding: "base64" })Use encoding:"base64" for binary files streaming_read_fileread_file({ path })Streaming is automatic when needed
Additional params: max_lines, mode (“all”, “head”, “tail”).
v3 Tool How to call in v4 Notes write_filewrite_file({ path, content })Same behavior create_filewrite_file({ path, content })Creates file if it does not exist streaming_write_filewrite_file({ path, content })Streaming is automatic for large content intelligent_writewrite_file({ path, content })Intelligence is built-in write_base64write_file({ path, content_base64: "..." })Use content_base64 param or encoding:"base64" write_last_artifactserver_info({ action: "artifact", sub_action: "write", path })Moved to server_info
v3 Tool How to call in v4 Notes edit_fileedit_file({ path, old_text, new_text })Same behavior (default mode) smart_edit_fileedit_file({ path, old_text, new_text })Smart editing is built-in intelligent_editedit_file({ path, old_text, new_text })Intelligence is built-in recovery_editedit_file({ path, old_text, new_text })Recovery logic is built-in search_and_replaceedit_file({ path, mode: "search_replace", pattern, replacement })Use mode:"search_replace" replace_nth_occurrenceedit_file({ path, old_text, new_text, occurrence: N })Use occurrence param (1=first, -1=last) regex_transform_fileedit_file({ path, mode: "regex", patterns_json: "[...]" })Use mode:"regex" with patterns_json count_occurrences (edit)search_files({ path, pattern, count_only: true })Moved to search_files
Additional params: force, whole_word, case_sensitive, create_backup, dry_run.
Accepts both old_text/new_text and old_str/new_str for compatibility.
v3 Tool How to call in v4 Notes list_directorylist_directory({ path })Same behavior mcp_listlist_directory({ path })Unified name
v3 Tool How to call in v4 Notes smart_searchsearch_files({ path, pattern })Default mode (fast search) advanced_text_searchsearch_files({ path, pattern, case_sensitive: true })Activated by case_sensitive, whole_word, or include_context mcp_searchsearch_files({ path, pattern })Unified name count_occurrencessearch_files({ path, pattern, count_only: true })Use count_only:true; add return_lines:true for line numbers
Additional params: file_types, context_lines, include_content.
v3 Tool How to call in v4 Notes analyze_fileanalyze_operation({ operation: "file", path })Analyze file strategy get_optimization_suggestionanalyze_operation({ operation: "optimize", path })Get optimization advice analyze_writeanalyze_operation({ operation: "write", path, content })Preview write impact analyze_editanalyze_operation({ operation: "edit", path, old_text, new_text })Preview edit impact analyze_deleteanalyze_operation({ operation: "delete", path })Preview delete impact
v3 Tool How to call in v4 Notes create_directorycreate_directory({ path })Unchanged
v3 Tool How to call in v4 Notes delete_filedelete_file({ path })Now defaults to soft-delete soft_delete_filedelete_file({ path })permanent: false is default
Use permanent: true for hard delete.
v3 Tool How to call in v4 Notes move_filemove_file({ source_path, dest_path })Same behavior rename_filemove_file({ source_path, dest_path })Use move_file for renaming
v3 Tool How to call in v4 Notes copy_filecopy_file({ source_path, dest_path })Unchanged
v3 Tool How to call in v4 Notes get_file_infoget_file_info({ path })Unchanged
v3 Tool How to call in v4 Notes multi_editmulti_edit({ path, edits_json })Unchanged — atomic multi-edit on one file
v3 Tool How to call in v4 Notes batch_operationsbatch_operations({ request_json: "{...}" })Same behavior (atomic batch ops) execute_pipelinebatch_operations({ pipeline_json: "{...}" })Use pipeline_json param batch_rename_filesbatch_operations({ rename_json: "{...}" })Use rename_json param batch_file_operationsbatch_operations({ request_json: "{...}" })Unified batch
Provide exactly one of: request_json, pipeline_json, or rename_json.
v3 Tool How to call in v4 Notes list_backupsbackup() or backup({ action: "list" })Default action get_backup_infobackup({ action: "info", backup_id: "..." })Show details for one backup compare_with_backupbackup({ action: "compare", backup_id: "...", file_path: "..." })Diff current vs. backup cleanup_backupsbackup({ action: "cleanup" })Dry-run by default restore_backupbackup({ action: "restore", backup_id: "..." })Restore is now part of backup backup_createAutomatic Backups are created automatically before destructive operations
Additional params: limit, filter_operation, filter_path, newer_than_hours, older_than_days, dry_run, preview.
v3 Tool How to call in v4 Notes wsl_to_windows_copywsl({ wsl_path: "/home/..." })Direction auto-detected from path windows_to_wsl_copywsl({ windows_path: "C:\\..." })Direction auto-detected from path sync_claude_workspacewsl({ direction: "wsl_to_windows" })Use direction param for workspace sync wsl_windows_statuswsl({ action: "status" })Combined integration status configure_autosyncwsl({ action: "autosync_config", enabled: true })Configuration mode get_autosync_config / autosync_statuswsl({ action: "autosync_status" })Status check
v3 Tool How to call in v4 Notes get_helpserver_info() or server_info({ action: "help" })Default action; use topic for specific help performance_statsserver_info({ action: "stats" })Includes edit telemetry get_edit_telemetryserver_info({ action: "stats" })Merged into stats capture_last_artifactserver_info({ action: "artifact", sub_action: "capture", content: "..." })Capture artifact artifact_infoserver_info({ action: "artifact", sub_action: "info" })Show stored artifact
Many unified tools auto-detect the intended action from which parameters you provide:
backup ({ action: " info " , backup_id: " ... " }) // -> show details
backup ({ action: " compare " , backup_id , file_path }) // -> compare
backup ({ action: " cleanup " }) // -> cleanup (dry-run)
backup ({ action: " restore " , backup_id: " ... " }) // -> restore
server_info ({ action: " stats " }) // -> performance stats
server_info ({ action: " artifact " , sub_action: " capture " , content: " code " })
server_info ({ action: " artifact " , sub_action: " write " , path: " file.go " })
Tools with a mode or action parameter route to different engine functions:
edit_file ({ path , old_text , new_text }) // -> default replace
edit_file ({ path , old_text , new_text , occurrence: 1 }) // -> replace Nth
edit_file ({ path , mode: " search_replace " , pattern , replacement }) // -> recursive search & replace
edit_file ({ path , mode: " regex " , patterns_json: " [...] " }) // -> regex transform
search_files ({ path , pattern }) // -> fast search (SmartSearch)
search_files ({ path , pattern , case_sensitive: true }) // -> advanced text search
search_files ({ path , pattern , count_only: true }) // -> count occurrences
read_file and write_file auto-select the optimal I/O strategy based on file size:
File Size Strategy Selected < 100 KB Direct I/O (fastest) 100 KB — 500 KB Streaming I/O 500 KB — 5 MB Chunked processing > 5 MB Special handling with progress
You never need to choose between read_file and chunked_read_file — v4 handles it transparently.
# Tool Category v3 tools absorbed 1 read_fileCore read_file, chunked_read_file, intelligent_read, read_file_range, read_base64, streaming_read_file2 write_fileCore write_file, create_file, streaming_write_file, intelligent_write, write_base643 edit_fileCore edit_file, smart_edit_file, intelligent_edit, recovery_edit, search_and_replace, replace_nth_occurrence, regex_transform_file4 list_directoryCore list_directory, mcp_list5 search_filesCore smart_search, advanced_text_search, mcp_search, count_occurrences6 analyze_operationAnalysis analyze_file, get_optimization_suggestion, analyze_write, analyze_edit, analyze_delete7 create_directoryFiles create_directory8 delete_fileFiles delete_file, soft_delete_file9 move_fileFiles move_file, rename_file10 copy_fileFiles copy_file11 get_file_infoFiles get_file_info12 multi_editEdit multi_edit13 project_replaceEdit (v4.5.0) (replaces N multi_edit calls) 14 batch_operationsBatch batch_operations, execute_pipeline, batch_rename_files, batch_file_operations15 backupRecovery list_backups, get_backup_info, compare_with_backup, cleanup_backups, restore_backup, backup_create (+ trash actions v4.5.11)16 wslIntegration wsl_to_windows_copy, windows_to_wsl_copy, sync_claude_workspace, wsl_windows_status (autosync now env-var driven)17 server_infoUtilities get_help, performance_stats, get_edit_telemetry, capture_last_artifact, artifact_info18 gitVersion Control (v4.5.2) New — first non-core tool (9 actions since v4.5.25) 19 minify_jsJavaScript (v4.5.7) New — pure-Go JS minifier 20 helpDiscovery (v4.5.x) Standalone tool — replaces server_info({action:"help"})