You've read about MCP servers, you're convinced they're useful, and now you're staring at a GitHub README wondering where to even start. The install process looks intimidating the first time — JSON files, Node.js, PATH variables — but it's genuinely straightforward once you see it done once. Here's the complete walkthrough.

Four-step installation flow for adding an MCP server to Claude Desktop
MCP server installation in 4 steps: Install Node.js → Find a server → Edit the JSON config → Restart Claude Desktop.

What you need before you start

Three things, and most developers already have two of them. First, you need Node.js v18 or higher. Check your version by running node --version in a terminal. If you get "command not found" or a version below 18, head to nodejs.org and install the LTS version.

Second, you need Claude Desktop — not Claude in a browser tab, but the actual desktop app. Download it from claude.ai/download. It's free (you'll need a Claude account, and a Claude Pro or Max subscription unlocks more usage).

Third, you need a text editor for editing JSON. VS Code works great. Notepad on Windows works in a pinch. Just don't use Word or any app that adds hidden formatting characters.

Step 1: Find your config file

Claude Desktop reads all its MCP server configuration from a single file called claude_desktop_config.json. The location depends on your OS:

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

If the file doesn't exist yet, create it — Claude Desktop will pick it up on the next launch. If it does exist, it'll look something like this:

{
  "mcpServers": {}
}

That empty mcpServers object is where everything goes.

Step 2: Add your first server — the filesystem server

We'll use the official filesystem server as the example because it requires no API keys and has immediate value. Open your config file and add the following inside mcpServers:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/yourname/Documents"
      ]
    }
  }
}

Replace /Users/yourname/Documents with the actual folder you want Claude to access. On Windows that'd be something like C:\\Users\\yourname\\Documents — use double backslashes in JSON strings.

Annotated diagram of claude_desktop_config.json MCP server configuration file
Anatomy of claude_desktop_config.json — the mcpServers key, server name, command, args array, and optional env secrets explained.

Step 3: Restart Claude Desktop

This is the step most people miss. Closing the window isn't enough — you need to fully quit the app. On Mac, right-click the dock icon and choose Quit. On Windows, right-click the system tray icon and choose Exit.

Then reopen Claude Desktop. It'll automatically spawn the MCP server process when it starts.

Step 4: Verify it's working

Open a new chat and type: "What tools do you have available?" Claude should list the filesystem tools — things like read_file, list_directory, write_file, and search_files.

Then try it for real. Ask: "What files are in my Documents folder?" You should get a real directory listing back within seconds.

Step 5: Adding a second server (optional but recommended)

Adding more servers is the same pattern — just add another key inside mcpServers. Here's a config with both the filesystem server and the Brave Search server:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/yourname/Documents"
      ]
    },
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-brave-search"],
      "env": {
        "BRAVE_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Get your free Brave API key at api.search.brave.com. The free tier is 2,000 queries per month.

What if something goes wrong?

The most common problem is a JSON syntax error. A single missing comma or extra brace breaks the whole file silently. Paste your config into jsonlint.com to validate it.

The second most common issue is Node.js not being in the PATH that Claude Desktop sees. This happens more on Mac than Windows. The fix is to use the full path to npx in your config: run which npx in terminal to get it (usually /usr/local/bin/npx or /opt/homebrew/bin/npx on Apple Silicon Macs).

For a full list of fixes, see our MCP server troubleshooting guide.

Can I install MCP servers using Python instead of Node.js?

Yes. Some MCP servers are Python-based. Instead of npx, you'd use uvx (from the uv package manager) or python -m. The config structure is the same — just change the command and args fields. For example: "command": "uvx", "args": ["mcp-server-git", "--repository", "/path/to/repo"].

Does this work with Claude in a browser?

No. MCP server configuration only works with Claude Desktop (the downloaded app). The browser version of Claude doesn't support custom MCP servers. You'd need to use Claude Desktop or a developer tool like Cursor that also supports MCP.

Frequently Asked Questions

On Mac: ~/Library/Application Support/Claude/claude_desktop_config.json. On Windows: %APPDATA%\Claude\claude_desktop_config.json. If the file doesn't exist, create it — Claude Desktop will read it on the next launch.

Yes. Claude Desktop reads the config file only at startup. You must fully quit (not just close the window) and reopen it for new servers to take effect.

The most common cause is a JSON syntax error in your config file. Use a JSON validator like jsonlint.com to check it. Other causes: Node.js not in PATH, wrong file path in args, or the server package name is misspelled.

Yes, but it requires more work. The Claude API supports tool_use, and you can implement the MCP protocol yourself. For most users, Claude Desktop is the easier path. Developers building apps should look at the MCP SDK at github.com/modelcontextprotocol/typescript-sdk.