민감 도구와 사용자 승인
앞 절이 "서버의 자기 선언은 못 믿는다"였다면, 이 절은 "그렇다면 클라이언트가 무엇을 강제하는가"다. 신뢰 경계의 실제 통제는 클라이언트 측 승인 계층에서 일어난다. Claude Code와 Agent SDK는 기본적으로 도구를 실행하기 전 사용자 승인을 요구한다. 특히 파일을 읽거나, 데이터베이스에 쓰거나, API를 호출하거나, Discord 같은 커뮤니케이션 채널에 게시하는 등 외부에 부수효과(side effect)를 일으키는 도구에서 그렇다. 이 기본 승인 프롬프트가 의도치 않은 외부 행위로부터 사용자를 보호하는 1차 방어선이다.
반복적인 작업까지 매번 승인하면 흐름이 끊긴다. 그래서 클라이언트는 허용목록(allowlist)과 차단목록(blocklist)을 settings.json에 둔다. 권한 설정은 어떤 도구·셸 명령·파일 작업을 자율적으로 실행할 수 있는지를 규정하고, 사람 승인이 필요한 행위와 필요 없는 행위의 경계를 정의한다. 허용목록은 자율 실행을 사후 일괄 허가하는 장치이지, 보안을 약화시키는 장치가 아니다. 신뢰가 검증된 좁은 범위의 도구만 허용목록에 올리고 파괴적 도구는 항상 프롬프트를 거치게 두는 것이 설계 원칙이다. 엔터프라이즈 환경에서는 관리자가 허용목록·차단목록·승인된 확장만으로 더 강한 통제를 적용할 수 있다.
서버 쪽에서 사람 개입을 능동적으로 요청하는 메커니즘이 elicitation이다. MCP는 서버가 도구 실행 도중 클라이언트를 통해 사용자에게 구조화된 입력이나 확인을 요청할 수 있게 한다. 파괴적 작업을 실제로 수행하기 직전, 서버가 "이 레코드를 정말 삭제할까요"라고 사용자에게 되묻고 승인을 받은 뒤에만 진행하는 식이다. 이것이 사람 개입(human-in-the-loop, HITL)을 MCP 명세 차원에서 구현하는 방식이다. 애너테이션이 정적인 선언이라면, elicitation은 실행 시점의 동적인 확인 게이트다. 파괴적·비가역적 작업은 elicitation이나 클라이언트 승인 프롬프트로 반드시 게이팅하는 것이 정석이다.
여기서 가장 잘 나오는 함정이 비대화형 실행이다. Claude Code를 -p 플래그로 비대화형(non-interactive) 실행하면 새 MCP 서버에 대한 신뢰 검증이 비활성화된다. 자동화 파이프라인이나 CI에서 무인 실행하는 상황을 위한 설계지만, 그 대가로 사람 게이트가 사라진다. 신뢰 검증 프롬프트가 뜨지 않으니, 적대적 .mcp.json이 들어 있는 저장소를 무인 실행하면 검증 없이 서버가 로드될 수 있다. 따라서 비대화형 모드에서는 허용목록을 엄격히 좁히고 신뢰된 서버만 사전 등록하는 보완 통제가 필수다.
Agent SDK로 에이전트를 구성할 때도 같은 원칙이 적용된다. 모델은 claude-opus-4-8을 기본으로 두고, 추론이 필요하면 thinking은 adaptive만 사용한다. 과거의 budget_tokens·temperature·top_p 같은 파라미터는 최신 모델에서 제거됐으므로 쓰지 않는다. 구조화 출력이 필요하면 output_config.format으로 스키마를 지정한다. 도구 승인 정책은 SDK의 권한·승인 콜백 계층에서 결정되며, 정확한 필드 시그니처보다 "파괴적 도구는 사람 승인 게이트를 통과해야 한다"는 행위 규약을 우선 설계한다.
시험은 이 절에서 다음을 노린다. 첫째, 허용목록을 "보안을 끄는 것"으로 오해시키는 보기를 함정으로 깐다. 허용목록은 검증된 도구의 자율 실행을 허가하는 것이지 통제를 제거하는 것이 아니다. 둘째, elicitation이 클라이언트가 아니라 서버가 사용자에게 확인을 요청하는 실행 시점 메커니즘임을 묻는다. 셋째, -p 비대화형 모드가 신뢰 검증을 끈다는 점을 묻는다. "무인 자동화에서 보안이 어떻게 약화되는가"가 정답 키워드다. 넷째, 파괴적 작업은 애너테이션만으로 보호되지 않으며 반드시 승인 또는 elicitation 게이트가 필요하다는 점을 확인한다.
정리
- 클라이언트는 기본적으로 도구 실행 전 사용자 승인을 요구하며, 이것이 외부 부수효과에 대한 1차 방어선이다.
- 허용목록·차단목록(settings.json)은 검증된 도구의 자율 실행을 허가하는 경계 설정이지 보안 약화가 아니다.
- elicitation은 서버가 실행 시점에 사용자 확인을 요청하는 HITL 메커니즘으로, 파괴적 작업 게이팅에 쓴다.
- -p 비대화형 모드는 신뢰 검증을 비활성화하므로, 무인 실행에서는 허용목록을 좁히고 신뢰된 서버만 사전 등록해야 한다.
- Agent SDK 구성 시 claude-opus-4-8 기본, thinking은 adaptive만, 구조화 출력은 output_config.format을 쓰며, 파괴적 도구는 승인 게이트를 거친다.