Cloudflare가 내부 MCP 서버에 에이전트 쓰기 동작을 제어하기 위해 WriteGuard를 구축했다. MCP를 통해 에이전트에게 쓰기 권한을 부여할 때 발생하는 잘못된 동작을 중앙에서 차단·추적·감사할 수 있는 레이어로, 현재 프라이빗 베타로 외부에 공개됐다.
핵심 포인트- WriteGuard는 MCP 서버 코드 변경 없이 각 Tool에 리스크 티어(Read Only / Minimal / Contained Write / Critical)를 부여하고 비활성화하거나 에이전트 귀속 정보를 삽입한다
- Critical 티어 도구는 WriteGuard가 핸들러 실행 전에 차단하여 머지·프로덕션 배포 같은 고위험 동작을 에이전트가 단독으로 실행할 수 없게 한다
- Cloudflare Access OAuth로 사용자 신원을 유지하면서 에이전트 세션 컨텍스트를 하위 시스템에 추가해 "Joe의 에이전트가 Joe를 대신해 수행" 형태로 귀속된다
- 감사 로그는 비동기 Worker로 전송돼 응답 레이턴시에 영향 없이 서버·도구·리스크 티어·결과·사용자·에이전트·소요 시간을 기록한다
- 27개 내부 MCP 서버에 동일 레이어를 적용하며, 서버별 재구현 없이 공유 레이어와 도구별 설정만으로 일관된 제어를 달성했다
상세 정리- 도입 배경: Cloudflare 내부 MCP 서버가 13개에서 27개로 증가하면서 읽기 전용 단계를 넘어 쓰기 도구 수요가 생겼다. 클라이언트 사이드 스킬이나 elicitation 프롬프트는 하네스별 동작이 달라 신뢰할 수 없었다.
- MCP 기본 구조: MCP 서버는 도구 이름·설명·입력 스키마·핸들러로 구성된다. 에이전트가 도구를 선택하면 클라이언트가 서버로 호출을 보내고 서버가 하위 시스템을 조작한다.
- WriteGuard 작동 방식: 각 도구의 WriteGuard 설정(riskLevel, enabled, labeling)을 확인해 통과/귀속 추가 후 처리/차단 중 하나로 처리한다. 현재 TypeScript로 설정하며 추후 포털 UI로 제공 예정이다.
- 리스크 티어(GitLab 예시): get_merge_request(Read Only)는 통과. create_mr_note(Contained Write)는 에이전트 귀속을 노트 필드에 삽입 후 처리하고 비동기 감사 이벤트를 기록한다. merge_mr(Critical, disabled)는 핸들러 실행 전 차단하고 시도를 기록한다.
- 에이전트 귀속: 사람의 Access 권한을 그대로 유지하면서 MCP 클라이언트·세션 컨텍스트를 추가로 삽입한다. 별도의 에이전트 계정 없이도 하위 시스템이 "Joe가 아니라 Joe의 에이전트가 한 것"임을 알 수 있다.
- 감사 로깅: 각 호출을 성공/실패/차단으로 분류하고 민감 값을 제외한 스크러빙 이벤트를 내부 audit Worker로 비동기 전송한다. MCP 포털 요청 로그와 WriteGuard 의미론적 분류로 두 가지 뷰를 제공한다.
- 공유 레이어 설계 이유: GitLab만을 위한 컨트롤을 구현할 수도 있었지만, Jira·내부 위키·Google Workspace 등 모든 서버에 일관된 정책이 필요해 재사용 가능한 공유 레이어로 구축했다.
- 프라이빗 베타 계획: 리스크 모델이 고객 도구에 매핑되는지, 어떤 하위 애플리케이션에 귀속 포맷이 필요한지, 감사 로그 보장 수준을 검증 후 일반 공개 예정이다.
왜 읽나MCP 서버에 쓰기 도구를 추가하려는 조직이나, 에이전트 동작의 감사 추적·귀속·중앙 제어 아키텍처를 설계하는 엔지니어에게 실전 구현 레퍼런스.