I Configured Claude Desktop's File Access Twice. It Was the Same Setting Both Times. A developer discovered that Claude Desktop's file access settings are duplicated under two different sidebar labels, 'Extensions' and 'Connectors', which lead to the identical Filesystem settings screen with no cross-reference. The developer found that the GUI settings were already active before they edited the legacy claude_desktop_config.json, leading to unintended folder access. The issue highlights confusion in Anthropic's UI navigation. File access in Claude Desktop's chat mode had been flaky for a while: sometimes there, sometimes not, no obvious pattern. The standard fix, the one Claude itself gives you in a plain chat, is to hand-edit claude desktop config.json. I did that, and before I'd even confirmed it worked on its own, found something else: the same Filesystem settings, filed under two completely different sidebar labels, with nothing anywhere saying they're the same page. I only noticed because I'd enabled an unrelated extension that gives Claude direct control of the Mac, and used it to go audit the settings properly. I run a personal ops wiki, mostly read and written by Claude, across two Macs. File access from Claude Desktop's plain chat mode never felt fully trustworthy. It would work fine one session and fail the next, with no config change I was aware of in between. The easy answer is "just use Cowork mode instead," and that's fine advice, but it's a workaround, not a diagnosis. I wanted to know what was actually configured before deciding the lighter chat-mode access wasn't worth fixing. Ask Claude in a plain chat how to set this up, and it points you at claude desktop config.json : the classic mcpServers JSON block, hand-edited, one entry per server. That's the answer in most guides. I wrote a scoped filesystem entry and restarted. What I didn't do, and should have, was check whether that entry was actually controlling access, versus something already running underneath it. I never isolated a clean test of "JSON entry alone, nothing else present." Going to check what was actually granting access, I found a second settings screen already live and already configured, with no idea how long it had been running or how it related to what I'd just written. Finding a settings screen I didn't know existed was reason enough to stop guessing. I had Claude use a separate extension, enabled earlier for unrelated automation and giving it direct AppleScript and shell control of the Mac, to read every settings file involved rather than trust what any single screen claimed. What that turned up wasn't three independent systems fighting each other. It was more specifically annoying than that: the same Filesystem settings screen, reachable from two entirely different places in the sidebar, styled identically, with no cross-reference telling you they're the same page. Navigate in via Desktop app → Extensions → Filesystem and you land on a page. Navigate in via Customize → Connectors → Filesystem and you land on the exact same page: same toggle, same two allowed directories, same tool-permission list, pixel for pixel. Two doors, one room, and nothing on either door mentions the other. Underneath that is a genuinely separate second thing: the raw claude desktop config.json mcpServers block, which is the old way of doing this and is still correct for anything Anthropic hasn't folded into the unified screen a third-party server like GitHub's, for instance . So the real shape isn't three settings surfaces. It's one legacy JSON method and one current GUI system that Anthropic's own navigation apparently can't decide whether to call "Extensions" or "Connectors," filing the identical screen under both mid-rename, with nothing explaining the overlap. If you've used Claude Desktop across months of incremental UI changes, that's exactly the setup for believing you configured two different things when you configured one thing twice, through two different-looking menus, at two different points in time. Filesystem access was already being controlled by the GUI screen before I ever wrote the JSON entry, set at some earlier point I don't have a clean memory of, to a longer list of folders than the two I actually wanted. Old folders from old projects, added one at a time over months and never reviewed as a whole. Nothing dramatic in the contents. Just more than intended, with no memory of deliberately choosing all of it. The part that actually mattered: the JSON entry I'd just written was now sitting live in mcpServers at the same time as the GUI screen's own config, and I had no idea whether the JSON one was doing anything, doing something partial, or fully inert. I didn't want to find out by trial and error what two separate filesystem MCP servers both claiming the same job actually produces. Best guess: duplicate tools in the picker, maybe ambiguous tool selection if both register something like read file . That's a guess, not a confirmed failure mode. So I removed the uncertainty instead of resolving it: reverted the JSON entry back to an empty mcpServers: {} , and let the GUI screen be the only thing live. The real risk here isn't that the JSON method is dead, which I can't claim to have proven either way. It's that if the Extensions-labeled view and the Connectors-labeled view of the same feature ever show different folder lists, not just two doors to one room but two doors that have genuinely drifted apart, nothing in the UI tells you which one is real, or that they've diverged at all. That's worth actually checking side by side rather than assuming they're in sync. Separately, I wanted GitHub push access. Anthropic has a native GitHub Integration connector: Settings → Connectors, click, authorize, done. The obvious path. Except as of late July 2026, there's an open, unresolved bug https://github.com/anthropics/claude-code/issues/80874 where that connector's OAuth grants read access fine, but every write operation fails with 403 Resource not accessible by integration , including git push . Confirmed, reported, still open when I checked. Flip that toggle without checking, and you get a connector that looks connected and silently fails the one thing you needed it for. The workaround: GitHub's own official MCP server, run locally via Docker, authenticated with a fine-grained personal access token instead of Anthropic's GitHub App. { "mcpServers": { "github": { "command": "docker", "args": "run", "-i", "--rm", "-e", "GITHUB PERSONAL ACCESS TOKEN", "ghcr.io/github/github-mcp-server" , "env": { "GITHUB PERSONAL ACCESS TOKEN": "