If you want to know how to add an MCP server to Claude Desktop, the mechanical part takes about five minutes. You paste a URL into a settings screen, or a few lines into a config file, restart the app, and a new connector shows up in the chat.

That is not the hard part.

The hard part is deciding what that server is allowed to touch before you switch it on. I learned that on 11 August 2026, when an automation running through a GoHighLevel MCP server followed its own written instructions perfectly and moved 1,334 deals to lost in one pass, including deals a sales rep had opened by hand that week. Every call came back with a success code. Nothing was broken. It was just wrong.

So this guide does both jobs: every screen of adding a server, local and remote, with the guardrails built in as steps rather than a warning at the end.

The short answer

MCP (Model Context Protocol) is the open standard that lets Claude plug into other software. To add an MCP server to Claude Desktop: for a hosted server, open Settings, Connectors, Add, then Add custom connector, paste the URL and sign in. For a server on your own machine, open Settings, Developer, Edit Config, add it to claude_desktop_config.json, save and restart. Then set every write tool to Needs approval before it touches live data.

Two coiled instrument cables with brass connectors resting on a dark wooden desk
One standard plug for every tool. The cable is the easy part; deciding what it may carry is the job.

What is an MCP server, in plain English?

Anthropic's description is the best one: MCP is like a USB-C port for AI applications. One standard plug, and any tool that speaks it can connect. The official introduction calls it "an open-source standard for connecting AI applications to external systems", meaning your files, your CRM, your calendar.

Three words. The host is the AI app; Claude Desktop is a host. A server is the small program that talks to one piece of software. A tool is one thing that server can do: get a contact, create a task, update an opportunity. And every tool is either a read or a write. Reads look things up. Writes change your records. The whole safety question in this guide is which writes you turn on, and when.

Route Where it runs How you add it Who it suits
Remote (custom connector) On the vendor's servers Settings, Connectors, Add custom connector, paste a URL, sign in Most owners. No files to edit.
Local (config file) On your computer, started by Claude Desktop on launch Settings, Developer, Edit Config, a few lines of JSON, restart Anything that needs a token, a header or a file path
Extension (one click) On your computer, packaged as a .mcpb file Settings, Extensions, Browse extensions, Install A local server without touching JSON

What is actually running in our setup?

Before the steps, the receipt. As of this morning the Claude Desktop config on my main machine at ATP AI, Sales and Marketing lists fourteen MCP servers. Not a recommendation. Just what running three businesses on this stack looks like, mess included.

Server What it does Status
GoHighLevel, five entries One per sub-account. Contacts, conversations, calendars, opportunities, payments. Four live. One points at a sub-account that has since closed and returns a 403 on every call. Still in the file as I write this. Its own lesson.
Asana Reads and creates tasks on our boards Live
Google Tasks, two entries Personal list and the ATP list Live
Fathom Meeting summaries and transcripts Live
Google Chat Reads and sends team messages Live, sends only on my say-so
Google Workspace, two entries Gmail, Drive and Calendar for two other businesses I work in Live
Media generation, two entries Video and transcription for a children's story brand Live

Nine of the fourteen can write to something a human also works in. Every one of those nine started read-only and earned its write scopes one at a time. The one that did not, back in August, is the story below.

A vintage telephone switchboard patch panel with woven cables plugged into brass sockets
Fourteen servers, nine of them able to write. Every one earned its write scopes one at a time except one.

What do you need before you start?

  • Claude Desktop, current version. Claude menu, Check for Updates. Not installed yet? Our Claude Desktop install guide covers every screen.
  • Node.js LTS, for local servers only. Anthropic's local server guide says to confirm it with node --version; if that returns nothing, install the LTS build from nodejs.org.
  • A plan that fits the data. Custom connectors work on Free, Pro, Max, Team and Enterprise, with Free limited to one. On Team and Enterprise only an Owner can add one to the organisation; members connect afterwards. Business data still belongs on a business plan.
  • Three written lines: what this server may read, what it may write, what it must never touch. If you cannot write them, you are not ready. That is Step 1.

How to add an MCP server to Claude Desktop, step by step

