UNPKG

@labforadvanced.study/lotto-mcp-server

Version:

MCP Server for automated lotto purchase and checking with npx support

355 lines (268 loc) 8.76 kB
# 로또 MCP 서버 동행복권에서 로또를 자동으로 구매하고 당첨 결과를 확인할 수 있는 MCP(Model Context Protocol) 서버입니다. ## 📋 기능 - **로또 자동 구매**: 동행복권 계정으로 로그인하여 로또를 자동으로 구매 - **당첨 결과 확인**: 구매한 로또 번호의 당첨 결과를 자동으로 확인 - **보안 강화**: ID/패스워드를 암호화하여 안전하게 저장 - **Docker 지원**: 별도 설치 없이 Docker로 바로 실행 가능 ## 🚀 설치 및 실행 방법 ### 방법 1: npx 사용 (추천) ⚡ ```bash # 계정 설정 도우미 npx @labforadvanced.study/lotto-mcp-server --setup # 또는 직접 인코딩 echo "your_id,your_password" | base64 ``` **Claude Desktop 설정:** ```json { "mcpServers": { "lotto": { "command": "npx", "args": ["@labforadvanced.study/lotto-mcp-server"], "env": { "LOTTO_CREDENTIALS": "your_base64_credentials" } } } } ``` 자세한 npm 사용법은 [NPM_GUIDE.md](NPM_GUIDE.md)를 참고하세요. ### 방법 2: Docker 사용 🐳 별도 설치나 빌드 없이 배포된 Docker 이미지를 바로 사용할 수 있습니다! #### 1단계: 계정 정보 인코딩 터미널에서 간단하게 인코딩: ```bash # macOS/Linux echo "your_lotto_id,your_password" | base64 # Windows (PowerShell) [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("your_id,your_password")) # 결과 예시: bXlfbG90dG9faWQsbXlfcGFzc3dvcmQ= ``` #### 2단계: Claude Desktop 설정 `claude_desktop_config.json` 파일에 다음 설정을 추가: ```json { "mcpServers": { "lotto": { "command": "docker", "args": [ "run", "--rm", "-i", "-e", "LOTTO_CREDENTIALS=bXlfbG90dG9faWQsbXlfcGFzc3dvcmQ=", "your-dockerhub-username/lotto-mcp-server:latest" ] } } } ``` #### 3단계: Claude Desktop 재시작 Claude Desktop을 재시작하면 바로 사용 가능합니다! ``` 로또 3게임 구매해줘 ``` ### 방법 3: 로컬 설치 #### 2-1. 필수 조건 - Node.js 18.0.0 이상 - 동행복권 계정 (미리 예치금 충전 필요) #### 2-2. 설치 ```bash # 의존성 설치 npm install # Playwright 브라우저 설치 npm run install-playwright # 빌드 npm run build ``` ### 3. 계정 정보 설정 (두 가지 방법) #### 방법 1: 간단 모드 (Base64 인코딩) - 추천 ⭐ ```bash # 방법 1-A: 인터랙티브 도구 사용 npm run encrypt-credentials # 선택: 1 (간단 모드) # 방법 1-B: 간단 스크립트 사용 npm run simple-encode # 방법 1-C: 터미널에서 직접 echo "your_id,your_password" | base64 ``` **출력 예시:** ```json { "mcpServers": { "lotto": { "command": "node", "args": ["path/to/lotto-mcp-server/dist/index.js"], "env": { "LOTTO_CREDENTIALS": "eW91cl9pZCx5b3VyX3Bhc3N3b3Jk" } } } } ``` #### 방법 2: 고급 모드 (AES 암호화) ```bash npm run encrypt-credentials # 선택: 2 (고급 모드) ``` **출력 예시:** ```json { "mcpServers": { "lotto": { "command": "node", "args": ["path/to/lotto-mcp-server/dist/index.js"], "env": { "LOTTO_ENCRYPTED_ID": "YWJjZGVmZ2hpams...", "LOTTO_ENCRYPTED_PASSWORD": "bXlwYXNzd29yZA...", "LOTTO_SECRET_KEY": "optional-custom-key" } } } } ``` ### 4. Claude Desktop 설정 1. 위에서 생성된 설정을 `claude_desktop_config.json` 파일에 복사 2. `"path/to/lotto-mcp-server/dist/index.js"`를 실제 경로로 변경 3. Claude Desktop 재시작 ### 5. 개발 모드 실행 ```bash npm run dev ``` ### 6. 프로덕션 실행 ```bash npm start ``` ## 🛠️ 사용법 이 MCP 서버는 다음 두 가지 도구를 제공합니다: ### 1. `purchase_lotto` - 로또 구매 동행복권에서 로또를 자동으로 구매합니다. **ID/패스워드는 설정에서 자동으로 가져옵니다.** **입력 파라미터:** - `count` (number): 구매할 로또 게임 수 (1-5) **출력 예시:** ```json { "success": true, "numbers": [ [1, 14, 21, 27, 30, 44], [4, 5, 27, 29, 40, 44], [9, 18, 19, 24, 38, 42] ], "message": "3게임을 성공적으로 구매했습니다." } ``` ### 2. `check_lotto_winning` - 당첨 확인 로또 번호의 당첨 결과를 확인합니다. **입력 파라미터:** - `numbers` (array): 확인할 로또 번호 배열 (예: [[1,2,3,4,5,6], [7,8,9,10,11,12]]) - `round` (number, 선택사항): 확인할 회차 (기본값: 현재 회차) **출력 예시:** ```json { "success": true, "results": [ { "numbers": [1, 2, 3, 4, 5, 6], "rank": 5, "matchedNumbers": [1, 2, 3] }, { "numbers": [7, 8, 9, 10, 11, 12], "rank": 0, "matchedNumbers": [] } ], "message": "1143회차 당첨 결과를 확인했습니다." } ``` ## 💡 MCP 클라이언트에서 사용하기 ### Claude Desktop에서 사용 설정 완료 후 Claude에서 다음과 같이 사용: ``` 로또 3게임 구매해줘 ``` ``` 이 로또 번호들 당첨 확인해줘: [[1,2,3,4,5,6], [7,8,9,10,11,12]] ``` ## 🔐 보안 기능 ### 간단 모드 (Base64) - 추천 - 터미널에서 `echo "id,password" | base64`로 간단 생성 - raw 패스워드가 그대로 노출되지 않음 - 설정 파일에서 패스워드 직접 확인 불가 - 대부분 사용자에게 충분한 보안 수준 ### 고급 모드 (AES 암호화) - AES-256-CBC 대칭 암호화 - 사용자 정의 암호화 키 지원 - Base64 추가 인코딩으로 보안층 강화 - 고급 보안이 필요한 경우 사용 ### 터미널에서 직접 생성하기 간단 모드를 터미널에서 직접 생성할 수 있습니다: ```bash # macOS/Linux echo "your_id,your_password" | base64 # Windows (PowerShell) [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("your_id,your_password")) ``` ### 보안 수준 비교 | 방식 | 보안 수준 | 편의성 | 사용 상황 | |------|-----------|--------|-----------| | 간단 모드 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 일반 사용자, 개인 PC | | 고급 모드 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 민감한 환경, 공용 PC | ## ⚠️ 주의사항 1. **예치금 충전**: 구매 전에 동행복권 계정에 충분한 예치금을 미리 충전해두어야 합니다. 2. **계정 보안**: 암호화된 계정 정보와 시크릿 키를 안전하게 관리하세요. 3. **구매 한도**: 한 번에 최대 5게임까지만 구매 가능합니다. 4. **당첨 번호**: 로또 번호는 1~45 사이의 숫자 6개여야 합니다. 5. **브라우저 자원**: Playwright가 Chromium을 실행하므로 시스템 리소스를 사용합니다. ## 🔧 설정 옵션 `src/lotto-service.ts` 파일에서 다음 옵션을 수정할 수 있습니다: ```typescript this.lottoService = new BaseLottoService({ controller: chromium, headless: true, // false로 변경하면 브라우저 창이 보임 defaultViewport: { width: 1280, height: 720 }, logLevel: 2 // 로그 레벨 (0: ERROR, 1: WARN, 2: INFO, 3: DEBUG) }); ``` ## 📁 프로젝트 구조 ``` lotto-mcp-server/ ├── src/ │ ├── index.ts # MCP 서버 메인 파일 │ ├── lotto-service.ts # 로또 서비스 클래스 │ ├── crypto-utils.ts # 암호화/복호화 유틸리티 │ └── encrypt-credentials.ts # 계정 정보 인코딩 도구 ├── scripts/ │ └── simple-encode.sh # 간단 인코딩 스크립트 ├── dist/ # 빌드 결과물 ├── package.json ├── tsconfig.json └── README.md ``` ## 🐛 문제 해결 ### 브라우저 설치 오류 ```bash # Playwright 브라우저 재설치 npx playwright install chromium ``` ### 계정 정보 오류 ```bash # 간단 모드로 재설정 npm run simple-encode # 또는 고급 모드로 재설정 npm run encrypt-credentials ``` ### 로그인 실패 - ID와 패스워드가 정확한지 확인 - 동행복권 사이트에 직접 로그인해서 계정 상태 확인 - 보안 설정으로 인한 로그인 제한 여부 확인 ### 구매 실패 - 계정에 충분한 예치금이 있는지 확인 - 동행복권 사이트의 서비스 시간 확인 (토요일 밤~일요일 오후는 서비스 중단) ## 📄 라이선스 MIT License ## 🤝 기여 버그 리포트나 기능 제안은 이슈로 등록해주세요. ## ⚖️ 법적 고지 이 도구는 동행복권의 공식 API를 사용하지 않고 웹 스크래핑을 통해 작동합니다. 사용에 따른 모든 책임은 사용자에게 있으며, 과도한 사용으로 인한 계정 제재나 기타 문제에 대해서는 책임지지 않습니다.