PATH COMPLETION0 / 45 STEPS (0%)
BACK TO LEARNING PATHTRACK 04: Tools and MCP
Step 3 of 7 in this track · 8 min

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.json in the project root
  • Cursor: .cursor/mcp.json
  • Claude Desktop: claude_desktop_config.json in 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.