사내 그룹웨어 Daou GW 자동화: 브라우저 대신 CLI와 MCP로 연결하기

2026. 5. 11. 17:31·Challenge

요즘 Hermes Agent를 쓰면서 반복되는 작업을 하나씩 스킬로 정리하고 있습니다.

그중에서 꽤 실사용에 가까웠던 게 Daou GW 작업이었어요. 메일 확인, 캘린더 조회, 전자결재 상태 확인 같은 그룹웨어 작업을 매번 브라우저로 열고 클릭하는 게 은근 귀찮아서, 아예 CLI와 MCP로 처리할 수 있게 정리해봤습니다.

이번 글은 그 작업을 만들면서 어떤 식으로 접근했는지 기록해보려고 합니다.

처음 목표는 간단했습니다

“메일 최신 5개 보여줘”라고 말하면 최근 메일을 확인하고,
“오늘 일정 보여줘”라고 말하면 캘린더 일정을 바로 가져오는 것.

브라우저를 자동화해서 화면을 클릭하는 방식도 생각할 수 있지만, 저는 가능하면 HTTP/API 중심으로 가고 싶었습니다. 브라우저 자동화는 눈에 보이는 화면을 따라가기 때문에 편할 때도 있지만, 사내 시스템처럼 자주 쓰는 작업에는 조금 무겁게 느껴졌습니다.

그래서 방향을 이렇게 잡았습니다.

  • 브라우저 자동화는 분석이나 임시 확인용으로만 사용
  • 실제 반복 작업은 CLI/API로 처리
  • Hermes에서는 스킬을 통해 “어떤 명령을 우선 써야 하는지” 기억하게 만들기
  •  

Go 코드에서 TypeScript CLI로

처음에는 로컬에 있던 Go 코드로 Daou GW 로그인과 일부 HTTP API 처리를 해보려고 했습니다. 왜냐면 Go는 따로 npm 같은 패키지 설치 없이 사용할수있도록 쉽게 패키징 할수 있었거든요,

이걸 그대로 확장할 수도 있었지만, npm 배포와 MCP 연동까지 생각하면 TypeScript 쪽이 더 다루기 편했습니다. 그래서 별도 저장소로 daou-gw-cli를 만들고, CLI와 MCP를 같이 제공하는 구조로 정리했습니다. 무엇보다, 오픈소스로 확장하기엔 ts만한게 없었지요.

현재 저장소는 GitHub에 올려두었습니다.

https://github.com/sanguneo/daou-gw-mcp

구조는 대략 이렇습니다.

{
  "bin": {
    "daou-gw-cli": "dist/index.js",
    "daou-gw-mcp": "dist/mcp.js"
  },
  "scripts": {
    "build": "tsup && node scripts/postbuild.mjs",
    "test": "vitest run",
    "typecheck": "tsc --noEmit"
  }
}

CLI로는 직접 명령을 실행할 수 있고,
MCP로는 Hermes 같은 에이전트가 도구처럼 호출할 수 있게 만들었습니다.

 

개발은 브라우저에서 시작했습니다

먼저 Hermes Agent에서 CDP로 브라우저에 연결했습니다. 이미 로그인된 브라우저 세션을 그대로 활용할 수 있어서, 로그인 흐름을 매번 다시 만들 필요가 없었습니다.

그다음에는 브라우저에서 실제로 필요한 행동을 해봤습니다.

예를 들면 메일 목록을 열어보고, 검색을 해보고, 캘린더 화면을 이동해보고, 결재 상태를 확인하는 식입니다. 사용자가 실제로 누르는 흐름을 먼저 브라우저에서 재현했습니다.

그 다음은 브라우저에서 행동을 하는 동안 Network 요청을 캡처했습니다. 어떤 버튼을 눌렀을 때 어떤 API가 호출되는지, method가 GET인지 POST인지, query string과 request body가 어떻게 생겼는지 확인했습니다.

그렇게 확인한 요청을 하나씩 HTTP 메소드로 옮겼습니다.

대략 이런 흐름이었습니다.

