Primitive track 에서 Roots 를 client capability 로 만났어 — host 가 server 한테 동작 허용 directory 알려줌. Security 렌즈로 다시 읽어: Roots 가 filesystem-만지는 server 의 의도치 않은 roaming 막는 방법.
Roots 없으면 filesystem MCP server 는 scope 에 대해 뭔가 가정 해야: 어쩌면 $HOME, 어쩌면 cwd, 어쩌면 user 가 친 거. 모든 가정이 어떤 user 에겐 틀리고, 그 틀린 케이스가 정확히 — 'AI 가 내 SSH config 썼어' 가 되는 — 사고 종류. Roots 와 함께면 host 가 — user-facing UX (workspace, 열린 폴더, picker) 가 active context 라고 말하는 거 — 에서 도출해 scope 답함.
Protocol 패턴: server 가 initialize 시 root list, optionally notifications/roots/listChanged subscribe, 인자 path 가 현재 root set 밖인 tool 호출 다 거절. 정중히 거절 — stack trace 아니고 구조화된 에러 — LLM 이 다음 turn 에 코스 수정 가능. 'root 밖' 은 server bug 아니고 모델의 contract 위반.