Large Language ModelsGenerate imagesGenerate videos
Claude Desktop MCP Config: File Location, JSON Example and Setup
Locate claude_desktop_config.json on Windows and macOS, avoid the MSIX path trap, paste a working mcpServers example, restart the app correctly and read the MCP logs when a server refuses to load. Includes a tutorial for debugging your JSON with a Claude model on PicassoIA.
You edited the JSON, restarted the app, and nothing happened. No hammer icon, no new tools, no error message. That silent failure is the most common story with a Claude Desktop MCP config, and it almost always traces back to one of three causes: you edited the wrong file, the JSON has a tiny syntax slip, or the app was never fully restarted. This article walks through all three, in the order you will meet them.
You will get the exact claude_desktop_config.json location on Windows and macOS (including the Windows MSIX trap that sends your edits into a file nobody reads), a working JSON example you can paste today, a way to confirm that a server really connected, and a short troubleshooting routine built around the MCP logs. Near the end there is a tutorial on using Claude Sonnet 5 on PicassoIA to debug your own config, plus a look at connecting image and video generators once the plumbing works.
💡 Short version: the file is claude_desktop_config.json, it needs a top-level mcpServers object, every path inside must be absolute, and the app must be fully quit and reopened after each edit.
Where the Config File Lives
Claude Desktop reads one JSON file at launch to find out which MCP servers (Model Context Protocol servers) it should start. The file does not exist until you open it from the settings screen or create it by hand, so a fresh install has nothing to find yet. Its location depends on your operating system and, on Windows, on how you installed the app.
Windows Path and the MSIX Trap
On a standard Windows install the file lives here:
%APPDATA%\Claude\claude_desktop_config.json
Expanded, that is C:\Users\<your name>\AppData\Roaming\Claude\claude_desktop_config.json. Press Win+R, paste the first form, and press Enter to open the right folder.
Here is the trap. When Claude Desktop is installed as an MSIX package (the Microsoft Store and some WinGet installs work this way), Windows virtualizes the AppData folder for that app. Several public bug reports describe the same result: the Edit Config button opens the plain %APPDATA% file, while the app itself reads a copy buried under the package folder:
If that prints True, put your mcpServers block in the packaged path, restart, and see whether the server appears. Package folder names can change between releases, so treat the path above as a starting point. If it does not match, look inside %LOCALAPPDATA%\Packages for a folder that starts with Claude_.
macOS Path and Linux Notes
On a Mac the file sits inside the Library folder, which Finder hides by default:
In Finder, choose Go, then Go to Folder, and paste ~/Library/Application Support/Claude. From Terminal, open ~/Library/Application\ Support/Claude does the same job.
There is no official Linux build of Claude Desktop. Community builds usually follow the XDG convention and read ~/.config/Claude/claude_desktop_config.json, but check the notes of the build you use before you trust that path.
Open It From Settings
The least error-prone route is the app itself:
Click the Claude menu in your system menu bar (not the settings inside the chat window).
Choose Settings.
Open the Developer tab in the left sidebar.
Click Edit Config.
That creates the file when it is missing and shows it in your file manager. On a Windows MSIX install, compare the folder it opens with the packaged path above before you trust it.
The whole file is one JSON object. Claude Desktop looks for a top-level property called mcpServers. Inside it, every property is one server, and the property name is the label you see in the app. Each entry is a small recipe for starting a program on your computer, and Claude talks to that program over standard input and output.
Field
Required
What it does
command
Yes
The executable to launch, such as npx or node
args
Usually
An array of arguments, one string per item
env
No
Environment variables handed to that process
The right command depends on how the server was written. Node.js servers published to npm start with npx. Servers you built or cloned yourself start with node followed by the path to the compiled file. Python servers are usually launched through uvx, which needs the uv tool installed. In every case the rule is the same: whatever you type as command must work when typed into a terminal, because that is exactly what Claude Desktop does on your behalf.
If Claude Desktop already added other top-level entries to the file (newer builds can store a few preferences there), leave them alone and add mcpServers beside them. Replacing the whole file with a pasted snippet is how people lose those settings.
Examples for macOS and Windows
Here is the official filesystem server on a Mac. Swap username for your real account name:
Three details do most of the work here. The -y flag lets npx install the server package without asking a question nobody is there to answer. The folders after the package name are the only places the server may touch. And all of those paths are absolute, because relative ones are a classic reason a server never starts.
You also need Node.js, since npx ships with it. Run node --version in a terminal; if it prints a version number, you are set, and the LTS release is the safe choice.
💡 Tip: pick the label in mcpServers for humans, not for the machine. filesystem, notes or weather are all fine, and the name only shows up in menus and in the log file name.
Add Servers and Secrets Safely
Environment Variables for Secrets
Real servers often need a credential. Put it in the env object of that server, never in args, where it would show up in process lists. This example runs two servers side by side:
Notice the comma between the two server blocks and the absence of a comma after the last one. Those two spots cause more broken files than anything else.
The config file is plain text, so treat it like a password file. Do not commit it to a public repository, do not paste it into a chat or a screenshot with the token visible, and keep folder access narrow. A server runs with your user account permissions, which means it can do anything you can do by hand. Point the filesystem server at one project folder, not at your whole home directory.
Remote Servers Use Connectors Instead
The JSON file launches local processes. A hosted, remote MCP server is a different animal: it already runs somewhere else and you reach it by URL. Claude Desktop expects those to be added from Settings, then Connectors, not as entries in claude_desktop_config.json. Pasting a URL into command is one of the quieter ways to end up with a server that never loads.
Local server
Remote server
Where it runs
On your computer
On a hosted machine
How you add it
mcpServers in the JSON file
Settings, then Connectors
Needs Node.js
Often
No
Typical failure
Wrong path or bad JSON
Sign-in or permission problem
Restart and Confirm It Works
Quit Fully, Then Reopen
Claude Desktop reads the config once, at launch. Saving the file does nothing on its own. Closing the window is not enough either, since the app can keep running in the background. On macOS press Cmd+Q or use Claude, then Quit. On Windows, quit from the system tray icon if the app lingers there. Then open it again.
Work in small steps. Add one server, restart, confirm it, then add the next. When you paste five servers at once and the file refuses to load, you have no way to tell which block broke it.
Check the Connectors Menu
Once the app is back, look at the chat input box and click the Add files, connectors, and more button. Hover over Connectors, click Manage connectors, and pick your server from the list. A working server shows the tools it offers. The filesystem server, for example, lists tools for reading files, writing files, moving them and searching them.
Then run a real test with a prompt such as "List the files in my Downloads folder." Claude asks for permission before it calls a tool. Approve the call, and the answer should come back with actual file names. If it replies that it has no access to your files, the server did not connect.
Fix Errors That Block Loading
Broken JSON Syntax
One misplaced character stops the whole file from loading. These are the usual suspects:
A trailing comma after the last property or array item.
A comment. JSON has none, so // lines are errors.
Smart quotes pasted from a web page or word processor instead of plain straight quotes.
A single backslash in a Windows path.
A missing brace or bracket after you deleted a server block.
This snippet packs three of them into a few lines. Can you spot them?
The path uses single backslashes, the array ends with a comma before the closing bracket, and the args line ends with a comma before the closing brace. Fix all three and the file parses.
Before restarting, validate the file. Any JSON linter works, or you can use Node.js, which you already have:
If it prints valid, the syntax is fine and the problem is somewhere else.
Command Not Found Problems
When the JSON is valid but the server still fails, the culprit is usually the command. A desktop app does not read your shell profile, so a Node.js installed through a version manager can be invisible to it. Run which npx in a terminal and put the full path in the command field instead of npx.
First, run the exact command by hand to see whether it works outside the app:
On Windows, if the log mentions an error about ${APPDATA} inside a path, add the expanded value of %APPDATA% to that server's env block, for example "APPDATA": "C:\\Users\\username\\AppData\\Roaming\\". Also check that %APPDATA%\npm exists. If it does not, install npm globally with npm install -g npm, then restart the app.
Read the MCP Logs
The logs tell you what the app saw. Open the log folder from the table above and look for two kinds of files. mcp.log holds general messages about connections and failures. Files named mcp-server-NAME.log hold the stderr output of each server, which is often where the real error message lives. On a Mac you can follow them live:
A log that never changes after a restart is itself a clue: the app is probably reading a different config file than the one you edited, which brings you back to the MSIX path.
A second pair of eyes is the fastest way to spot a stray comma. Claude Sonnet 5 on PicassoIA is a text model that reads pasted JSON, stack traces and even screenshots of an error, so it works well as a config reviewer.
Open the Model Page
Go to the Claude Sonnet 5 page in the Large Language Models collection and open the prompt box. Keep one browser tab for the model and one for your editor, so you can paste back and forth.
Set Effort and Output Length
The model exposes a handful of settings, and a few of them matter here:
effort: defaults to low, which turns thinking off for the fastest answer. That is enough for a syntax check. Move to medium or high when you need it to reason about paths across several servers.
max_tokens: the default of 8,192 is plenty for a full corrected file.
system_prompt: set it once, for example "You review claude_desktop_config.json files. Name the exact line that is wrong, then return the corrected file."
image: attach a screenshot of the error. Raise max_image_resolution above its 0.5 megapixel default if the log text is small.
For quick yes-or-no checks, Claude 4.5 Haiku answers faster. For a stubborn multi-file puzzle, Claude Opus 4.7 is the heavier option.
Paste the Config and Ask
Replace every token with a placeholder first. Then paste the file and ask something specific:
This claude_desktop_config.json is on Windows. The filesystem server never
appears in Claude Desktop. Check the JSON syntax, check the path escaping,
and tell me which line to fix first.
Compare the reply with your file line by line instead of pasting it back blindly, and run the Node.js validator from earlier on the result.
Connect Image and Video Tools
Once your plumbing works, the interesting part starts: giving Claude tools that make things. PicassoIA offers a developer API and an MCP connection, both limited to four models at the time of writing:
PicassoIA's MCP connections are created from your account page on picassoia.com after you log in. They are hosted, so the connector route from earlier applies: add them from Settings, then Connectors, not as an mcpServers entry. Jobs run asynchronously. A request starts a prediction, and the result is fetched once it finishes. Each account can run 5 predictions at once, and that limit is shared across every MCP connection you make, so a batch request from Claude may queue behind itself.
💡 Tip: ask for one image first, check the result, then scale up. A single 16:9 photo prompt tells you faster than a ten-image batch whether the connection and the permissions are right.
A good first request is concrete: "Create a 16:9 photo of a ceramic mug on an oak desk in soft morning light, using PicassoIA Image." Claude picks the tool, waits for the job, and hands you the link. If it asks for permission each time, that is the same approval step you saw with the filesystem server, and it is working as intended.
Make Your Own Images Next
Your config file now does what it should: it points to the right place, parses cleanly, starts its servers and logs what goes wrong. That is the boring half of working with AI tools, and you only have to do it once.
The fun half is the creating. Open PicassoIA Image and write one prompt about something you care about, a street you know or a product you sell. Rework it with PicassoIA Image Editor Pro, then animate the best result with PicassoIA Video. Browse every model at picassoia.com/en/all-models, pick one you have not tried, and make your first image today.