Skip to main content
Glama
README.md
# AntBot MCP Server

**AntBot MCP Server**는 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 기반의 TypeScript 서버로, AI 기반 RPA 플랫폼인 AntBot과의 연동을 위해 설계되었습니다.  
이 서버는 MCP 클라이언트와 상호작용하며, AntBot 프로젝트 관리 및 실행을 위한 도구들을 제공합니다.

## ✨ 주요 기능

- **MCP Tool 서버 인터페이스** 구현
- **AntBot 프로젝트 목록 조회** (`Get_AntBot_Project_List`)
- **프로젝트 상세 정보 조회** (`Get_AntBot_Project_Info`) - 매개변수 정보 포함
- **프로젝트 실행** (`Run_AntBot_Project`) - 매개변수 전달 지원
- **실행 중 프로세스 감지** - 중복 실행 방지 (Windows 환경)
- **실행 로그 조회** (`Get_Last_Mcprun_Log`) - 최신 mcprun 로그 확인
- **자동 설정 관리** - AntBot Robot 설정 파일에서 자동으로 설정 로드
- **프로젝트 캐싱** - 성능 최적화를 위한 프로젝트 정보 캐싱
- **로깅 시스템** - 상세한 로그 기록 및 디버깅 지원
- **TypeScript 기반** 모듈형 구조

## 🏗️ 아키텍처

### 프로젝트 구조
```
src/
├── index.ts              # MCP 서버 진입점 및 메인 클래스
├── projectService.ts     # 프로젝트 관리 비즈니스 로직
├── logService.ts         # 로그 조회 서비스
├── api.ts                # 외부 API 호출 유틸리티
├── config.ts             # 설정 관리 및 검증
├── fileUtils.ts          # 파일 처리 유틸리티 (ZIP, XML 파싱)
├── logger.ts             # 로깅 시스템
├── schema.ts             # Zod 기반 입력 검증 스키마
├── types.ts              # TypeScript 타입 정의
└── constants.ts          # 상수 정의
```

### 핵심 컴포넌트

1. **McpServer 클래스** (`index.ts`)
   - MCP 서버 인스턴스 관리
   - 요청 핸들러 설정
   - 에러 처리 및 로깅

2. **ProjectService 클래스** (`projectService.ts`)
   - 프로젝트 목록 조회
   - 프로젝트 정보 파싱 (antConf.xml)
   - 프로젝트 다운로드 및 실행
   - 실행 중 프로세스 감지 (Windows tasklist)
   - 캐싱 시스템

3. **LogService 클래스** (`logService.ts`)
   - mcprun 로그 파일 조회
   - 최신 로그 tail 기능

4. **설정 관리** (`config.ts`)
   - AntBot Robot 설정 파일 자동 로드
   - 필수 설정 검증
   - 동적 설정 관리

## 🛠️ 설치 및 빌드

### 전제 조건
- **Node.js** v16 이상 (권장: LTS 버전)
- **Windows 환경** (AntBot Runner 프로세스 감지 기능)
- **AntBot Robot** 설치 및 매니저 연동 완료
- **AntBot Robot 설정 파일** 존재: `%APPDATA%\Roaming\AntBotRobot\AntBot_Robot.exe.config`

### 설치
```bash
# 프로젝트 클론
git clone <repository-url>
cd antbot-mcp-server

# 의존성 설치
npm install

# 빌드
npm run build

# 또는 클린 빌드 (기존 빌드 파일 삭제 후 재빌드)
npm run cleanbuild
```

## 🧩 MCP 도구 구성

### 1. Get_AntBot_Project_List
AntBot 매니저에서 사용 가능한 프로젝트 목록을 조회합니다.

```json
{
  "name": "Get_AntBot_Project_List",
  "description": "Returns a list of antbot projects.",
  "inputSchema": {
    "type": "object",
    "properties": {},
    "required": []
  }
}
```

**응답 예시:**
```json
{
  "projects": [
    {
      "projectId": "PR000000298",
      "projectName": "웹 스크래핑 프로젝트",
      "description": "웹사이트에서 데이터를 수집하는 프로젝트"
    }
  ]
}
```

### 2. Get_AntBot_Project_Info
특정 프로젝트의 상세 정보와 실행에 필요한 매개변수를 조회합니다.

