AI + MCP

Where is claude_desktop_config.json? The path on Windows, macOS and Linux

By Baalda Team · · 6 min read

Short answer

On Windows it is %APPDATA%\Claude\claude_desktop_config.json, and on macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Microsoft Store (MSIX) installs on Windows can read a second copy under %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude instead. On Linux, open it with Settings, Developer, Edit Config.

On Windows the file is usually %APPDATA%\Claude\claude_desktop_config.json, and on a Mac it is ~/Library/Application Support/Claude/claude_desktop_config.json. That covers most people. The rest have a Microsoft Store install, where Windows can keep a second copy of the file in a different folder, and that second copy is the reason "I edited the config and nothing happened" is such a common complaint.

Where is claude_desktop_config.json on Windows?

There are two possible places, and which one counts depends on how Claude Desktop was installed.

InstallPath the app reads
Standard installer%APPDATA%\Claude\claude_desktop_config.json
Microsoft Store or MSIX package%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json

%APPDATA% expands to C:\Users\<you>\AppData\Roaming, and %LOCALAPPDATA% to C:\Users\<you>\AppData\Local. Paste either one into the File Explorer address bar or the Run dialog (Win + R) and Windows fills in your user name.

The first path is the one in the official MCP documentation. The second exists because MSIX packages run inside a virtualised file system: when the app writes to what it thinks is AppData\Roaming, Windows quietly redirects the write into the package's own LocalCache folder.

Why does Edit Config open the wrong file on Windows?

On some MSIX installs, Settings → Developer → Edit Config opens the file under AppData\Roaming\Claude, while the running app reads the copy under AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude. You edit one file, the app reads the other, and the MCP server never appears. Nothing errors and nothing is logged.

This is reported in anthropics/claude-code issue #26073, opened on 16 February 2026 against Claude Desktop 1.1.3189.0, and still open as of 16 October 2026. Commenters there say it mainly affects fresh installs.

To find out which case you are in:

  1. Open %LOCALAPPDATA%\Packages and look for a folder named Claude_pzs8sxrjxfjjc. If there is none, you have the standard install and %APPDATA%\Claude is the only path that matters.
  2. If the folder exists, open LocalCache\Roaming\Claude inside it. If there is a claude_desktop_config.json in there with app preferences already in it, that is the file the app reads.
  3. Add your mcpServers block to that file, merging it into the JSON that is already there rather than replacing it.

The other workaround people in the thread report working: uninstall, create an empty %APPDATA%\Claude folder by hand, then reinstall. The installer treats the folder as an existing install and uses it instead of the virtualised one.

Where is it on macOS?

~/Library/Application Support/Claude/claude_desktop_config.json.

~/Library is hidden in Finder by default. Use Go → Go to Folder (Shift + Command + G) and paste the path, or open it from a terminal:

bash
open -e ~/Library/Application\ Support/Claude/claude_desktop_config.json

There is no second copy on a Mac. If an edit does not take, the cause is almost always one of the mistakes further down this page.

What about Linux?

Anthropic released Claude Desktop for Linux as a beta for Ubuntu 22.04+ and Debian 12+, installed from its apt repository as the claude-desktop package. As of 16 October 2026, neither the Linux install page nor the MCP local-server guide publishes a config path for it.

So on Linux, do not go looking for the file by hand. Open it from the app with Edit Config, which creates it if it does not exist, and note the path it opens. Paths you find in older guides usually come from unofficial community builds that predate the official package, and they are not guaranteed to match it.

How do I open the file from inside Claude Desktop?

On every platform the steps are the same, and they are the safest way to get a file that exists:

  1. Open the Claude menu in the system menu bar. It is not the settings inside the chat window.
  2. Choose Settings, then the Developer tab.
  3. Click Edit Config.

If the file does not exist yet, Edit Config creates an empty one. On Windows, check which path it opened against the table above before you put any work into it.

Why is my MCP server not showing up after I edit the file?

Five causes cover almost every case.

The app was not fully quit. Claude Desktop reads the file only at launch. Closing the window is not enough. Quit from the tray icon on Windows or with Command + Q on a Mac, then start it again.

The JSON is invalid. One trailing comma or a missing brace and the whole file is ignored. Paste it into any JSON validator before restarting.

