labforadvancedstudy/lotto-mcp-server
If you are the rightful owner of lotto-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This is an MCP server for automatically purchasing lottery tickets and checking results from Donghaeng Lottery.
purchase_lotto
Automatically purchases lottery tickets from Donghaeng Lottery.
check_lotto_winning
Checks the winning results of lottery numbers.
๋ก๋ MCP ์๋ฒ
๋ํ๋ณต๊ถ์์ ๋ก๋๋ฅผ ์๋์ผ๋ก ๊ตฌ๋งคํ๊ณ ๋น์ฒจ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ MCP(Model Context Protocol) ์๋ฒ์ ๋๋ค.
๐ ๊ธฐ๋ฅ
- ๋ก๋ ์๋ ๊ตฌ๋งค: ๋ํ๋ณต๊ถ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ์ฌ ๋ก๋๋ฅผ ์๋์ผ๋ก ๊ตฌ๋งค
- ๋น์ฒจ ๊ฒฐ๊ณผ ํ์ธ: ๊ตฌ๋งคํ ๋ก๋ ๋ฒํธ์ ๋น์ฒจ ๊ฒฐ๊ณผ๋ฅผ ์๋์ผ๋ก ํ์ธ
- ๋ณด์ ๊ฐํ: ID/ํจ์ค์๋๋ฅผ ์ํธํํ์ฌ ์์ ํ๊ฒ ์ ์ฅ
- Docker ์ง์: ๋ณ๋ ์ค์น ์์ด Docker๋ก ๋ฐ๋ก ์คํ ๊ฐ๋ฅ
๐ ์ค์น ๋ฐ ์คํ ๋ฐฉ๋ฒ
๋ฐฉ๋ฒ 1: npx ์ฌ์ฉ (์ถ์ฒ) โก
# ๊ณ์ ์ค์ ๋์ฐ๋ฏธ
npx @labforadvanced.study/lotto-mcp-server --setup
# ๋๋ ์ง์ ์ธ์ฝ๋ฉ
echo "your_id,your_password" | base64
Claude Desktop ์ค์ :
{
"mcpServers": {
"lotto": {
"command": "npx",
"args": ["@labforadvanced.study/lotto-mcp-server"],
"env": {
"LOTTO_CREDENTIALS": "your_base64_credentials"
}
}
}
}
์์ธํ npm ์ฌ์ฉ๋ฒ์ ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ฐฉ๋ฒ 2: Docker ์ฌ์ฉ ๐ณ
๋ณ๋ ์ค์น๋ ๋น๋ ์์ด ๋ฐฐํฌ๋ Docker ์ด๋ฏธ์ง๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค!
1๋จ๊ณ: ๊ณ์ ์ ๋ณด ์ธ์ฝ๋ฉ
ํฐ๋ฏธ๋์์ ๊ฐ๋จํ๊ฒ ์ธ์ฝ๋ฉ:
# 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
ํ์ผ์ ๋ค์ ์ค์ ์ ์ถ๊ฐ:
{
"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. ์ค์น
# ์์กด์ฑ ์ค์น
npm install
# Playwright ๋ธ๋ผ์ฐ์ ์ค์น
npm run install-playwright
# ๋น๋
npm run build
3. ๊ณ์ ์ ๋ณด ์ค์ (๋ ๊ฐ์ง ๋ฐฉ๋ฒ)
๋ฐฉ๋ฒ 1: ๊ฐ๋จ ๋ชจ๋ (Base64 ์ธ์ฝ๋ฉ) - ์ถ์ฒ โญ
# ๋ฐฉ๋ฒ 1-A: ์ธํฐ๋ํฐ๋ธ ๋๊ตฌ ์ฌ์ฉ
npm run encrypt-credentials
# ์ ํ: 1 (๊ฐ๋จ ๋ชจ๋)
# ๋ฐฉ๋ฒ 1-B: ๊ฐ๋จ ์คํฌ๋ฆฝํธ ์ฌ์ฉ
npm run simple-encode
# ๋ฐฉ๋ฒ 1-C: ํฐ๋ฏธ๋์์ ์ง์
echo "your_id,your_password" | base64
์ถ๋ ฅ ์์:
{
"mcpServers": {
"lotto": {
"command": "node",
"args": ["path/to/lotto-mcp-server/dist/index.js"],
"env": {
"LOTTO_CREDENTIALS": "eW91cl9pZCx5b3VyX3Bhc3N3b3Jk"
}
}
}
}
๋ฐฉ๋ฒ 2: ๊ณ ๊ธ ๋ชจ๋ (AES ์ํธํ)
npm run encrypt-credentials
# ์ ํ: 2 (๊ณ ๊ธ ๋ชจ๋)
์ถ๋ ฅ ์์:
{
"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 ์ค์
- ์์์ ์์ฑ๋ ์ค์ ์
claude_desktop_config.json
ํ์ผ์ ๋ณต์ฌ "path/to/lotto-mcp-server/dist/index.js"
๋ฅผ ์ค์ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝ- Claude Desktop ์ฌ์์
5. ๊ฐ๋ฐ ๋ชจ๋ ์คํ
npm run dev
6. ํ๋ก๋์ ์คํ
npm start
๐ ๏ธ ์ฌ์ฉ๋ฒ
์ด MCP ์๋ฒ๋ ๋ค์ ๋ ๊ฐ์ง ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค:
1. purchase_lotto
- ๋ก๋ ๊ตฌ๋งค
๋ํ๋ณต๊ถ์์ ๋ก๋๋ฅผ ์๋์ผ๋ก ๊ตฌ๋งคํฉ๋๋ค. ID/ํจ์ค์๋๋ ์ค์ ์์ ์๋์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
์ ๋ ฅ ํ๋ผ๋ฏธํฐ:
count
(number): ๊ตฌ๋งคํ ๋ก๋ ๊ฒ์ ์ (1-5)
์ถ๋ ฅ ์์:
{
"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, ์ ํ์ฌํญ): ํ์ธํ ํ์ฐจ (๊ธฐ๋ณธ๊ฐ: ํ์ฌ ํ์ฐจ)
์ถ๋ ฅ ์์:
{
"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 ์ถ๊ฐ ์ธ์ฝ๋ฉ์ผ๋ก ๋ณด์์ธต ๊ฐํ
- ๊ณ ๊ธ ๋ณด์์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ
ํฐ๋ฏธ๋์์ ์ง์ ์์ฑํ๊ธฐ
๊ฐ๋จ ๋ชจ๋๋ฅผ ํฐ๋ฏธ๋์์ ์ง์ ์์ฑํ ์ ์์ต๋๋ค:
# macOS/Linux
echo "your_id,your_password" | base64
# Windows (PowerShell)
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("your_id,your_password"))
๋ณด์ ์์ค ๋น๊ต
๋ฐฉ์ | ๋ณด์ ์์ค | ํธ์์ฑ | ์ฌ์ฉ ์ํฉ |
---|---|---|---|
๊ฐ๋จ ๋ชจ๋ | โญโญโญ | โญโญโญโญโญ | ์ผ๋ฐ ์ฌ์ฉ์, ๊ฐ์ธ PC |
๊ณ ๊ธ ๋ชจ๋ | โญโญโญโญโญ | โญโญโญ | ๋ฏผ๊ฐํ ํ๊ฒฝ, ๊ณต์ฉ PC |
โ ๏ธ ์ฃผ์์ฌํญ
- ์์น๊ธ ์ถฉ์ : ๊ตฌ๋งค ์ ์ ๋ํ๋ณต๊ถ ๊ณ์ ์ ์ถฉ๋ถํ ์์น๊ธ์ ๋ฏธ๋ฆฌ ์ถฉ์ ํด๋์ด์ผ ํฉ๋๋ค.
- ๊ณ์ ๋ณด์: ์ํธํ๋ ๊ณ์ ์ ๋ณด์ ์ํฌ๋ฆฟ ํค๋ฅผ ์์ ํ๊ฒ ๊ด๋ฆฌํ์ธ์.
- ๊ตฌ๋งค ํ๋: ํ ๋ฒ์ ์ต๋ 5๊ฒ์๊น์ง๋ง ๊ตฌ๋งค ๊ฐ๋ฅํฉ๋๋ค.
- ๋น์ฒจ ๋ฒํธ: ๋ก๋ ๋ฒํธ๋ 1~45 ์ฌ์ด์ ์ซ์ 6๊ฐ์ฌ์ผ ํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์์: Playwright๊ฐ Chromium์ ์คํํ๋ฏ๋ก ์์คํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ง ์ค์ ์ต์
src/lotto-service.ts
ํ์ผ์์ ๋ค์ ์ต์
์ ์์ ํ ์ ์์ต๋๋ค:
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
๐ ๋ฌธ์ ํด๊ฒฐ
๋ธ๋ผ์ฐ์ ์ค์น ์ค๋ฅ
# Playwright ๋ธ๋ผ์ฐ์ ์ฌ์ค์น
npx playwright install chromium
๊ณ์ ์ ๋ณด ์ค๋ฅ
# ๊ฐ๋จ ๋ชจ๋๋ก ์ฌ์ค์
npm run simple-encode
# ๋๋ ๊ณ ๊ธ ๋ชจ๋๋ก ์ฌ์ค์
npm run encrypt-credentials
๋ก๊ทธ์ธ ์คํจ
- ID์ ํจ์ค์๋๊ฐ ์ ํํ์ง ํ์ธ
- ๋ํ๋ณต๊ถ ์ฌ์ดํธ์ ์ง์ ๋ก๊ทธ์ธํด์ ๊ณ์ ์ํ ํ์ธ
- ๋ณด์ ์ค์ ์ผ๋ก ์ธํ ๋ก๊ทธ์ธ ์ ํ ์ฌ๋ถ ํ์ธ
๊ตฌ๋งค ์คํจ
- ๊ณ์ ์ ์ถฉ๋ถํ ์์น๊ธ์ด ์๋์ง ํ์ธ
- ๋ํ๋ณต๊ถ ์ฌ์ดํธ์ ์๋น์ค ์๊ฐ ํ์ธ (ํ ์์ผ ๋ฐค~์ผ์์ผ ์คํ๋ ์๋น์ค ์ค๋จ)
๐ ๋ผ์ด์ ์ค
MIT License
๐ค ๊ธฐ์ฌ
๋ฒ๊ทธ ๋ฆฌํฌํธ๋ ๊ธฐ๋ฅ ์ ์์ ์ด์๋ก ๋ฑ๋กํด์ฃผ์ธ์.
โ๏ธ ๋ฒ์ ๊ณ ์ง
์ด ๋๊ตฌ๋ ๋ํ๋ณต๊ถ์ ๊ณต์ API๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์น ์คํฌ๋ํ์ ํตํด ์๋ํฉ๋๋ค. ์ฌ์ฉ์ ๋ฐ๋ฅธ ๋ชจ๋ ์ฑ ์์ ์ฌ์ฉ์์๊ฒ ์์ผ๋ฉฐ, ๊ณผ๋ํ ์ฌ์ฉ์ผ๋ก ์ธํ ๊ณ์ ์ ์ฌ๋ ๊ธฐํ ๋ฌธ์ ์ ๋ํด์๋ ์ฑ ์์ง์ง ์์ต๋๋ค.