브라우저에서 실제 동작 수행
→ Network 요청 확인
→ 필요한 URL / method / payload 정리
→ TypeScript HTTP client로 재현
→ CLI 명령으로 감싸기
→ MCP tool로 노출하기

브라우저는 “어떤 API를 써야 하는지 알아내는 도구”로만 쓰고, 실제 반복 작업은 HTTP 요청으로 처리했습니다. 그래서 나중에 실행할 때는 브라우저를 띄우지 않아도 되고, 에이전트 입장에서도 훨씬 가볍게 호출할 수 있었습니다.

 

스킬에는 “어떻게 행동해야 하는지”를 적었다

이번에 중요했던 건 단순히 CLI를 만드는 것보다, 에이전트가 헷갈리지 않게 행동 규칙을 정리하는 일이었습니다.

예를 들어 사용자가 “메일 최신 5개 보여줘”라고 했을 때 에이전트가 먼저 저장소를 뒤지거나, 브라우저를 열거나, UI 상태를 추측하기 시작하면 답답합니다.

그래서 Daou GW 스킬에는 이런 원칙을 넣었습니다.

  • 메일 목록은 mail list
  • 메일 검색은 mail search
  • 메일 삭제는 mail delete
  • 캘린더는 calendar list
  • 결재는 전자결재 상태 조회 명령 사용
  • 실패했을 때만 세션이나 설정을 확인하고 1회 재시도
  • 비밀번호, 쿠키, 세션 토큰은 절대 출력하지 않기

이게 별것 아닌 것 같지만, 실제로 에이전트를 쓰다 보면 이런 규칙이 꽤 중요합니다.

사람은 “메일 보여줘”라고 했을 때 바로 결과를 기대하는데, 에이전트는 가끔 너무 착실하게 주변 정보를 먼저 확인하려고 하거든요. 그래서 스킬에 “불필요한 탐색을 하지 말라”고 명시했습니다.

 

CLI와 MCP는 같은 의미를 갖게 했다

CLI 명령과 MCP 도구 이름도 최대한 같은 의미로 맞췄습니다.

CLI에서는 이런 식입니다.

daou-gw-cli mail list --size 5
daou-gw-cli mail search --query AWS --size 20
daou-gw-cli calendar list
daou-gw-cli approval status

MCP에서는 이런 도구로 대응됩니다.

mail_list
mail_search
mail_delete
calendar_list
approval_status

이렇게 맞춰두면 사람이 터미널에서 쓰는 방식과 에이전트가 MCP로 호출하는 방식이 크게 다르지 않습니다.

나중에 문제가 생겼을 때도 “CLI로 재현해보고 MCP 쪽을 확인하는” 흐름이 자연스럽습니다.

 

실제로 신경 쓴 부분: 세션과 실패 처리

Daou GW 같은 사내 시스템은 로그인 세션이 중요합니다.

매번 로그인 정보를 다시 입력하는 방식은 불편하고, 그렇다고 인증 정보를 대화에 노출하는 방식은 위험합니다. 그래서 로컬에 세션을 저장하고, 명령 실행 시 세션을 먼저 재사용하도록 정리했습니다.

세션이 유효하면 그대로 명령을 실행하고, 만료된 경우에는 가능한 범위에서 다시 로그인한 뒤 원래 명령을 한 번만 재시도하는 흐름입니다.

여기서 중요한 건 무한 재시도를 하지 않는 것입니다.

사내 시스템은 실패 원인이 다양합니다. 세션이 만료됐을 수도 있고, 네트워크가 막혔을 수도 있고, API 응답 구조가 바뀌었을 수도 있습니다. 그래서 실패하면 원인을 짧게 보고하고, 필요한 경우에만 상태를 확인하도록 했습니다.

 

세션과 민감 정보는 로컬에만

로컬 상태는 ~/.daou/ 아래에 두는 방식으로 정리했습니다.

~/.daou/config.json
~/.daou/session.json
~/.daou/vault.key

스킬에도 민감값을 출력하지 말라고 명시했습니다.

