Installing your first MCP server
The filesystem server is the right first one. It is official, it needs no credentials, and its scope is easy to reason about.
The config
MCP configuration is JSON, and the shape is the same everywhere even though the filename differs:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/projects/demo"]
}
}
}Three parts: a name you choose, the command to launch, and its arguments.
Where the file goes depends on your harness:
- Claude Code:
.mcp.jsonin the project root - Cursor:
.cursor/mcp.json - Claude Desktop:
claude_desktop_config.jsonin the app support directory
The MCP config generator will assemble this for you from the servers listed on this site.
The path argument is the security boundary
That final argument is not a default directory. It is the limit of what the server can reach.
Point it at a specific project. Do not point it at your home directory, and do not point it at /. There is no second layer of protection behind it.
You can pass several paths to grant several directories.
Restart, then verify
MCP servers are launched by the harness at startup, so the config is read once. Restart fully after editing it.
Then check it registered rather than assuming. In Claude Code:
claude mcp list
Most harnesses have an equivalent, and many show connected servers in the UI. If it is not listed, it did not load.
Confirm it works
Ask something only that server can answer:
> List the files in the project directory.
If it works, you will see real filenames. If the agent invents plausible ones or says it cannot see the filesystem, the server is not connected.
When it does not load
Command not found. npx needs Node installed and on your PATH. Servers run with uvx need Python and uv.
Invalid JSON. A trailing comma silently breaks the entire file, so every server disappears at once. Paste it into a JSON validator.
Wrong path. A non existent directory usually causes the server to start and then fail on first use. Use absolute paths.
Silent failures. Check your harness logs. MCP servers communicate over stdin and stdout, so a crash on startup often produces nothing visible in the UI.
Then add a second
Once one works, adding more is mechanical. Good next steps are Context7 for current library documentation and git for repository history.
Add them one at a time and verify each. Adding five and finding nothing works is a slow debugging session.