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

SpecLock: Open Source Constraint Engine for AI Coding Agents
SpecLock is an MCP server that actively enforces constraints on AI coding agents like Claude Code. It blocks violations with semantic conflict warnings using synonym expansion, negation detection, and destructive action flagging.

Open-source trust scoring hook for Claude Code monitors sessions, blocks protected paths
A developer built a Python hook that scores every Claude Code session on reliability, scope, and cost dimensions, blocks access to protected paths like .env files, and hash-chains events for tamper detection. The single-file tool is available on GitHub.

LightMem: Lightweight Memory System for LLM Agents with 10×+ Gains and 100× Lower Cost
LightMem is a modular memory system for LLM agents that achieves up to 10.9% accuracy improvement while reducing tokens by up to 117×, API calls by up to 159×, and runtime by over 12×. It's designed for scalable long-context reasoning across agent workflows.

Claude Banana: A Claude Code plugin for image generation with design system awareness
Claude Banana is a Claude Code plugin that generates images using Google's Gemini API with context-aware prompt crafting. It reads Tailwind configs, CSS variables, design tokens, and existing assets to understand project visual styles.