에이전트가 편해도, 비밀번호나 쿠키 같은 값이 대화에 그대로 나오는 건 피해야 합니다. 이 부분은 도구를 만들 때부터 계속 신경 써야 할 지점인 것 같습니다.

 

만들고 나니 좋은 점

이걸 만들고 나니 그룹웨어 작업을 훨씬 짧게 처리할 수 있게 됐습니다.

예전에는 브라우저를 열고, 로그인 상태를 보고, 메뉴를 찾아가고, 필요한 화면을 찾아야 했습니다.

지금은 그냥 이렇게 말하면 됩니다.

메일 최신 5개 보여줘
AWS 메일 찾아줘
오늘 캘린더 일정 보여줘
결재 상태 확인해줘

그리고 Hermes는 Daou GW 스킬을 보고 CLI/MCP를 우선 사용합니다.

이게 제가 원했던 형태였습니다. 에이전트가 모든 걸 똑똑하게 추론하는 것보다, 자주 쓰는 업무는 명확한 도구와 규칙으로 고정해두는 방식이 훨씬 안정적이었습니다.

 

정리

이번 Daou GW 스킬 개발은 단순히 브라우저 화면을 자동으로 누르는 것이 아니라, 사내 시스템을 에이전트가 안전하고 반복 가능하게 다루도록 만드는 작업에 가까웠습니다.

만들면서 느낀 점은 이렇습니다.

  • 반복 업무는 브라우저 자동화보다 API/CLI가 편하다
  • MCP를 붙이면 에이전트가 도구처럼 호출할 수 있다
  • 스킬에는 기능 설명보다 행동 규칙을 명확히 적는 게 중요하다
  • 민감 정보는 절대 대화에 노출되지 않게 해야 한다
  • 실패 케이스도 스킬에 기록해두면 다음에 덜 헤맨다

아직 더 다듬을 부분은 있지만, 메일이나 일정처럼 자주 확인하는 작업이 말 한마디로 처리되는 건 꽤 만족스럽습니다.

다음에는 메일 정리나 전자결재, 게시판 글 작성 쪽도 조금 더 안정적으로 정리 해봐야 겠습니다.

저작자표시 비영리 변경금지 (새창열림)

'Challenge' 카테고리의 다른 글

Oracle Cloud A1 Flex 4 cpu / 24GB mem 성공기  (0) 2026.04.27
크롬 확장앱 만들어보기 (3/3)  (0) 2018.06.05
크롬 확장앱 만들어보기 (2/3)  (0) 2018.06.05
크롬 확장앱 만들어보기 (1/3)  (0) 2018.05.08
크롬 확장앱 만들어보기.(프롤로그)  (0) 2018.05.04
'Challenge' 카테고리의 다른 글
  • Oracle Cloud A1 Flex 4 cpu / 24GB mem 성공기
  • 크롬 확장앱 만들어보기 (3/3)
  • 크롬 확장앱 만들어보기 (2/3)
  • 크롬 확장앱 만들어보기 (1/3)
상구너
상구너
개발, AI, 자동화, 일상 기록을 담는 상구너의 작업노트. 직접 해본 것, 써본 것, 정리한 것을 가볍고 실용적으로 남깁니다
  • 상구너
    상구너의 개발노트
    상구너
  • 전체
    오늘
    어제
    • 분류 전체보기 (54) N
      • Day by day (3) N
        • Diary (2)
        • TV (0)
      • Challenge (6) N
      • Study (28)
        • AI (6)
        • NodeJS (0)
        • JavaScript (3)
        • Markup (1)
        • Linux (6)
        • Java (1)
        • BCI&BCEL&ASM (8)
        • WAS (1)
        • DB (1)
      • Develop (11)
        • inKrKamus (3)
      • Faith (0)
  • 블로그 메뉴

    • 홈
    • GITHUB
    • LinkedIn
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    tts
    Hermes Agent
    openclaw
    Canvas
    Hermes
    Ai
    oci
    그룹웨어 자동화
    html5
    Agent
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
상구너
사내 그룹웨어 Daou GW 자동화: 브라우저 대신 CLI와 MCP로 연결하기
상단으로

티스토리툴바