Claude MCP

Claude is a host, not a server: it consumes MCP servers rather than publishing one. Commands, scopes, config formats and connector rules below are read from Claude Code's MCP docs and Anthropic's help centre on 2 September 2026.

Interactive examples · No account is connected on this page

Updated

Claude MCP covers three surfaces with three different mechanics. In Claude Code you register a server with claude mcp add, choosing an http, sse, stdio or ws transport and a local, project or user scope. Claude Desktop installs local servers as single-click .mcpb extensions. On claude.ai, Cowork and the mobile apps, a remote server is added as a custom connector.

Try a Claude MCP task

Pick an example to see which Claude MCP tools a task would call and what the result looks like. Examples are illustrative; nothing on this page connects to Claude.

Claude

Add an MCP server to Claude

Adding an MCP server to Claude takes three decisions: the transport the server speaks (http, sse, stdio or ws), the scope that decides who else gets it (local, project or user), and how it authenticates. In Claude Code all three go into one claude mcp add command; Claude Desktop and the apps use extensions and custom connectors instead.

Pick the transport the server actually speaks

Remote servers are added with --transport http, or --transport sse for the older SSE style, which the docs mark as deprecated. Local servers use --transport stdio, where everything after the -- separator is the command Claude runs. WebSocket servers have no flag of their own; they go in through add-json with a type of ws.

claude mcp add --transport http <name> <url>
claude mcp add --transport sse <name> <url>
claude mcp add [options] <name> -- <command> [args...]

Run the add command

The documented examples are worth copying literally, because the shape of each differs. A remote server takes a URL and optional headers. A local one takes environment variables before the separator and the command after it.

claude mcp add --transport http notion https://mcp.notion.com/mcp

claude mcp add --transport http secure-api https://api.example.com/mcp \
  --header "Authorization: Bearer your-token"

claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
  -- npx -y airtable-mcp-server

Choose a scope, because it decides who else gets the server

Scope is the setting people get wrong. Local is the default and applies to the current project only, stored in ~/.claude.json. User applies to all your projects, stored in the same file. Project writes a .mcp.json in the repository root, which means everyone who clones it is offered the server and has to approve it first.

--scope local      # default: current project only
--scope project    # shared via .mcp.json in the project root
--scope user       # all your projects

Commit a .mcp.json for the team

Project scope writes this file, and you can also write it by hand. Claude Code expands ${VAR} and ${VAR:-default} inside command, args and env for stdio servers, and inside url and headers for HTTP servers, so the file can be committed without the secrets in it. A missing variable with no default produces a warning and the literal ${VAR} text.

{
  "mcpServers": {
    "shared-server": {
      "type": "http",
      "url": "https://example.com/mcp"
    },
    "secured-api": {
      "type": "http",
      "url": "https://api.example.com/mcp",
      "headers": {
        "Authorization": "Bearer ${API_KEY}"
      }
    }
  }
}

Authenticate

Run /mcp inside a session to see every server with its status, then pick one and complete the OAuth flow in the browser. The same thing is available from the shell, which is what you want on a machine with no browser. Credentials are cleared with logout.

claude mcp login <name>
claude mcp login <name> --no-browser
claude mcp logout <name>

Official documentation: Claude Code MCP docs.

Three places to add a server, three sets of rules

Claude has three places to add a server and each follows different rules. Claude Code runs local commands or remote URLs from ~/.claude.json or a committed .mcp.json. Claude Desktop installs local servers as .mcpb extensions with a built-in Node.js runtime. Custom connectors on claude.ai, Cowork and the apps take only a remote URL and authenticate with OAuth.

What differsClaude Code (CLI)Claude Desktop extensionsCustom connector (claude.ai, Cowork, apps)
How you add itclaude mcp add, or claude mcp add-json for a full config stringSettings > Extensions, then Browse extensions or Install Extension…Customize > Connectors, then + and Add custom connector
Where the server runsA local command, or a remote URLLocally, packaged as a .mcpb fileRemotely; a URL is the only input
Where the config lives~/.claude.json for local and user scope; .mcp.json in the repo for project scopemanifest.json inside the .mcpb packageYour Claude account, not a file on disk
Secrets--env and --header flags, or ${VAR} expansion in .mcp.jsonFields marked "sensitive": true are encrypted with the operating system's secure storageOAuth at connect time; Claude never sees your password
Runtime you have to provideWhatever the command needs, on your machineNone: the app has a built-in Node.js environment and supports Node.js, Python and binary serversNone; the server's own host runs it
Who else can use itYou, or anyone who clones a repo carrying .mcp.jsonYou, on that machineFree (one connector), Pro, Max, Team and Enterprise plans

Read from code.claude.com/docs/en/mcp and support.claude.com on 2026-09-02. Flags and menu paths change between releases; check the docs before pasting a command into a shared runbook.

The parts of Claude's MCP support people miss

Beyond claude mcp add, Claude Code ships the commands and settings that make a server manageable: list, get, remove and reset-project-choices, statuses that explain why a connection failed, an import from Claude Desktop, per-server timeouts and deferred loading, OAuth scoping and script-generated headers. It can also run as an MCP server itself with claude mcp serve.

Server management is four commands

claude mcp list shows every configured server, claude mcp get <name> gives one in detail, claude mcp remove <name> deletes it, and claude mcp reset-project-choices clears the approvals you gave to a .mcp.json.

Statuses that explain a failure

claude mcp list distinguishes Connected, Needs authentication, Failed to connect with the HTTP status or error code, Pending approval for an unapproved project-scoped server, Rejected, Disabled for this project, and not configured for an empty URL.

