아빠노트

윈도우에서 Claude Code에 MCP 서버 붙이기 — claude mcp add --scope project 최소 구성과 Pending approval 풀기

실측 2026-09-17처음 쓴 날 2026-09-17 · English version

윈도우에서 프로젝트 범위로 MCP 서버를 추가하고 Pending approval을 확인한 기록입니다. 공식 대화형 신뢰·승인 절차와 실측한 한 번의 --settings 승인, 제거 결과를 구분해 담았습니다.

한 줄로

윈도우 PowerShell에서 claude mcp add 이름 --scope project -- npx -y 패키지 인자를 치면 프로젝트 폴더에 .mcp.json이 생깁니다. 저희 환경(2.1.274)에서는 npx를 cmd /c로 감싸지 않아도 연결됐고, 승인 전에는 ⏸ Pending approval로 표시됐습니다.

이번 실측의 claude mcp list와 get에서는 미승인 프로젝트 서버가 ⏸ Pending approval로 나왔습니다. 이 글의 2단계에 문서의 대화형 신뢰·승인 절차와, 직접 확인한 --settings 단일 실행 예제를 함께 정리했습니다.

2026-09-28 문서 재확인·구성 정리: MCP 문서와 빠른 시작의 승인 안내를 다시 읽었습니다. 아래 Windows 실측과 출력은 2026-09-17 기록이며, 대화형 승인이나 Windows 명령을 새로 실행한 결과는 아닙니다.

이런 분께

강좌대로 claude mcp add를 쳤는데 claude mcp list에 Pending approval만 뜨는 분. 윈도우에서 npx 서버를 붙일 때 cmd /c가 필요한지 궁금한 분. 사용자 설정 파일을 건드리지 않고 한 프로젝트에만 서버를 넣고 싶은 분.

실측 환경

항목값
OSWindows 11 Home (10.0.26200)
셸PowerShell 7 (claude mcp add/list/get), Git Bash (파일 확인)
Claude Code2.1.274(작업 세션 기록 기준)
Node.js / npxv24.19.0 / 11.17.0
서버@modelcontextprotocol/server-filesystem (npx로 실행)
실험 폴더C:\Users\User\AppData\Local\Temp\longtail_C\proj (깃 저장소 아님)

범위부터 고르기

claude mcp add --help의 범위 옵션입니다.

  -s, --scope <scope>          Configuration scope (local, user, or project)
                               (default: "local")

기본값이 local이라는 점이 중요합니다. 공식 문서(code.claude.com/docs/en/mcp, 2026-09-17 확인)의 표를 보면 local과 user는 둘 다 ~/.claude.json에 저장되고, project만 .mcp.json in project root에 저장됩니다. 윈도우에서 ~/.claude.json은 %USERPROFILE%\.claude.json이라고 빠른 시작 문서(code.claude.com/docs/en/mcp-quickstart, 같은 날 확인)에 적혀 있습니다. 개인 설정 파일을 건드리지 않으려고 이번에는 --scope project만 썼습니다.

1단계 — 추가

Set-Location 'C:\Users\User\AppData\Local\Temp\longtail_C\proj'
claude mcp add tempfs --scope project -- npx -y @modelcontextprotocol/server-filesystem 'C:\Users\User\AppData\Local\Temp\longtail_C\proj'
Added stdio MCP server tempfs with command: npx -y @modelcontextprotocol/server-filesystem C:\Users\User\AppData\Local\Temp\longtail_C\proj to project config
File modified: C:\Users\User\AppData\Local\Temp\longtail_C\proj\.mcp.json

-- 뒤는 서버 실행 명령입니다. 문서도 "Everything after -- is passed to the server untouched."라고 설명합니다. 만들어진 .mcp.json은 이렇습니다. 윈도우 경로의 백슬래시는 JSON 안에서 두 개로 바뀌어 저장됩니다.

{
  "mcpServers": {
    "tempfs": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "C:\\Users\\User\\AppData\\Local\\Temp\\longtail_C\\proj"
      ],
      "env": {}
    }
  }
}

2단계 — 상태 보기, 그리고 Pending approval

$ claude mcp get tempfs
tempfs:
  Scope: Project config (shared via .mcp.json)
  Status: ⏸ Pending approval (run `claude` to approve)
  Type: stdio
  Command: npx
  Args: -y @modelcontextprotocol/server-filesystem C:\Users\User\AppData\Local\Temp\longtail_C\proj

claude mcp list도 같은 상태였습니다. 도움말에 "Unapproved .mcp.json servers are shown as ⏸ Pending approval and not connected to"라고 되어 있으니 연결 시도조차 하지 않은 상태입니다.

공식 문서의 안내(2026-09-28 재확인)는 같은 프로젝트 폴더에서 아래 명령을 실행한 뒤, 작업 폴더 신뢰 대화상자와 프로젝트 서버 승인 요청이 표시되면 내용을 검토하고 승인하는 것입니다. 이 대화형 경로는 당시 실측하지 않았습니다.

claude

