Skip to content

Migration from v3 to v4

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.


Addendum — Tools added after v4.0.0 (current: 20 tools)

Section titled “Addendum — Tools added after v4.0.0 (current: 20 tools)”

Four standalone tools have shipped between v4.0.0 and v4.5.25 (2026-07-04):

ToolVersionNotes
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.xNow 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.0One-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).

Additional intelligent layers (v4.5.15 — v4.5.17)

Section titled “Additional intelligent layers (v4.5.15 — v4.5.17)”

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
minify_js({ path: "app.js", dry_run: true })
minify_js({ path: "app.js" })
// help (no params)
help()
// 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:

PatternHow it worksExample
Auto-routingA mode or action parameter selects the behavioredit_file with mode:"regex" replaces regex_transform_file
Auto-deductionThe tool infers intent from which parameters are presentbackup() with no params lists backups; with backup_id shows details
Intelligent I/OThe tool auto-selects the optimal strategy based on file sizeread_file replaces chunked_read_file and intelligent_read

v3 ToolHow to call in v4Notes
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 ToolHow to call in v4Notes
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 ToolHow to call in v4Notes
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 ToolHow to call in v4Notes
list_directorylist_directory({ path })Same behavior
mcp_listlist_directory({ path })Unified name
v3 ToolHow to call in v4Notes
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 ToolHow to call in v4Notes
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 ToolHow to call in v4Notes
create_directorycreate_directory({ path })Unchanged
v3 ToolHow to call in v4Notes
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 ToolHow to call in v4Notes
move_filemove_file({ source_path, dest_path })Same behavior
rename_filemove_file({ source_path, dest_path })Use move_file for renaming
v3 ToolHow to call in v4Notes
copy_filecopy_file({ source_path, dest_path })Unchanged
v3 ToolHow to call in v4Notes
get_file_infoget_file_info({ path })Unchanged
v3 ToolHow to call in v4Notes
multi_editmulti_edit({ path, edits_json })Unchanged — atomic multi-edit on one file
v3 ToolHow to call in v4Notes
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 ToolHow to call in v4Notes
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_createAutomaticBackups are created automatically before destructive operations

Additional params: limit, filter_operation, filter_path, newer_than_hours, older_than_days, dry_run, preview.

v3 ToolHow to call in v4Notes
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 ToolHow to call in v4Notes
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 examples:
backup() // -> list all
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 examples:
server_info() // -> help
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 routing:
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 routing:
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 SizeStrategy Selected
< 100 KBDirect I/O (fastest)
100 KB — 500 KBStreaming I/O
500 KB — 5 MBChunked processing
> 5 MBSpecial handling with progress

You never need to choose between read_file and chunked_read_file — v4 handles it transparently.


#ToolCategoryv3 tools absorbed
1read_fileCoreread_file, chunked_read_file, intelligent_read, read_file_range, read_base64, streaming_read_file
2write_fileCorewrite_file, create_file, streaming_write_file, intelligent_write, write_base64
3edit_fileCoreedit_file, smart_edit_file, intelligent_edit, recovery_edit, search_and_replace, replace_nth_occurrence, regex_transform_file
4list_directoryCorelist_directory, mcp_list
5search_filesCoresmart_search, advanced_text_search, mcp_search, count_occurrences
6analyze_operationAnalysisanalyze_file, get_optimization_suggestion, analyze_write, analyze_edit, analyze_delete
7create_directoryFilescreate_directory
8delete_fileFilesdelete_file, soft_delete_file
9move_fileFilesmove_file, rename_file
10copy_fileFilescopy_file
11get_file_infoFilesget_file_info
12multi_editEditmulti_edit
13project_replaceEdit (v4.5.0)(replaces N multi_edit calls)
14batch_operationsBatchbatch_operations, execute_pipeline, batch_rename_files, batch_file_operations
15backupRecoverylist_backups, get_backup_info, compare_with_backup, cleanup_backups, restore_backup, backup_create (+ trash actions v4.5.11)
16wslIntegrationwsl_to_windows_copy, windows_to_wsl_copy, sync_claude_workspace, wsl_windows_status (autosync now env-var driven)
17server_infoUtilitiesget_help, performance_stats, get_edit_telemetry, capture_last_artifact, artifact_info
18gitVersion Control (v4.5.2)New — first non-core tool (9 actions since v4.5.25)
19minify_jsJavaScript (v4.5.7)New — pure-Go JS minifier
20helpDiscovery (v4.5.x)Standalone tool — replaces server_info({action:"help"})