How to install an MCP server in Claude, Cursor, VS Code and Zed
One command per client, the exact file each one writes, how to tell whether it worked, and the five failures that account for most of the confusion.
The install itself is one line. Installs go wrong because MCP clients share no config file, no schema and no reload behaviour — so the same server is a different three lines of JSON depending on what you are running, and a mistake in any of them produces the same symptom: the tools do not show up and nothing explains why.
Underneath every one of those wrappers is the same small object: a name, a transport, an address, and — if the server authenticates with a key rather than through a broker — a header carrying it.
The command
# the default client
npx mcprush@latest add <server>
# anything else
npx mcprush@latest add <server> --client claude
npx mcprush@latest add <server> --client cursor
npx mcprush@latest add <server> --client vscode
npx mcprush@latest add <server> --client zedIf the server authenticates, a browser tab opens once. Where that token then lives is the question worth asking of any installer: on your disk, or with something that can revoke it for you later.
On a machine with no Node at all, two clients have their own commands, and they reach the same server:
claude mcp add --transport http <server> <url>
code --add-mcp '{"name":"<server>","type":"http","url":"…"}'What each client actually reads
| Client | Where the entry goes | Picks it up |
|---|---|---|
| Claude Code | Project or user MCP config | Next session |
| Claude Desktop | claude_desktop_config.json | Only on launch — quit and reopen |
| Cursor | Its own MCP settings file | Without a restart |
| VS Code | Workspace or user MCP configuration | On reload of the window |
| Zed | The context-server section of settings | On save |
Checking it worked, from both sides
There are two views and they are frequently not the same. The account’s view is what the server thinks you have; the client’s view is what your editor thinks you have. When they disagree, the config file is the thing that is wrong.
npx mcprush@latest list # what the account holds, and what is paused
npx mcprush@latest whoami # which account this key belongs to, and what it may reachIf list shows the server and your client does not, stop editing anything on the account side. If whoami fails, nothing downstream of it is worth debugging yet.
The five failures
- The client was never relaunched. Claude Desktop reads its config at launch. This is the most common report by a distance and it looks exactly like a broken install.
- Two configs, one machine. A project-level file and a user-level file both exist, and the one you edited is not the one being read. Check both before changing either.
- The key belongs to a machine you removed. An install belongs to an account, not to a laptop. A key from a device you deleted authenticates and then fails the second check — a 401 that is not about the key at all.
- A trailing comma. Every one of these files is JSON, and a client that cannot parse its config usually says nothing whatsoever.
- The OAuth tab was closed. The install completes, the grant does not, and the first call is what tells you.
Four of those five are a file, and the fifth is a browser tab. None of them is the server — which is worth remembering before you open an issue on somebody’s repository.
A note on claimed client support
Listings tend to claim every client there is, because the box is easy to tick and nothing checks it. Treat a client list as an aspiration rather than a test matrix. If you are on one of the less common clients and nobody in the reviews mentions it, assume you are the test.
Installing several at once
Two things do this and they are not the same. A stack is a curated set somebody assembled for a job. A list is your own saved set, which is what teams end up using.
npx mcprush@latest stack add <stack>
npx mcprush@latest add-list <list>Whatever the tool, demand one behaviour from anything that installs several things at once: it should install what is free and name what is paid, rather than quietly starting subscriptions on your behalf.