Importing what you already set up

claude mcp add-from-claude-desktop pulls servers over from Claude Desktop and lets you pick which ones, instead of retyping every stdio command.

Claude Code can be a server too

claude mcp serve runs Claude Code itself as an MCP server, which inverts the usual direction: another host consumes Claude Code's tools rather than the other way round.

OAuth details you can pin down

A server entry accepts an oauth object with clientId, callbackPort, authServerMetadataUrl and scopes, so you can restrict a connection to exactly the permissions it needs rather than everything the provider offers.

Headers from a script

headersHelper points at an executable that produces the auth headers, which is how a server behind a short-lived internal token gets connected without a secret sitting in the config file.

Per-server timeout and load behaviour

timeout sets a hard wall-clock limit per tool call, with a minimum of 1000 ms. alwaysLoad set to false defers connection until the first tool use instead of at startup, which keeps slow servers out of your session start.

Reserved names and duplicate scopes

Claude Code warns about hidden whitespace in config values, the same server name in multiple scopes pointing at different endpoints, and the reserved names workspace, claude-in-chrome, computer-use, Claude Preview and Claude Browser.

What is Claude MCP?

Claude MCP is how Claude, as an MCP host, connects to Model Context Protocol servers. Claude does not publish a server of its own for this; it consumes servers that other vendors and teams publish, and calls their tools during a conversation or coding session.

Where you add a server decides the mechanics. Claude Code takes a command-line entry with a transport and a scope, Claude Desktop installs local servers as .mcpb extensions, and claude.ai, Cowork and the apps accept a remote server URL as a custom connector.

Claude Code can also run as a server itself with claude mcp serve, which is the reverse direction: another host consumes Claude Code’s tools.

How to connect Claude MCP

  1. Pick the surface

    Claude Code for command-line and project servers, Claude Desktop for local .mcpb extensions, or a custom connector for a remote URL in claude.ai, Cowork and the apps.

  2. Add the server and choose a scope

    Use claude mcp add with the server’s transport, and choose local, project or user scope deliberately.

  3. Authenticate and check the status

    Complete OAuth with /mcp, then confirm the server reads Connected in claude mcp list before relying on it.

See the full Claude MCP setup

Claude MCP use cases

Give Claude Code access to your issue tracker

Add a remote server such as GitHub or Notion with one claude mcp add command, authenticate with /mcp, then ask Claude to read an issue before it edits code. The GitHub MCP guide lists the toolsets that load by default.

Standardise MCP servers across a team

Commit a project-scoped .mcp.json so everyone who clones the repository is offered the same servers. Use ${VAR} expansion for tokens and claude mcp reset-project-choices when someone needs to re-approve.

Move Claude Desktop servers into Claude Code

Run claude mcp add-from-claude-desktop and pick which servers to import instead of retyping every stdio command.

Connect a remote server in the Claude apps

Add a custom connector under Customize > Connectors with the server URL. Free plans are limited to one custom connector; Team and Enterprise owners add connectors in Organization settings first.

Claude MCP questions

The questions below cover what people ask most once a server is connected: how a connector differs from an MCP server, whether Claude Desktop needs Node.js installed, which plans can add custom connectors, how to share servers with a team through .mcp.json, whether any server is safe to connect, and what to change when one slows down session start.

What is the difference between a connector and an MCP server?

Almost nothing, on the wire. Anthropic's docs describe directory connectors as using the same MCP infrastructure as Claude Code, and say you can add any remote server listed in the directory with claude mcp add. Connector is the product word used in the Claude apps; MCP server is the protocol word used in the CLI. The difference that matters is packaging, not protocol.

Do I need Node.js installed for Claude Desktop extensions?

No. Anthropic's help centre states that Claude Desktop includes a built-in Node.js environment, so Node.js installation isn't required, and that desktop extensions support Node.js, Python and binary MCP servers. Claude Code is different: there, a stdio server runs whatever command you gave it, using whatever runtime is on your machine.

Which plans can add a custom connector?

Custom connectors using remote MCP are documented as available on Claude, Cowork and Claude Desktop for Free, Pro, Max, Team and Enterprise plans, with Free users limited to one custom connector. Team and Enterprise owners add connectors under Organization settings > Connectors first, and members then connect individually.

How do I share MCP servers with my team?

Use project scope. claude mcp add --scope project writes a .mcp.json in the repository root, which everyone who clones the repo is offered and must approve — a server sitting unapproved shows as Pending approval in claude mcp list. Keep secrets out of the committed file by using ${VAR} and ${VAR:-default}, which Claude Code expands in command, args, env, url and headers.

Is it safe to connect any MCP server?

No, and Anthropic says so directly. Claude Code's docs warn to verify you trust each server before connecting it, because servers that fetch external content can expose you to prompt injection risk. The help centre repeats it for connectors: only connect to servers built and hosted by organisations you trust, since malicious MCP servers may include hidden instructions that try to make Claude perform unintended actions.

A server is slow to start and blocks my session. What can I change?

Two knobs. In .mcp.json, set alwaysLoad to false so the server connects on first tool use instead of at startup, and raise timeout if individual calls are legitimately long. There is also an MCP_TIMEOUT environment variable for the server startup timeout in milliseconds, and MAX_MCP_OUTPUT_TOKENS for capping how much a tool may return.

Connecting a server is the easy half

Once Claude can reach your tools, the open question is which sequence of calls should happen without a human in the loop. That is an agent design problem, not a config problem: deciding the trigger, the order of steps, what gets written back and which actions still need a person to approve them.