# How to add an MCP server to Claude Desktop
The one-click way, then the way that works when the thing you want isn't in the list.
**Time:** 12 minutes

**What you'll have when you're done:** Claude Desktop able to read a folder on your own computer, and a config file you understand well enough to add the next server yourself.

**Before you start:**
- Claude Desktop, installed and up to date
- A folder on your computer you're comfortable letting Claude read
- About twenty minutes, most of it waiting for a restart
---Every guide that says "connect Claude to your tools" shows you a directory. You open it, scan the list, and the thing you actually need isn't there.

This covers both halves. The list, which takes one click. And the part after the list, which is where people give up.

An MCP server is a small program that gives an AI app a door to one specific thing. One server for your files. A different one for your calendar. It isn't an app or an account. It's a door, and you decide what's on the other side of it.

<figure class="diagram">
<svg viewBox="0 0 620 300" role="img" aria-labelledby="mcp-title mcp-desc" xmlns="http://www.w3.org/2000/svg">
<title id="mcp-title">What an MCP server actually is</title>
<desc id="mcp-desc">Three boxes in a row. Claude Desktop, the app you already use, asks an MCP server, a small program you add. The server reaches one specific thing: a folder, a service, or a database. A note underneath states that the server runs with your permissions, so whatever you can open, it can open.</desc>
<defs>
<marker id="mcpTip" viewBox="0 0 8 8" refX="4" refY="4" markerWidth="6" markerHeight="6" orient="auto">
<path d="M0.5 0.5 L 7 4 L 0.5 7.5" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/>
</marker>
</defs>
<g font-family="Inter Tight, sans-serif" fill="currentColor">
<rect x="20" y="16" width="580" height="40" fill="none" stroke="currentColor" stroke-opacity="0.4" stroke-dasharray="3 3" rx="2"/>
<text x="310" y="41" font-size="13" font-weight="500" text-anchor="middle">The server is a door. You choose what it opens onto.</text>
<rect x="20" y="96" width="168" height="72" fill="none" stroke="currentColor" stroke-opacity="0.22" rx="2"/>
<rect x="20" y="96" width="3" height="72" fill="currentColor" fill-opacity="0.85"/>
<text x="38" y="124" font-size="14.5" font-weight="600">Claude Desktop</text>
<text x="38" y="146" font-size="12" fill-opacity="0.6">The app you already use</text>
<line x1="188" y1="132" x2="222" y2="132" stroke="currentColor" stroke-opacity="0.45" stroke-width="1.2" marker-end="url(#mcpTip)"/>
<text x="205" y="122" font-size="10" font-weight="600" letter-spacing="0.06em" fill-opacity="0.45" text-anchor="middle">ASKS</text>
<rect x="226" y="96" width="168" height="72" fill="none" stroke="currentColor" stroke-opacity="0.22" rx="2"/>
<rect x="226" y="96" width="3" height="72" fill="currentColor" fill-opacity="0.85"/>
<text x="244" y="124" font-size="14.5" font-weight="600">MCP server</text>
<text x="244" y="146" font-size="12" fill-opacity="0.6">A small program you add</text>
<line x1="394" y1="132" x2="428" y2="132" stroke="currentColor" stroke-opacity="0.45" stroke-width="1.2" marker-end="url(#mcpTip)"/>
<text x="411" y="122" font-size="10" font-weight="600" letter-spacing="0.06em" fill-opacity="0.45" text-anchor="middle">REACHES</text>
<rect x="432" y="96" width="168" height="72" fill="none" stroke="currentColor" stroke-opacity="0.22" rx="2"/>
<rect x="432" y="96" width="3" height="72" fill="currentColor" fill-opacity="0.85"/>
<text x="450" y="124" font-size="14.5" font-weight="600">One specific thing</text>
<text x="450" y="146" font-size="12" fill-opacity="0.6">A folder, a service, a database</text>
<rect x="226" y="204" width="374" height="56" fill="none" stroke="currentColor" stroke-opacity="0.22" rx="2"/>
<text x="244" y="228" font-size="12" font-weight="600">It runs with your permissions.</text>
<text x="244" y="248" font-size="12" fill-opacity="0.6">Whatever you can open, it can open.</text>
<path d="M310 168 V 186 H 244 V 204" fill="none" stroke="currentColor" stroke-opacity="0.45" stroke-width="1.2" marker-end="url(#mcpTip)"/>
</g>
</svg>
<figcaption>Most of the confusion about MCP disappears once you see that the middle box is a separate program you install, not a feature you switch on.</figcaption>
</figure>

---

## The short path: check the list first

Claude Desktop has a built-in directory of reviewed servers packaged for one-click install.

Open **Settings**, then **Extensions**, then **Browse extensions**. Find what you want and install it. That's the whole process. No file editing, no restart, no terminal.

Check here before doing anything else. If what you need is in this list, the rest of this guide is not for you today.

Two things worth knowing about the list. It's reviewed, which is the point of using it. And it's short, which is why the rest of this page exists.

---

## When it isn't in the list

