루트(Roots)
루트는 MCP에서 서버가 작동할 수 있는 경계를 정의하는 개념입니다. 클라이언트가 서버에게 관련 리소스와 그 위치를 알려주는 방법을 제공합니다.
루트란 무엇인가?
루트는 클라이언트가 서버에 집중해야 한다고 제안하는 URI입니다. 클라이언트가 서버에 연결할 때, 서버가 작업해야 할 루트를 선언합니다. 주로 파일 시스템 경로에 사용되지만, 루트는 HTTP URL을 포함한 모든 유효한 URI가 될 수 있습니다.
예를 들어, 루트는 다음과 같을 수 있습니다:
file:///home/user/projects/myapp
https://api.example.com/v1왜 루트를 사용하는가?
루트는 여러 중요한 목적을 수행합니다:
- 안내: 서버에게 관련 리소스와 위치를 알려줍니다
- 명확성: 루트는 어떤 리소스가 워크스페이스의 일부인지 명확하게 합니다
- 구성: 여러 루트를 통해 다른 리소스와 동시에 작업할 수 있습니다
루트의 작동 방식
클라이언트가 루트를 지원할 때, 다음을 수행합니다:
- 연결 시
roots기능을 선언합니다 - 서버에 제안된 루트 목록을 제공합니다
- 루트가 변경될 때 서버에 알립니다 (지원되는 경우)
루트는 정보 제공용이며 엄격하게 강제하지는 않지만, 서버는 다음을 수행해야 합니다:
- 제공된 루트를 존중합니다
- 루트 URI를 사용하여 리소스를 찾고 접근합니다
- 루트 경계 내에서 작업을 우선시합니다
일반적인 사용 사례
루트는 일반적으로 다음을 정의하는 데 사용됩니다:
- 프로젝트 디렉터리
- 리포지토리 위치
- API 엔드포인트
- 구성 위치
- 리소스 경계
모범 사례
루트로 작업할 때:
- 필요한 리소스만 제안하세요
- 루트에 명확하고 설명적인 이름을 사용하세요
- 루트 접근성을 모니터링하세요
- 루트 변경을 우아하게 처리하세요
예제
일반적인 MCP 클라이언트가 루트를 노출하는 방법은 다음과 같습니다:
{
"roots": [
{
"uri": "file:///home/user/projects/frontend",
"name": "프론트엔드 리포지토리"
},
{
"uri": "https://api.example.com/v1",
"name": "API 엔드포인트"
}
]
}이 구성은 서버가 로컬 리포지토리와 API 엔드포인트 모두에 집중하면서 논리적으로 분리된 상태를 유지하도록 제안합니다.