Claude Debugs and Fixes Its Own MCP Filesystem Server UNC Path Bug on Windows

A developer documented using Claude Opus to debug and fix a bug in the MCP Filesystem Server (Desktop Extension version) on Windows. The issue affected UNC network share paths (e.g., \\server\share\).
The Problem
When using a UNC share as an allowed directory, list_directory on the share root worked, but any operation on subdirectories or files failed with an "Access denied - path outside allowed directories" error. Writing files to the root also failed, despite the share being fully accessible from Windows Explorer and mapped drives.
The Debugging Process
Claude helped identify that:
- The configuration for the Desktop Extension version is stored in
%APPDATA%\Claude\Claude Extensions Settings\ant.dir.ant.anthropic.filesystem.json, notclaude_desktop_config.json. - Switching to a mapped drive letter didn't work because Node.js
fs.realpath()resolves mapped drives back to UNC paths during server startup. - The server source files (
index.js→lib.js→path-validation.js) were examined to find the root cause.
Root Cause
In path-validation.js, the function isPathWithinAllowedDirectories() checks subdirectory membership with:
return normalizedPath.startsWith(normalizedDir + path.sep);UNC share roots are filesystem roots (like C:\) and retain their trailing backslash after normalization: \\server\share\. This creates a double trailing backslash (\\server\share\\) that never matches real paths. The code had special handling for drive roots like C:\ but not for UNC roots.
The Fix
Replace the problematic line with:
const dirWithSep = normalizedDir.endsWith(path.sep) ? normalizedDir : normalizedDir + path.sep;
return normalizedPath.startsWith(dirWithSep);Apply the patch with this PowerShell one-liner:
$file = "$env:APPDATA\Claude\Claude Extensions\ant.dir.ant.anthropic.filesystem\node_modules\@modelcontextprotocol\server-filesystem\dist\path-validation.js"
Copy-Item $file "$HOME\Desktop\path-validation.js.backup"
$content = Get-Content $file -Raw
$content = $content.Replace(
'return normalizedPath.startsWith(normalizedDir + path.sep);',
'const dirWithSep = normalizedDir.endsWith(path.sep) ? normalizedDir : normalizedDir + path.sep; return normalizedPath.startsWith(dirWithSep);'
)
[System.IO.File]::WriteAllText($file, $content)Then fully quit and restart Claude Desktop. Claude tested the fix itself using MCP tools after restarting—listing subdirectories and writing a test file to confirm functionality.
Note: This patch will be overwritten if the extension auto-updates. The fix should be implemented upstream in @modelcontextprotocol/server-filesystem. Related GitHub issues: #1838, #470.
📖 Read the full source: r/ClaudeAI
👀 See Also

V6rge AI Suite Update Adds NVIDIA GPU Support and Beta Coding Agent
V6rge AI Suite has released an update that fixes GPU detection issues, adds full NVIDIA GPU support for better performance, and introduces a new beta coding agent that generates and assists with code directly inside the app.

Dynamic Status Bar for Claude Code Shows Live Updates
A developer has improved their Claude Code status bar from static text to dynamic display with real-time updates showing what Claude is working on. The configuration is available as a GitHub gist.

Culpa: Open Source Deterministic Replay Engine for AI Agent Debugging
Culpa is an open source tool that records LLM agent sessions with full execution context, enabling deterministic replay using recorded responses as stubs instead of hitting real APIs. It works with Anthropic and OpenAI APIs via proxy mode or Python SDK.

wearehere browser extension scans sites for tracking and privacy risks
wearehere is a browser extension that scans websites across ten categories including cookies, trackers, device fingerprinting, and dark patterns, then scores them based on privacy risks. It's under 200KB, runs locally in the browser, and also comes as an npm package for integration with AI agents via barebrowse MCP server.