Installing an MCP server in Claude Desktop takes about three minutes once you know where the config file lives. This guide walks through the entire flow with screenshots-worth-of-detail — so you will not get stuck.
Before you start
- Claude Desktop 1.0 or newer — download from claude.ai/download
- Node.js 20+ installed (for npm-based MCP servers)
- Your MCP server of choice — we will use Filesystem MCP as the example
Step 1: Find the config file
Claude Desktop reads MCP server definitions from a single JSON file. Its location depends on your OS:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
If the file does not exist yet, create it. The easiest way is from inside Claude: Settings → Developer → Edit Config. This opens the file in your default editor, creating it if needed.
Step 2: Add your first MCP server
Paste this minimal config:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/yourname/Documents"
]
}
}
}
Replace /Users/yourname/Documents with an absolute path to the folder you want Claude to access. Avoid pointing at your whole home directory — scope it.
Step 3: Fully quit Claude Desktop
This is where most people get stuck. Simply closing the window is not enough; Claude stays in the background and does not re-read the config.
- macOS:
Cmd+Qor right-click in Dock → Quit - Windows: right-click tray icon → Quit
Step 4: Relaunch and verify
Open Claude Desktop again. Look at the message input area — you should see a small hammer icon 🔨. Click it and the list of tools from your MCP server appears.
If no hammer icon: check Settings → Developer → MCP Logs. 90% of issues are (a) invalid JSON, (b) wrong Node version, (c) path you pointed at does not exist.
Step 5: Use it
Ask Claude something that requires the tool. For filesystem:
List the files in my Documents folder and summarise anything that looks interesting.
Claude will ask for permission the first time (standard), then list the folder and give you a summary.
Adding more servers
Every additional server goes into the same mcpServers object. Common additions:
{
"mcpServers": {
"filesystem": { /* ... */ },
"github": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx"
}
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres",
"postgresql://user:pass@host:5432/db"]
}
}
}
Common gotchas
- JSON syntax errors break the whole config. Validate at jsonlint.com before saving.
- Relative paths in
argsare resolved from Claude’s working directory, not your terminal. Always use absolute paths. - Environment variables must go in the
envobject, not inline inargs. - Node / npm not found — Claude uses the PATH at launch time. On macOS, launching from Dock does not pick up
.zshrc. Launch from Terminal once, or symlinknpxinto/usr/local/bin.
What to install next
Once filesystem is working, grab GitHub MCP and Memory MCP. Those three combined cover 80% of daily dev workflows. Or skim our Top 15 list.