신뢰 모델과 권한 분리
MCP에서 가장 흔한 오해는 "서버가 도구를 읽기 전용이라고 선언했으니 안전하다"는 믿음이다. MCP 명세는 도구마다 다섯 개의 애너테이션을 둔다. title, readOnlyHint, destructiveHint, idempotentHint, openWorldHint다. readOnlyHint는 데이터를 조회만 하고 생성·수정·삭제·전송을 하지 않는다는 뜻이고, destructiveHint는 데이터를 변경하거나 파괴할 수 있다는 뜻이다. 검색·목록·단건 조회·쿼리류 도구가 전형적인 읽기 전용이다.
핵심은 이 애너테이션이 강제력 없는 정보성 힌트(informational signal)라는 점이다. 명세의 기본값은 의도적으로 비관적(pessimistic)으로 설계됐다. 애너테이션이 전혀 없는 도구는 읽기 전용이 아니고, 파괴적일 수 있으며, 멱등이 아니고, open-world라고 간주된다. 더 중요한 함정은 신뢰 방향이다. 애너테이션은 서버가 스스로 붙이는 자기 선언이므로, 악의적이거나 버그 있는 서버가 실제로는 파괴적인 도구에 readOnlyHint: true를 달아 클라이언트의 확인 다이얼로그를 우회시킬 수 있다. 그래서 클라이언트는 서버의 자기 선언을 신뢰 근거로 삼을 수 없고, 자신만의 강제 계층을 둔다. 이것이 "신뢰받는 이름이 곧 신뢰받는 명령은 아니다"라는 원칙의 기술적 뿌리다.
두 번째 위험은 name-keyed 신뢰와 rug-pull이다. 사용자가 서버 이름을 기준으로 한 번 신뢰를 부여하면, 그 신뢰는 이름에 묶인다. 그런데 서버는 런타임에 도구 목록과 정의를 바꿀 수 있다. 처음 승인받을 때는 무해한 조회 도구만 노출하다가, 신뢰가 굳어진 뒤 파괴적 도구나 변조된 설명을 슬쩍 끼워 넣는 rug-pull이 가능하다. 도구 설명문 자체가 프롬프트 인젝션 벡터가 될 수도 있다. 따라서 신뢰는 한 번 부여하면 끝이 아니라, 도구 정의가 바뀌면 재검증해야 하는 대상이다.
세 번째 축이 스코프(scope)다. Claude Code에서 MCP 서버는 세 가지 설정 스코프에 설치된다. local 스코프는 현재 프로젝트에서 본인에게만 적용되는 개인 설정이고, project 스코프는 저장소에 체크인되는 .mcp.json에 기록되어 팀원 모두에게 공유되며, user 스코프는 사용자 계정 전역에 적용되어 모든 프로젝트에서 로드된다. 스코프는 곧 권한 분리이자 폭발 반경(blast radius)이다. user 스코프 서버는 모든 프로젝트에 노출되므로 신뢰도가 가장 높아야 하고, project 스코프 서버는 저장소를 클론한 누구에게나 따라가므로 가장 위험하다. 바로 이 때문에 새로운 코드베이스를 처음 실행하거나 .mcp.json에서 새 MCP 서버를 발견하면 Claude Code가 명시적 신뢰 검증을 요구한다. 저장소 자체가 적대적일 수 있다는 전제다. 최소 권한 원칙에 따라 도구는 가능한 한 좁은 스코프에, 신뢰가 확실히 검증된 것만 넓은 스코프에 둔다.
시험은 이 절에서 다음을 노린다. 첫째, readOnlyHint를 보안 경계로 착각시키는 보기를 정답으로 고르게 유도한다. 정답은 항상 "애너테이션은 힌트일 뿐 강제되지 않으며 서버가 거짓 선언할 수 있다"는 방향이다. 둘째, 신뢰를 한 번 부여하면 영구하다고 가정하는 보기를 함정으로 깐다. 셋째, 어느 스코프가 가장 넓은 폭발 반경을 갖는지를 묻는다. project 스코프가 저장소 공유를 통해 의도치 않게 퍼진다는 점이 핵심이다.
정리
- 도구 애너테이션(readOnlyHint·destructiveHint 등)은 강제력 없는 정보성 힌트이며, 서버가 거짓 선언할 수 있으므로 보안 통제가 아니다.
- 애너테이션 기본값은 비관적이다. 표시가 없으면 파괴적·비멱등·open-world로 간주된다.
- name-keyed 신뢰는 rug-pull에 취약하다. 도구 정의가 바뀌면 신뢰를 재검증해야 한다.
- 스코프(local·project·user)는 권한 분리이자 폭발 반경이다. project 스코프(.mcp.json)는 저장소 공유로 가장 넓게 퍼지므로 신뢰 검증이 요구된다.
- 최소 권한 원칙으로 도구는 가장 좁은 스코프에 두고, 검증된 것만 넓은 스코프로 승격한다.