MCP로 할 수 있는 것
MCP 서버가 연결되면 Claude Code에 다음을 요청할 수 있습니다:- 이슈 추적기에서 기능 구현: “JIRA 이슈 ENG-4521에 설명된 기능을 추가하고 GitHub에서 PR을 생성하세요.”
- 모니터링 데이터 분석: “Sentry와 Statsig을 확인하여 ENG-4521에 설명된 기능의 사용량을 확인하세요.”
- 데이터베이스 쿼리: “PostgreSQL 데이터베이스를 기반으로 기능 ENG-4521을 사용한 무작위 사용자 10명의 이메일을 찾으세요.”
- 디자인 통합: “Slack에 게시된 새로운 Figma 디자인을 기반으로 표준 이메일 템플릿을 업데이트하세요.”
- 워크플로우 자동화: “이 10명의 사용자를 새로운 기능에 대한 피드백 세션에 초대하는 Gmail 초안을 생성하세요.”
- 외부 이벤트에 반응: MCP 서버는 채널로도 작동할 수 있으며, 세션에 메시지를 푸시하므로 Claude는 자리를 비운 동안 Telegram 메시지, Discord 채팅 또는 webhook 이벤트에 반응할 수 있습니다.
MCP 서버 찾기 및 구축
Anthropic Directory에서 검토된 커넥터를 찾아보세요. Directory 커넥터는 Claude Code와 동일한 MCP 인프라를 사용하므로claude mcp add를 사용하여 여기에 나열된 모든 원격 서버를 추가할 수 있습니다.
자신만의 서버를 구축하려면 프로토콜 기본 사항에 대한 MCP 서버 가이드와 인증, 테스트 및 Directory 제출에 대한 Claude 커넥터 구축 문서를 참조하세요.
공식 mcp-server-dev 플러그인을 사용하여 Claude가 서버를 스캐폴드하도록 할 수도 있습니다.
1
플러그인 설치
VS Code 확장 프로그램이나 데스크톱 앱에서는 이 단계 대신 플러그인 설치를 따르세요. 터미널에서는 설치가 실패하면 Claude Code가 보고하는 메시지와 일치하는지 확인하세요:
claude를 실행하여 Claude Code를 시작한 다음 프롬프트에 다음을 입력하세요:Marketplace "claude-plugins-official" not found:/plugin marketplace add anthropics/claude-plugins-official로 마켓플레이스를 추가한 다음 설치를 다시 시도하세요.Plugin "<name>" not found in marketplace "claude-plugins-official": 로컬에 있는 마켓플레이스 카탈로그 사본이 오래되었을 수 있습니다./plugin marketplace update claude-plugins-official로 카탈로그를 새로 고친 다음 설치를 다시 시도하세요. 재시도 후에도 같은 메시지가 출력되면 Plugin not found in marketplace를 참조하세요.
Run /reload-plugins to apply.를 보고하면 Claude Code가 해당 리로드를 실행합니다. 리로드에서 다음 메시지가 대화를 다시 읽을 것이라고 경고하면 /reload-plugins --force를 실행하세요.2
빌드 스킬 실행
MCP 서버 설치
MCP 서버는 필요에 따라 여러 가지 방식으로 구성할 수 있습니다:옵션 1: 원격 HTTP 서버 추가
HTTP 서버는 원격 MCP 서버에 연결하기 위한 권장 옵션입니다. 이는 클라우드 기반 서비스에 가장 널리 지원되는 전송 방식입니다..mcp.json, ~/.claude.json 또는 claude mcp add-json을 통해 JSON으로 MCP 서버를 구성할 때, type 필드는 http의 별칭으로 streamable-http를 허용합니다. MCP 사양은 이 전송에 대해 streamable-http라는 이름을 사용하므로 서버 설명서에서 복사한 구성이 수정 없이 작동합니다.
url은 있지만 type이 없는 JSON 항목은 구성 오류입니다. Claude Code는 type이 없는 항목을 stdio 서버로 읽기 때문입니다. Claude Code는 해당 서버를 건너뛰고 MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry를 보고합니다.
SDK 호스트 애플리케이션 (예: Agent SDK 애플리케이션 또는 데스크톱 앱)만 인프로세스 "type": "sdk" 서버를 등록할 수 있습니다. Claude Code는 .mcp.json, ~/.claude.json 또는 설정의 "type": "sdk" 항목을 건너뛰고 Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register를 보고합니다.
--output-format stream-json 실행에서 Claude Code는 또한 system/init 이벤트의 mcp_server_errors 필드에서 건너뛴 --mcp-config 항목을 보고하므로 스크립트가 서버가 로드되지 않았음을 감지할 수 있습니다. 이는 Claude Code v2.1.219 이상이 필요합니다.
옵션 2: 원격 SSE 서버 추가
일부 서비스는 여전히 SSE 엔드포인트만 노출합니다. HTTP 서버와 동일한claude mcp add --transport http <name> <url> 명령으로 추가하세요. Claude Code는 HTTP 전송을 먼저 시도하고 서버가 이를 허용하지 않을 때 SSE로 전환합니다. 자동 전환에는 Claude Code v2.1.265 이상이 필요합니다.
이전 버전에서 또는 SSE를 통해 직접 연결하려면 대신 --transport sse를 전달하세요:
옵션 3: 로컬 stdio 서버 추가
Stdio 서버는 컴퓨터에서 로컬 프로세스로 실행됩니다. 시스템에 직접 액세스하거나 사용자 정의 스크립트가 필요한 도구에 이상적입니다. Claude Code는 생성된 서버의 환경에서CLAUDE_PROJECT_DIR을 프로젝트 루트로 설정하므로 서버는 작업 디렉터리에 의존하지 않고 프로젝트 상대 경로를 확인할 수 있습니다. 이는 훅이 CLAUDE_PROJECT_DIR 변수에서 받는 것과 동일한 디렉터리입니다. 서버 프로세스 내에서 읽으세요. 예를 들어 Node에서는 process.env.CLAUDE_PROJECT_DIR 또는 Python에서는 os.environ["CLAUDE_PROJECT_DIR"]입니다.
CLAUDE_PROJECT_DIR은 안정적인 프로젝트 루트이며 세션 중에 작업 디렉터리를 추가하거나 제거할 때 변경되지 않습니다. 자신의 파일 시스템 액세스를 허용된 디렉터리 집합으로 제한하는 서버는 대신 MCP roots/list 요청을 구현해야 합니다. Claude Code는 roots/list에 세션의 시작 디렉터리와 --add-dir, /add-dir 또는 additionalDirectories 설정으로 부여한 모든 추가 작업 디렉터리로 응답합니다. Claude Code는 해당 집합이 변경될 때 notifications/roots/list_changed를 보냅니다.
이 변수는 Claude Code 자체의 환경이 아닌 서버의 환경에 설정되므로 프로젝트 범위 .mcp.json 항목 또는 ~/.claude.json의 로컬 범위 또는 사용자 범위 서버 항목의 command 또는 args에서 ${VAR} 확장을 통해 참조하려면 ${CLAUDE_PROJECT_DIR:-.}와 같은 기본값이 필요합니다. 플러그인 제공 MCP 구성은 ${CLAUDE_PROJECT_DIR}을 직접 대체하며 기본값이 필요하지 않습니다.
Stdio 서버의 경우,
-- (이중 대시)는 Claude의 자체 옵션(예: --transport, --env, --scope)과 서버를 실행하는 명령 및 인수를 구분합니다. -- 이후의 모든 것은 서버에 그대로 전달됩니다.예를 들어:claude mcp add --transport stdio myserver -- npx server→npx server실행claude mcp add --env KEY=value --transport stdio myserver -- python server.py --port 8080→ 환경에서KEY=value를 사용하여python server.py --port 8080실행
--가 없으면 Claude Code는 위의 --port와 같은 서버의 플래그를 자신의 옵션으로 구문 분석하려고 시도합니다.--env는 여러 KEY=value 쌍을 허용합니다. 서버 이름이 --env 직후에 오면 CLI는 이름을 다른 쌍으로 읽고 거부하므로 --env와 서버 이름 사이에 최소한 하나의 다른 옵션(예: --transport stdio)을 배치하세요.Claude Code가 stdio 서버를 중지하는 방법
Claude Code는 세션이 종료될 때와 같이 stdio 서버의 연결을 끊을 때 서버 프로세스에 신호를 보내고, 강제로 중지하기 전에 프로세스가 종료될 때까지 잠시 기다립니다. 서버가 종료 시 상태를 저장하거나 잠금 파일을 제거하는 경우 플랫폼에 맞는 신호를 처리하고 그 시간 내에 완료하세요:- macOS 및 Linux: Claude Code는
SIGINT를 보내고, 100밀리초 후에도 프로세스가 실행 중이면SIGTERM을, 그로부터 400밀리초가 더 지나면SIGKILL을 보냅니다. - Windows: Claude Code는 서버의 stdin을 닫고, 300밀리초 후에도 프로세스가 실행 중이면 서버의 프로세스 트리를 종료합니다.
옵션 4: 원격 WebSocket 서버 추가
WebSocket 서버는 지속적인 양방향 연결을 유지하므로 Claude에 예고 없이 이벤트를 푸시하는 원격 MCP 서버에 적합합니다. 서버가 요청에만 응답하는 경우 HTTP를 대신 사용하세요. HTTP는 OAuth 및claude mcp add --transport 플래그를 지원하지만 WebSocket은 둘 다 지원하지 않습니다.
.mcp.json 또는 claude mcp add-json으로 WebSocket 서버를 구성하세요:
type: "ws" 항목은 http와 동일한 url, headers, headersHelper, timeout 및 alwaysLoad 필드를 허용합니다. 인증은 헤더 전용이므로 headers에 정적 토큰을 전달하거나 headersHelper를 사용하여 연결 시 토큰을 생성하세요. claude mcp add --transport 플래그는 ws를 허용하지 않습니다.
다른 클라이언트용으로 작성된 설정 지침에서 서버 추가
MCP 서버는 Claude Code에만 해당하지 않으므로 서버의 설정 지침은 Claude Desktop, Cursor 또는 다른 MCP 클라이언트용으로 작성될 수 있으며claude mcp add 명령을 제공하지 않을 수 있습니다. 어쨌든 서버를 추가하려면 해당 지침에서 URL, 시작 명령 또는 JSON 블록을 찾으세요:
- URL (예:
https://mcp.example.com/mcp): 서버는 원격입니다. - 시작 명령 (예:
npx -y @example/mcp-server): 서버는 컴퓨터에서 실행됩니다. mcpServersJSON 블록: 다른 클라이언트의 설정 파일용으로 작성된 구성입니다.
--scope project 또는 --scope user를 추가하지 않는 한 로컬 범위에 씁니다.
URL에서 서버 추가
URL은 서버가 원격임을 의미합니다.https:// 엔드포인트의 경우 --transport http로 추가하거나, 지침에서 엔드포인트가 SSE를 사용한다고 말할 때 옵션 2를 따르세요. wss:// 엔드포인트의 경우 --transport가 ws를 허용하지 않으므로 대신 옵션 4를 사용하세요:
--header로 전달하세요.
npx, uvx 또는 바이너리 명령에서 서버 추가
시작 명령은 서버가 로컬 stdio 프로세스로 실행됨을 의미합니다. 전체 명령을 -- 뒤에 배치하여 Claude Code가 -y와 같은 플래그를 서버를 시작하는 명령에 전달하도록 하고 자신의 옵션으로 읽지 않도록 하세요. 지침에서 요청하는 환경 변수를 --env로 전달하세요. 서버 이름 뒤에 -- 앞에:
-- 구분자를 완전히 다룹니다.
mcpServers JSON 블록에서 서버 추가
Claude Desktop과 같은 다른 MCP 클라이언트용으로 작성된 mcpServers 블록은 Claude Code가 읽는 래퍼 키와 항목 형태를 사용합니다. claude mcp add-json에 mcpServers 내부의 객체를 전달하세요. 래퍼는 아닙니다. 두 항목은 먼저 수리가 필요합니다:
type이 없는url: 엔드포인트와 일치하도록"type": "http","type": "sse"또는"type": "ws"를 추가하세요. Claude Code는type이 없는 항목을 stdio 서버로 읽으므로type이 없는url항목은 실패합니다.- 문자, 숫자, 하이픈 및 밑줄 이외의 문자가 있는 키: 해당 문자만 사용하는 서버 이름을 선택하세요. 그렇지 않으면 키가 서버 이름입니다.
add-json의 --scope 플래그를 다룹니다. 대신 팀과 공유하려면 --scope project를 추가하거나 프로젝트 루트의 .mcp.json에서 mcpServers 아래에 항목을 추가하고 커밋하세요. 프로젝트 범위는 Claude Code가 해당 파일을 로드하고 승인하는 방법을 다룹니다.
각 claude mcp add 및 claude mcp add-json 명령은 성공 시 Added ... 줄을 인쇄합니다. Claude Code가 연결되었는지 확인하려면 claude mcp get <name>을 실행하세요. 서버 상태는 표시되는 상태 및 .mcp.json 서버의 승인 단계를 다룹니다.
서버 관리
구성한 후에는 다음 명령으로 MCP 서버를 관리할 수 있습니다:서버 상태
claude mcp add는 Added ... 줄을 인쇄하여 성공적인 추가를 확인합니다. 이는 구성이 작성되었음을 의미합니다. 명령이 was not saved 메시지를 인쇄하면 MCP 서버가 저장되지 않았거나 제거됨을 참조하세요. may not have been saved 메시지의 경우 MCP 서버가 저장되지 않았거나 제거되었을 수 있음을 참조하세요.
claude mcp list는 나열하는 각 서버 옆에 ✔ Connected, ! Needs authentication 또는 ✘ Failed to connect와 같은 상태를 표시합니다. 실패 상태는 Claude Code가 해당 서버에 연결할 수 없음을 의미하며, list 명령이 실패했음을 의미하지 않습니다.
이 목록의 상태는 연결 시도가 아닌 구성 결정을 보고하므로 Claude Code는 서버에 연결하지 않고 인쇄합니다:
⏸ Pending approval (run `claude` to approve): 아직 승인하지 않은.mcp.json의 프로젝트 범위 서버입니다. Claude Code는claude mcp list와claude mcp get <name>모두에 이를 표시합니다.claude를 대화형으로 실행하여 검토하고 승인합니다.✘ Rejected (see disabledMcpjsonServers in settings):disabledMcpjsonServers항목이 거부하는.mcp.json서버입니다. Claude Code는claude mcp get <name>에만 표시합니다.⊘ Disabled for this project (re-enable via /mcp): 프로젝트의disabledMcpServers목록이 이름을 지정하는 서버입니다. Claude Code는claude mcp list및claude mcp get <name>모두에 표시합니다./mcp패널에서 서버를 다시 켜세요.
프로젝트 서버 승인 및 워크스페이스 신뢰
claude mcp list 및 claude mcp get은 claude를 실행하고 워크스페이스 신뢰 대화 상자를 수락하여 워크스페이스를 신뢰할 때까지 .mcp.json 승인을 저장소에 체크인되지 않은 설정 파일에서만 읽습니다. 복제된 저장소는 자신의 서버를 승인할 수 없습니다: 프로젝트의 .claude/settings.json에 커밋된 enableAllProjectMcpServers 또는 enabledMcpjsonServers는 신뢰할 수 없는 폴더에서 무시되며, 서버는 연결되고 상태 확인되는 대신 ⏸ Pending approval으로 유지됩니다.
이러한 소스의 승인은 신뢰할 수 없는 폴더에서도 적용됩니다:
- 사용자
~/.claude/settings.json - 관리형 설정
--settings로 전달된 설정
.claude/settings.local.json의 승인을 적용하지만, git을 실행하여 파일이 추적되는지 확인하며, 신뢰할 수 있는 폴더에서만 해당 확인을 실행합니다. 신뢰한 적이 없는 폴더에서 Claude Code는 파일의 승인을 적용하기 전에 신뢰 대화 상자를 기다립니다. 단, 폴더가 자신의 구성 홈인 경우는 제외됩니다: 홈 디렉터리 또는 .claude를 CLAUDE_CONFIG_DIR으로 설정한 디렉터리입니다. v2.1.207 이전에는 Claude Code가 신뢰한 적이 없는 폴더에서도 추적되지 않은 .claude/settings.local.json의 승인을 적용했습니다.
모든 설정 파일의 disabledMcpjsonServers 항목은 여전히 서버를 거부합니다.
서버 상태 세부 정보
/mcp에서 (서버의 메뉴 포함) 및 /plugin 관리자에서, 이전에 사용한 원격 HTTP 또는 SSE 서버는 cached 2h ago · connects on first use · 5 tools와 같은 cached 상태를 표시할 수 있습니다. Claude Code는 이전 세션에서 저장된 검색 캐시에서 서버의 도구 목록을 로드했으며, Claude Code는 Claude가 서버의 도구 중 하나를 처음 호출할 때 서버에 연결합니다. 도구는 첫 번째 메시지부터 사용 가능하므로 아무것도 할 필요가 없습니다. 검색 캐시 및 cached 상태에는 Claude Code v2.1.221 이상이 필요합니다.
검색 캐시는 기본적으로 꺼져 있으며, 점진적 롤아웃이 계정에 대해 활성화하지 않는 한 꺼져 있습니다. MCP_DISCOVERY_CACHE=1을 설정하여 켜거나, 롤아웃이 활성화했을 때도 꺼진 상태로 유지하려면 0으로 설정하세요. v2.1.238 이전에는 캐시가 기본적으로 켜져 있었습니다.
/mcp의 서버 메뉴에서 Disable 또는 Clear authentication을 선택하면 Claude Code는 해당 서버의 캐시 항목도 삭제합니다. Reconnect는 연결되거나 실패한 서버에서도 삭제합니다. cached 서버에서 Reconnect는 지금 서버에 연결하고 항목을 유지합니다. 항목을 삭제한 후 Claude Code가 서버에 다시 연결할 때, 캐시 대신 서버에서 서버의 도구 목록을 가져옵니다.
서버의 상태가 ✘ Failed to connect일 때, claude mcp list는 해당 상태 줄에 실패 세부 정보를 추가하고, claude mcp get <name>은 Issue: 줄에 표시합니다: HTTP 상태 또는 오류 코드, 그리고 서버가 반환한 오류 텍스트입니다. /mcp의 서버 세부 정보 보기는 Issue: 행에 동일한 서버 보고 텍스트를 포함합니다. Claude Code는 이 세부 정보에서 자격 증명처럼 보이는 텍스트를 가리고, 비밀을 포함할 수 있는 확장된 서버 URL은 절대 포함하지 않습니다. Claude Code는 ✘ Connection error 상태에 세부 정보를 추가하지 않습니다. 인쇄할 예외 텍스트가 해당 URL을 포함할 수 있기 때문입니다. v2.1.219 이전에는 두 명령 모두 상태 코드 또는 서버의 오류 텍스트 없이 기본 실패 상태만 표시했습니다.
/mcp에서 인증을 완료하고 연결이 여전히 HTTP 상태 또는 전송 오류 코드로 실패하면 Claude Code는 시도한 후 인쇄하는 메시지에 해당 코드와 서버 URL의 원점을 추가합니다. 원점은 스킴 및 호스트, 그리고 URL이 포트를 지정할 때 포트입니다. 예: https://mcp.example.com.
- 경로 및 쿼리는 해당 메시지에 나타나지 않습니다.
- 로컬, 프로젝트, 사용자 범위 또는 관리형 MCP 구성의 서버의 경우, 원점은 해당 구성에 작성된 호스트를 표시하므로 호스트의
${VAR}참조는 메시지에서 확장되지 않습니다. - 상태 또는 오류 코드가 없는 실패의 경우 Claude Code는 원점 없이 오류 텍스트를 표시합니다.
url이 비어 있는 원격 서버는 /mcp, claude mcp list 및 /plugin 관리자에서 not configured로 표시되며, Claude Code는 연결을 시도하지 않습니다. 플러그인은 나중에 구성할 커넥터를 위해 이와 같은 자리 표시자 항목을 포함할 수 있으므로 Claude Code는 이를 오류 또는 설정 문제로 보고하지 않습니다. /mcp의 서버 세부 정보 보기에는 No URL configured for this server가 표시됩니다. 연결하려면 항목의 url을 설정하세요.
구성 경고
Claude Code는 아래의 구성 문제에 대해 경고합니다. 각 항목은 Claude Code가 확인하는 내용과 경고를 지우는 방법을 설명합니다:- 숨겨진 공백: Claude Code는 MCP 구성 값이 숨겨진 선행 또는 후행 공백을 전달할 때 경고합니다. 이는 종종 후행 줄 바꿈이 있는 토큰을 붙여넣기에서 나옵니다. Claude Code는
command,url, 각args항목, 그리고env및headers아래의 값과 키 이름을 확인합니다. Claude Code는claude mcp list출력 및/mcp에서 경고를 표시하며, 값을 그대로 보여주지 않고 영향을 받는 필드의 이름만 지정합니다. 예:Leading or trailing whitespace in: headers.Authorization. Claude Code는 공백을 자르지 않고 작성된 대로 정확히 값을 사용하므로 구성을 편집하여 제거하세요. - 둘 이상의 범위에서 동일한 이름: 다른 엔드포인트를 사용하여 둘 이상의 범위에서 동일한 서버 이름을 정의하면 Claude Code는
claude mcp list출력 및/mcp에서 충돌에 대해 경고합니다. Claude Code는 엔드포인트당 OAuth 로그인을 저장하므로 한 프로젝트에서 로드되는 정의를 인증할 때, 다른 정의가 로드되는 프로젝트에서는 여전히 별도로 로그인해야 합니다. 원하는 엔드포인트를 유지하고claude mcp remove <name> --scope <scope>로 다른 엔드포인트를 제거하세요. 경고에서 Claude Code는 각 범위의 엔드포인트를 구성에 작성된 대로 인용합니다.${VAR}참조는 확장되지 않으므로 API 키와 같은 확인된 값을 표시하지 않습니다. - 예약된 이름: Claude Code는
workspace,claude-in-chrome,computer-use,Claude Preview및Claude Browser를 포함한 기본 제공 서버의 이름을 예약합니다. 구성에서 예약된 이름의 서버를 정의하면 Claude Code는 로드 시 이를 건너뛰고 이름을 바꾸도록 요청하는 경고를 표시합니다.claude mcp add는 예약된 이름을 오류로 거부합니다.Claude Preview및Claude Browser는 모두 Claude Code 데스크톱 앱의 미리보기 창이 사용하는 기본 제공 서버의 이름입니다. - 누락된 환경 변수: 서버 구성의
${VAR}참조가 설정되지 않은 변수의 이름을 지정하고:-default가 없으면 Claude Code는claude mcp list출력 및/mcp에서 경고하며, 변수의 이름을 지정하고, 여전히${VAR}텍스트가 확장되지 않은 상태로 서버를 로드합니다. 변수를 설정하거나${VAR:-default}폴백을 추가하세요. 원격 서버의url및headers에서 일부 자격 증명 변수는 경고 없이 비어 있는 것으로 읽습니다.
도구 가용성
/mcp 패널은 각 연결된 서버 옆에 도구 개수를 표시하고 도구 기능을 광고하지만 도구를 노출하지 않는 서버에 플래그를 지정합니다.
요청이 백그라운드에서 아직 연결 중인 서버의 도구가 필요한 경우 Claude는 해당 서버가 연결될 때까지 기다립니다. 대기 방식은 구성에 따라 다릅니다:
- 도구 검색 포함 (기본값): 대기는
ToolSearch호출 내에서 발생합니다. - 도구 검색 없음: Claude는 대신
WaitForMcpServers도구를 사용합니다. 도구 검색이 없는 구성에는ENABLE_TOOL_SEARCH=false및 Google Cloud의 Agent Platform에서 Claude Opus 4.5, Claude Sonnet 4.5, Claude Haiku 4.5보다 이전 모델이 포함됩니다.ANTHROPIC_BASE_URL게이트웨이의 경우 LLM 게이트웨이를 통한 도구 검색을 참조하세요. - Microsoft Foundry Azure에서 호스팅되는 배포: Claude Code는 배포의 서버 측 거부를 API를 통해서만 발견하므로 Claude는
WaitForMcpServers가 아닌 도구 검색 경로에서 시작합니다. Claude Code가 해당 배포를 사전 로드로 전환한 후에는 연결을 완료한 서버의 도구가 Claude의 다음 요청에서 사용 가능해집니다.
No such tool available 도구 오류로 실패합니다.
서버를 제거하지 않고 비활성화
/mcp 패널에서 서버를 토글하여 Claude Code가 구성을 잃지 않고 연결하지 않도록 중지합니다. Claude Code는 여전히 /mcp에서 서버를 나열하며, 비활성화로 표시합니다.
서버를 토글하면 Claude Code는 ~/.claude.json의 프로젝트당 선택을 기록합니다. 이는 분리된 서버 집합을 포함하는 두 목록 중 하나입니다:
disabledMcpServers: 사용자 구성 서버, 플러그인 서버, 조직이 관리형 설정을 통해 제공하는 서버, Claude Code가 자체적으로 가져오는 claude.ai 커넥터 및 기본적으로 켜져 있는 기본 제공 서버에 대한 옵트아웃 목록입니다. Claude Code는 여기에 나열한 서버에 연결하지 않습니다. claude.ai 커넥터 비활성화에 설명된 프로젝트별/mcp토글로 claude.ai 커넥터를 비활성화하면 Claude Code는 이를 표시 이름 (예:claude.ai Slack)으로 이 목록에 씁니다.enabledMcpServers:computer-use와 같이 기본적으로 꺼져 있는 기본 제공 서버에 대한 옵트인 목록입니다. Claude Code는 여기에 나열할 때만 기본 꺼짐 서버에 연결합니다.
enabledMcpServers에 추가하거나 기본 꺼짐 기본 제공 서버를 disabledMcpServers에 추가하면 Claude Code는 항목을 무시합니다.
disabledMcpServers 및 enabledMcpServers는 enabledMcpjsonServers 및 disabledMcpjsonServers와 무관합니다. 이는 프로젝트의 .mcp.json 파일에 정의된 서버의 승인을 제어합니다.
MCP 클라이언트 런타임
Claude Code는 두 클라이언트 런타임 중 하나를 통해 MCP 서버에 연결합니다. v1 런타임은 MCP TypeScript SDK 1.x를 기반으로 합니다. v2 런타임은 MCP TypeScript SDK 2.0의 동일한 코드이며, MCP 프로토콜 개정 2026-07-28을 추가합니다. 이 페이지의 나머지는 v2 런타임을 이름으로 지정하는 섹션을 제외하고 두 런타임 모두에 적용됩니다. Claude Code는 시작할 때마다 런타임을 선택하고 종료할 때까지 유지합니다. 기능 플래그를 가져오는 세션에서 Claude Code v2.1.232 이상에서 v2 런타임을 사용합니다. 기능 플래그를 가져오지 않는 세션에서 Claude Code는 Claude Code v2.1.274 이상에서 기본적으로 v2 런타임을 사용합니다:- Amazon Bedrock, Claude Platform on AWS, Google Cloud의 Agent Platform 또는 Microsoft Foundry의 세션. Claude Code를 내장한 호스트 플랫폼이
CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST를 설정한 경우는 제외 - Claude 앱 게이트웨이를 통해 로그인한 세션
- 텔레메트리 또는 기능 플래그 가져오기를 끈 세션. 예를 들어
DISABLE_TELEMETRY
- HTTP, stdio 및 claude.ai 커넥터 서버에 더 새로운 개정을 지원하는지 묻고, 지원하는 서버와 함께 사용합니다. 여기에는 클라우드 세션 및 Remote Control 세션의 커넥터가 포함됩니다. 다른 모든 서버에는 v1처럼 연결합니다.
- 열린 스트림을 통해 더 새로운 개정의 서버에서
list_changed알림을 받습니다. - 더 새로운 개정에 연결되는 채널 서버를 등록하지 않습니다. 해당 개정은 채널 메시지를 전달할 수 없기 때문입니다.
- 인증 응답이 예상치 못한 발급자의 이름을 지정하는 MCP OAuth 로그인을 실패합니다.
- MCP OAuth 자격 증명을 HTTPS를 통해 제공되거나
localhost,127.0.0.1또는::1에서 제공되는 토큰 엔드포인트에만 보냅니다. 토큰 엔드포인트가 로컬 네트워크의 장치와 같은 다른 곳에서 일반http://인 서버의 로그인이 실패합니다. HTTPS가 아닌 토큰 엔드포인트로 자격 증명 전송 거부를 참조하세요.
MCP_SDK_GENERATION을 v1 또는 v2로 설정하세요. Claude Code가 묻는지 결정하려면 MCP_PROTOCOL_NEGOTIATION을 auto 또는 legacy로 설정하세요.
동적 도구 업데이트
MCP 서버는 연결된 상태에서 제공하는 도구, 프롬프트 또는 리소스를 변경하고list_changed 알림을 보낼 수 있습니다. 알림이 도착하면:
- 대화형 터미널 세션에서는 Claude Code가 해당 서버에서 업데이트된 목록을 가져오므로 서버를 다시 연결할 필요가 없습니다.
-p플래그를 사용하는 비대화형 모드 및 Agent SDK에서는 Claude Code가 이러한 알림에 대해 도구 목록만 새로 고칩니다.
v2 런타임의 알림 스트림
v2 런타임에서 Claude Code는 더 새로운 프로토콜 개정의 서버에서 열린 스트림을 통해list_changed 알림을 받습니다. 스트림이 닫히면 Claude Code는 두 가지 제한으로 다시 엽니다:
- 스트림이 10초 이내에 다시 닫힘: Claude Code는 최대 3번 다시 열고, 그 후 해당 연결에 대해 중지합니다.
- 스트림이 10초 이상 열려 있다가 닫힘 (서버리스 호스트에 대한 스트림이 일반적으로 하는 것처럼): 1시간에 5번 다시 열기 후 Claude Code는 다음 열기 전에 약 6시간을 기다립니다.
/mcp에서 서버를 다시 연결하세요.
자동 재연결
Claude Code는 세션 중에 연결이 끊어진 원격 서버를 다시 연결하고 일시적 오류 후 HTTP 또는 SSE 서버의 첫 연결을 재시도합니다. stdio 서버의 경우 종료되거나 시작에 실패한 stdio 서버를 참조하세요.원격 서버의 세션 중 연결 끊김
Claude Code는 먼저 연결이 끊어진 원격 서버에 대해 1초 지연으로 시작하여 매번 두 배씩 늘리는 지수 백오프를 사용해 최대 5번 재연결을 시도합니다:- 대화형 세션:
/mcp는 Claude Code가 재연결하는 동안 서버를 보류 중으로 표시합니다. 5번의 실패 시도 후 Claude Code는 서버를 실패로 표시하거나 서버가 다시 인증이 필요할 때 인증 필요로 표시합니다. 실패로 표시할 때MCP server "<name>" disconnected · open /mcp to reconnect알림이 표시됩니다./mcp에서 수동으로 재시도할 수 있습니다. claude -p실행 및 Agent SDK 세션: Claude Code는 동일한 5번의 시도를 수행하지만, 시도를 표시할/mcp패널은 없습니다. 5번 모두 실패하면 서버의 도구 없이 실행이 계속됩니다:- 5xx 응답이나 시간 초과와 같은 일시적 오류 후: Claude Code는 HTTP 또는 SSE 서버를 백그라운드에서 계속 재시도합니다. 재시도는 최대 약 30분 동안 지속되며, 재시도로 연결되면 서버의 도구를 다시 사용할 수 있게 됩니다. 그때까지 Agent SDK 세션은 상태를
failed로 보고하며, 코드에서 서버를 다시 연결할 수 있습니다.claude -p에서 다시 연결하려면 실행을 다시 시작하세요. - 서버가 다시 로그인하도록 요구할 때: Claude Code는 재시도를 중지하고, Agent SDK 세션은 서버의 상태를
needs-auth로 보고합니다. 셸에서claude mcp login <name>으로 로그인하세요. 그런 다음 실행을 다시 시작하거나, Agent SDK 세션에서는 대신 서버를 다시 연결하세요.
- 5xx 응답이나 시간 초과와 같은 일시적 오류 후: Claude Code는 HTTP 또는 SSE 서버를 백그라운드에서 계속 재시도합니다. 재시도는 최대 약 30분 동안 지속되며, 재시도로 연결되면 서버의 도구를 다시 사용할 수 있게 됩니다. 그때까지 Agent SDK 세션은 상태를
실패한 첫 연결
HTTP 또는 SSE 서버의 첫 연결이 5xx 응답, 연결 거부 또는 시간 초과와 같은 일시적 오류로 실패하면 Claude Code는 최대 3번 재시도합니다. 연결이 여전히 실패하면 Claude Code는 서버를 실패로 표시합니다. 이러한 재시도는 다음 경우에는 적용되지 않습니다:- stdio 서버의 첫 연결. 다시 시도하려면 종료되거나 시작에 실패한 stdio 서버를 참조하세요
- WebSocket 서버의 첫 연결
- 인증 또는 찾을 수 없음 오류. 구성 변경이 필요하기 때문입니다.
headersHelper가 서버의Authorization헤더의 유일한 소스일 때 Claude Code는 인증 오류를 재시도합니다. 각 시도에서 도우미를 다시 실행하고 새 자격 증명을 선택할 수 있기 때문입니다.
종료되거나 시작에 실패한 stdio 서버
stdio 서버를 다시 시작하려면 서버에 일어난 일과 일치하는 열을 읽으세요. Claude Code를 실행하는 방식(대화형 세션,claude -p 실행 또는 Agent SDK 세션)에 따라 해당하는 행을 찾으세요.
실패한 검색 요청
서버가 연결된 후 Claude Code는tools/list, prompts/list 및 resources/list와 같은 기능 검색 요청을 보냅니다. Claude Code는 일시적 네트워크 또는 서버 오류 후 짧은 백오프로 최대 3번 재시도합니다. 인증 오류, 4xx 응답 또는 요청 시간 초과는 재시도하지 않습니다.
실패한 서버 직접 재시도
실패했거나 인증이 필요한 모든 서버를 재시도하려면/mcp reconnect all을 실행하세요. 대화형 터미널에서는 Claude Code v2.1.284 이상이 필요하며, 이전 버전은 그곳에서 MCP server "all" not found를 인쇄합니다.
Claude가 서버 실패를 배우는 방법
구성된 서버가 연결에 실패하면 Claude Code가 Claude에 알리는지 여부는 도구 검색에 따라 다릅니다. 기본적으로 켜져 있습니다:- 도구 검색을 사용하면 Claude Code는 Claude에 어느 서버가 실패했는지와 연결 오류를 알리므로, Claude는 응답에서 연결 실패를 보고합니다. Claude Code는 일치하는 도구를 찾지 못한
ToolSearch결과에 동일한 정보를 포함합니다. - 도구 검색이 없는 구성에서 Claude Code는 실패한 서버 연결을 Claude에 보고하지 않습니다.
채널을 사용한 메시지 푸시
MCP 서버는 또한 메시지를 세션에 직접 푸시할 수 있으므로 Claude는 CI 결과, 모니터링 경고 또는 채팅 메시지와 같은 외부 이벤트에 반응할 수 있습니다. 이를 활성화하려면 서버가claude/channel 기능을 선언하고 시작 시 --channels 플래그로 옵트인합니다. 공식적으로 지원되는 채널을 사용하려면 채널을 참조하거나, 자신만의 채널을 구축하려면 채널 참조를 참조하세요.
v2 런타임에서 MCP 프로토콜 개정 2026-07-28을 협상하는 채널 서버는 채널 메시지를 전달할 수 없으므로 Claude Code는 이를 채널로 등록하지 않습니다. 해당 개정을 지원하지 않는 채널 서버는 이전 핸드셰이크로 연결되며 이전과 같이 등록됩니다.
Claude Code는 기본적으로 stdio 서버에 해당 개정을 요청합니다. stdio 채널 서버를 이전 핸드셰이크에 유지하려면 MCP_PROTOCOL_NEGOTIATION을 legacy로 설정하세요. 이렇게 하면 모든 서버가 이전 핸드셰이크에 유지됩니다.
MCP 도구 호출의 시간 제한
MCP 도구 호출이 실행될 수 있는 시간을 제한하려면 다음을 사용합니다.- 서버별: 해당 서버의 구성 항목에 밀리초 단위의
timeout필드를 추가합니다 - 모든 서버 공통:
MCP_TOOL_TIMEOUT을 설정합니다
timeout은 도구 호출당 하드 월클록 제한이며, 서버의 진행 알림은 이를 연장하지 않습니다. 1000 미만의 값은 무시되고 MCP_TOOL_TIMEOUT으로 넘어가거나, 해당 변수가 설정되지 않은 경우 약 28시간의 기본값으로 넘어갑니다. HTTP, SSE 또는 claude.ai 커넥터 서버의 경우 서버의 첫 응답 바이트까지 각 요청을 포함하는 요청당 두 번째 타이머도 있습니다. Claude Code는 해당 타이머를 60초, 서버에 적용되는 도구 시간 초과 및 MCP_TIMEOUT 중 가장 큰 값으로 설정합니다. 설정되지 않은 MCP_TOOL_TIMEOUT의 28시간 기본값은 해당 비교에 들어가지 않으며, 60초 미만의 값은 타이머를 단축하지 않습니다. Stdio 및 WebSocket 서버에는 요청당 타이머가 없습니다.
서버당 최소 1000의 timeout은 또한 아래에 설명된 유휴 시간 초과의 하한으로 작동합니다: Claude Code는 서버당 timeout보다 더 빨리 유휴 상태로 인해 해당 서버의 도구 호출을 중단하지 않습니다.
MCP 서버에 대한 도구 호출이 유휴 윈도우 동안 응답 및 진행 알림을 보내지 않으면 월클록 제한을 기다리는 대신 오류로 중단됩니다. 유휴 시간 초과는 IDE 서버 및 SDK 인프로세스 서버를 제외한 모든 서버 유형에 적용됩니다. 유휴 윈도우는 HTTP, SSE, WebSocket 및 claude.ai 커넥터 서버의 경우 기본값 5분, stdio 서버의 경우 30분입니다.
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT 환경 변수를 밀리초 단위로 설정하여 유휴 윈도우를 변경하거나, 0으로 설정하여 확인을 비활성화하세요.
이 시간 초과는 호출이 실행될 수 있는 기간을 제한하며, 항상 세션을 차단하는 기간을 제한하지는 않습니다: 2분을 지나 실행되는 주 대화 호출은 먼저 백그라운드 작업으로 이동합니다. 긴 도구 호출의 자동 백그라운드 처리를 참조하세요.
긴 도구 호출의 자동 백그라운드 처리
/tasks의 백그라운드 호출 세부 정보 보기에 runs on the server; survives exiting this session이 표시되면 서버에서 실행되는 MCP 작업을 참조하세요.
주 대화에서 2분 이상 실행 중인 MCP 도구 호출은 세션을 차단하는 대신 백그라운드 작업으로 이동합니다. Claude는 작업 ID를 즉시 받고 계속 작업하며, 호출이 완료되면 결과가 작업 알림으로 도착합니다.
작업은 /tasks에 나타나며, 여기서 중지할 수도 있습니다. 작업은 세션을 종료하면 유지되지 않습니다. 작업 항목에는 서버가 보고한 최신 진행 상황이 표시됩니다. 작업을 중지하면 Claude Code는 호출을 취소하고 결과가 오지 않는다고 Claude에 알립니다. 중지한다고 해서 서버가 중지된다는 보장은 없습니다: 서버가 이미 작업의 일부를 수행했거나 여전히 작업을 완료할 수 있습니다.
호출이 백그라운드에서 실행되는 동안 호출당 제한이 여전히 적용됩니다: 서버당 timeout 또는 MCP_TOOL_TIMEOUT으로 설정된 월클록 제한 및 CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT으로 설정된 유휴 시간 초과입니다.
자동 백그라운드 전환을 변경하거나 끄려면 다음을 수행합니다.
- 임계값을 변경하려면
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS환경 변수를 밀리초 단위로 설정하고, 자동 백그라운드 전환을 끄려면0으로 설정합니다.0으로 설정하면 대화형 세션에서 Claude가 MCP 작업을 기다립니다 CLAUDE_CODE_DISABLE_BACKGROUND_TASKS를1로 설정합니다. 이렇게 하면 백그라운드 명령 및 백그라운드 서브에이전트와 함께 자동 백그라운드 전환도 꺼집니다
- 서브에이전트의 호출; Claude Code는 주 대화 호출만 백그라운드 처리합니다
- IDE 서버에 대한 호출
- 비대화형 모드의 호출.
CLAUDE_AUTO_BACKGROUND_TASKS가1로 설정되지 않는 한. 일회성 실행은 결과가 도착하기 전에 끝날 수 있기 때문입니다
서버에서 실행되는 MCP 작업
MCP 작업은 보고서 내보내기나 빌드처럼 MCP 서버가 MCP tasks 확장을 사용하여 직접 실행하는 긴 작업입니다. Claude의 도구 호출은 서버가 작업을 수락하면 반환되므로, Claude가 기다리도록 하지 않는 한 Claude는 계속 작업합니다. 작업이 끝나면 트랜스크립트에 그 사실이 표시되고 Claude가 결과를 받습니다. 결과는 Claude에게 요청하세요. 그동안 하단에는1 MCP task와 같은 개수가 표시되며, Claude Code는 서버에 작업 상태를 확인하면서 작업을 추적합니다. 원격 서버의 작업은 종료한 후에도 계속 실행됩니다. 다시 추적하려면 같은 세션을 재개하세요.
MCP 작업은 Claude Code CLI에서 공개 베타이며 Claude Code v2.1.304 이상이 필요합니다. 이를 사용할 수 있는 세션과 서버는 호출이 MCP 작업이 되기 위한 조건에 나와 있습니다.
MCP 작업 중지 또는 결과 받기
실행 중인 작업을 중지하려면/tasks에서 작업을 선택하고 x를 누르거나 Claude에게 요청합니다. Claude Code는 작업 추적을 중단하고 서버에 취소를 요청하지만, 서버가 그래도 작업을 완료할 수 있습니다. 연결이 끊긴 서버는 먼저 /mcp에서 다시 연결하세요. 그렇지 않으면 취소 요청이 전송되지 않고, Claude Code가 작업을 잊어 다시 추적할 수 없습니다. Esc를 눌러도 백그라운드 작업은 중지되지 않습니다.
작업이 끝나면 트랜스크립트에 다음과 같은 줄이 표시됩니다.
MCP 작업의 질문에 답변
실행 중인 작업은 elicitation 대화상자를 열어 입력을 요청할 수 있습니다./tasks가 열려 있는 동안에는 대화상자가 숨겨지므로, 답변하려면 /tasks를 닫으세요. 거절하거나 Esc를 누르는 것도 서버에 대한 답변이며, 서버는 작업을 계속할지 결정합니다.
비대화형 세션에서 Claude Code는 입력을 요청하는 작업에 대해 Elicitation 훅을 실행하거나 Agent SDK의 onElicitation 콜백을 호출하지 않고 서버에 작업 취소를 요청합니다.
MCP 작업 실행 중 종료, 지우기 또는 재개
원격 서버의 작업은 종료한 후에도 계속 실행됩니다. stdio 서버의 프로세스는 Claude Code가 종료되면 중지되지만, 그 작업은/tasks에 runs on the server; survives exiting this session으로 표시됩니다. 해당 서버의 문서에 작업이 프로세스보다 오래 유지된다고 명시되어 있지 않다면, 종료하기 전에 작업이 끝나도록 기다리거나 /tasks에서 중지하세요.
호출이 MCP 작업이 되기 위한 조건
도구 호출은 다음 조건을 모두 충족할 때만 MCP 작업이 됩니다.- 서버가 작업을 지원합니다
- 서버가 프로토콜 개정판 2026-07-28로 연결된 HTTP, stdio 또는 claude.ai 커넥터 서버입니다.
MCP_SDK_GENERATION=v1또는MCP_PROTOCOL_NEGOTIATION=legacy를 설정하면 이 조건이 충족되지 않습니다 - 세션이 기능 플래그를 가져옵니다. 따라서 Amazon Bedrock과 같은 서드파티 제공업체가 아니어야 하며, 텔레메트리나 플래그 가져오기가 꺼져 있지 않아야 합니다
- Anthropic이 해당 종류의 세션에 MCP 작업을 활성화했습니다. v2.1.304 이상에서는 터미널 CLI 세션, Agent SDK 세션, GitHub Actions 실행이 포함됩니다. VS Code 확장이나 데스크톱 앱과 같은 다른 사용 환경에서는 MCP 작업을 사용할 수 없습니다
- 호출이 서브에이전트가 아니라 메인 대화에서 이루어집니다
- 세션이 대화형이거나, Agent SDK 세션 또는
--input-format stream-json을 읽는claude -p실행이 다음을 충족합니다.CLAUDE_AUTO_BACKGROUND_TASKS가1CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND가1이 아님CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS가0이 아님
claude -p "<prompt>" 실행에서는 MCP 작업을 사용할 수 없습니다.
MCP 작업의 상태 메시지
작업의/tasks 항목이나 종료 시 트랜스크립트 줄에 표시되는 다음 메시지는 Claude Code가 서버나 작업에 연결할 수 없다는 뜻입니다. /tasks에 이러한 메시지가 표시되는 동안에도 작업은 여전히 실행 중일 수 있습니다. Claude Code는 작업을 그대로 두고 계속 확인합니다. 300s 메시지와 구성 관련 메시지는 연결이 복구된 후에도 항목에 남아 있습니다.
MCP 작업의 시간 제한
기본적으로 백그라운드의 작업에는 Claude Code 시간 제한이 없습니다. 실제 경과 시간 제한과 유휴 타임아웃을 포함한 도구 호출 시간 제한은 서버가 작업으로 호출에 응답할 때까지 적용됩니다. Claude가 기다리도록 하면 작업 전체에 적용됩니다. 응답받은 상태 확인은 유휴 타임아웃에서 활동으로 간주됩니다.Claude가 MCP 작업의 결과를 기다리도록 설정
대화형 세션에서 Claude가 작업의 결과를 기다리도록 하려면, 예를 들어settings.json의 env 블록에서 다음 두 환경 변수 중 하나를 설정합니다.
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS를0으로 설정: Claude는 모든 MCP 도구 호출이 끝날 때까지 기다립니다CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND를1로 설정: Claude는 작업의 결과를 기다립니다. 자동 백그라운드 전환이 켜져 있으면 기본적으로 2분 후에 호출을 전환하므로, 짧은 작업은 그 자리에서 끝나고 긴 작업은 사용자를 차단하지 않습니다. 전환된 호출은 MCP 작업이 아니라 일반 백그라운드 호출이며, 세션을 종료하면 유지되지 않습니다
Esc를 누르거나 실제 경과 시간 제한 또는 유휴 타임아웃에 도달하면 호출이 종료되며, Claude Code는 서버에 작업 취소를 요청합니다.
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS를 1로 설정하거나 bare 모드로 시작하는 것만으로는 Claude가 MCP 작업을 기다리지 않습니다. 다음 예시는 CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS를 0으로 설정하므로, Claude는 모든 MCP 도구 호출을 기다립니다.
settings.json
서버 개발자를 위한 MCP 작업
MCP 서버를 개발한다면, 오래 실행되는tools/call에 작업으로 응답할 수 있습니다. 보내는 메시지는 MCP tasks 확장에 정의되어 있습니다. 프로토콜 개정판 2026-07-28 연결에서는 각 요청이 params._meta["io.modelcontextprotocol/clientCapabilities"]에 Claude Code의 클라이언트 기능을 담고 있으며, extensions 아래에 "io.modelcontextprotocol/tasks": {}가 포함됩니다. 작업이 될 수 없는 tools/call 요청에는 이 확장이 포함되지 않습니다.
작업으로 호출에 응답
요청에 확장이 포함된 경우에만 작업으로 응답하세요. 그렇지 않으면 Claude는Unsupported result type 'task' for tools/call 도구 오류를 받습니다. taskId, status, createdAt, lastUpdatedAt 또는 ttlMs가 누락된 경우에도 Claude는 같은 오류를 받습니다. 작업 객체는 tools/call 응답의 JSON-RPC result이며, content 배열이 필요하지 않습니다. 다음 예시에는 선택 사항인 statusMessage와 pollIntervalMs가 포함되어 있습니다.
HTTP 또는 claude.ai 커넥터 서버에서는 작업 응답이 요청별 타이머 안에 시작되어야 하므로, 작업을 수락하고 먼저 응답한 다음 작업을 수행하세요.
상태, 결과, 질문 보고
작업 응답 직후 Claude Code는{ "taskId": ... }와 함께 tasks/get을 보내고, 이후 폴링 간격마다 반복합니다. tasks 확장은 응답에 taskId, status, createdAt, lastUpdatedAt, ttlMs와 함께 "resultType": "complete"를 포함하도록 요구합니다. ttlMs는 null일 수 있으며, statusMessage와 pollIntervalMs는 선택 사항입니다. 다음 예시는 빌드 완료를 보고합니다.
플러그인 제공 MCP 서버
플러그인은 MCP 서버를 번들로 제공할 수 있으며, 플러그인을 활성화하면 도구 및 통합을 제공합니다. 플러그인 MCP 서버의 작동 방식:- 플러그인은 플러그인 루트의
.mcp.json또는plugin.json에 인라인으로 MCP 서버를 정의합니다 - 플러그인을 활성화하면 Claude Code는 MCP 서버를 자동으로 시작합니다
- Claude Code는 플러그인 MCP 도구를 수동으로 구성된 MCP 도구와 함께 제공합니다
- 플러그인 서버를 추가하고 제거하려면 플러그인을 설치하거나 제거하세요.
/mcp명령이 아닙니다. 설치된 플러그인 서버를/mcp에서 토글하여 끌 수 있습니다. 이는 플러그인을 제거하지 않고 Claude Code가 연결하지 않도록 중지합니다.
.mcp.json:
plugin.json에 인라인:
- 자동 라이프사이클: 서버는 다음 지점에서 연결 및 연결 해제됩니다:
- 세션 시작 시 Claude Code는 활성화된 플러그인의 서버를 자동으로 연결합니다.
/mcp에서 이전에 사용한 원격 (HTTP 또는 SSE) 플러그인 서버는cached상태를 대신 표시할 수 있습니다. Claude Code는 Claude가 도구 중 하나를 처음 호출할 때 연결합니다. stdio 플러그인 서버의 연결이 15분 이내에 실패한 경우 Claude Code는 연결을 건너뜁니다. - 세션 중에 플러그인을 활성화하거나 비활성화하면 Claude Code는 변경이 적용될 때 MCP 서버를 연결하거나 연결 해제합니다. 플러그인 변경 사항을 다시 시작하지 않고 적용은 그 시기를 설명합니다. 대화형 터미널이 없는 세션에서
/reload-plugins는 플러그인 MCP 서버를 연결하거나 연결 해제하지 않습니다. 이 변경 사항은 다음 세션에서 적용됩니다. - 다시 로드할 때 Claude Code는 구성이 변경되지 않은 플러그인 서버의 라이브 연결을 유지하고, 이름을 지정하지 않고 Agent SDK에서 세션의 MCP 서버 목록을 바꿀 때 동일하게 수행합니다.
- v2.1.246 이상에서
/cd로 세션을 이동할 때 Claude Code는 새 디렉터리의 설정이 활성화하는 플러그인의 서버를 연결하고 더 이상 활성화되지 않는 플러그인의 서버를 연결 해제합니다. 이동 후/reload-plugins를 실행할 필요가 없습니다. - 클라우드 세션에서 아직 연결되지 않은 플러그인 서버에 대한 MCP 호출 (예: 유휴 세션이 깨어난 직후)은 서버를 요청 시 시작하고 연결을 기다립니다.
- 세션 시작 시 Claude Code는 활성화된 플러그인의 서버를 자동으로 연결합니다.
- 경로 자리 표시자:
${CLAUDE_PLUGIN_ROOT}는 플러그인의 설치 디렉터리로 확인되고,${CLAUDE_PLUGIN_DATA}는 지속적인 상태 디렉터리로 확인되며,${CLAUDE_PROJECT_DIR}은 안정적인 프로젝트 루트로 확인됩니다. 대체는 다음에 적용됩니다:stdio서버:command,args,envhttp,sse및ws서버:url,headers및headersHelper
- 사용자 환경 액세스: 수동으로 구성된 서버와 동일한 환경 변수에 액세스
- 여러 전송 유형: stdio, SSE, HTTP 및 WebSocket 전송 지원. 전송 지원은 서버에 따라 다를 수 있습니다.
/mcp에 나타납니다.
claude mcp get은 플러그인의 stdio 또는 WebSocket 서버에 구성된 값을 숨깁니다. 이 값에는 자격 증명이 포함될 수 있기 때문입니다:
- stdio 서버:
Command: stdio, 빈Args:줄, 그리고 각 환경 변수를NAME=[REDACTED]로 인쇄합니다 - WebSocket 서버:
URL: ws와 각 헤더를<name>: [REDACTED]로 인쇄하며,claude mcp list는 URL 대신ws를 표시합니다
.mcp.json 또는 plugin.json을 읽으세요.
플러그인 MCP 도구 이름:
플러그인 번들 MCP 서버의 도구는 호출 가능한 이름에 플러그인 이름과 서버 키를 모두 포함합니다. 전체 형식은 mcp__plugin_<plugin-name>_<server-name>__<tool-name>이며, A-Z, a-z, 0-9, _, - 외의 모든 문자는 _로 바뀝니다. my-plugin이라는 플러그인에 번들된 database-tools 서버의 경우, query 도구는 다음과 같이 호출할 수 있습니다:
allowed-tools 목록에서, 서브에이전트의 tools 필드에서, 또는 훅 matcher에서 이 전체 이름을 사용하세요. mcp__database-tools__.*와 같은 베어 서버 키에 대해 작성된 훅 matcher는 플러그인 번들 서버에 대해 절대 실행되지 않습니다.
서버 자체는 plugin:<plugin-name>:<server-name> (예: plugin:my-plugin:database-tools)과 같은 범위 지정 이름으로 등록됩니다. 구성된 서버 이름이 예상되는 위치 (예: mcp_tool 훅의 server 필드)에서 해당 이름을 사용하세요.
플러그인과 함께 MCP 서버를 번들로 제공하는 방법에 대한 자세한 내용은 플러그인 구성 요소 참조를 참조하세요.
MCP 설치 범위
MCP 서버는 세 가지 범위에서 구성할 수 있습니다. 선택한 범위에 따라 서버가 로드되는 프로젝트와 구성을 팀과 공유할지 여부가 결정됩니다. 관리자는 관리형 구성을 통해 모든 사용자에게 서버를 배포하거나 제공할 수도 있습니다.로컬 범위
로컬 범위가 기본값입니다. 로컬 범위 서버는 해당 서버를 추가한 프로젝트에서만 로드되며 사용자 본인만 사용할 수 있습니다. Claude Code는 이 서버를~/.claude.json의 해당 프로젝트 경로 아래에 저장하므로, 동일한 서버가 다른 프로젝트에는 나타나지 않습니다. 개인 개발 서버, 실험적 구성 또는 버전 관리에 포함하고 싶지 않은 자격 증명이 있는 서버에는 로컬 범위를 사용합니다.
MCP 서버의 “로컬 범위”라는 용어는 일반적인 로컬 설정과 다릅니다. MCP 로컬 범위 서버는
~/.claude.json(홈 디렉터리)에 저장되는 반면, 일반 로컬 설정은 .claude/settings.local.json(프로젝트 디렉터리)을 사용합니다. 설정 파일 위치에 대한 자세한 내용은 설정을 참조하세요.~/.claude.json 안의 현재 프로젝트 항목에 서버를 기록합니다. 아래 예시는 /path/to/your/project에서 명령을 실행했을 때의 결과를 보여 줍니다.
프로젝트 범위
프로젝트 범위 서버는 프로젝트 루트 디렉터리의.mcp.json 파일에 구성을 저장하여 팀 협업을 가능하게 합니다. 프로젝트 범위 서버를 추가하면 Claude Code가 적절한 구성 구조로 이 파일을 자동으로 생성하거나 업데이트합니다. 팀의 모든 구성원이 동일한 MCP 도구와 서비스를 사용할 수 있도록 .mcp.json을 버전 관리에 체크인합니다.
.mcp.json 파일은 표준화된 형식을 따릅니다.
.mcp.json 파일의 프로젝트 범위 서버를 사용하기 전에 승인을 요청합니다. 이러한 승인 선택을 초기화하려면 claude mcp reset-project-choices를 실행합니다.
claude -p 실행, Agent SDK 세션, 프로젝트 스레드 외부의 클라우드 세션에서는 Claude Code가 해당 프롬프트를 표시할 수 없으므로 묻지 않고 프로젝트 범위 서버를 로드합니다. 또한 사용자 설정이나 관리형 설정에 skipDangerousModePermissionPrompt가 설정된 상태에서 bypassPermissions 모드로 시작한 세션에서도 Claude Code는 프롬프트를 건너뜁니다. 그래도 서버를 제외하려면 다음을 수행합니다.
- 서버를
disabledMcpjsonServers에 추가합니다. 이렇게 하면 모든 권한 모드에서 해당 서버가 차단됩니다. --setting-sources또는 SDK의settingSources옵션으로 프로젝트 설정을 완전히 제외합니다.--strict-mcp-config로 세션을 시작합니다. 그러면 Claude Code는--mcp-config로 전달한 MCP 서버만 사용합니다. Claude Code가 로드하지 않는 프로젝트 범위 서버에 대해 승인 프롬프트를 건너뛰려면 Claude Code v2.1.246 이상이 필요합니다. v2.1.246 이전에는 strict 세션에서도 해당 서버에 대한 승인을 기다렸기 때문에 백그라운드 세션이 시작 시 대기 상태로 남았습니다. 관리형 MCP 파일이 있을 때 이 플래그가 어떻게 동작하는지는 managed-mcp.json을 통한 독점 제어를 참조하세요.
사용자 범위
사용자 범위 서버는~/.claude.json에 저장되며 프로젝트 간 접근성을 제공하므로, 사용자 계정에만 비공개로 유지되면서도 머신의 모든 프로젝트에서 사용할 수 있습니다. 이 범위는 개인 유틸리티 서버, 개발 도구 또는 여러 프로젝트에서 자주 사용하는 서비스에 적합합니다.
범위 계층 구조와 우선순위
동일한 서버가 여러 곳에 정의되어 있으면 Claude Code는 우선순위가 가장 높은 소스의 정의를 사용하여 해당 서버에 한 번만 연결합니다. 해당 소스의 서버 항목 전체가 사용되며, 필드는 범위 간에 병합되지 않습니다.- 로컬 범위
- 프로젝트 범위
- 사용자 범위
- 플러그인 제공 서버
- claude.ai 커넥터
https의 :443과 같은 스킴의 기본 포트, 또는 후행 슬래시만 다른 경우 동일한 엔드포인트로 간주됩니다. 경로, 쿼리 문자열, userinfo 또는 기본값이 아닌 포트가 다르면 별개의 서버가 됩니다.
조직이 managedMcpServers 관리형 설정을 통해 제공하는 서버는 이들 모두보다 우선순위가 높으므로, 이 중 하나가 해당 서버와 중복되면 Claude Code는 조직의 정의로 연결합니다. Claude Code v2.1.259 이상이 필요합니다.
~/.claude.json의 최상위(사용자 범위)와 .mcp.json에 동일한 이름의 stdio 서버가 있는 상태에서 Desktop 앱의 Code 탭으로 로컬 세션을 열면, Code 탭은 ~/.claude.json의 정의를 사용합니다.
.mcp.json의 환경 변수 확장
Claude Code는 .mcp.json 파일에서 환경 변수 확장을 지원하므로, 팀은 구성을 공유하면서도 머신별 경로와 API 키 같은 민감한 값에 대해 유연성을 유지할 수 있습니다.
지원되는 구문
${VAR}: 환경 변수VAR의 값으로 확장됩니다${VAR:-default}:VAR이 설정되어 있으면 그 값으로 확장되고, 그렇지 않으면default를 사용합니다
확장 위치
환경 변수는 다음 위치에서 확장할 수 있습니다.command: 서버 실행 파일 경로args: 명령줄 인수env: 서버에 전달되는 환경 변수url: HTTP 서버 유형의 경우headers: HTTP 서버 인증의 경우
변수 확장 예시
기본값이 없는 설정되지 않은 변수
참조된 환경 변수가 설정되어 있지 않고 기본값도 없는 경우에도 구성은 로드됩니다. Claude Code는claude mcp list 출력에서 해당 서버에 대한 변수 누락 경고를 보고하고, 확장되지 않은 ${VAR} 텍스트를 그대로 사용합니다. 서버가 의도한 값으로 시작되도록 변수를 설정하거나 :-default 폴백을 추가합니다. 원격 서버의 url과 headers에서는 일부 자격 증명 변수가 경고 없이 빈 값으로 읽힙니다.
빈 값으로 읽히는 자격 증명 변수
원격 서버의url과 headers에서 Claude Code는 환경의 자격 증명 변수를 확장하지 않고 빈 값으로 읽습니다. 이렇게 하면 프로젝트의 .mcp.json이나 플러그인이 사용자의 Claude Code 또는 클라우드 제공업체 자격 증명을 그 안에 명시된 서버로 보내는 것을 방지할 수 있습니다. Bearer ${ANTHROPIC_AUTH_TOKEN}이라고 작성하면 서버는 자격 증명 없이 Bearer 만 받게 되어 요청을 거부하며, 일반적으로 401을 반환합니다. Claude Code는 이를 연결 실패로 보고합니다.
해당되는 이름은 다음과 같습니다.
ANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN등 Claude Code 자체의 자격 증명AWS_BEARER_TOKEN_BEDROCK등 클라우드 제공업체의 자격 증명HTTPS_PROXY,NPM_TOKEN등 환경에 포함된 기타 자격 증명
:-default 폴백은 무시됩니다. ANTHROPIC_BASE_URL과 같은 제공업체 기본 URL은 계속 확장되므로 "url": "${ANTHROPIC_BASE_URL}/mcp"는 작동합니다. 단, URL 값 자체에 사용자 이름과 비밀번호 같은 자격 증명이 포함되어 있는 경우는 예외입니다.
API_KEY와 같이 이 집합에 속하지 않는 이름은 작성한 대로 확장됩니다. 해당되는 자격 증명 중 하나를 서버에 제공하려면 직접 정한 이름의 변수에 복사한 다음 그 이름을 참조합니다.
원격 서버의 url 또는 headers가 사용자가 설정한 해당 변수를 참조하면, Claude Code는 디버그 로그 줄에 그 이름을 기록합니다. 해당 줄을 확인하려면 claude --debug-file /tmp/claude-debug.log를 실행하고 해당 파일에서 never expanded toward a remote server를 검색합니다.
/mcp 및 CLI 출력에서 참조가 표시되는 방식
로컬, 프로젝트 또는 사용자 범위의 서버에 대해 다음 사용 환경에서는 ${VAR} 참조가 확인된 값이 아니라 이름으로 표시됩니다.
- 서버의
/mcp세부 정보 보기에 있는 URL 또는 명령줄 claude mcp list및claude mcp get출력
/mcp 세부 정보 보기는 Claude Code v2.1.268 이상에서 참조를 이 방식으로 표시합니다.
조직이 managedMcpServers 설정을 통해 제공하는 서버의 경우, 이러한 사용 환경에는 URL의 호스트만 표시됩니다.
연결이 실패할 때 claude mcp list, claude mcp get, /mcp에 표시되는 내용을 확인하려면 서버 상태 세부 정보를 참조하세요.
실제 예
예: 코드 검토를 위해 GitHub에 연결
GitHub의 원격 MCP 서버는 헤더로 전달된 GitHub 개인 액세스 토큰으로 인증합니다. 하나를 얻으려면 GitHub 토큰 설정을 열고, Claude가 작업하려는 리포지토리에 액세스할 수 있는 새로운 세분화된 토큰을 생성한 다음 서버를 추가하세요:YOUR_GITHUB_PAT를 개인 액세스 토큰으로 바꾸세요. claude mcp add 명령은 자격 증명을 검증하지 않고 구성을 저장하므로 여기서 자리 표시자 값이 허용되지만 서버는 나중에 연결하지 못합니다. 연결을 확인하려면 /mcp를 실행하고 서버의 행에 체크 표시가 나타나는지 확인하세요. 잘못된 자격 증명이 있는 서버는 대신 ✘를 표시하며, 해당 실패 세부 정보에는 서버가 반환한 HTTP 상태(예: 401)가 포함됩니다.
그런 다음 GitHub로 작업합니다:
예: PostgreSQL 데이터베이스 쿼리
DBHub,@bytebase/dbhub 패키지는 --dsn에서 전달하는 연결 문자열을 통해 Claude를 관계형 데이터베이스에 연결하는 MCP 서버입니다. Claude가 실행하는 쿼리가 데이터를 수정할 수 없도록 연결 문자열에서 읽기 전용 데이터베이스 사용자를 사용하세요:
/mcp를 실행하고 db 행에 체크 표시가 나타나는지 확인하세요.
그런 다음 자연스럽게 데이터베이스를 쿼리합니다:
원격 MCP 서버로 인증
많은 클라우드 기반 MCP 서버는 인증이 필요합니다. Claude Code는 보안 연결을 위해 OAuth 2.0을 지원합니다. Claude Code는 서버가401 Unauthorized 또는 403 Forbidden으로 응답할 때 원격 서버가 인증이 필요한 것으로 표시합니다. Claude Code가 표시하는 내용은 서버에 따라 다릅니다.
- 아직 로그인하지 않은 서버의 경우, 두 상태 코드 중 하나가
/mcp에서 플래그되어 OAuth 흐름을 완료할 수 있습니다. - claude.ai 커넥터의 경우, claude.ai가 세션 토큰을 거부하여 발생한
401은 커넥터를 플래그하지 않습니다. 커넥터를 다시 인증해도 로그인을 수정할 수 없기 때문입니다. Claude Code는 대신 세션 토큰 거부 상태를 표시합니다. headers에서 구성했거나headersHelper를 통해 구성한Authorization헤더가 있는 서버의 경우, 연결 중401또는403은 서버를 플래그하지 않습니다. 수정할 자격 증명은 구성한 것이기 때문입니다. Claude Code는 대신 연결이 실패했다고 보고합니다. 해당 헤더를${VAR}참조에서 설정한 경우, 해당 변수가 Claude Code가 빈 값으로 읽는 변수 중 하나인지 확인하세요.- 클라우드 세션에 전달된 커넥터의 경우, Claude Code는 세션의 프록시가 claude.ai에서 부여한 인가로 커넥터에 인증하기 때문에 로그인 흐름을 실행하지 않습니다. 거기서 커넥터를 다시 인가해야 할 때는 세션이 아닌 claude.ai/customize/connectors에서 다시 연결하세요.
401 Unauthorized로 저장된 토큰을 거부하면, Claude Code는 토큰을 새로 고치고, 다시 연결하고, 요청을 한 번 재시도합니다. 해당 재시도도 실패한 경우에만 /mcp에서 서버를 플래그합니다. macOS의 claude -p 또는 Agent SDK 실행에서는 Claude Code가 저장된 토큰을 읽을 수 없는 동안 보낸 요청이 대신 저장된 자격 증명 오류로 실패합니다.
서버가 저장된 새로 고침 토큰을 거부하면, Claude Code는 즉시 /mcp를 가리키는 알림을 표시합니다. /mcp를 열고 서버에서 Re-authenticate를 선택하여 다음 도구 호출이 실패하기 전에 다시 로그인하세요.
자체 인가 서버를 가리키는 WWW-Authenticate 헤더를 반환하는 사용자 정의 서버는 다른 원격 서버와 동일한 자동 검색을 받습니다.
Claude Code는 또한 하나 이상의 구성된 서버가 인증이 필요할 때 시작 알림을 표시하므로 /mcp를 열어서 어떤 서버가 로그인이 필요한지 확인할 필요가 없습니다. 이 알림은 Claude Code에서 로그인할 수 있는 서버만 계산합니다. v2.1.218 이전에는 claude.ai에서 연결되지 않은 claude.ai 커넥터도 계산했으며, 이는 claude.ai 설정에서만 연결할 수 있습니다.
알림은 각 서버를 한 번 발표하고 해당 서버가 연결되어 다시 로그인이 필요할 때까지 이후 시작 시 계산에서 제외합니다. /mcp는 여전히 로그인이 필요한 모든 서버를 나열합니다.
claude -p 또는 Agent SDK 실행에는 /mcp 패널이 없으므로 Claude Code는 그곳에서 OAuth 흐름을 실행할 수 없습니다. 인증이 필요한 서버를 사용하려면 먼저 대화형 세션에서 로그인을 완료하세요. 세션에서 /mcp를 실행하거나 셸에서 claude mcp login <name>을 실행하면 됩니다. 도구 검색이 활성화된 claude -p 또는 Agent SDK 실행 중에 구성된 서버가 인증이 필요하면, Claude Code는 서버를 인가할 때까지 해당 서버의 도구를 사용할 수 없음을 Claude에 알립니다.
서버에 대해 headers.Authorization을 구성했고 서버가 해당 헤더를 거부하면, Claude Code는 OAuth로 폴백하는 대신 연결이 실패했다고 보고합니다. 토큰이 MCP 엔드포인트에 유효한지 확인하거나 헤더를 제거하여 OAuth 흐름을 사용하세요.
1
인증이 필요한 서버 추가
MCP 빠른 시작에서 이미
sentry 서버를 추가한 경우 이 단계를 건너뛰세요. 같은 서버 이름으로 같은 범위에서 claude mcp add를 다시 실행하면 MCP server sentry already exists in local config로 실패합니다. 그렇지 않으면 다음을 실행하세요.2
Claude Code 내에서 /mcp 명령 사용
Claude Code에서 다음 명령을 사용하세요.그런 다음 브라우저의 단계를 따라 로그인하세요.
명령줄에서 인증
claude mcp login <name> 명령은 구성된 서버의 OAuth 흐름을 셸에서 직접 실행하므로 세션 내에서 /mcp 패널을 열 필요가 없습니다. claude.ai 커넥터의 경우 셸에서 커넥터 다시 인가를 따르세요.
claude mcp logout <name>을 실행하세요.
claude mcp login은 SSH 세션 중이거나 디스플레이 서버가 없는 Linux에서와 같이 로컬 브라우저를 사용할 수 없을 때를 감지하고 브라우저를 열려고 시도하는 대신 인가 URL을 출력합니다. 로컬 머신에서 URL을 열고 브라우저의 주소 표시줄에서 전체 리디렉션 URL을 프롬프트에 다시 붙여넣으세요. 이 명령은 붙여넣기 단계를 위해 대화형 터미널이 필요하므로 ssh -t로 연결하세요. 로컬 브라우저가 감지되었을 때도 URL 프롬프트를 강제하려면 --no-browser를 전달하세요.
고정 OAuth 콜백 포트 사용
일부 MCP 서버는 미리 등록된 특정 리디렉션 URI가 필요합니다. 기본적으로 Claude Code는 OAuth 콜백을 위해 임의의 사용 가능한 포트를 선택합니다.--callback-port를 사용하여 포트를 고정하여 http://localhost:PORT/callback 형식의 사전 등록된 리디렉션 URI와 일치하도록 합니다. Claude Code v2.1.229에서 로그인이 리디렉션 URI 불일치로 실패하면 사전 구성된 OAuth 자격 증명 사용의 버전 참고를 참조하세요.
--callback-port를 단독으로(동적 클라이언트 등록 사용) 또는 --client-id와 함께(사전 구성된 자격 증명 사용) 사용할 수 있습니다.
사전 구성된 OAuth 자격 증명 사용
일부 MCP 서버는 동적 클라이언트 등록을 통한 자동 OAuth 설정을 지원하지 않습니다. “Incompatible auth server: does not support dynamic client registration”과 같은 오류가 표시되면 서버에 사전 구성된 자격 증명이 필요합니다. Claude Code는 또한 동적 클라이언트 등록 대신 클라이언트 ID 메타데이터 문서(CIMD)를 사용하는 서버를 지원하며 이를 자동으로 검색합니다. 자동 검색이 실패하면 먼저 서버의 개발자 포털을 통해 OAuth 앱을 등록한 다음 서버를 추가할 때 자격 증명을 제공하세요.1
서버로 OAuth 앱 등록
서버의 개발자 포털을 통해 앱을 만들고 클라이언트 ID와 클라이언트 시크릿을 기록하세요.등록 양식에서 리디렉션 URI를 요청하면 사용 가능한 포트를 선택하고 해당 포트로
http://localhost:PORT/callback을 입력하세요. 다음 단계에서 같은 포트를 사용합니다.v2.1.229에서 Claude Code는 http://127.0.0.1:PORT/callback을 대신 보냈으며, 등록된 리디렉션 URI와 정확히 일치하는지 확인하는 서버는 리디렉션 URI 불일치로 로그인을 거부했습니다. Claude Code v2.1.231은 localhost 형식을 복원했습니다. v2.1.229에서 복구하려면 Claude Code를 업그레이드하거나 임시로 http://127.0.0.1:PORT/callback 형식을 서버의 등록된 리디렉션 URI에 추가하세요.2
자격 증명으로 서버 추가
탭은 두 명령을 모두 다룹니다.
claude mcp add는 클라이언트 ID와 콜백 포트를 플래그로 사용하고, claude mcp add-json은 oauth 객체에서 사용합니다. 리디렉션 URI를 등록한 경우 콜백 포트를 해당 URI의 포트로 설정하세요.- claude mcp add
- claude mcp add-json
- claude mcp add-json (콜백 포트만)
- CI / env var
--client-id를 사용하여 앱의 클라이언트 ID를 전달하세요. --client-secret 플래그는 마스킹된 입력으로 시크릿을 묻습니다.3
Claude Code에서 인증
Claude Code에서
/mcp를 실행하고 브라우저 로그인 흐름을 따르세요.OAuth 메타데이터 검색 재정의
기본 검색 체인을 우회하기 위해 Claude Code를 특정 OAuth 인가 서버 메타데이터 URL로 지정하세요. MCP 서버의 표준 엔드포인트가 오류를 발생시키거나 검색을 내부 프록시를 통해 라우팅하려는 경우authServerMetadataUrl을 설정하세요. 기본적으로 Claude Code는 먼저 /.well-known/oauth-protected-resource에서 RFC 9728 보호된 리소스 메타데이터를 확인한 다음 /.well-known/oauth-authorization-server에서 RFC 8414 인가 서버 메타데이터로 폴백합니다.
.mcp.json의 서버 구성의 oauth 객체에 authServerMetadataUrl을 설정하세요.
https://를 사용해야 합니다. 메타데이터 URL의 scopes_supported는 업스트림 서버가 광고하는 범위를 재정의합니다.
OAuth 범위 제한
oauth.scopes를 설정하여 인가 흐름 중에 Claude Code가 요청하는 범위를 고정하세요. 이는 업스트림 인가 서버가 부여하려는 것보다 더 많은 범위를 광고할 때 MCP 서버를 보안 팀이 승인한 부분 집합으로 제한하는 지원되는 방법입니다. 값은 RFC 6749 §3.3의 scope 매개변수 형식과 일치하는 단일 공백으로 구분된 문자열입니다.
oauth.scopes는 authServerMetadataUrl과 서버가 /.well-known에서 검색하는 범위 모두보다 우선합니다. MCP 서버가 요청된 범위 집합을 결정하도록 하려면 설정하지 않은 상태로 두세요.
oauth.scopes가 설정되지 않으면 Claude Code는 자동으로 검색된 인가 서버 메타데이터에서 전체 scopes_supported 카탈로그를 요청하지 않습니다. 구성된 authServerMetadataUrl에서 가져온 메타데이터는 여전히 scopes_supported를 요청된 범위로 제공합니다.
인가 서버가 scopes_supported에서 offline_access를 광고하면, Claude Code는 새로운 브라우저 로그인 없이 액세스 토큰을 새로 고칠 수 있도록 고정된 범위에 추가합니다.
서버가 나중에 도구 호출에 대해 403 insufficient_scope을 반환하면, 호출은 서버가 요청하는 범위의 이름을 지정하는 needs additional permissions 메시지로 실패합니다. 서버는 /mcp에서 인증이 필요한 것으로 표시됩니다.
해당 범위가 고정된 oauth.scopes에 없으면 추가한 다음 /mcp를 실행하고 서버를 다시 인증하세요. Claude Code는 서버가 명명한 범위가 아닌 고정된 범위를 요청하므로, 추가하지 않고 다시 인증하면 얻은 토큰에 여전히 해당 범위가 없습니다.
사용자 정의 인증을 위해 동적 헤더 사용
MCP 서버가 Kerberos, 단기 토큰 또는 내부 SSO와 같은 OAuth 이외의 인증 체계를 사용하면,headersHelper를 사용하여 연결 시점에 요청 헤더를 생성하세요. Claude Code는 명령을 실행하고 출력을 연결 헤더에 병합합니다.
- 명령은 문자열 키-값 쌍으로 이루어진 JSON 객체를 stdout에 작성해야 합니다.
- Claude Code는 명령을 셸에서 실행하고 10초 후 포기합니다.
- Claude Code는 서버를 구성한 위치에 따라 명령의 작업 디렉터리를 선택하므로 스크립트를 절대 경로로 제공하거나
PATH에 넣으세요. - 동적 헤더는 같은 이름의 정적
headers를 재정의합니다.
401 Unauthorized 또는 403 Forbidden을 반환하면, Claude Code는 같은 규칙 아래에서 헬퍼를 자동으로 다시 실행하고, 새로운 헤더로 다시 연결하고, 호출을 한 번 재시도합니다. Claude Code는 해당 재시도도 실패한 경우에만 /mcp에서 서버를 인증이 필요한 것으로 표시합니다.
헬퍼의 출력에 Authorization 헤더가 포함되면, Claude Code는 해당 자격 증명을 서버의 인증으로 사용하며 서버에 대해 OAuth로 폴백하지 않습니다.
헬퍼의 자격 증명이 연결 중에 서버에 의해 거부되면, Claude Code는 서버를 인증이 필요한 것으로 표시하는 대신 연결이 실패했다고 보고합니다. 헬퍼가 반환하는 자격 증명을 수정한 다음 /mcp에서 다시 연결하여 헬퍼를 다시 실행하세요.
Claude Code는 헬퍼를 실행할 때 다음 환경 변수를 설정합니다.
이를 사용하여 여러 MCP 서버를 제공하는 단일 헬퍼 스크립트를 작성하세요.
플러그인 제공
headersHelper는 명령이 셸을 통해 실행되기 때문에 플러그인의 ${user_config.*} 값을 참조할 수 없습니다. Claude Code는 서버를 오류와 함께 잘못 구성된 것으로 보고하며 값을 대체하지 않습니다. 대신 ${user_config.KEY}를 셸 파싱되지 않는 서버의 headers 필드에 넣거나 헬퍼 스크립트가 설정 파일에서 값을 읽도록 하세요. v2.1.207 이전에는 headersHelper가 ${user_config.*} 값을 대체했습니다.
헬퍼가 실행되는 위치
Claude Code는 서버를 선언하는 구성에서headersHelper 명령의 작업 디렉터리를 선택합니다. Claude가 Bash에서 실행하는 cd는 이를 이동하지 않으며, /cd는 세션의 기본 작업 디렉터리에서 실행되는 서버에 대해서만 이를 이동합니다. 아래의 각 행은 headersHelper 명령의 상대 경로가 해석되는 디렉터리를 제공합니다.
v2.1.238 이전에는 Claude Code가 사용자 범위, 관리형 및 claude.ai 커넥터 서버의 헬퍼와 프로젝트 외부 에이전트 파일의 헬퍼도 Claude Code를 시작한 디렉터리에서 실행했습니다.
헬퍼가 읽을 수 있는 변수
저장소 또는 플러그인이 제공하는headersHelper는 직접 작성하지 않은 명령이므로 Claude Code는 ANTHROPIC_API_KEY와 같은 환경의 자격 증명 변수 없이 실행합니다. 서버를 구성한 위치에 따라 이것이 적용되는지 결정됩니다.
- 제거됨: 프로젝트
.mcp.json또는 플러그인의 서버, 그리고 프로젝트 또는--add-dir디렉터리의 에이전트 파일에 있는 인라인 서버 - 제거되지 않음: 사용자 또는 로컬 범위의 서버, 관리형 MCP, claude.ai 커넥터, SDK 또는
--mcp-config에서 제공되는 서버, 그리고~/.claude/agents/, 관리형 설정 또는--agents로 전달된 에이전트 파일의 인라인 서버
GIT_CONFIG_KEY_<n> 변수를 제외하고, Claude Code는 TOKEN, SECRET, PASSWORD, KEY 또는 AUTH가 포함된 이름(대소문자 상관없음)과 같이 자격 증명처럼 보이는 이름의 모든 변수를 환경에서 제거합니다. 따라서 ANTHROPIC_API_KEY와 MY_REGISTRY_TOKEN 모두 제거됩니다. Claude Code는 또한 ANTHROPIC_CUSTOM_HEADERS와 같이 해당 패턴을 따르지 않는 자격 증명 변수의 고정 목록을 제거합니다.
이것이 헬퍼에 적용되면, 스크립트가 파일 또는 자격 증명 저장소에서 자격 증명을 읽도록 하세요. 서버의 url이 이러한 변수 중 하나의 라이브 값을 전달하면(예: MY_REGISTRY_TOKEN), 헬퍼가 받는 CLAUDE_CODE_MCP_SERVER_URL 값도 해당 부분이 REDACTED로 대체됩니다.
headersHelper가 실행되기 전에 폴더 신뢰
Claude Code는headersHelper를 임의의 셸 명령으로 실행합니다. 프로젝트 .mcp.json 또는 로컬 범위의 서버의 경우, 서버가 선언된 프로젝트 디렉터리에 대한 신뢰 대화 상자를 수락한 후에만 헬퍼를 실행합니다. v2.1.238 이전에는 claude -p 또는 SDK 세션이 신뢰를 확인하지 않고 이러한 헬퍼를 실행했으며, 대화형 세션은 상위 폴더를 신뢰한 후에 실행했습니다.
- 인정되지 않는 신뢰: 상위 폴더의 신뢰, 그리고
claude -p또는 SDK 세션이 설정 파일의 훅에 대해 받는 자동 신뢰 - 폴더를 신뢰할 때까지: Claude Code는 정적
headers만으로 서버를 연결합니다.claude -p또는 SDK 세션에서는 또한 stderr에 서버당 하나의headersHelper not run줄을 출력하여 신뢰를 부여하는 방법을 알려줍니다. - 대화 상자 없이 신뢰:
~/.claude.json에서projects["<path>"].hasTrustDialogAccepted를true로 설정하세요.<path>는 프로젝트 허용 규칙 및 워크스페이스 신뢰에서 설명하는, Claude Code가 신뢰의 기준으로 삼는 폴더입니다.
.claude/agents/ 디렉터리에 있는 파일이면 프로젝트, 또는 --add-dir 디렉터리입니다. 해당 프로젝트 또는 디렉터리 자체를 신뢰할 때까지 Claude Code는 서버를 전혀 로드하지 않으므로 헬퍼도 실행되지 않습니다.
헤더가 필요한 게이트웨이 뒤의 MCP 서버에 로그인
게이트웨이가X-API-Key와 같은 헤더를 요구하는데 Claude Code가 이를 보내지 않으면 MCP 서버에 대한 OAuth 로그인이 실패합니다. Claude Code가 해당 헤더를 보내도록 하려면 서버 구성에 헤더를 추가하고 Claude Code v2.1.299 이상을 사용하세요.
- 구성을 편집할 수 있는 서버:
headers에 설정하거나headersHelper에서 반환하세요 - 관리형 MCP 또는 플러그인이 제공하는 서버: 관리자나 플러그인 작성자에게 서버 항목에 헤더를 추가해 달라고 요청하세요
Authorization을 제외한 구성된 헤더를 서버의 오리진으로 보내는 로그인, 토큰 새로 고침, 토큰 취소 요청에 추가합니다. 서버의 오리진은 url의 스킴, 호스트, 포트입니다. 헤더를 요구하는 게이트웨이는 여전히 인가 페이지나 다른 오리진의 인가 서버에서 로그인을 막을 수 있습니다.
- 인가 페이지: 이 페이지에서는 브라우저로 로그인하며, 브라우저는 구성된 헤더를 보내지 않습니다. 브라우저에 페이지 대신 게이트웨이의 오류가 표시되면 게이트웨이 운영자에게 헤더 없이 페이지를 통과시켜 달라고 요청하세요.
- 다른 오리진의 인가 서버: 해당 서버 앞의 게이트웨이도 헤더를 요구하면 그곳에서 로그인이 실패합니다. 해당 게이트웨이 운영자에게 헤더 없이 OAuth 요청을 통과시켜 달라고 요청하세요.
JSON 구성에서 MCP 서버 추가
MCP 서버에 대한 JSON 구성이 있는 경우 직접 추가할 수 있습니다:1
JSON에서 MCP 서버 추가
2
서버가 추가되었는지 확인
Claude Desktop에서 MCP 서버 가져오기
Claude Desktop에서 MCP 서버를 이미 구성한 경우 가져올 수 있습니다:1
Claude Desktop에서 서버 가져오기
2
가져올 서버 선택
명령을 실행한 후 가져올 서버를 선택할 수 있는 대화형 대화 상자가 표시됩니다.
3
서버가 가져와졌는지 확인
claude mcp 명령을 통해 추가된 서버 이름은 문자, 숫자, 하이픈 및 언더스코어만 포함할 수 있습니다. Claude Desktop은 해당 제한을 적용하지 않으므로 공백과 같은 다른 문자를 포함하는 이름의 Claude Desktop 서버는 가져올 수 없습니다. 가져오기는 거부된 각 이름을 보고하며 선택한 다른 서버는 계속 가져옵니다.
claude.ai에서 MCP 서버 사용
claude.ai 계정으로 Claude Code에 로그인한 경우, claude.ai에서 추가한 MCP 서버(커넥터라고 함)가 Claude Code에서 자동으로 사용 가능합니다:1
claude.ai에서 MCP 서버 구성
claude.ai/customize/connectors에서 서버를 추가합니다. Team 및 Enterprise 플랜에서는 관리자만 서버를 추가할 수 있습니다.
2
MCP 서버 인증
claude.ai에서 필요한 인증 단계를 완료합니다.
3
Claude Code에서 서버 보기 및 관리
Claude Code에서 다음 명령을 사용합니다:claude.ai의 서버는 claude.ai에서 온 것을 나타내는 표시기와 함께 목록에 나타납니다.
/mcp가 설정 없이 claude.ai Claude Docs를 나열하며, 다른 사람을 위한 문서를 요청할 때 Claude가 이를 사용합니다. 이를 끄려면 deniedMcpServers에 "claude.ai Claude Docs"의 serverName 항목을 추가하거나 claude.ai 커넥터 비활성화에 설명된 /mcp 토글을 사용합니다.
조직이 claude.ai에서 인증을 관리할 때 Claude Code는 커넥터를 /mcp와 /plugin 관리자에서 managed로 표시합니다. Managed 상태는 Claude Code가 커넥터에 연결하는 방식이나 조직의 도구 제어를 적용하는 방식을 변경하지 않습니다.
한 번도 로그인하지 않은 커넥터는 claude.ai 섹션의 끝에 있는 Show unused connectors 행 뒤에 축소되므로 조직에서 제공한 목록이 패널을 채우지 않습니다. 행을 선택하여 확장합니다. 이전에 로그인한 커넥터는 현재 재인증이 필요한 경우에도 계속 표시됩니다.
claude.ai의 커넥터는 활성 인증 방법이 claude.ai 구독 로그인일 때만 가져옵니다. 다음의 경우 이전에 /login을 실행했더라도 로드되지 않습니다:
ANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN또는apiKeyHelper가 활성 상태- Amazon Bedrock 또는 Google Cloud의 Agent Platform과 같은 타사 제공자가 활성 상태
ANTHROPIC_PROFILE, 페더레이션 변수 또는 활성 Anthropic 프로필이 자격 증명을 제공CLAUDE_CODE_OAUTH_TOKEN이claude setup-token의 토큰을 보유 중(모델 요청만 수행 가능)
/mcp에 추가한 커넥터가 나열되지 않으면 /status를 실행하여 활성 인증 방법을 확인합니다. 해당 환경 변수를 설정 해제하거나 apiKeyHelper 설정을 제거하거나 프로필을 끕니다. 그런 다음 /login을 실행하여 claude.ai 계정을 선택합니다.
임시 네트워크 문제로 인해 세션 시작 시 커넥터 목록이 로드되지 않으면 Claude Code는 백그라운드에서 최대 3회까지 가져오기를 다시 시도하며, 재시도가 성공하면 커넥터가 나타납니다. 여전히 나타나지 않으면 Claude Code를 다시 시작하여 목록을 다시 가져옵니다.
/mcp에 커넥터가 session token rejected로 표시되거나 세부 정보 보기에 claude.ai rejected the session token이 표시되면 claude.ai가 Claude Code 로그인의 토큰을 거부한 것입니다. 커넥터를 다시 인증해도 이 상태가 지워지지 않습니다. 커넥터 자체의 인증이 거부된 것이 아니기 때문입니다. 이를 지우려면:
/login을 실행하여 다시 로그인합니다./mcp에서 커넥터를 다시 연결합니다.
/mcp는 커넥터를 숨김으로 나열하고 중복을 제거하려면 어떻게 해야 하는지 보여줍니다.
Microsoft 365, Gmail 및 Google Calendar와 같은 일부 Anthropic 호스팅 커넥터는 업스트림 ID 제공자가 claude.ai가 등록한 리디렉션 URL만 허용하기 때문에 Claude Code의 로컬 OAuth를 지원하지 않습니다. claude mcp add 또는 .mcp.json에서 추가한 서버가 이러한 호스트 중 하나를 가리키고 /mcp에서 또는 claude mcp login으로 로그인하면 Claude Code는 is Anthropic-hosted and doesn't support local OAuth를 표시하여 대신 claude.ai/customize/connectors에서 서비스를 연결하도록 지시합니다.
claude mcp remove <name>으로 항목을 제거하고 claude.ai에서 서비스를 연결한 후 커넥터가 Claude Code에 자동으로 나타납니다.
커넥터가 Claude Code에 도달하는 방식
claude.ai 커넥터를 제어하는 설정은 세션이 실행되는 위치에 따라 달라집니다. 일부 세션만 claude.ai에서 커넥터를 가져오기 때문입니다. 아래의 각 행은 한 종류의 세션에서 커넥터가 도착하는 방식과 그곳에서 이를 제어하는 것을 이름 지정합니다. 데스크톱 앱의 WSL 세션에는 커넥터가 아직 순차적으로 제공되는 중이므로 행이 없습니다.disableClaudeAiConnectors, ENABLE_CLAUDEAI_MCP_SERVERS 및 allowAllClaudeAiMcps는 첫 번째 행(Claude Code가 자체적으로 가져오는 커넥터)에만 작용합니다. 다른 두 행은 다음과 같은 방식으로 다릅니다:
- 클라우드 세션: 세션에 도달하는
allowedMcpServers및deniedMcpServers항목(예: 서버 관리 설정을 통해)도 전달된 커넥터를 필터링합니다. 세션의 프록시는 각 커넥터의 URL을 다시 작성하므로 커넥터 자체의 URL에 대해 작성된serverUrl패턴은 일치하지 않습니다. 자체 호스팅 환경에서 URL 허용 목록과 함께 전달된 커넥터를 허용하려면 커넥터 트래픽이 네트워크를 떠남 아래에 나열된serverUrl항목을 추가합니다. Claude Code는 자체 호스팅 실행기 호스트와 같이 세션을 실행하는 호스트에managed-mcp.json이 있을 때 전달된 커넥터를 삭제합니다.allowAllClaudeAiMcps를 설정했는지 여부와 관계없이 말입니다. - 데스크톱 앱 로컬 및 SSH 세션: 데스크톱 앱은 커넥터를 프로세스 내
type: "sdk"서버로 등록하며, MCP 설정이나managed-mcp.json이 이에 도달하지 않습니다. 사용자는 claude.ai/customize/connectors에서 연결을 끊어 자신의 세션에서 커넥터를 제외합니다. 조직은 커넥터의 도구를 차단하거나 데스크톱 앱에서 Claude Code를 완전히 끕니다.
커넥터 도구에 대한 조직 제어
조직은 claude.ai 커넥터에 도구별 제어를 설정할 수 있습니다. Claude Code는 시작 시 이러한 설정을 읽고 로컬에서 적용합니다. 단, 데스크톱 앱의 로컬 및 SSH 세션은 예외입니다. 거기서 데스크톱 앱은 커넥터를 전달하기 전에blocked 도구를 보류하며, ask 설정은 Claude Code에 도달하지 않으므로 모든 호출에서 프롬프트하는 대신 세션의 일반 권한 규칙을 해당 도구에 적용합니다. Claude Code가 자체적으로 커넥터를 가져오는 세션에서는 /mcp를 실행하여 커넥터의 각 도구에 적용되는 설정을 확인합니다.
- 도구가
ask로 설정됨: Claude Code는Your organization requires approval for this tool이유로 모든 호출에서 프롬프트합니다. 프롬프트는acceptEdits,auto및bypassPermissions권한 모드에서도 나타납니다. 터미널에서는 프롬프트에 선택을 기억하는 옵션이 없습니다. 도구와 일치하는 허용 규칙도 프롬프트를 건너뛰지 않습니다. 프롬프트를 하지 않는dontAsk모드에서 Claude Code는 호출을 거부합니다. - 도구가
blocked로 설정됨: Claude Code는 Claude가 보기 전에 도구를 필터링하므로 도구 목록에 나타나지 않습니다. Claude Code가 자체적으로 커넥터를 가져오는 세션에서는/mcp도구 목록이 여전히 도구를 표시하며,disabled by your organization으로 표시됩니다.
blocked 설정을 적용하므로 Claude는 거기서도 도구를 사용할 수 없으며, 데스크톱 앱의 세션에서 도구를 보류하면서 채팅에서 사용 가능하게 유지할 수 없습니다. 데스크톱 앱은 모든 도구가 차단된 커넥터를 건너뜁니다.
claude.ai 커넥터 비활성화
Claude Code는disableClaudeAiConnectors를 자체적으로 가져오는 커넥터에만 적용하며, 클라우드 호스트 또는 데스크톱 앱이 전달하는 커넥터에는 적용하지 않습니다. 가져오는 커넥터를 끄려면 설정을 모든 설정 범위에서 true로 설정합니다:
true가 우선합니다. 체크인된 프로젝트 .claude/settings.json은 Claude Code가 자체적으로 가져오는 커넥터를 저장소에서 제외할 수 있지만, 프로젝트 수준 false는 사용자 또는 정책 수준 true가 비활성화한 커넥터를 다시 활성화할 수 없습니다. --mcp-config를 통해 명시적으로 전달된 서버는 영향을 받지 않습니다.
ENABLE_CLAUDEAI_MCP_SERVERS 환경 변수를 false로 설정할 수도 있습니다. 이는 현재 셸 세션에 대해 동일한 효과를 갖습니다:
deniedMcpServers에 추가합니다. 예를 들어, serverName 항목 "claude.ai Slack"은 Slack 커넥터를 차단합니다. /mcp를 실행하여 Claude Code가 현재 프로젝트에만 가져오는 모든 커넥터를 켜거나 끌 수도 있습니다.
Claude Code를 MCP 서버로 사용하기
Claude Code 자체를 다른 애플리케이션이 연결할 수 있는 MCP 서버로 사용할 수 있습니다:MCP 클라이언트로서 백그라운드 명령의 출력 읽기
claude mcp serve에서 반환된 Bash 또는 PowerShell 결과에 backgroundOutputPath 필드가 있으면, 해당 호출이 명령을 백그라운드에서 실행 중인 상태로 남겨 두었다는 의미입니다. 클라이언트가 호출에서 run_in_background: true를 설정하면 명령이 백그라운드에서 실행됩니다. 포그라운드 명령도 타임아웃에 도달하면 백그라운드로 이동할 수 있습니다.
이 필드는 결과의 JSON 텍스트에 포함되며 명령의 출력 파일 경로를 담고 있습니다.
- 지금까지의 출력을 읽으려면: 클라이언트에서 해당 경로의 파일을 열거나, 서버의
Read도구에 경로를file_path로 전달합니다 - 명령이 완료되었는지 확인하려면:
npm test; echo DONE처럼command값에 고정 문자열을 출력하는echo를 추가합니다. 해당 문자열이 파일에 나타나면 명령이 완료된 것입니다. 이 문자열이 없으면 종료를 표시하는 것이 없습니다. Claude Code는 파일에 종료를 나타내는 줄을 추가하지 않으며 클라이언트에 알림도 보내지 않기 때문입니다. - 긴 출력의 끝부분을 읽으려면:
file_path만 지정한Read는 첫 페이지를 반환하거나, 파일이 크기 제한을 초과하면 실패합니다.offset과limit도 함께 전달하면 파일 크기에 관계없이 작동합니다:offset과limit을 모두1로 설정하여Read를 호출하고, 결과에서totalLines를 가져옵니다offset을totalLines에서 9를 뺀 값으로,limit을10으로 설정하여Read를 다시 호출합니다- 두 번째 호출이 반환하는 마지막 10줄에서
echo문자열을 찾습니다
backgroundOutputPath 필드를 사용하려면 Claude Code v2.1.295 이상이 필요합니다.
MCP 출력 제한 및 경고
MCP 도구가 대용량 출력을 생성할 때, Claude Code는 토큰 사용량을 관리하여 대화 컨텍스트가 압도되지 않도록 도움을 줍니다:- 출력 경고 임계값: Claude Code는 MCP 도구 출력이 10,000 토큰을 초과할 때 경고를 표시합니다
- 구성 가능한 제한:
MAX_MCP_OUTPUT_TOKENS환경 변수를 사용하여 최대 허용 MCP 출력 토큰을 조정할 수 있습니다 - 기본 제한: 기본 최댓값은 25,000 토큰입니다
- 범위: 환경 변수는 자체 제한을 선언하지 않은 도구에 적용됩니다.
anthropic/maxResultSizeChars를 설정한 도구는MAX_MCP_OUTPUT_TOKENS가 무엇으로 설정되어 있든 관계없이 텍스트 콘텐츠에 대해 해당 값을 대신 사용합니다. 이미지 데이터를 반환하는 도구는 여전히MAX_MCP_OUTPUT_TOKENS의 적용을 받습니다 - 제한 초과: 이미지 콘텐츠가 없는 성공한 결과가 토큰 제한을 초과하면, Claude Code는 이를 파일에 저장하고 대화에서 파일 경로를 명시하는 메시지로 대체하므로, Claude는 콘텐츠가 필요할 때 파일을 읽습니다. 파일은
~/.claude/projects/아래의 세션의tool-results디렉터리에 저장됩니다. - HTTP 및 SSE 서버의 응답 크기: HTTP 또는 SSE 서버의 응답이 16MiB를 넘으면 Claude Code는 응답 읽기를 중단하고 요청은 실패합니다. 이 제한은 압축 해제 후 하나의 JSON 응답 본문 또는 이벤트 스트림의 하나의 이벤트에 적용됩니다. 서버를 관리하는 경우, 결과를 페이지로 나누는 등의 방법으로 응답당 반환하는 데이터를 줄여 제한을 넘지 않도록 합니다
- WebSocket 서버의 메시지 크기: WebSocket 서버가 16MiB를 넘는 메시지 하나를 보내면 Claude Code는 연결을 닫으며, 해당 서버에서 진행 중인 호출은 실패합니다. 서버를 관리하는 경우, 메시지당 반환하는 데이터를 줄여 제한을 넘지 않도록 합니다
- 텍스트 결과의 문자 제한:
anthropic/maxResultSizeChars를 선언하지 않은 도구의 경우, Claude Code는 이미지 콘텐츠가 없는 성공한 결과가 토큰 수와 관계없이 50,000자를 초과하면 이를 파일에 저장합니다.MAX_MCP_OUTPUT_TOKENS를 설정해도 이 임계값은 변경되지 않습니다 - 오류 결과: 도구가
isError: true로 표시된 결과를 반환하면, Claude는 결과의 텍스트를 도구의 오류 메시지로 받습니다. 약 11,000자보다 긴 오류 텍스트는 처음 5,000자와 마지막 5,000자만 유지되며, 그 사이에 제거된 문자 수를 알려 주는 표시가 삽입됩니다
MAX_MCP_OUTPUT_TOKENS를 설정합니다:
특정 도구의 제한 늘리기
MCP 서버를 구축하는 경우, 도구의tools/list 응답 항목에서 _meta["anthropic/maxResultSizeChars"]를 설정하여 개별 도구가 기본 디스크 저장 임계값인 50,000자보다 큰 결과를 반환하도록 허용할 수 있습니다. Claude Code는 해당 도구의 임계값을 주석 처리된 값으로 올립니다. 단, 500,000자의 하드 상한선까지입니다.
이는 데이터베이스 스키마나 전체 파일 트리와 같이 본질적으로 크지만 필요한 출력을 반환하는 도구에 유용합니다. 주석 처리가 없으면 기본 임계값을 초과하는 성공한 결과는 디스크에 저장되고 대화에서 파일 참조로 대체됩니다.
MAX_MCP_OUTPUT_TOKENS와 독립적으로 적용되므로, 사용자는 이를 선언한 도구에 대해 환경 변수를 올릴 필요가 없습니다. 이미지 데이터를 반환하는 도구는 여전히 토큰 제한의 적용을 받습니다.
도구 결과의 이미지
MCP 도구가 PNG, JPEG, GIF 또는 WebP 이미지를 반환하면, Claude는 대화에서 이미지를 인라인으로 봅니다. 인라인 복사본은 모델의 이미지 크기 제한에 맞도록 축소되거나 압축될 수 있습니다. Claude Code는 또한 원본 바이트를~/.claude/projects/ 아래의 세션의 tool-results 디렉터리에 있는 파일에 저장하고 Claude에 경로를 제공합니다. Claude는 그 후 Bash와 같은 도구를 사용하여 전체 해상도 파일을 자르거나, 변환하거나, 재사용할 수 있습니다.
--no-session-persistence 또는 CLAUDE_CODE_SKIP_PROMPT_HISTORY를 사용하여 세션 지속성을 비활성화하면, Claude Code는 이미지 파일을 작성하지 않으며 Claude는 인라인 복사본만 받습니다.
MCP 이미지 결과를 파일에 저장하려면 Claude Code v2.1.283 이상이 필요합니다.
루트 레벨 결합자가 있는 도구 입력 스키마
일부 MCP 서버는 도구의 입력 스키마를 JSON Schema 합집합으로 선언하며, 스키마의 최상위 레벨에anyOf, oneOf 또는 allOf를 포함합니다. Claude API는 스키마 루트에서 이러한 키워드를 허용하지 않습니다. 이는 properties 내에 중첩된 결합자를 허용하며, Claude Code는 이를 변경하지 않고 전송합니다.
루트 레벨 결합자가 있는 도구는 계속 사용 가능합니다. 도구를 API로 전송하기 전에 Claude Code는 스키마를 단일 객체로 평탄화하고 도구의 설명 앞에 어느 매개변수 그룹이 함께 속하는지 Claude에게 알려주는 문장을 추가합니다:
allOf: 모든 분기의 속성이 병합되며, 각 분기의required목록은 여전히 적용됩니다anyOf및oneOf: 모든 분기의 속성이 병합되며, 각 분기의required목록은 스키마에 의해 강제되지 않고 도구 설명에 설명됩니다
유효하지 않은 입력 스키마를 가진 도구
Claude API는 요청의 모든 도구의 입력 스키마를 확인하고 하나의 스키마라도 실패하면 전체 요청을 거부하므로, 형식이 잘못된 스키마를 가진 단일 MCP 도구가 있으면 이를 포함하는 모든 요청이 400 오류로 실패합니다. Claude Code는 서버의 도구를 로드할 때 API의 확인 중 두 가지를 직접 실행하고 이를 실패할 각 도구를 제외하므로, 서버의 다른 도구는 계속 작동합니다:- 최상위 속성 이름은 1~64자 길이여야 하며 ASCII 문자와 숫자,
_,.,-만 사용해야 합니다 - 스키마는 JSON Schema draft 2020-12 메타스키마에 대해 유효해야 합니다. Claude Code는
$schema를 선언하지 않는 스키마와 draft 2020-12를 선언하는 스키마에 이 확인을 적용합니다. 다른 방언을 선언하는 스키마는 이 확인을 건너뛰지만, 위의 속성 이름 확인은 여전히 적용됩니다
이름이 128자보다 긴 도구
/mcp에 Claude가 호출할 수 없는 도구가 표시되면 해당 도구의 전체 이름이 128자보다 긴지 확인합니다. 세션에서 /mcp를 실행하고 도구를 선택하면 mcp__<server>__<tool>과 같은 전체 이름을 확인할 수 있습니다. Claude Code는 전체 이름이 128자를 초과하는 MCP 도구를 Claude에 보내는 도구 목록에서 제외합니다. Claude API는 이러한 도구가 포함된 요청을 거부하므로, 해당 도구를 제외하면 서버의 다른 도구는 계속 작동합니다.
해당 도구의 이름을 표시하는 메시지와 전체 이름을 줄이는 방법은 128자를 초과하는 MCP 도구 이름을 참조하세요.
특정 도구에 승인 요구하기
MCP 서버를 구축하는 경우, 도구의tools/list 응답 항목에서 _meta["anthropic/requiresUserInteraction"]을 true로 설정하여 해당 도구가 매 호출마다 명시적인 승인을 요구하도록 지정할 수 있습니다. 값은 반드시 JSON 불리언 true여야 하며, 그 외의 값은 무시됩니다.
Claude Code는 acceptEdits, auto, bypassPermissions 권한 모드에서도 해당 도구의 권한 프롬프트를 매 호출마다 표시하며, 해당 도구에 대해서는 “다시 묻지 않기” 옵션을 제공하지 않습니다. 해당 도구와 일치하는 허용 규칙도 프롬프트를 건너뛰지 않습니다. 프롬프트를 전혀 표시하지 않는 dontAsk 모드에서는 Claude Code가 대신 호출을 거부합니다.
프롬프트는 반드시 사람에게 전달되어야 합니다. --permission-prompt-tool을 사용하는 비대화형 모드에서는, 지정된 도구에 대해 프롬프트 도구가 반환한 allow 결과가 MCP tool requires user interaction; not supported via --permission-prompt-tool 메시지와 함께 거부로 변환됩니다. Agent SDK의 canUseTool 콜백은 이러한 호출을 전달받아 승인할 수 있습니다. SDK 애플리케이션이 이를 사용자에게 표시할 것으로 기대되기 때문입니다.
이 기능은 권한 프롬프트 자체가 핵심인 도구에 사용하십시오. 예를 들어 동의 또는 접근 권한 부여 단계처럼, 자동 승인이 이루어지면 결국 어떤 사람도 동의한 적이 없는 상태가 되어 버리는 경우입니다. 같은 서버의 다른 도구는 기존 권한 동작을 그대로 유지합니다.
다음 tools/list 항목은 하나의 도구를 항상 승인이 필요한 도구로 지정합니다.
두 번 호출해도 안전한 도구 표시하기
MCP 서버를 만드는 경우, 두 번 호출해도 안전한 도구를 표시하면 연결이 닫힐 때 대기 중이던 호출을 Claude Code가 반복할 수 있습니다. Claude Code는 HTTP 서버나 claude.ai 커넥터에 대한 이러한 호출을 새 연결에서 한 번 반복할 수 있습니다. Claude Code가 반복하지 않는 호출은connection closed before the tool call was answered 오류로 실패할 수 있습니다.
도구를 표시하려면 해당 도구의 tools/list 항목에서 다음 annotations 중 하나를 true로 설정합니다.
idempotentHint: 도구가 무언가를 변경할 수 있지만, 동일한 인수로 다시 호출해도 안전합니다readOnlyHint: 도구가 아무것도 변경하지 않습니다. Claude Code는 또한 이 도구의 호출을 다른 읽기 전용 호출과 병렬로 실행합니다.
tools/list 항목의 다음 필드는 set_issue_status 도구를 반복해도 안전한 것으로 표시합니다.
MCP 유도 요청에 응답하기
MCP 서버는 작업 중에 유도(elicitation)를 사용하여 구조화된 입력을 요청할 수 있습니다. 서버가 자체적으로 얻을 수 없는 정보가 필요할 때, Claude Code는 대화형 대화 상자를 표시하고 사용자의 응답을 서버에 다시 전달합니다. 사용자 측에서 구성할 필요가 없습니다. 유도 대화 상자는 서버가 요청할 때 자동으로 나타납니다. 서버는 두 가지 방식으로 입력을 요청할 수 있습니다.- 양식 모드: Claude Code는 서버에서 정의한 양식 필드가 있는 대화 상자를 표시합니다(예: 사용자 이름 및 암호 프롬프트). 필드를 채우고 제출합니다.
- URL 모드: Claude Code는 브라우저에서 링크를 열지 여부를 묻습니다. 서버는 이 모드를 터미널 외부에서 완료되는 흐름(예: 로그인)에 사용합니다.
% 또는 &와 같이 이스케이프해야 하는 모든 문자는 제한에 대해 4배로 계산됩니다. 즉, 자신의 문자와 3개의 이스케이프 문자입니다. 이들이 없는 URL은 약 8,000자에서 제한에 도달합니다. 대부분 퍼센트 이스케이프로 구성된 URL(3번째 문자마다 %가 있는 경우)은 대략 4,000에서 도달합니다.
유도 요청에 대화 상자를 표시하지 않고 자동으로 응답하려면 Elicitation hook을 사용합니다.
유도를 사용하는 MCP 서버를 구축하는 경우, 프로토콜 세부 정보 및 스키마 예제는 MCP 유도 사양을 참조합니다.
protocol revision 2026-07-28을 사용하는 연결에서 Claude Code는 클라이언트 기능에서 elicitation: {form: {}, url: {}}을 선언하므로, 해당 프로토콜의 표준 유도 요청을 통해 서버가 어느 모드든 요청할 수 있습니다.
MCP 리소스 사용
MCP 서버는 파일을 참조하는 방식과 유사하게 @ 멘션을 사용하여 참조할 수 있는 리소스를 노출할 수 있습니다.MCP 리소스 참조
1
사용 가능한 리소스 나열
프롬프트에서
@를 입력하여 연결된 모든 MCP 서버의 사용 가능한 리소스를 확인합니다. 리소스는 자동 완성 메뉴에서 파일과 함께 표시됩니다.2
특정 리소스 참조
@server:protocol://resource/path 형식을 사용하여 리소스를 참조합니다:3
여러 리소스 참조
단일 프롬프트에서 여러 리소스를 참조할 수 있습니다:
ui:// URI 또는 text/html;profile=mcp-app 미디어 타입을 가진 항목입니다: Claude가 읽을 콘텐츠가 아니라 호스트 애플리케이션이 렌더링할 페이지입니다. 이들은 @ 제안이나 리소스 목록 도구의 결과에 나타나지 않으며, UI 리소스만 제공하는 서버는 빈 리소스 목록을 표시합니다. URI로 UI 리소스를 읽는 것은 여전히 작동합니다.
MCP 도구 검색으로 확장하기
도구 검색은 Claude가 필요할 때까지 도구 정의를 연기하여 MCP 컨텍스트 사용량을 낮게 유지합니다. 세션 시작 시 도구 이름과 서버 지침만 로드되므로 더 많은 MCP 서버를 추가해도 컨텍스트 윈도우에 미치는 영향이 최소화됩니다. Claude Code는 서버당 고정된 도구 상한을 부과하지 않으며, 실질적인 제한은 컨텍스트 윈도우 예산입니다.도구 검색은 Microsoft Foundry Azure에서 호스팅되는 배포에서 지원되지 않으며, 이는 서버 측에서 거부합니다. Claude Code는 거부를 감지하고 해당 배포에 대해 대신 MCP 도구를 미리 로드합니다.
ENABLE_TOOL_SEARCH는 거부가 배포 자체에서 발생하므로 이를 재정의할 수 없습니다.MCP 서버 작성자를 위한 도구 검색
MCP 서버를 구축하는 경우, 도구 검색이 활성화되면 서버 지침 필드가 더욱 유용해집니다. 서버 지침은 Claude가 도구를 검색할 시기를 이해하는 데 도움이 되며, 스킬이 작동하는 방식과 유사합니다. 다음을 설명하는 명확하고 설명적인 서버 지침을 추가하세요:- 도구가 처리하는 작업의 범주
- Claude가 도구를 검색해야 할 시기
- 서버가 제공하는 주요 기능
- 서버 지침 및 미리 로드되는 도구의 설명: 4,096자
- Claude가 도구 검색을 통해 로드하는 도구의 설명: 16,384자
api.anthropic.com에서 호스팅하는 일부 MCP 서버의 설명과 지침은 잘리지 않고 전체가 Claude에 전달됩니다. 세션의 다른 MCP 서버에 대한 제한을 변경하려면 CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH를 문자 수로 설정하세요. 설정한 숫자는 두 제한을 모두 대체합니다. 예를 들어 8192는 더 짧은 제한을 높이고 더 긴 제한을 낮춥니다. 이 변수는 Claude Code v2.1.280 이상이 필요합니다.
도구를 미리 로드하거나 연기된 상태로 유지하도록 표시
서버의 도구 중 하나가 로드되는 방식을 제어하려면 해당 도구의_meta 객체에 "anthropic/alwaysLoad"를 설정하세요. 서버를 Claude Code에 추가하는 사람도 자신의 구성에서 서버 전체에 대해 alwaysLoad를 설정할 수 있으며, 그 설정이 작성자의 설정을 재정의할 수 있습니다:
다음
tools/list 항목은 하나의 도구를 미리 로드하도록 요청합니다:
도구 검색 구성
도구 검색은 기본적으로 활성화됩니다. MCP 도구는 연기되고 필요에 따라 발견됩니다.CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS를 설정하면 도구 검색이 꺼집니다. ENABLE_TOOL_SEARCH를 직접 설정하여 재정의할 수 없습니다. 조직은 Claude Code v2.1.227 이상에서 관리형 설정을 통해 도구 검색을 계속 활성화할 수 있습니다. HIPAA 구성을 받는 세션에서는 도구 검색이 꺼지며, ENABLE_TOOL_SEARCH나 관리형 설정으로도 다시 켤 수 없습니다. 사전 릴리스 기능 비활성화는 재정의가 적용되는 위치와 변수가 제거하는 항목을 다룹니다.
Claude Code는 Claude Opus 4, Claude Sonnet 4, Claude Haiku 4.5 및 이후 모델에서 도구 검색을 사용하며, Google Cloud의 Agent Platform에서는 Opus 4.5, Sonnet 4.5, Haiku 4.5 및 이후 모델에서 사용합니다. 이전 모델에서는 Claude Code가 모든 MCP 도구를 미리 로드하며, ENABLE_TOOL_SEARCH=true는 이를 재정의하지 않습니다.
Google Cloud의 Agent Platform에서 Claude Code는 모델 세대별로 결정합니다:
- Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 및 이후 모델: 도구 검색은 기본적으로 활성화되며, Anthropic API와 동일합니다.
- 이전 Agent Platform 모델: Claude Code는 필요한 베타 헤더를 거부하는 서빙 스택 때문에 모든 MCP 도구를 미리 로드합니다.
ENABLE_TOOL_SEARCH=true는 이를 재정의하지 않습니다.
ENABLE_TOOL_SEARCH=true를 설정하지 않는 한 Google Cloud의 Agent Platform의 모든 모델에 대해 도구 검색을 비활성화했습니다.
ENABLE_TOOL_SEARCH 환경 변수로 도구 검색 동작을 제어하세요:
env 필드에서 값을 설정하세요.
ToolSearch 도구를 특별히 비활성화할 수도 있습니다:
ToolSearch를 거부하거나 --tools에서 제외하면 MCP 도구가 대신 미리 로드되지만, 요청에는 여전히 자리 표시자 defer_loading 항목이 포함될 수 있습니다. 게이트웨이가 해당 항목을 거부하는 경우 LLM 게이트웨이를 통한 도구 검색을 참조하세요.
LLM 게이트웨이를 통한 도구 검색
다음 경우는 다른 곳에서 다룹니다:
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS를 설정한 경우: 도구 검색에 미치는 영향을 참조하세요defer_loading또는tool_reference가 언급된 오류로 요청이 실패한 경우: Extra inputs are not permitted를 참조하세요
ANTHROPIC_BASE_URL이 게이트웨이를 가리키는 경우에도 도구 검색은 기본적으로 켜져 있으므로, 요청에는 게이트웨이가 전달해야 할 defer_loading 도구 필드와 tool_reference 블록이 포함됩니다. 도구 검색이 켜져 있는 동안 MCP 도구는 연기됩니다. 대신 모든 도구를 미리 로드하려면 셸 또는 설정 env에서 ENABLE_TOOL_SEARCH=false를 설정하세요. v2.1.304 이전에는 ENABLE_TOOL_SEARCH가 true, auto 또는 auto:N이 아닌 한 게이트웨이 뒤에서 도구 검색이 꺼져 있었습니다.
v2.1.305 이상에서는 Claude Code가 원인을 인식하지 못하는 400 또는 422 이후에 도구 검색 없이 요청을 재시도할 수 있습니다. 재시도가 성공하면 화면에 아무것도 표시되지 않으며 별도로 조치할 필요가 없습니다. MCP 도구가 대신 미리 로드됩니다. Claude Code는 나중에 도구 검색을 다시 시도하며, 이때 거부되는 요청이 한 번 더 발생합니다. 이러한 요청을 건너뛰려면 ENABLE_TOOL_SEARCH=false를 설정하세요.
ENABLE_TOOL_SEARCH=auto 임계값 미만에서도 연기된 상태로 유지되는 도구
도구 정의의 합계가 auto 임계값 미만인데도 /context가 도구를 (deferred) 또는 (loaded on-demand)로 표시한다면, 이 대화에서 도구 검색이 이미 켜졌고 켜진 상태로 유지된 것입니다. 합계는 나중에 줄어들 수 있으며, 예를 들어 세션을 재개한 후 MCP 서버가 다시 연결되는 동안 줄어들 수 있습니다. 별도로 조치할 필요는 없습니다. Claude는 작업에 필요할 때 해당 도구를 각각 로드합니다.
서버를 연기에서 제외
서버의 도구가 항상 검색 단계 없이 Claude에게 표시되어야 하는 경우, 해당 서버의 구성에서alwaysLoad를 true로 설정하세요. 그러면 해당 서버의 도구가 ENABLE_TOOL_SEARCH 설정과 관계없이 컨텍스트에 로드됩니다. 각 미리 로드된 도구가 대화에 사용할 수 있는 컨텍스트를 소비하므로, Claude가 모든 턴에서 필요한 적은 수의 도구에 이를 사용하세요.
다음 .mcp.json 항목은 다른 서버는 연기된 상태로 두고 하나의 HTTP 서버를 제외합니다:
alwaysLoad 필드는 모든 서버 유형에서 사용 가능합니다.
alwaysLoad: true를 설정하면 시작 시 서버의 도구를 기다리게 되며, 첫 번째 프롬프트가 구축될 때 도구가 있어야 하므로 표준 5초 연결 타임아웃으로 제한됩니다. 유효한 cached 항목이 있는 원격 서버는 연결하지 않고 캐시에서 도구를 제공하므로 시작을 지연시키지 않습니다. 다른 서버는 기본적으로 백그라운드에서 연결됩니다. MCP_CONNECTION_NONBLOCKING=0을 설정하여 시작이 이들을 기다리도록 하세요.
서버의 도구 연기
서버의 모든 도구를 도구 검색 뒤에 유지하려면 MCP 구성의 해당 서버 항목에"alwaysLoad": false를 설정하세요. 여기에는 서버 작성자가 미리 로드하도록 표시한 도구도 포함됩니다. alwaysLoad를 생략하면 표시된 도구는 미리 로드됩니다. Claude Code v2.1.287 이상이 필요합니다.
MCP 프롬프트를 명령어로 사용하기
MCP 서버는 Claude Code에서 명령어로 사용 가능한 프롬프트를 노출할 수 있습니다.anthropic-skills라는 이름의 서버에서 나온 프롬프트는 표시되지 않습니다. Claude Code는 claude.ai에서 동기화된 스킬을 위해 해당 이름을 예약하기 때문입니다. 서버의 도구는 여전히 작동합니다. MCP 구성에서 서버의 이름을 바꾸어 프롬프트를 나열합니다.
MCP 프롬프트 실행하기
1
사용 가능한 프롬프트 발견하기
/를 입력하여 MCP 서버의 프롬프트를 포함한 사용 가능한 명령어를 확인합니다. Claude Code는 각 MCP 프롬프트를 /servername:promptname (MCP) 형식으로 나열합니다. /mcp__servername__promptname을 입력하여 실행할 수도 있습니다.2
인수 없이 프롬프트 실행하기
3
인수를 포함하여 프롬프트 실행하기
많은 프롬프트는 인수를 허용합니다. 명령어 뒤에 공백으로 구분된 인수를 전달합니다. Claude Code는 공백을 기준으로 인수를 분할하므로 각 인수는 단일 토큰입니다:
관리형 MCP 구성
조직에서 사용자가 연결할 수 있는 MCP 서버를 중앙에서 제어해야 하는 경우 관리형 MCP 구성을 참조하십시오. 이 문서에서는managed-mcp.json으로 고정 서버 세트를 배포하고, managedMcpServers로 모든 사용자에게 서버를 제공하며, allowedMcpServers 및 deniedMcpServers로 서버를 제한하고, 서버가 차단되었을 때 사용자에게 표시되는 내용을 다룹니다.