# Claude Code MCP Server Management > Source: https://code.claude.com/docs/en/mcp (fetched 2026-02-06) ## Quick Reference - Managing Servers ### CLI Commands ```bash # List all configured servers claude mcp list # Get details for a specific server claude mcp get # Remove a server claude mcp remove # Add servers claude mcp add --transport http claude mcp add --transport sse claude mcp add --transport stdio -- [args...] claude mcp add-json '' # Import from Claude Desktop claude mcp add-from-claude-desktop # Reset project approval choices claude mcp reset-project-choices ``` ### In-Session Management - **`/mcp`** - View and manage all MCP servers, check status, authenticate, reconnect - **`@` mentions** - Toggle MCP servers on/off during a session (enable/disable) ### Restarting After Changes After editing config files directly, restart Claude Code for changes to take effect. --- ## Installing MCP Servers ### Option 1: Remote HTTP Server (Recommended) ```bash claude mcp add --transport http # With Bearer token claude mcp add --transport http secure-api https://api.example.com/mcp \ --header "Authorization: Bearer your-token" ``` ### Option 2: Remote SSE Server (Deprecated) ```bash claude mcp add --transport sse # With auth header claude mcp add --transport sse private-api https://api.company.com/sse \ --header "X-API-Key: your-key-here" ``` ### Option 3: Local stdio Server ```bash claude mcp add [options] -- [args...] # Example claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \ -- npx -y airtable-mcp-server ``` **Important: Option ordering** - All options (`--transport`, `--env`, `--scope`, `--header`) must come **before** the server name. The `--` separates the server name from the command/args. ### Add from JSON ```bash claude mcp add-json '' # HTTP example claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp","headers":{"Authorization":"Bearer token"}}' # stdio example claude mcp add-json local-tool '{"type":"stdio","command":"/path/to/server","args":["--flag"],"env":{"KEY":"value"}}' ``` ### Windows Note On native Windows (not WSL), local MCP servers using `npx` require the `cmd /c` wrapper: ```bash claude mcp add --transport stdio my-server -- cmd /c npx -y @some/package ``` --- ## MCP Installation Scopes ### Local Scope (Default) Private to you, only accessible in current project. Stored in `~/.claude.json` under project path. ```bash claude mcp add --transport http stripe --scope local https://mcp.stripe.com ``` ### Project Scope Shared via `.mcp.json` at project root (checked into version control). ```bash claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp ``` `.mcp.json` format: ```json { "mcpServers": { "shared-server": { "command": "/path/to/server", "args": [], "env": {} } } } ``` ### User Scope Available across all projects, private to your account. Stored in `~/.claude.json`. ```bash claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic ``` ### Precedence Local > Project > User (local overrides project, project overrides user). --- ## Environment Variable Expansion in .mcp.json Supported syntax: - `${VAR}` - Expands to value of VAR - `${VAR:-default}` - Uses default if VAR not set Works in: `command`, `args`, `env`, `url`, `headers` ```json { "mcpServers": { "api-server": { "type": "http", "url": "${API_BASE_URL:-https://api.example.com}/mcp", "headers": { "Authorization": "Bearer ${API_KEY}" } } } } ``` --- ## OAuth Authentication ```bash # Add server requiring auth claude mcp add --transport http sentry https://mcp.sentry.dev/mcp # Then authenticate in Claude Code > /mcp # Follow browser login flow ``` ### Pre-configured OAuth Credentials For servers that don't support dynamic client registration: ```bash claude mcp add --transport http \ --client-id your-client-id --client-secret --callback-port 8080 \ my-server https://mcp.example.com/mcp ``` --- ## MCP Tool Search Automatically enabled when MCP tool descriptions exceed 10% of context window. Tools are loaded on-demand instead of all upfront. Configure with `ENABLE_TOOL_SEARCH` environment variable: | Value | Behavior | |-------|----------| | `auto` | Activates at 10% threshold (default) | | `auto:` | Custom threshold percentage | | `true` | Always enabled | | `false` | Disabled, all tools loaded upfront | ```bash ENABLE_TOOL_SEARCH=auto:5 claude # 5% threshold ENABLE_TOOL_SEARCH=false claude # Disable ``` --- ## MCP Output Limits - Warning threshold: 10,000 tokens - Default max: 25,000 tokens - Configure with: `MAX_MCP_OUTPUT_TOKENS=50000` --- ## Using MCP Resources Reference resources with `@` mentions: ``` > Can you analyze @github:issue://123 and suggest a fix? > Compare @postgres:schema://users with @docs:file://database/user-model ``` --- ## Using MCP Prompts as Commands MCP prompts become available as `/mcp__servername__promptname` commands: ``` > /mcp__github__list_prs > /mcp__github__pr_review 456 ``` --- ## Dynamic Tool Updates Claude Code supports MCP `list_changed` notifications, allowing servers to dynamically update available tools without reconnecting. --- ## Claude Code as MCP Server ```bash claude mcp serve ``` Claude Desktop config: ```json { "mcpServers": { "claude-code": { "type": "stdio", "command": "claude", "args": ["mcp", "serve"], "env": {} } } } ``` --- ## Plugin-provided MCP Servers Plugins can bundle MCP servers in `.mcp.json` at plugin root or inline in `plugin.json`. Servers start automatically when plugin is enabled. Use `${CLAUDE_PLUGIN_ROOT}` for plugin-relative paths. --- ## Managed MCP Configuration (Enterprise) ### Option 1: Exclusive Control - managed-mcp.json Deploy to system directory: - macOS: `/Library/Application Support/ClaudeCode/managed-mcp.json` - Linux/WSL: `/etc/claude-code/managed-mcp.json` - Windows: `C:\Program Files\ClaudeCode\managed-mcp.json` Users cannot add/modify/use any servers not in this file. ### Option 2: Policy-Based Control Use `allowedMcpServers` and `deniedMcpServers` in managed settings. Supports restriction by: - Server name (`serverName`) - Command (`serverCommand`) - exact match - URL pattern (`serverUrl`) - supports wildcards with `*` Denylist takes absolute precedence over allowlist. --- ## Configuration File Locations | Scope | Location | |-------|----------| | User + Local MCP | `~/.claude.json` | | Project MCP | `.mcp.json` (project root) | | General local settings | `.claude/settings.local.json` (project dir) | | Managed MCP | System directories (see above) | --- ## Tips - Use `--scope` flag: `local` (default), `project` (shared), `user` (global) - Set env vars with `--env KEY=value` - Configure startup timeout: `MCP_TIMEOUT=10000 claude` - Use `/mcp` to authenticate with OAuth servers - Use `/mcp` to reconnect to servers