Roots

Anthropic
Claude에서 열기
이 강의에 대해 질문하기
노트 복사
LLM용 전체 강의 노트 복사

Roots는 MCP 서버가 로컬 머신의 특정 파일과 폴더에 접근할 수 있도록 권한을 부여하는 방법입니다. "이 파일들에 접근해도 돼"라고 알려주는 권한 시스템으로 생각할 수 있지만, 단순한 권한 부여 이상의 역할을 합니다.

Roots가 해결하는 문제

Roots가 없으면 흔한 문제가 발생합니다. 파일 경로를 받아 MP4를 MOV 형식으로 변환하는 도구가 포함된 MCP 서버가 있다고 상상해 보세요.

사용자가 Claude에게 "biking.mp4를 mov 형식으로 변환해줘"라고 요청하면, Claude는 파일명만으로 도구를 호출합니다. 문제는 Claude가 전체 파일 시스템을 탐색해 해당 파일이 실제로 어디에 있는지 찾을 방법이 없다는 것입니다.

파일 시스템은 여러 디렉터리에 파일이 흩어져 있어 복잡할 수 있습니다. 사용자는 biking.mp4 파일이 Movies 폴더에 있다는 걸 알지만, Claude는 그 맥락을 모릅니다.

사용자에게 항상 전체 경로를 입력하도록 요구하면 해결할 수 있지만, 그건 사용자 친화적이지 않습니다. 매번 완전한 파일 경로를 입력하고 싶은 사람은 없으니까요.

Roots의 동작 방식

Roots를 사용하면 워크플로가 다음과 같이 바뀝니다:

  1. 사용자가 비디오 파일 변환을 요청
  2. Claude가 list_roots를 호출해 접근 가능한 디렉터리 확인
  3. Claude가 접근 가능한 디렉터리에서 read_dir을 호출해 파일 탐색
  4. 파일을 찾으면 전체 경로로 변환 도구 호출

이 모든 과정은 자동으로 이루어지므로, 사용자는 전체 경로 없이 "biking.mp4 변환해줘"라고만 해도 됩니다.

보안과 경계

Roots는 접근을 제한해 보안도 강화합니다. Desktop 폴더에만 접근 권한을 부여하면, MCP 서버는 Documents나 Downloads 같은 다른 위치의 파일에 접근할 수 없습니다.

Claude가 승인된 Roots 외부의 파일에 접근하려 하면 오류가 발생하고, 현재 서버 설정에서 해당 파일에 접근할 수 없다고 사용자에게 알릴 수 있습니다.

구현 세부 사항

MCP SDK는 루트 제한을 자동으로 적용하지 않으므로 직접 구현해야 합니다. 일반적인 패턴은 다음을 수행하는 is_path_allowed()와 같은 헬퍼 함수를 만드는 것입니다:

  • 요청된 파일 경로를 받음
  • 승인된 Roots 목록을 가져옴
  • 요청된 경로가 해당 Roots 중 하나에 속하는지 확인
  • 접근 권한에 따라 true/false 반환

이후 실제 파일 작업을 수행하기 전에 파일이나 디렉터리에 접근하는 모든 도구에서 이 함수를 호출합니다.

주요 장점

  • 사용자 친화적 - 사용자가 전체 파일 경로를 입력할 필요 없음
  • 집중 탐색 - Claude가 승인된 디렉터리만 탐색해 파일 검색 속도 향상
  • 보안 - 승인된 영역 외부의 민감한 파일에 대한 의도치 않은 접근 방지
  • 유연성 - 도구를 통해 Roots를 제공하거나 프롬프트에 직접 주입 가능

Roots는 Claude가 파일을 찾는 데 필요한 맥락을 제공하면서 접근 가능한 범위에 명확한 경계를 유지함으로써 MCP 서버를 더 강력하고 안전하게 만들어 줍니다.