```json
{
  "name": "Get_AntBot_Project_Info",
  "description": "Get project information including required parameters",
  "inputSchema": {
    "type": "object",
    "properties": {
      "projectId": { "type": "string" }
    },
    "required": ["projectId"]
  }
}
```

**응답 예시:**
```json
{
  "projectId": "PR000000298",
  "projectPath": "C:\\temp\\project_298\\antConf.xml",
  "name": "웹 스크래핑 프로젝트",
  "description": "웹사이트에서 데이터를 수집하는 프로젝트",
  "requiredParameters": [
    {
      "name": "url",
      "type": "string",
      "description": "스크래핑할 웹사이트 URL"
    }
  ],
  "optionalParameters": [
    {
      "name": "timeout",
      "type": "number",
      "description": "타임아웃 시간 (초)",
      "defaultValue": 30
    }
  ],
  "parameterSummary": "필수: url (string) | 선택: timeout (number, 기본값: 30)"
}
```

### 3. Run_AntBot_Project
프로젝트를 실행합니다. 먼저 `Get_AntBot_Project_Info`를 호출하여 프로젝트 정보를 확인해야 합니다.

```json
{
  "name": "Run_AntBot_Project",
  "description": "Run the project with required parameters",
  "inputSchema": {
    "type": "object",
    "properties": {
      "projectId": { "type": "string" },
      "projectPath": { "type": "string" },
      "parameters": {
        "type": "object",
        "additionalProperties": true
      }
    },
    "required": ["projectId", "projectPath"]
  }
}
```

**사용 예시:**
```json
{
  "projectId": "PR000000298",
  "projectPath": "C:\\temp\\project_298\\antConf.xml",
  "parameters": {
    "url": "https://example.com",
    "timeout": 60
  }
}
```

**중복 실행 방지:**
- 실행 전 AntBot Runner 프로세스 상태 확인
- 이미 실행 중이면 `"현재 AntBot이 다른 작업을 수행 중입니다."` 메시지와 함께 오류 발생

### 4. Get_Last_Mcprun_Log
최신 mcprun 로그의 마지막 100줄을 조회합니다.

```json
{
  "name": "Get_Last_Mcprun_Log",
  "description": "Returns the last 100 lines of the latest mcprun log.",
  "inputSchema": {
    "type": "object",
    "properties": {},
    "required": []
  }
}
```

**응답 예시:**
```json
{
  "fileName": "mcprun_20241201143022.log",
  "content": "2024-12-01 14:30:22 [INFO] 프로젝트 실행 시작\n2024-12-01 14:30:23 [INFO] 매개변수 로드 완료\n..."
}
```

## 🔧 주요 스크립트

| 명령어 | 설명 |
|--------|------|
| `npm run build` | TypeScript 컴파일 및 실행 권한 설정 |
| `npm run clean` | 빌드 디렉토리 삭제 |
| `npm run cleanbuild` | 클린 후 재빌드 |
| `npm run watch` | 파일 변경 감지 시 자동 빌드 |
| `npm run inspector` | MCP Inspector로 테스트 실행 |

## 🧪 테스트 방법

### 1. MCP Inspector 사용
```bash
# MCP Inspector 설치
npm install -g @modelcontextprotocol/inspector

# 서버 테스트
npm run inspector
```

### 2. 테스트 시나리오
1. **프로젝트 목록 조회**: `Get_AntBot_Project_List` 호출
2. **프로젝트 정보 조회**: `Get_AntBot_Project_Info` 호출 (projectId 필요)
3. **프로젝트 실행**: `Run_AntBot_Project` 호출 (projectId, projectPath, parameters 필요)
4. **로그 조회**: `Get_Last_Mcprun_Log` 호출

## 🧠 Claude Desktop 연동

### 전제 조건
- Claude Desktop 설치 완료
- AntBot Robot 매니저 연동 완료
- MCP Inspector로 서버 정상 동작 확인

### 등록 방법

#### 방법 1: Claude Desktop GUI
1. Claude Desktop 실행
2. 설정 → 개발자 → 설정편집
3. `%APPDATA%\Roaming\Claude\claude_desktop_config.json` 파일 편집