The order, and why

  1. Decide the blast radius on paper, before any screen.
  2. Add the server by the remote route or the local route.
  3. Wire the real example, GoHighLevel, with view scopes first.
  4. Set tool permissions so writes need approval.
  5. Prove it on reads for a week before any edit scope.
  6. Write the rules file and load it into a Project.

Step 1: Decide the blast radius before you touch a screen

Three lines. Read: the records it may look at. Write: the records it may change, and only its own. Never: the records a human owns. In a CRM that last line reads "never a deal a rep opened, never an appointment, never a conversation thread." You will paste these into the prompt at Step 6, so write them properly.

Step 2A: Add a remote server as a custom connector

The route for anything the vendor hosts. The clicks, per Anthropic's custom connector guide (updated 11 August 2026):

# Screen Action What to do
1 Main window CHANGE Open Settings. Windows: Ctrl + , or top-left menu, File, Settings. Mac: Claude menu, Settings.
2 Settings sidebar CHANGE Click Connectors, under the Customize heading.
3 Connectors page CHANGE Click Add (it may show as a plus sign), then Add custom connector.
4 Add custom connector dialog CHANGE Paste the vendor's https:// URL. If they gave you an OAuth client ID and secret, click Advanced settings and enter them. Click Add.
5 Vendor sign-in KEEP Read the permissions it asks for before you click Allow. That screen is the vendor stating the blast radius in its own words.
The catch nobody mentions

A custom connector is reached from Anthropic's cloud, not from your computer. The server has to be public, and the dialog has nowhere to type an authorisation header. If the vendor says "add a Bearer token header", which is exactly what GoHighLevel says, you need the local route.

Step 2B: Add a local server through the config file

The route for anything that needs a token, a file path, or a header. Per Anthropic's local server guide:

# Screen Action What to do
1 Claude menu (system menu bar, not the chat window) CHANGE Choose Settings.... This is the app's own settings window.
2 Settings window CHANGE Developer tab, then Edit Config. This creates claude_desktop_config.json if needed and opens its folder.
3 The config file CHANGE Open it in any text editor. Windows: %APPDATA%\Claude\claude_desktop_config.json. Mac: ~/Library/Application Support/Claude/claude_desktop_config.json. Add your server inside mcpServers. Save.
4 Claude Desktop CHANGE Quit completely and reopen. The file is only read on launch.
5 Chat window KEEP Click the + bottom-left of the message box, hover Connectors, click Manage connectors. Your server is listed with its tools.

The file shape, using Anthropic's own file-system example. Every local server follows it:

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

"filesystem" is the name you will see in Claude. "command" starts the server, and npx is why Node is a prerequisite. "args" is the package, then the one folder it may see; paths absolute, backslashes doubled on Windows. Notice it is one workspace folder, not your whole Documents. That is Step 1 applied to files: Anthropic's note says the server "runs with your user account permissions, so it can perform any file operations you can perform manually."

A single worn brass key lying on a dark wooden surface in low gold light
The token is a key to your software. It lives in one file on your machine and nowhere else.

Step 3: The real example, GoHighLevel

Our biggest connector is the CRM, and it is the one that bit us. GoHighLevel hosts an MCP server at https://services.leadconnectorhq.com/mcp/, and its setup article (updated 9 July 2026) says to send two headers: Authorization: Bearer plus a Private Integration Token, and locationId plus your sub-account ID.

To get the token: in the sub-account, Settings, then Private Integrations, Create New Integration, tick the scopes, Create Integration, copy the token once. The scope list is where Step 1 becomes real. It offers Contacts, Conversations, Opportunities, Calendars, Calendar Events and Payments, each split into View and Edit.

The rule we now run

View scopes only, on the first token. Run it a week. Prove it returns the right records. Then a second token with the one Edit scope the job needs, and only that one. On our account, automation gets Contacts Edit. It never gets Opportunities Edit. Not any more.

Because the custom connector dialog cannot carry those headers, we run it as a local entry that hands them to the hosted server through a small open-source bridge called mcp-remote. Placeholders where the secrets go:

{
  "mcpServers": {
    "gohighlevel": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://services.leadconnectorhq.com/mcp/",
        "--header", "Authorization: Bearer YOUR_PRIVATE_INTEGRATION_TOKEN",
        "--header", "locationId: YOUR_LOCATION_ID"
      ]
    }
  }
}