직접 확인한 경로는 아래 --settings 명령입니다. 대화 세션을 열지 않고 그 실행에만 승인을 적용했으며, 설정 파일에는 저장하지 않았습니다. enableAllProjectMcpServers는 해당 .mcp.json의 모든 서버를 승인하는 키입니다. 당시 실험 파일에는 tempfs 하나만 있었습니다.

claude --settings '{"enableAllProjectMcpServers": true}' mcp get tempfs
tempfs:
  Scope: Project config (shared via .mcp.json)
  Status: ✔ Connected
  Type: stdio
  Command: npx

npx를 cmd /c로 감싸지 않은 설정 그대로 ✔ Connected가 나왔습니다. 2026-09-17 당시 확인한 공식 문서 7쪽(mcp, mcp-quickstart, setup, troubleshooting, troubleshoot-install, settings, settings-reference)의 원문에서 cmd /c를 검색했을 때도 0건이었습니다.

프로젝트 폴더의 .claude/settings.json에 "enableAllProjectMcpServers": true를 넣는 방법은 이 폴더에서 효과가 없었습니다(Pending approval 유지). 신뢰하지 않은 폴더에서는 공유 설정의 프로젝트 서버 승인 설정이 무시된다는 문서 설명과 같습니다. 같은 파일의 disabledMcpjsonServers 거부 설정은 적용됐습니다. 파일별 비교는 Claude Code 설정의 공식 우선순위와 MCP 승인 실측에 따로 적었습니다.

3단계 — 지우기

$ claude mcp remove tempfs --scope project
Removed MCP server tempfs from project config
File modified: C:\Users\User\AppData\Local\Temp\longtail_C\proj\.mcp.json

지운 뒤 .mcp.json은 파일이 남고 내용만 {"mcpServers": {}}로 비었습니다. claude mcp list에서도 tempfs 줄이 사라졌습니다. 실험 뒤 %USERPROFILE%\.claude.json에서 longtail_C와 tempfs 문자열을 세어 보니 둘 다 0건이었습니다(내용은 열지 않고 건수만 셈).

결과

단계명령결과
추가claude mcp add tempfs --scope project -- npx -y ….mcp.json 생성(266바이트), 종료 코드 0
확인(승인 전)claude mcp list / get⏸ Pending approval
확인(--settings 승인)claude --settings '{…}' mcp get tempfs✔ Connected
거부 목록이 있을 때.claude/settings.json에 disabledMcpjsonServersget: ✘ Rejected (see disabledMcpjsonServers in settings), list에서는 안 보임
제거claude mcp remove tempfs --scope project.mcp.json 내용 비워짐(22바이트)
사용자 파일 흔적~/.claude.json 문자열 건수0건

알아 둘 것 두 가지

PowerShell에서 claude mcp list 출력을 변수에 담아 다시 찍었더니 ⏸가 ??로 깨졌습니다. [Console]::OutputEncoding과 $OutputEncoding을 모두 [Text.Encoding]::UTF8로 지정한 뒤에는 제대로 나왔습니다. 빠른 시작 문서는 윈도우 10 기본 콘솔 같은 옛 콘솔에서 ✔, ✘ 대신 √, ×가 보일 수 있다고도 적고 있습니다.

claude mcp list의 확인 대상에는 이 폴더 서버 말고 다른 범위의 서버도 포함될 수 있습니다. 다만 미승인·거부·비활성 서버에는 연결하지 않고, WebSocket 서버는 목록에 나오지 않는다고 도움말과 문서에 적혀 있습니다. 저희 PC에서는 실험이 끝난 뒤 다른 서버(mcp-remote 계열)의 프로세스 몇 개가 부모 프로세스 없이 남아 있었습니다. 이 헬스체크가 띄운 것인지는 확인하지 못했습니다. 첫 실행이 느리면 문서가 안내하는 MCP_TIMEOUT 환경변수(밀리초, 기본 30초)를 늘려 볼 수 있습니다.

같은 날 이 작업을 한 Claude Code 세션을 시작할 때 gemini (CONNECTION_CLOSED): "Connection closed"라는 알림이 떴습니다. 원인은 조사하지 않았고, 이번 tempfs 실험과의 관계도 확인하지 않았습니다.

실패한 것

실험 폴더를 끝까지 지우지 못했습니다. 파일은 모두 지웠지만 빈 proj 폴더가 "being used by another process"로 남았습니다. 그 시점에 최근 시작된 프로세스는 mcp-remote 계열이었고(부모 프로세스는 이미 종료), 이들은 종료하지 않고 그대로 뒀습니다. 이 프로세스가 claude mcp list/get에서 나온 것인지, 폴더를 잡고 있는 것이 이 프로세스인지는 확인하지 못했습니다.

확인하지 않은 것

  • 대화형 claude에서의 승인 대화상자와 /mcp 화면.
  • local·user 범위로 추가했을 때 ~/.claude.json에 들어가는 모양(개인 설정 보호를 위해 하지 않음).
  • 실제 도구 호출(파일 읽기 등). 연결 상태까지만 봤습니다.
  • cmd /c로 감쌌을 때의 동작, 명령 프롬프트(cmd.exe)에서의 입력.
  • claude mcp add-json, HTTP 전송 서버.
  • 세션 알림의 CONNECTION_CLOSED 원인.

함께 보기