#### 방법 2: 직접 설정
```json
{
  "mcpServers": {
    "antbot-mcp-server": {
      "command": "node",
      "args": ["C:\\path\\to\\antbot-mcp-server\\build\\index.js"]
    }
  }
}
```

### ⚠️ 중요: Claude Desktop 재시작
설정 변경 후 **반드시 Claude Desktop을 완전히 종료하고 재시작**해야 합니다:
1. 시스템 트레이에서 Claude 아이콘 우클릭
2. **종료** 선택 (완전히 종료)
3. Claude Desktop 다시 실행

> 💡 **참고**: 단순히 창을 닫는 것이 아니라 트레이 아이콘을 통해 완전히 종료해야 설정이 적용됩니다.

### 사용 예시
Claude에게 다음과 같이 요청할 수 있습니다:
- "AntBot 프로젝트 목록을 보여줘"
- "PR000000298 프로젝트의 정보를 알려줘"
- "PR000000298 프로젝트를 실행해줘"
- "최신 실행 로그를 보여줘"

## ⚙️ 설정 관리

### 자동 설정 로드
서버는 다음 경로의 AntBot Robot 설정 파일을 자동으로 읽어옵니다:
```
%APPDATA%\Roaming\AntBotRobot\AntBot_Robot.exe.config
```

### 필수 설정 항목
- `MANAGER_USER`: 매니저 사용자 ID
- `MANAGER_IP`: 매니저 서버 IP
- `MANAGER_PORT`: 매니저 서버 포트
- `AntBot Runner`: AntBot Runner 실행 파일 경로

### 설정 검증
서버 시작 시 필수 설정이 누락된 경우 오류를 발생시킵니다:
```
AntBot Robot에서 매니저 연동을 먼저 진행해주세요.
```

## 🔍 로깅 및 디버깅

### 로그 위치
```
%USERPROFILE%\.AntBot\Log\Develop\
```

### 로그 레벨
- **INFO**: 일반적인 작업 정보
- **DEBUG**: 상세한 디버깅 정보
- **WARN**: 경고 정보 (프로세스 감지 실패 등)
- **ERROR**: 오류 정보

### 주요 로그 메시지
- 서버 초기화 및 시작
- API 호출 결과
- 프로젝트 다운로드 및 실행 상태
- 설정 검증 결과
- AntBot Runner 프로세스 상태 확인

### mcprun 로그
- 파일명 형식: `mcprun_YYYYMMDDHHMMSS.log`
- 위치: `%USERPROFILE%\.AntBot\Log\Develop\`
- MCP 도구를 통해 최신 로그 조회 가능

## 📦 의존성

### 핵심 의존성
- `@modelcontextprotocol/sdk`: MCP 서버 구현
- `jsdom`: XML 설정 파일 파싱
- `adm-zip`: 프로젝트 ZIP 파일 처리
- `sudo-prompt`: 관리자 권한 실행 (필요시)
- `xml2js`: XML 파싱

### 개발 의존성
- `typescript`: TypeScript 컴파일러
- `rimraf`: 크로스 플랫폼 디렉토리 삭제
- `@types/*`: 타입 정의

## 🚀 성능 최적화

### 캐싱 시스템
- 프로젝트 정보 캐싱 (5분)
- 중복 다운로드 방지
- API 호출 최적화

### 에러 처리
- 상세한 에러 메시지
- 재시도 로직
- Graceful degradation

### 프로세스 관리
- Windows tasklist를 통한 프로세스 감지
- 중복 실행 방지로 리소스 보호
- 보수적 처리 (감지 실패 시 실행 허용)

## 🔒 보안 및 안정성

### 프로세스 감지
- Windows 환경에서만 지원
- `tasklist` 명령어를 통한 안전한 프로세스 확인
- 감지 실패 시에도 안정성 보장

### 권한 관리
- sudo-prompt를 통한 관리자 권한 실행
- 필요한 경우에만 권한 상승

## 📞 지원 및 문의

- **AntBot 관련**: ICT AX솔루션팀
- **MCP 관련**: [MCP 공식 문서](https://modelcontextprotocol.io/docs)
- **이슈 리포트**: GitHub Issues

## 📄 라이선스

이 프로젝트는 MIT 라이선스 하에 배포됩니다.