Now you edit a config file. A config file is a plain text file that tells an app how to behave when it starts. Nothing runs it, nothing compiles it. It's a note the app reads on the way up.

Here is the whole process, using the official filesystem server as the worked example. It gives Claude access to folders you name, and it's the one most people want first.

### 1. Check you have Node

Most servers need Node.js, the thing that runs them. Open Terminal on a Mac, or Command Prompt on Windows, and type:

```
node --version
```

A version number means you're set. An error means you don't have it, and you can install it from nodejs.org. Take the LTS version.

This is the only terminal command in this guide.

### 2. Open the config file

Click the **Claude** menu in your computer's menu bar. Not the settings inside the Claude window. The one in the bar at the very top of the screen, next to the Apple menu on a Mac.

Choose **Settings**, then the **Developer** tab, then **Edit Config**.

That opens the file, and creates it if it wasn't there. It lives here:

- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

### 3. Paste the configuration

Replace what's in the file with this, then change `username` to your actual computer username and set the folders to ones you want reachable.

```json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/username/Desktop",
        "/Users/username/Documents/notes"
      ]
    }
  }
}
```

Every piece of that has a job:

| Part | What it means |
|---|---|
| `mcpServers` | The list of servers. Everything else nests inside it |
| `"filesystem"` | Your name for this one. It's the label you'll see in Claude |
| `command` | What to run. `npx` is a Node tool that fetches and runs the package |
| `-y` | Answer yes to the install prompt, so it doesn't hang waiting |
| `@modelcontextprotocol/...` | Which server to fetch |
| The paths after it | The folders this server may touch. Nothing outside them |

Those last lines are the important ones. That list is the entire boundary. A folder you don't name is a folder it can't open.

Use full paths, starting from the top of the drive. A shortened path like `~/Desktop` or `./notes` will fail quietly.

### 4. Restart properly

Quit Claude Desktop completely and reopen it. Closing the window is not enough, and this is the single most common reason a correct config appears to do nothing.

### 5. Confirm it worked

In a conversation, click the **Add files, connectors, and more** control at the bottom left of the message box. Hover **Connectors**, click **Manage connectors**, and look for the name you chose.

**Working looks like:** your server listed, with its tools underneath it.

**Broken looks like:** the name missing entirely, or present but showing no tools. Both send you to the section below.

Then ask for something you can verify instantly. "List the files on my Desktop" is a good first request, because you already know the answer.

---

## What you handed over

The server runs as you. Anything you could open by double-clicking, it can open. That's not a flaw, it's how it reaches your files at all, but it means the folder list in that config is a real decision and not a formality.

Claude asks before each action, and you can refuse any of them. Read those prompts for the first few days rather than clicking through. That's when you find out what it actually does with a vague instruction.

Two practical rules. Point it at a working folder rather than your whole home directory. And if a folder holds anything covered by a policy at work, leave it out until you've asked.

---

## When it breaks

**Nothing appeared after restarting.** Quit the app fully and reopen. On a Mac, that's Cmd-Q, not the red button.

**Still nothing.** The file is almost certainly invalid. JSON is unforgiving about one thing in particular: a comma after the last item in a list breaks the whole file, silently. Paste the file into any JSON validator and it will point at the line.

**It appears but has no tools.** The server started and then failed. Run it by hand to see the error it was hiding:

```
npx -y @modelcontextprotocol/server-filesystem /Users/username/Desktop
```

Whatever it prints is the real problem, and it's usually a path that doesn't exist.

**A path with a space in it.** Wrap it in quotes as normal, but check for a stray trailing space too. Copying a path out of Finder or Explorer often brings one along.

**`npx` not found.** Node isn't installed, or isn't installed for this account. Reinstall from nodejs.org and restart the computer, not just the app.

**You added a remote server and it won't connect.** Config files are for servers that run on your own machine. A hosted one has to go in through **Settings**, then **Connectors**, instead. This one catches people out because the config file accepts the entry without complaint and then ignores it.

**You want to see what actually happened.** Claude writes logs. On macOS they're in `~/Library/Logs/Claude`, on Windows in `%APPDATA%\Claude\logs`. The file `mcp.log` covers connections, and each server gets its own file named after it.

**The menus don't match this page.** These move. The shape of the task doesn't: find the config, add an entry under `mcpServers`, restart fully, check the connectors panel. If a menu name has changed, that sequence still tells you what you're looking for.

---

## What you can't do this way

You can't add something that has no server. MCP is a common shape, not universal coverage, and plenty of tools have nobody maintaining one.

You also can't reshape what a server does. If the filesystem server reads files and you needed it to read files and pull out the three fields you care about, no amount of configuration gets you there. That's the wall the next guide is about.

<div class="cta">
<h2>Next</h2>
<ul>
  <li><a href="/guides/connecting-tools/build-your-own-mcp-server/">Build your own MCP server</a> <span>For when nothing in the directory does the job</span></li>
  <li><a href="/guides/">Browse the other guides</a> <span>Same format, different task</span></li>
  <li><a href="/rss.xml">Subscribe by RSS</a> <span>New guides as they publish</span></li>
</ul>
</div>