One entry per sub-account, which is why five of our fourteen are GoHighLevel. The plain warning: that token now sits in a text file on your machine. GoHighLevel says never expose it in "public repositories, screenshots, shared prompts, or client-side code." Add the chat window to that list. If Claude ever asks you to paste a token into the conversation, the answer is no.

Step 4: Set tool permissions before the first real request

The step I skipped in August. Once a server is connected, click the + in the message box, hover Connectors, open Tool access. Per Anthropic's connector guide, every tool takes one of three states:

Setting What it does Use it for
Always allow Runs without asking Reads only. Get contact, search conversations, list events.
Needs approval Shows you the exact call and waits Every write, for at least the first month.
Blocked Cannot be used at all Everything on your "never" line. Update opportunity. Delete anything.

When Claude asks, it shows the tool name and the arguments. Read them. Anthropic warns against "Allow always" on tools you have not vetted. I would go further: never on a write, full stop.

Rows of identical industrial toggle switches on an old brass electrical panel
Always allow, Needs approval, Blocked. Every write tool starts on Needs approval.

Step 5: Prove it on reads for a week

Ask small, checkable things. "Show me every field on our test contact." "List my appointments for tomorrow." Then open the software and check. After a week of clean reads, add one edit scope and put that write tool on Needs approval. And when it writes, verify by reading back. Do not trust the success message. Every one of the 1,334 calls in August returned success.

Step 6: Write the rules file and load it into a Project

A permission toggle stops the tool. It does not teach Claude why. For that you give it a written rule set that travels into every chat, and the fastest way to get one that fits your business is to have Claude interview you for it. Copy this prompt exactly:

Copy this prompt

ROLE: You are helping a business owner write the operating rules for an AI connector (an MCP server) before it is switched on against live business software.

CONTEXT: Some of the software's records are owned by people on the team (a sales rep's open deals, appointments, conversation threads) and must never be changed by automation. Others can be owned by automation (its own tags, notes and custom fields). The owner's three lines are: READ: [what it may look at]. WRITE: [what it may change]. NEVER: [what it must not touch].

TASK: Turn those lines into a complete rules file for a Claude Project. Include: the software's name; a table of every record type labelled read only, automation may write, or human-owned never touch; the rule that every write is verified by reading the record back; the rule that no token is ever pasted into a chat; a "before any bulk change" checklist that captures current state first so it can be undone; and what to do when a task would touch a human-owned record (recommend to the person, do not act).

QUESTIONS: Before writing, ask me up to five questions: which software, who owns which records, what the automation's job is, what a safe test record looks like, and how recommendations should reach the team.

FORMAT: Deliver one complete markdown file in a single code block, named connector-rules.md, with headings, the table and the checklists, ready to save and load into a Project.

WHAT YOU DO WITH WHAT IT GIVES YOU

Paste that into Claude and it will ask you up to five questions before it writes anything. Answer them properly, in your own words. Then it hands you back a finished file built around your business's connectors and the records each one may touch, not around our example.

That file is the thing worth keeping. Save it as connector-rules.md. The .md on the end just means markdown, which is a plain text file with a little structure, and it is the format AI tools read best. If that is new, we cover it in what an MD file actually is.

Now open a Claude Project and add that file under project instructions, or upload it as project knowledge. Every chat you start in that project begins already knowing it. You stop re-explaining yourself every morning, which is the entire point.

What happened the first time I wired MCP to a live business account?

I was the first salesperson through the door at a startup, scaled it to nine cities, 136 internal reps and over 70 contractors across six countries. I know what a rep's pipeline is. It is their month. And I spent years as an avionics technician on F-18s learning that an undocumented procedure is a snag report waiting to happen. This is what happens when you know both of those things and skip the procedure anyway.

On 11 August 2026 we ran a scoring job across our prospect database. It reads each contact, scores it against our ideal customer profile, and tags it. The job ran through a GoHighLevel MCP connection created with edit scopes across the board, because that was faster on the day. The job's own spec had a line in it: for contacts that score out, set the opportunity to lost.

It did exactly that. 1,334 contacts. Every opportunity attached to them moved to lost, including deals a rep had opened by hand from real phone conversations that week. The model had no way of knowing a contact that looked cold on paper was a live deal on the phone. Every call returned a success code.

