10월 2일에 Claude Code 2.1.288이 나왔습니다. ClaudeKit 정리 기준으로 눈에 띄는 것들: /code-review --max-findings, Ctrl+C로 지운 프롬프트를 Up키로 복원, 응답 중 API 타임아웃이 턴 전체를 날리지 않게, resume·auto·plugin·permission safeguard·cloud session 수정.
이 글은 그중 하나만 깊게 봅니다. MCP server가 tool call 중에 추가 OAuth scope를 요구하면 재인증 prompt가 뜬다는 변화. 작아 보이지만 의미는 큽니다. "연결했으니 모든 권한 허용"이 아니라, 실제 행동 시점에 scope를 다시 확인하는 step-up authorization이 제품 레벨로 들어오고 있습니다.
배경: MCP OAuth는 원래 말썽꾸러기였다
Claude Code 이슈를 보면 MCP OAuth 고통이 오래됐습니다. Google Workspace는 세션마다 재인증, Slack은 401 한 번에 토큰을 날리고 브라우저를 띄움, Atlassian은 refresh token이 있는데도 안 쓰고 재인증, DCR이 매번 새 client를 파서 서버에 유령 client가 쌓임.
고통의 종류:
- 세션마다 재인증 (토큰 갱신 미사용)
- 멀티 세션 desync (A는 됐는데 B는 인증 요구)
- 상태 거짓말 (claude mcp list는 Connected, 실제로는 만료)
- 끊기면 전체 재연결 (re-auth 버튼 없이 disconnect부터)
2.1.288이 이걸 다 고쳤다는 말은 아닙니다. 하지만 방향이 분명합니다. 권한 수정을 릴리즈의 한 축으로 다루기 시작했습니다. resume·timeout과 같은 줄에 permission safeguard가 들어간 것이 신호입니다.
뭐가 바뀌나: 행동 시점에 다시 묻기
핵심 변화의 의미를 풀면 이렇습니다.
예전: 연결 시 1회 승인 → 이후 같은 연결은 전부 허용
지금: tool call 중 추가 scope 요구 → 재인증 prompt
→ 권한 = 1회 티켓이 아니라 행동별 확인
이게 step-up authorization입니다. 평소에는 가벼운 권한으로 돌다가, 위험도가 올라가는 action에서만 승인을 올리는 방식입니다. 은행에서 이체할 때 OTP를 다시 묻는 것과 같은 원리입니다.
step-up 예시:
- 읽기 (이슈 조회): 기존 연결로 통과
- 쓰기 (코멘트 작성): 1차 확인
- 위험 (삭제·배포·결제·외부 발송): scope 재확인 + 사람 승인
보안 4층 글의 2층 승인과 정확히 맞물립니다. "되돌리기 어려우면 멈춘다"가 제품 기능으로 내려온 것입니다.
MCP 서버를 직접 만든다면: 이렇게 설계하세요
이번 업데이트가 주는 설계 힌트를 서버 제작자 입장에서 정리하면 이렇습니다.
① scope를 넓게 잡지 마라:
- 읽기용·쓰기용·위험용을 나눈다
- 기본 연결은 읽기만, 쓰기는 요청 시 추가 scope
② 위험 action에서 별도 승인을 요구하라:
- OAuth 연결 여부만 확인하지 않는다
- 삭제·외부 발송·결제 전에 scope 재확인 경로를 둔다
③ 상태를 정직하게 보여줘라:
- 만료됐는데 Connected라고 하지 않는다
- "재인증 필요"를 상태로 노출한다
④ 토큰을 아껴 써라:
- refresh token이 있으면 쓴다 (재발급 루프 방지)
- DCR 중복 등록을 피한다 (유령 client 방지)
MCP 비교 글에서 읽기 전용부터 열라고 한 것과 같은 순서입니다. 이번에는 Claude Code 쪽이 "위험해지면 다시 묻겠다"고 답한 것입니다. 양쪽이 만나면 완성이 됩니다.
같이 온 것: 리뷰와 복원
2.1.288의 다른 수정도 실무와 직결됩니다.
- /code-review --max-findings: 리뷰 지적 수 상한 (노이즈 조절)
- Ctrl+C 복원: Up키로 지운 프롬프트 되살리기 (실수 복구)
- 응답 중 타임아웃이 턴을 날리지 않음 (긴 작업 생존율 상승)
- 백그라운드 명령 시간 제한은 무인 세션에만 (-p·SDK·CI·cloud)
특히 타임아웃 수정은 Durable 글의 방향과 같습니다. 긴 작업을 살리는 것은 모델이 아니라 실행 환경입니다. 리뷰 상한은 Cyber Index 글의 DeepsecBench 교훈(거짓 양성 매몰)과도 이어집니다. 많이 찾는 게 아니라 잘 찾는 것이 중요합니다.
CodeBridge Mini Lab: 우리 MCP 권한 감사하기
① 쓰는 MCP server 목록을 적는다 (로컬·원격·OAuth 여부)
② 각 server에 표시한다:
[ ] scope가 읽기·쓰기·위험으로 나뉘어 있는가
[ ] 위험 action에 별도 승인이 있는가
[ ] 만료·401 시 동작이 정의돼 있는가 (침묵 실패 금지)
③ 직접 만든 server가 있으면:
- 추가 scope 요구 시 재인증 경로를 둔다
- 상태를 정직하게 노출한다 (Connected 거짓말 금지)
④ 2.1.288로 올려서 확인한다:
- /code-review --max-findings로 리뷰 노이즈 조절
- resume·timeout 동작이 바뀌었는지 긴 작업 1개로 검증
실제 프로젝트 붙이기의 검증 루프에 권한 점검을 한 줄 추가하는 것입니다.
결론: 권한은 티켓이 아니라 대화다
한 줄로 정리합니다.
한 번 승인받으면 끝이 아니라, 위험해질 때마다 다시 묻는 것이 정상이다.
Claude Code 2.1.288의 재인증 prompt는 작은 UI 변화처럼 보이지만, 에이전트 권한 모델이 성숙해지는 방향을 보여줍니다. 서버를 만드는 쪽도 같은 방향으로 가세요. 넓게 열어두고 믿는 게 아니라, 좁게 열어두고 물을 때마다 답하는 것. 그게 에이전트 시대의 권한입니다.
함께 읽으면 좋은 글
참고 자료
- ClaudeKit: Claude Code 2.1.288 (Oct 2, 2026)
- Claude Code Docs: Changelog
- MCPBundles: Claude Code MCP Commands
이 주제를 직접 따라가며 배우고 싶다면
권한·승인·검증이 있는 흐름으로 에이전트를 통제하는 연습이 필요하다면, CLAUDE.md·Skills·Hooks·서브에이전트·MCP를 실제 프로젝트에 쌓는 과정이 이 글의 step-up 설계와 바로 이어집니다.