Backslashes are not escaped. In JSON a Windows path is written C:\\Users\\you\\Notes, with every backslash doubled. A single backslash is read as an escape character and breaks the string, or the file.

The path is relative. Every path inside args must be absolute. ./notes means nothing to a process Claude Desktop launches.

You edited the wrong copy. On a Microsoft Store install, see the Windows section above.

When none of those is it, read the logs. They are in ~/Library/Logs/Claude on macOS and %APPDATA%\Claude\logs on Windows. mcp.log records connections and failures, and each server writes its own errors to mcp-server-<name>.log. If the log mentions ${APPDATA} inside a path, the MCP guide's fix is to add the expanded value, for example "APPDATA": "C:\\Users\\you\\AppData\\Roaming\\", to that server's env block.

What does a working config look like?

Everything goes under one top-level mcpServers key. Each entry is a program Claude Desktop starts on your machine and talks to over stdio:

json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "C:\\Users\\you\\Notes"
      ]
    }
  }
}

That is the official filesystem server, pointed at one folder. It gives the assistant your local files and nothing else: one person, one machine.

Can I add a shared team vault through this file?

You can, though for most people it is not the route to take. The file only launches local programs, while a team vault sits on a server at an HTTPS address.

Baalda, a team second brain built on plain markdown files that several people edit at once, exposes each vault over MCP at /api/mcp, on the managed service at https://api.baalda.com/api/mcp and at your own domain when self-hosted. The simplest route for Claude Desktop skips this file entirely: add that URL as a custom connector under Settings → Connectors and sign in with OAuth. The Claude Desktop second brain post walks through it step by step, including how the vault gets picked on the consent screen.

If your plan does not include custom connectors, or you need everything in the config file, a local bridge can stand in. mcp-remote is a community npm package that runs as a stdio server and forwards to a remote MCP endpoint. Create a token under Vault settings → MCP in Baalda, then:

json
{
  "mcpServers": {
    "baalda": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.baalda.com/api/mcp",
        "--header",
        "Authorization:${BAALDA_AUTH}"
      ],
      "env": {
        "BAALDA_AUTH": "Bearer mcp_your_token_here"
      }
    }
  }
}

The header is written without a space after the colon, with the Bearer part kept in env, because Claude Desktop on Windows has been reported to mangle spaces inside args. mcp-remote is not an Anthropic or Baalda project, so check its README for current flags before relying on it.

Whichever route you take, the assistant gets the same tools (read_note, search_notes, create_note, edit_note, update_note) and the same per-folder permissions as the person whose token or login it uses. A folder you cannot open is one it cannot read.

Which route should you use?

You wantUse
A tool that runs on your own machineclaude_desktop_config.json
A team vault on a server, with custom connectors on your planSettings → Connectors, sign in
A team vault, no connectors or config-onlymcp-remote in the config file
Notes in a folder on disk, with Claude Codenothing: Claude Code edits the files directly

The config file is the right tool for local servers, and it is where most of the confusion lives. For anything with a URL, a connector is less to maintain, and there is no token sitting in a text file on your laptop. If you are still choosing where the notes live in the first place, what a team second brain is covers that before any of the plumbing.

FAQ

Frequently asked questions

Where is the Claude Desktop config file location on Windows?

For the standard installer it is %APPDATA%\Claude\claude_desktop_config.json, which expands to C:\Users\<you>\AppData\Roaming\Claude. A Microsoft Store or MSIX install can instead read %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json, so check for that folder first.

I edited claude_desktop_config.json and nothing changed. Why?

Usually one of five things: the app was closed but not fully quit, the JSON has a syntax error, Windows backslashes were not doubled, a path in args is relative, or on a Store install you edited the copy under AppData\Roaming while the app reads the one under AppData\Local\Packages.

Where are the Claude Desktop MCP logs?

In ~/Library/Logs/Claude on macOS and %APPDATA%\Claude\logs on Windows. mcp.log records connections and failures, and each server writes its own errors to mcp-server-<name>.log.

Do I need the config file to connect a remote MCP server?

Not usually. The file launches local programs over stdio. A server with an HTTPS address, such as a Baalda vault at /api/mcp, is added under Settings, Connectors with an OAuth sign-in. A bridge such as mcp-remote can put a remote server in the config file when connectors are not available.

Start your team’s brain

Free and open source. No account needed.