Here's the part that hurts. We had not captured the prior stage of any opportunity before writing to it. No clean rollback. I repaired the board by hand, deal by deal, from the rep's notes. She did not lose the deals. She lost an afternoon, and I lost a good deal of confidence in a spec I had written myself.

The rule that came out of it is now the first line of every automation we build, and it overrides any spec that says otherwise: automation owns contact records, its own tags, its own custom fields and its own notes. It never touches an opportunity, an appointment, a task, a conversation thread, or a tag a human applied by hand. When a job would need to, it writes a note and surfaces a recommendation instead: "eleven retired contacts still have an open deal on your board, your call."

Two smaller lessons rode along. Some update calls replace a whole list rather than adding to it, so an "add tag" that is really a "set tags" silently wipes every tag on the record. And a 200 response means the server understood you, not that you were right. Read it back.

That is the connector we changed. The opportunity write path came out of the scoring job the next morning and has not gone back in. Steps 1, 4 and 5 are that afternoon, written as a procedure.

When something goes wrong

The server is not showing up, or the hammer icon is missing

Anthropic's checklist, in order: quit and reopen Claude Desktop completely; check the JSON for a missing comma or bracket (paste the file into Claude and ask it to find the error); make every path in args absolute; then read the logs. Windows: %APPDATA%\Claude\logs. Mac: ~/Library/Logs/Claude. mcp.log covers connections; mcp-server-NAME.log holds each server's own errors.

ENOENT, or ${APPDATA} appears inside a path in the log

A Windows quirk. Add an "env" block to that server's entry with "APPDATA" set to the full path, C:\\Users\\yourname\\AppData\\Roaming\\, and relaunch. If npx itself fails, npm may not be installed globally; Anthropic's fix is npm install -g npm.

Tool calls fail silently

Connected, but every request dies. Check that server's log file, run the server's command by hand in a terminal to see the real error, then restart Claude Desktop.

The custom connector will not connect

Either the server is not reachable from the public internet, because custom connectors connect from Anthropic's side, or it needs a header the dialog cannot send. Both mean the local route.

Every call returns 403

The token lacks the scope, was revoked, or points at a sub-account that no longer exists. Ours is the third one. Prune the entry; every dead server still gets started on launch.

Frequently asked questions

How can I add a custom MCP server to Claude?

Settings, Connectors under Customize, Add, then Add custom connector, paste the URL, click Add. If the vendor needs a token header it will not work as a custom connector; add it as a local entry in claude_desktop_config.json.

How do I connect Claude Desktop to a remote MCP server?

Same path. Remote servers are the ones the vendor hosts, and a custom connector is Claude's name for the connection to one. Sign in with the vendor once and the tools appear in the + menu under Connectors.

Where is claude_desktop_config.json on Windows?

%APPDATA%\Claude\claude_desktop_config.json. Paste that into the File Explorer address bar. Settings, Developer, Edit Config lands in the same folder.

What is an MCP server in simple terms?

A small translator between Claude and one piece of software. Claude asks in plain language, the server makes the exact request that software understands, and hands the answer back. One server per app.

What is the difference between an MCP server and an API?

The API is the set of doors the software company left open for other programs. The MCP server knows which doors exist, holds the key, and speaks the door's language so Claude does not have to.

Is it safe to connect Claude to my CRM?

As safe as the scopes and permissions you set. View-only token first, writes on Needs approval, nothing touching human-owned records, every write read back. Skip that and the worst case is the August story above.

What to do this week

  1. Write the three lines for the one piece of software you most want Claude inside. Read, write, never.
  2. Add that one server, and set every write tool to Needs approval before the first request.
  3. Run the prompt in Step 6, save connector-rules.md, and load it into a Project.

One server. Reads only. A week. That is the difference between an assistant that runs your business and one that rewrites it.

If the CRM side is where you want this to land, the customer-facing version, where the same rules keep an AI receptionist and follow-up system inside its lane, is what we build as AI for your customers.

Want the connectors wired with you, with the rules file written first?

That is what an AI integration with ATP AI, Sales and Marketing is: your software, your machine, view scopes first, the blast radius on paper before anything is switched on. Calgary based, working with owners across Canada, the United States, Mexico, Panama and the Philippines.

Book an AI integration call

Want more guides like this in your Google results?