Show GN: homebutler - 홈서버 관리에 필요한 걸 한 바이너리에 담고 AI까지 붙였습니다

3 weeks ago 33

홈서버 몇 대를 관리하면서 필요한 걸 하나씩 붙이다 보니 CLI, TUI, 웹 UI, MCP 서버가 한 바이너리에 다 들어갔습니다. Go 단일 바이너리라 런타임 의존성은 없습니다. 컨테이너 상태 확인, 재시작 감지, 백업 복원 검증, 포트 스캔, WoL 정도를 하고 MCP를 붙이면 AI가 같은 기능을 도구로 호출할 수 있습니다. 물론 없어도 그냥 씁니다. 그런데 MCP를 붙이면서 권한보다 어려운 문제가 나왔어요. "뭘 넘겨줘야 AI가 실제로 판단을 하냐" 였습니다. 그 과정에서 내린 결정들을 적어봅니다. ■ 임의 명령 실행 경로를 아예 안 만들었습니다 MCP로 노출하는 도구는 34개인데 exec나 run_command 같은 범용 도구가 없습니다. docker_list, docker_logs, backup_drill처럼 전부 이름이 붙은 동작뿐이고 새 동작이 필요하면 Go 코드로 도구를 추가해야 합니다. 프롬프트로 권한을 넓힐 방법이 구조적으로 없습니다. (proxmox 관련 4개는 해당 설정이 있을 때만 실제로 동작합니다) 도구는 read / write / destructive로 분류돼 있고 현재 23 / 8 / 3입니다. 그리고 도구마다 향할 수 있는 대상이 local, server(SSH), proxmox로 따로 선언돼 있어서 로컬 전용 도구를 원격 서버로 돌릴 수 없습니다. ■ 확신도를 같이 넘깁니다 컨테이너가 죽으면 원인을 분류해서 넘기는데, 결론만 주니까 AI가 그걸 그대로 받아 적더군요. 그래서 판정마다 confidence를 붙였습니다. exit code 137(OOM), 139(segfault), 143(정상 종료)처럼 코드로 확정되는 건 high. 로그를 패턴으로 검사해서 추정한 건 medium. exit code가 0인데 재시작된 것처럼 설명이 안 되는 건 low. 로그 패턴은 14개인데 우선순위를 매겨놨습니다. OOM > segfault > panic > 의존성 문제 > fatal > timeout 순이라 "connection refused"와 "out of memory"가 같이 나오면 OOM이 이깁니다. 다만 이긴 것만 넘기지는 않고 걸린 패턴 목록을 다 같이 넘깁니다. 제 분류를 AI가 의심할 여지를 남겨두는 쪽이 낫다고 봤습니다. ■ 못 본 것과 이상 없는 것을 구분합니다 감시 대상은 docker, systemd, pm2 세 종류인데 한 번씩 찔러보는 체크로 재...

Read Entire Article