Primitive track 에서 Roots 를 client capability 로 만났었지 — host 가 server 한테 움직여도 되는 폴더를 알려주는 것. 이번엔 보안의 눈으로 다시 읽어보자. Roots 는 filesystem 을 만지는 server 가 엉뚱한 데를 돌아다니지 않게 막는 장치야.
Roots 가 없으면 filesystem MCP server 는 자기 활동 범위를 넘겨짚어야 해. $HOME 일까, 지금 폴더일까, user 가 쳐 넣은 그 경로일까. 어떤 짐작이든 누군가한테는 틀리고, 그 틀린 경우가 바로 'AI 가 내 SSH 설정을 건드렸다' 로 이어지는 사고야. Roots 가 있으면 host 가 대신 답해줘 — user 눈에 보이는 화면 (workspace, 열어둔 폴더, 직접 고른 경로) 이 지금 뭘 가리키는지를 근거로.
Protocol 상의 모양은 이래. Server 가 initialize 때 root 목록을 받아오고, 원하면 notifications/roots/listChanged 를 구독하고, 인자로 받은 경로가 지금 root 바깥이면 그 tool 호출을 거절해. 거절은 정중하게 — stack trace 말고 정돈된 에러로 — 해야 LLM 이 다음 turn 에 방향을 고칠 수 있어. 'root 바깥' 은 server 의 버그가 아니라 모델이 contract 를 어긴 거니까.