daiso 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +249 -533
- package/dist/api/actionsProxy.js +82 -0
- package/dist/api/cgvHandlers.js +103 -16
- package/dist/api/configStatus.js +19 -0
- package/dist/api/daisoHandlers.js +127 -0
- package/dist/api/emart24Handlers.js +176 -0
- package/dist/api/gs25Handlers.js +267 -0
- package/dist/api/handlers.js +209 -104
- package/dist/api/healthChecks.js +504 -0
- package/dist/api/lottecinemaHandlers.js +155 -0
- package/dist/api/lottemartHandlers.js +144 -0
- package/dist/api/megaboxHandlers.js +81 -50
- package/dist/api/response.js +2 -0
- package/dist/api/routes/cuRoutes.js +17 -0
- package/dist/api/routes/daisoRoutes.js +6 -1
- package/dist/api/routes/emart24Routes.js +22 -0
- package/dist/api/routes/gs25Routes.js +22 -0
- package/dist/api/routes/healthRoutes.js +61 -0
- package/dist/api/routes/lottecinemaRoutes.js +22 -0
- package/dist/api/routes/lottemartRoutes.js +18 -0
- package/dist/api/routes/oliveyoungRoutes.js +6 -1
- package/dist/api/routes/sevenelevenRoutes.js +32 -0
- package/dist/api/sevenelevenHandlers.js +200 -0
- package/dist/bin.js +0 -0
- package/dist/cli/args.js +75 -0
- package/dist/cli/commandOptions.js +38 -0
- package/dist/cli/commands/convenience.js +293 -0
- package/dist/cli/commands/daiso.js +112 -0
- package/dist/cli/constants.js +5 -0
- package/dist/cli/deps.js +48 -0
- package/dist/cli/http.js +156 -0
- package/dist/cli/interactiveFetch.js +31 -0
- package/dist/cli/interactiveItemSearch.js +261 -0
- package/dist/cli/interactivePrompt.js +50 -0
- package/dist/cli/interactiveTypes.js +4 -0
- package/dist/cli/types.js +4 -0
- package/dist/cli.js +87 -196
- package/dist/cliHelp.js +212 -1
- package/dist/cliInteractive.js +243 -0
- package/dist/cliPicker.js +57 -0
- package/dist/cliRenderer.js +90 -3
- package/dist/core/errors.js +66 -0
- package/dist/core/registry.js +227 -3
- package/dist/index.js +149 -9
- package/dist/pages/openapi.js +2 -1
- package/dist/pages/openapiFullSpec.js +58 -0
- package/dist/pages/openapiResponse.js +28 -0
- package/dist/pages/openapiSpec.js +2 -41
- package/dist/pages/openapiSpecActions.js +109 -0
- package/dist/pages/openapiSpecComponents.js +30 -391
- package/dist/pages/openapiSpecComponentsCgv.js +24 -0
- package/dist/pages/openapiSpecComponentsCu.js +112 -0
- package/dist/pages/openapiSpecComponentsDaisoOliveyoung.js +342 -0
- package/dist/pages/openapiSpecComponentsEmart24.js +141 -0
- package/dist/pages/openapiSpecComponentsGs25.js +109 -0
- package/dist/pages/openapiSpecComponentsLotteMart.js +85 -0
- package/dist/pages/openapiSpecComponentsLottecinema.js +163 -0
- package/dist/pages/openapiSpecComponentsMegabox.js +144 -0
- package/dist/pages/openapiSpecComponentsSeveneleven.js +82 -0
- package/dist/pages/openapiSpecPathsCgv.js +66 -3
- package/dist/pages/openapiSpecPathsCu.js +145 -0
- package/dist/pages/openapiSpecPathsDaiso.js +302 -0
- package/dist/pages/openapiSpecPathsDaisoOliveyoung.js +4 -376
- package/dist/pages/openapiSpecPathsEmart24.js +223 -0
- package/dist/pages/openapiSpecPathsGs25.js +166 -0
- package/dist/pages/openapiSpecPathsLotteMart.js +149 -0
- package/dist/pages/openapiSpecPathsLottecinema.js +212 -0
- package/dist/pages/openapiSpecPathsMegabox.js +52 -3
- package/dist/pages/openapiSpecPathsOliveyoung.js +266 -0
- package/dist/pages/openapiSpecPathsSeveneleven.js +234 -0
- package/dist/pages/prompt.js +8 -402
- package/dist/pages/promptCoreText.js +278 -0
- package/dist/pages/promptReferenceText.js +137 -0
- package/dist/pages/promptRetailCinemaText.js +274 -0
- package/dist/services/cgv/client.js +6 -1
- package/dist/services/cgv/index.js +3 -3
- package/dist/services/cgv/location.js +235 -0
- package/dist/services/cgv/tools/findTheaters.js +30 -5
- package/dist/services/cgv/tools/getTimetable.js +42 -14
- package/dist/services/cgv/tools/searchMovies.js +40 -12
- package/dist/services/cgv/transport.js +0 -3
- package/dist/services/cu/api.js +11 -0
- package/dist/services/cu/client.js +297 -0
- package/dist/services/cu/index.js +21 -0
- package/dist/services/cu/tools/checkInventory.js +123 -0
- package/dist/services/cu/tools/findNearbyStores.js +49 -0
- package/dist/services/cu/types.js +4 -0
- package/dist/services/daiso/api.js +22 -2
- package/dist/services/daiso/client.js +67 -0
- package/dist/services/daiso/index.js +4 -0
- package/dist/services/daiso/product.js +17 -0
- package/dist/services/daiso/tools/checkInventory.js +80 -43
- package/dist/services/daiso/tools/findInventoryByName.js +222 -0
- package/dist/services/daiso/tools/findStores.js +17 -7
- package/dist/services/daiso/tools/getDisplayLocation.js +75 -0
- package/dist/services/emart24/api.js +11 -0
- package/dist/services/emart24/client.js +182 -0
- package/dist/services/emart24/index.js +22 -0
- package/dist/services/emart24/inventoryLookup.js +134 -0
- package/dist/services/emart24/tools/checkInventory.js +54 -0
- package/dist/services/emart24/tools/findNearbyStores.js +72 -0
- package/dist/services/emart24/tools/searchProducts.js +73 -0
- package/dist/services/emart24/types.js +4 -0
- package/dist/services/gs25/api.js +9 -0
- package/dist/services/gs25/client.js +208 -0
- package/dist/services/gs25/index.js +22 -0
- package/dist/services/gs25/storeUtils.js +168 -0
- package/dist/services/gs25/tools/checkInventory.js +163 -0
- package/dist/services/gs25/tools/findNearbyStores.js +103 -0
- package/dist/services/gs25/tools/searchProducts.js +57 -0
- package/dist/services/gs25/types.js +4 -0
- package/dist/services/lottecinema/api.js +12 -0
- package/dist/services/lottecinema/client.js +161 -0
- package/dist/services/lottecinema/index.js +30 -0
- package/dist/services/lottecinema/location.js +191 -0
- package/dist/services/lottecinema/tools/findNearbyTheaters.js +47 -0
- package/dist/services/lottecinema/tools/getRemainingSeats.js +85 -0
- package/dist/services/lottecinema/tools/listNowShowing.js +79 -0
- package/dist/services/lottecinema/types.js +4 -0
- package/dist/services/lottemart/api.js +31 -0
- package/dist/services/lottemart/client.js +254 -0
- package/dist/services/lottemart/clientTypes.js +4 -0
- package/dist/services/lottemart/config.js +4 -0
- package/dist/services/lottemart/debug.js +92 -0
- package/dist/services/lottemart/geocode.js +49 -0
- package/dist/services/lottemart/index.js +30 -0
- package/dist/services/lottemart/keyword.js +29 -0
- package/dist/services/lottemart/parser.js +185 -0
- package/dist/services/lottemart/session.js +331 -0
- package/dist/services/lottemart/storeSearch.js +52 -0
- package/dist/services/lottemart/tools/findNearbyStores.js +67 -0
- package/dist/services/lottemart/tools/searchProducts.js +69 -0
- package/dist/services/lottemart/types.js +4 -0
- package/dist/services/lottemart/zetta.js +105 -0
- package/dist/services/megabox/location.js +219 -0
- package/dist/services/megabox/tools/findNearbyTheaters.js +13 -44
- package/dist/services/megabox/tools/getRemainingSeats.js +31 -3
- package/dist/services/megabox/tools/listNowShowing.js +31 -3
- package/dist/services/oliveyoung/api.js +2 -0
- package/dist/services/oliveyoung/client.js +225 -13
- package/dist/services/oliveyoung/index.js +3 -1
- package/dist/services/oliveyoung/tools/checkInventory.js +21 -5
- package/dist/services/oliveyoung/tools/searchProducts.js +57 -0
- package/dist/services/seveneleven/api.js +15 -0
- package/dist/services/seveneleven/client.js +286 -0
- package/dist/services/seveneleven/index.js +30 -0
- package/dist/services/seveneleven/inventory.js +302 -0
- package/dist/services/seveneleven/productKeyword.js +141 -0
- package/dist/services/seveneleven/tools/checkInventory.js +82 -0
- package/dist/services/seveneleven/tools/getCatalogSnapshot.js +55 -0
- package/dist/services/seveneleven/tools/getSearchPopwords.js +41 -0
- package/dist/services/seveneleven/tools/searchProducts.js +67 -0
- package/dist/services/seveneleven/tools/searchStores.js +45 -0
- package/dist/services/seveneleven/types.js +4 -0
- package/dist/utils/cliInteractiveHelpers.js +63 -0
- package/dist/utils/daisoKeyword.js +30 -0
- package/dist/utils/http.js +98 -12
- package/dist/utils/zyte.js +47 -26
- package/openapi.json +1979 -736
- package/openapi.yaml +1428 -541
- package/package.json +49 -18
- package/dist/tools/checkInventory.js +0 -98
- package/dist/tools/findStores.js +0 -125
- package/dist/tools/getPriceInfo.js +0 -77
- package/dist/tools/searchProducts.js +0 -61
- package/dist/types/index.js +0 -4
package/README.md
CHANGED
|
@@ -5,18 +5,40 @@
|
|
|
5
5
|
<br>
|
|
6
6
|
<br>
|
|
7
7
|
|
|
8
|
-
# Daiso MCP
|
|
8
|
+
# Daiso MCP 및 Skill
|
|
9
9
|
|
|
10
|
-
다이소(제품/매장/재고), 올리브영(매장/재고), 메가박스(지점/영화/시간표/좌석), CGV(극장/영화/시간표) 조회 기능을 AI에 연결합니다.
|
|
10
|
+
다이소(제품/매장/재고), 롯데마트(매장/상품), GS25(매장/상품/재고), 세븐일레븐(상품/매장/재고/인기검색어/카탈로그), CU(매장/재고), 이마트24(매장/상품/재고), 올리브영(매장/재고), 메가박스(지점/영화/시간표/좌석), 롯데시네마(지점/영화/좌석), CGV(극장/영화/시간표) 조회 기능을 MCP, CLI, Codex Skill로 AI에 연결합니다.
|
|
11
|
+
|
|
12
|
+
<br>
|
|
13
|
+
|
|
14
|
+
**MCP:** `https://mcp.aka.page` · **CLI:** `npx daiso` · **Skill:** `clawhub install daiso-cli`
|
|
15
|
+
|
|
16
|
+
**ClawHub:** [clawhub.ai/hmmhmmhm/daiso-cli](https://clawhub.ai/hmmhmmhm/daiso-cli)
|
|
17
|
+
|
|
18
|
+
한국 로컬 리테일과 영화관 조회를 MCP, CLI, Codex Skill로 연결하는 도구입니다.
|
|
11
19
|
|
|
12
20
|
<br>
|
|
13
21
|
|
|
14
22
|
[](https://opensource.org/licenses/MIT)
|
|
15
23
|
[](https://workers.cloudflare.com/)
|
|
16
24
|
[](https://modelcontextprotocol.io/)
|
|
25
|
+
[](https://github.com/hmmhmmhm/daiso-mcp/actions/workflows/coverage.yml)
|
|
17
26
|
[](https://github.com/hmmhmmhm/daiso-mcp/actions/workflows/coverage.yml)
|
|
27
|
+
[](https://aka-page.betteruptime.com/)
|
|
28
|
+
|
|
29
|
+
**[실시간 서비스 상태 보기](https://aka-page.betteruptime.com/)**
|
|
30
|
+
|
|
31
|
+
<!-- WORKERS_INVOCATIONS_CHART:START -->
|
|
32
|
+
<h3>Cloudflare Workers 호출량 (2026-03-01 ~ 2026-05-19, 80일)</h3>
|
|
33
|
+
|
|
34
|
+
<img src="./assets/analytics/workers-invocations.png?v=2026-05-19T16:35:34.414Z" alt="Cloudflare Workers 호출량 그래프 (2026-03-01 ~ 2026-05-19)" width="100%">
|
|
35
|
+
|
|
36
|
+
<sub>기준 워커: <code>daiso-mcp</code> · 마지막 갱신: 2026-05-20 01:35 KST</sub>
|
|
37
|
+
|
|
38
|
+
<!-- WORKERS_INVOCATIONS_CHART:END -->
|
|
18
39
|
|
|
19
40
|
<br>
|
|
41
|
+
|
|
20
42
|
<br>
|
|
21
43
|
|
|
22
44
|
<img src="https://i.imgur.com/mPwS4Kv.png" width="400"> <img src="https://i.imgur.com/MrndJ3g.png" width="400">
|
|
@@ -31,31 +53,8 @@
|
|
|
31
53
|
|
|
32
54
|
## AI 앱에서 MCP 연결하기
|
|
33
55
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
https://mcp.aka.page
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
CLI (npx):
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
npx daiso help
|
|
44
|
-
npx daiso help products
|
|
45
|
-
npx daiso url
|
|
46
|
-
npx daiso health
|
|
47
|
-
npx daiso claude
|
|
48
|
-
|
|
49
|
-
# AI 없이 직접 조회
|
|
50
|
-
npx daiso products 수납박스
|
|
51
|
-
npx daiso product 1034604
|
|
52
|
-
npx daiso stores 강남역
|
|
53
|
-
npx daiso inventory 1034604 --keyword 강남역
|
|
54
|
-
npx daiso get /api/cgv/movies --playDate 20260307 --theaterCode 0056
|
|
55
|
-
|
|
56
|
-
# 원본 JSON 필요 시
|
|
57
|
-
npx daiso products 수납박스 --json
|
|
58
|
-
```
|
|
56
|
+
ChatGPT, Claude, Grok 같은 AI 앱에서 바로 연결해 사용할 수 있습니다.
|
|
57
|
+
아래 앱별 가이드에서 먼저 연동한 뒤 검색/재고/영화 조회를 요청하세요.
|
|
59
58
|
|
|
60
59
|
<br>
|
|
61
60
|
|
|
@@ -71,7 +70,17 @@ npx daiso products 수납박스 --json
|
|
|
71
70
|
```
|
|
72
71
|
다이소 mcp로 수납박스 검색해줘
|
|
73
72
|
올리브영 mcp로 명동 근처 매장 찾아줘
|
|
73
|
+
이마트24 mcp로 강남 근처 매장과 두바이 재고 알려줘
|
|
74
|
+
롯데마트 mcp로 잠실 근처 매장 찾아줘
|
|
75
|
+
롯데마트 mcp로 강변점에서 콜라 재고 알려줘
|
|
76
|
+
GS25 mcp로 강남 근처 매장과 오감자 재고 알려줘
|
|
77
|
+
세븐일레븐 mcp로 삼각김밥 검색해줘
|
|
78
|
+
세븐일레븐 mcp로 안산 중앙역 근처 매장 찾아줘
|
|
79
|
+
세븐일레븐 mcp로 안산 중앙역 근처 세븐일레븐에서 핫식스 재고 알려줘
|
|
80
|
+
세븐일레븐 mcp로 인기 검색어와 카탈로그 요약 알려줘
|
|
74
81
|
메가박스 mcp로 강남점 영화와 잔여 좌석 알려줘
|
|
82
|
+
롯데시네마 mcp로 월드타워 근처 지점과 상영 영화 알려줘
|
|
83
|
+
롯데시네마 mcp로 월드타워 잔여 좌석 알려줘
|
|
75
84
|
CGV mcp로 강남 상영 영화와 시간표 알려줘
|
|
76
85
|
```
|
|
77
86
|
|
|
@@ -94,8 +103,15 @@ CGV mcp로 강남 상영 영화와 시간표 알려줘
|
|
|
94
103
|
다이소 mcp를 사용해서 강남역 근처 매장 찾아줘
|
|
95
104
|
올리브영 mcp를 사용해서 명동 근처 매장 찾아줘
|
|
96
105
|
올리브영 mcp를 사용해서 선크림 재고 확인해줘
|
|
106
|
+
이마트24 mcp를 사용해서 강남 매장 찾고 두바이 재고 확인해줘
|
|
107
|
+
롯데마트 mcp를 사용해서 잠실 근처 매장 찾아줘
|
|
108
|
+
롯데마트 mcp를 사용해서 강변점에서 콜라 검색해줘
|
|
109
|
+
GS25 mcp를 사용해서 강남 매장 찾고 오감자 재고 확인해줘
|
|
110
|
+
세븐일레븐 mcp를 사용해서 안산 중앙역 근처 매장 찾고 핫식스 재고 확인해줘
|
|
97
111
|
메가박스 mcp를 사용해서 강남역 근처 지점 찾아줘
|
|
98
112
|
메가박스 mcp를 사용해서 강남점 영화 목록이랑 잔여 좌석 확인해줘
|
|
113
|
+
롯데시네마 mcp를 사용해서 잠실 근처 지점 찾아줘
|
|
114
|
+
롯데시네마 mcp를 사용해서 월드타워 영화 목록이랑 잔여 좌석 확인해줘
|
|
99
115
|
CGV mcp를 사용해서 서울 지역 극장 목록 찾아줘
|
|
100
116
|
CGV mcp를 사용해서 강남 CGV 영화랑 시간표 확인해줘
|
|
101
117
|
```
|
|
@@ -109,7 +125,7 @@ CGV mcp를 사용해서 강남 CGV 영화랑 시간표 확인해줘
|
|
|
109
125
|
> Claude Code CLI에서 MCP 서버 추가
|
|
110
126
|
|
|
111
127
|
```bash
|
|
112
|
-
claude mcp add daiso-mcp https://mcp.aka.page --transport
|
|
128
|
+
claude mcp add daiso-mcp https://mcp.aka.page --transport http
|
|
113
129
|
```
|
|
114
130
|
|
|
115
131
|
<br>
|
|
@@ -138,423 +154,206 @@ AI: (페이지를 읽고 API 사용법 이해)
|
|
|
138
154
|
사용자: 수납박스 검색해줘
|
|
139
155
|
AI: (https://mcp.aka.page/api/daiso/products?q=수납박스 호출 후 결과 제공)
|
|
140
156
|
|
|
141
|
-
사용자:
|
|
142
|
-
AI: (https://mcp.aka.page/api/megabox/theaters?
|
|
157
|
+
사용자: 안산 중앙역 근처 메가박스 지점 찾아줘
|
|
158
|
+
AI: (https://mcp.aka.page/api/megabox/theaters?keyword=안산%20중앙역 호출 후 결과 제공)
|
|
159
|
+
|
|
160
|
+
사용자: 잠실 근처 롯데시네마 지점 찾아줘
|
|
161
|
+
AI: (https://mcp.aka.page/api/lottecinema/theaters?keyword=%EC%9E%A0%EC%8B%A4 호출 후 결과 제공)
|
|
143
162
|
|
|
144
163
|
사용자: 강남 CGV 시간표 알려줘
|
|
145
164
|
AI: (https://mcp.aka.page/api/cgv/timetable?playDate=20260304&theaterCode=0056 호출 후 결과 제공)
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
<br>
|
|
149
|
-
|
|
150
|
-
### 미지원 서비스
|
|
151
|
-
|
|
152
|
-
| 서비스 | 상태 |
|
|
153
|
-
| :---------------------------------------------------------------------------------------------------- | :-------- |
|
|
154
|
-
|  Google Gemini | ❌ 미지원 |
|
|
155
|
-
|  GitHub Copilot | ❌ 미지원 |
|
|
156
|
-
|
|
157
|
-
<br>
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
<br>
|
|
162
|
-
|
|
163
|
-
## 기능
|
|
164
|
-
|
|
165
|
-
### daiso_search_products
|
|
166
|
-
|
|
167
|
-
다이소 제품을 검색합니다.
|
|
168
|
-
|
|
169
|
-
| 파라미터 | 필수 | 설명 |
|
|
170
|
-
| :--------- | :--: | :---------------------------- |
|
|
171
|
-
| `query` | O | 검색할 제품명 또는 키워드 |
|
|
172
|
-
| `page` | | 페이지 번호 (기본값: 1) |
|
|
173
|
-
| `pageSize` | | 페이지당 결과 수 (기본값: 30) |
|
|
174
|
-
|
|
175
|
-
<br>
|
|
176
|
-
|
|
177
|
-
### daiso_find_stores
|
|
178
|
-
|
|
179
|
-
다이소 매장을 검색합니다.
|
|
180
|
-
|
|
181
|
-
| 파라미터 | 필수 | 설명 |
|
|
182
|
-
| :-------- | :--: | :------------------------ |
|
|
183
|
-
| `keyword` | | 매장명 또는 주소 키워드 |
|
|
184
|
-
| `sido` | | 시/도 (예: 서울, 경기) |
|
|
185
|
-
| `gugun` | | 구/군 (예: 강남구) |
|
|
186
|
-
| `dong` | | 동 (예: 역삼동) |
|
|
187
|
-
| `limit` | | 최대 매장 수 (기본값: 50) |
|
|
188
|
-
|
|
189
|
-
<br>
|
|
190
|
-
|
|
191
|
-
### daiso_check_inventory
|
|
192
|
-
|
|
193
|
-
특정 제품의 매장별 재고를 확인합니다.
|
|
194
|
-
|
|
195
|
-
| 파라미터 | 필수 | 설명 |
|
|
196
|
-
| :----------- | :--: | :---------------------------- |
|
|
197
|
-
| `productId` | O | 제품 ID |
|
|
198
|
-
| `storeQuery` | | 매장 검색어 (예: 안산 중앙역) |
|
|
199
|
-
| `latitude` | | 위도 (기본값: 서울 시청) |
|
|
200
|
-
| `longitude` | | 경도 (기본값: 서울 시청) |
|
|
201
|
-
| `page` | | 페이지 번호 (기본값: 1) |
|
|
202
|
-
| `pageSize` | | 페이지당 결과 수 (기본값: 30) |
|
|
203
|
-
|
|
204
|
-
<br>
|
|
205
|
-
|
|
206
|
-
### daiso_get_price_info
|
|
207
|
-
|
|
208
|
-
제품의 가격 정보를 조회합니다.
|
|
209
|
-
|
|
210
|
-
| 파라미터 | 필수 | 설명 |
|
|
211
|
-
| :------------ | :--: | :---------------------------------- |
|
|
212
|
-
| `productId` | | 제품 ID |
|
|
213
|
-
| `productName` | | 제품명 (productId가 없을 경우 사용) |
|
|
214
|
-
|
|
215
|
-
<br>
|
|
216
|
-
|
|
217
|
-
### oliveyoung_find_nearby_stores
|
|
218
|
-
|
|
219
|
-
Zyte API 기반으로 내 주변 올리브영 매장을 조회합니다.
|
|
220
|
-
|
|
221
|
-
| 파라미터 | 필수 | 설명 |
|
|
222
|
-
| :---------- | :--: | :---------------------------------- |
|
|
223
|
-
| `latitude` | | 위도 (기본값: 서울 시청) |
|
|
224
|
-
| `longitude` | | 경도 (기본값: 서울 시청) |
|
|
225
|
-
| `keyword` | | 매장명/지역 키워드 (예: 명동, 강남) |
|
|
226
|
-
| `pageIdx` | | 페이지 번호 (기본값: 1) |
|
|
227
|
-
| `limit` | | 최대 결과 수 (기본값: 20) |
|
|
228
|
-
|
|
229
|
-
<br>
|
|
230
|
-
|
|
231
|
-
### oliveyoung_check_inventory
|
|
232
|
-
|
|
233
|
-
Zyte API 기반으로 올리브영 상품 재고를 조회하고 주변 매장 정보를 함께 반환합니다.
|
|
234
|
-
|
|
235
|
-
| 파라미터 | 필수 | 설명 |
|
|
236
|
-
| :--------------- | :--: | :----------------------------- |
|
|
237
|
-
| `keyword` | O | 재고를 확인할 상품 키워드 |
|
|
238
|
-
| `latitude` | | 위도 (기본값: 서울 시청) |
|
|
239
|
-
| `longitude` | | 경도 (기본값: 서울 시청) |
|
|
240
|
-
| `storeKeyword` | | 주변 매장 검색 키워드 |
|
|
241
|
-
| `page` | | 페이지 번호 (기본값: 1) |
|
|
242
|
-
| `size` | | 페이지당 상품 수 (기본값: 20) |
|
|
243
|
-
| `includeSoldOut` | | 품절 포함 여부 (기본값: false) |
|
|
244
|
-
|
|
245
|
-
<br>
|
|
246
|
-
|
|
247
|
-
### megabox_find_nearby_theaters
|
|
248
|
-
|
|
249
|
-
사용자 좌표 기준으로 메가박스 주변 지점을 거리순으로 조회합니다.
|
|
250
|
-
|
|
251
|
-
| 파라미터 | 필수 | 설명 |
|
|
252
|
-
| :---------- | :--: | :--------------------------------- |
|
|
253
|
-
| `latitude` | | 위도 (기본값: 서울 시청) |
|
|
254
|
-
| `longitude` | | 경도 (기본값: 서울 시청) |
|
|
255
|
-
| `playDate` | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) |
|
|
256
|
-
| `areaCode` | | 지역 코드 (기본값: 11, 서울) |
|
|
257
|
-
| `limit` | | 최대 결과 수 (기본값: 10) |
|
|
258
|
-
|
|
259
|
-
<br>
|
|
260
|
-
|
|
261
|
-
### megabox_list_now_showing
|
|
262
|
-
|
|
263
|
-
날짜/지점 조건으로 메가박스 영화 및 상영 회차 목록을 조회합니다.
|
|
264
|
-
|
|
265
|
-
| 파라미터 | 필수 | 설명 |
|
|
266
|
-
| :---------- | :--: | :--------------------------------- |
|
|
267
|
-
| `playDate` | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) |
|
|
268
|
-
| `theaterId` | | 지점 ID (예: 1372) |
|
|
269
|
-
| `movieId` | | 영화 ID (예: 25104500) |
|
|
270
|
-
| `areaCode` | | 지역 코드 (기본값: 11, 서울) |
|
|
271
|
-
|
|
272
|
-
<br>
|
|
273
|
-
|
|
274
|
-
### megabox_get_remaining_seats
|
|
275
|
-
|
|
276
|
-
영화/지점/날짜 조건으로 회차별 남은 좌석 수를 조회합니다.
|
|
277
|
-
|
|
278
|
-
| 파라미터 | 필수 | 설명 |
|
|
279
|
-
| :---------- | :--: | :--------------------------------- |
|
|
280
|
-
| `playDate` | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) |
|
|
281
|
-
| `theaterId` | | 지점 ID |
|
|
282
|
-
| `movieId` | | 영화 ID |
|
|
283
|
-
| `areaCode` | | 지역 코드 (기본값: 11, 서울) |
|
|
284
|
-
| `limit` | | 최대 결과 수 (기본값: 50) |
|
|
285
|
-
|
|
286
|
-
<br>
|
|
287
|
-
|
|
288
|
-
### cgv_find_theaters
|
|
289
|
-
|
|
290
|
-
지역 코드 기준으로 CGV 극장 목록을 조회합니다.
|
|
291
|
-
|
|
292
|
-
| 파라미터 | 필수 | 설명 |
|
|
293
|
-
| :----------- | :--: | :--------------------------------- |
|
|
294
|
-
| `playDate` | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) |
|
|
295
|
-
| `regionCode` | | 지역 코드 (예: 01 서울) |
|
|
296
|
-
| `limit` | | 최대 결과 수 (기본값: 30) |
|
|
297
|
-
| `timeoutMs` | | 요청 제한 시간(ms, 기본값: 15000) |
|
|
298
|
-
|
|
299
|
-
<br>
|
|
300
|
-
|
|
301
|
-
### cgv_search_movies
|
|
302
|
-
|
|
303
|
-
날짜/극장 조건으로 CGV 영화 목록을 조회합니다.
|
|
304
|
-
|
|
305
|
-
| 파라미터 | 필수 | 설명 |
|
|
306
|
-
| :------------ | :--: | :--------------------------------- |
|
|
307
|
-
| `playDate` | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) |
|
|
308
|
-
| `theaterCode` | | CGV 극장 코드 (예: 0056) |
|
|
309
|
-
| `timeoutMs` | | 요청 제한 시간(ms, 기본값: 15000) |
|
|
310
|
-
|
|
311
|
-
<br>
|
|
312
|
-
|
|
313
|
-
### cgv_get_timetable
|
|
314
|
-
|
|
315
|
-
날짜/극장/영화 조건으로 CGV 상영 시간표를 조회합니다.
|
|
316
165
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
| `limit` | | 최대 결과 수 (기본값: 50) |
|
|
323
|
-
| `timeoutMs` | | 요청 제한 시간(ms, 기본값: 15000) |
|
|
324
|
-
|
|
325
|
-
<br>
|
|
326
|
-
|
|
327
|
-
### 올리브영 REST 캐싱 정책
|
|
328
|
-
|
|
329
|
-
Cloudflare Edge Cache API(`caches.default`)를 사용해 올리브영 REST 응답을 캐싱합니다.
|
|
330
|
-
|
|
331
|
-
- `GET /api/oliveyoung/stores`: 24시간 TTL
|
|
332
|
-
- `GET /api/oliveyoung/inventory`: 10분 TTL
|
|
333
|
-
- 공통: `stale-while-revalidate` 적용, 오류 응답(4xx/5xx)은 캐시하지 않음
|
|
166
|
+
사용자: 안산 중앙역 근처 CGV 찾아서 오늘 영화랑 시간표 알려줘
|
|
167
|
+
AI: (https://mcp.aka.page/api/cgv/theaters?playDate=20260315&keyword=안산%20중앙역 호출 후 결과 제공)
|
|
168
|
+
AI: (https://mcp.aka.page/api/cgv/movies?playDate=20260315&keyword=안산%20중앙역 호출 후 결과 제공)
|
|
169
|
+
AI: (https://mcp.aka.page/api/cgv/timetable?playDate=20260315&keyword=안산%20중앙역 호출 후 결과 제공)
|
|
170
|
+
```
|
|
334
171
|
|
|
335
172
|
<br>
|
|
336
173
|
|
|
337
|
-
###
|
|
338
|
-
|
|
339
|
-
Cloudflare Edge Cache API(`caches.default`)를 사용해 메가박스 REST 응답을 캐싱합니다.
|
|
174
|
+
### MCP 서버 URL / CLI (고급)
|
|
340
175
|
|
|
341
|
-
|
|
342
|
-
- `GET /api/megabox/movies`: 10분 TTL
|
|
343
|
-
- `GET /api/megabox/seats`: 3분 TTL
|
|
344
|
-
- 공통: `stale-while-revalidate` 적용, 오류 응답(4xx/5xx)은 캐시하지 않음
|
|
176
|
+
AI 앱 대신 직접 연결하거나 스크립트에서 사용할 때만 참고하세요.
|
|
345
177
|
|
|
346
|
-
|
|
178
|
+
MCP 서버 URL:
|
|
347
179
|
|
|
348
|
-
|
|
180
|
+
```
|
|
181
|
+
https://mcp.aka.page
|
|
182
|
+
```
|
|
349
183
|
|
|
350
|
-
|
|
184
|
+
CLI (npx):
|
|
351
185
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
- 공통: `stale-while-revalidate` 적용, 오류 응답(4xx/5xx)은 캐시하지 않음
|
|
186
|
+
```bash
|
|
187
|
+
# 인터랙티브 모드 (추천)
|
|
188
|
+
npx daiso
|
|
356
189
|
|
|
357
|
-
|
|
190
|
+
# 인터랙티브 비활성화 (CI/스크립트)
|
|
191
|
+
npx daiso --non-interactive
|
|
358
192
|
|
|
359
|
-
|
|
193
|
+
# 명령형 모드
|
|
194
|
+
npx daiso help
|
|
195
|
+
npx daiso help products
|
|
196
|
+
npx daiso url
|
|
197
|
+
npx daiso health
|
|
198
|
+
npx daiso claude
|
|
360
199
|
|
|
361
|
-
|
|
200
|
+
# AI 없이 직접 조회
|
|
201
|
+
npx daiso products 수납박스
|
|
202
|
+
npx daiso product 1034604
|
|
203
|
+
npx daiso stores 강남역
|
|
204
|
+
npx daiso inventory 1034604 --keyword 강남역
|
|
205
|
+
npx daiso display-location 1034604 04515
|
|
206
|
+
npx daiso cu-stores 강남
|
|
207
|
+
npx daiso cu-inventory 과자 --storeKeyword 강남
|
|
208
|
+
npx daiso lottemart-stores 잠실 --area 서울 --limit 10
|
|
209
|
+
npx daiso lottemart-products 콜라 --storeName 강변점 --area 서울
|
|
210
|
+
npx daiso emart24-stores 강남 --service24h true
|
|
211
|
+
npx daiso emart24-products 두바이 --pageSize 20
|
|
212
|
+
npx daiso emart24-inventory 8800244010504 --bizNoArr 28339,05015
|
|
213
|
+
npx daiso gs25-stores 강남 --limit 10
|
|
214
|
+
npx daiso gs25-products 오감자 --limit 20
|
|
215
|
+
npx daiso gs25-inventory 오감자 --storeKeyword 강남 --storeLimit 10
|
|
216
|
+
npx daiso seveneleven-products 삼각김밥 --size 20
|
|
217
|
+
npx daiso seveneleven-stores 안산 중앙역 --limit 10
|
|
218
|
+
npx daiso get /api/seveneleven/inventory --keyword 핫식스 --storeKeyword 안산%20중앙역 --storeLimit 10
|
|
219
|
+
npx daiso seveneleven-popwords --label home
|
|
220
|
+
npx daiso seveneleven-catalog --includeIssues true --includeExhibition true --limit 10
|
|
221
|
+
npx daiso get /api/cgv/movies --playDate 20260307 --theaterCode 0056
|
|
362
222
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
- `GET /api/daiso/inventory`: 10분 TTL
|
|
367
|
-
- 공통: `stale-while-revalidate` 적용, 오류 응답(4xx/5xx)은 캐시하지 않음
|
|
223
|
+
# 원본 JSON 필요 시
|
|
224
|
+
npx daiso products 수납박스 --json
|
|
225
|
+
```
|
|
368
226
|
|
|
369
|
-
|
|
227
|
+
### Codex Skill
|
|
370
228
|
|
|
371
|
-
|
|
229
|
+
이 저장소는 MCP 서버뿐 아니라 에이전트가 `npx daiso` CLI를 직접 고를 수 있게 하는 Codex Skill도 제공합니다.
|
|
372
230
|
|
|
373
|
-
|
|
231
|
+
- ClawHub: `clawhub install daiso-cli`
|
|
232
|
+
- 공개 페이지: `https://clawhub.ai/hmmhmmhm/daiso-cli`
|
|
233
|
+
- 스킬 파일: `skills/daiso-cli/SKILL.md`
|
|
234
|
+
- 명령 맵: `skills/daiso-cli/references/cli-command-map.md`
|
|
235
|
+
- 기본 원칙: 쉘 실행이 가능한 환경에서는 CLI를 우선 사용하고, AI 앱 연결이 필요할 때는 MCP 서버 URL `https://mcp.aka.page`를 사용합니다.
|
|
236
|
+
- 구조화 결과가 필요하면 스킬은 `npx daiso ... --json` 형태를 선택합니다.
|
|
374
237
|
|
|
375
|
-
|
|
238
|
+
### OpenAPI 스펙
|
|
376
239
|
|
|
377
|
-
|
|
240
|
+
- OpenAI 챗봇 등록용 축약 스펙: `https://mcp.aka.page/openapi.json`
|
|
241
|
+
- OpenAI 챗봇 등록용 YAML: `https://mcp.aka.page/openapi.yaml`
|
|
242
|
+
- 전체 개별 엔드포인트 스펙(JSON): `https://mcp.aka.page/openapi-full.json`
|
|
243
|
+
- 전체 개별 엔드포인트 스펙(YAML): `https://mcp.aka.page/openapi-full.yaml`
|
|
378
244
|
|
|
379
|
-
###
|
|
245
|
+
### MCP 표준 응답 모델
|
|
380
246
|
|
|
381
|
-
|
|
382
|
-
| :------------------------------ | :---------------------------------- |
|
|
383
|
-
| `GET /prompt` | API 사용법 설명 페이지 (에이전트용) |
|
|
384
|
-
| `GET /api/daiso/products` | 제품 검색 |
|
|
385
|
-
| `GET /api/daiso/products/:id` | 제품 상세 정보 |
|
|
386
|
-
| `GET /api/daiso/stores` | 매장 검색 |
|
|
387
|
-
| `GET /api/daiso/inventory` | 재고 확인 |
|
|
388
|
-
| `GET /api/oliveyoung/stores` | 올리브영 매장 검색 |
|
|
389
|
-
| `GET /api/oliveyoung/inventory` | 올리브영 재고 확인 |
|
|
390
|
-
| `GET /api/megabox/theaters` | 메가박스 주변 지점 조회 |
|
|
391
|
-
| `GET /api/megabox/movies` | 메가박스 영화/회차 목록 조회 |
|
|
392
|
-
| `GET /api/megabox/seats` | 메가박스 잔여 좌석 조회 |
|
|
393
|
-
| `GET /api/cgv/theaters` | CGV 극장 목록 조회 |
|
|
394
|
-
| `GET /api/cgv/movies` | CGV 영화 목록 조회 |
|
|
395
|
-
| `GET /api/cgv/timetable` | CGV 상영 시간표 조회 |
|
|
247
|
+
MCP 도구 응답은 각 서비스의 원본 필드를 유지하면서, 클라이언트가 공통 UI를 만들 수 있도록 `standard` 필드를 함께 제공합니다.
|
|
396
248
|
|
|
397
|
-
|
|
249
|
+
- `standard.products`: 상품/영화 목록을 `code`, `name`, `price`, `imageUrl`, `raw` 형태로 정규화합니다.
|
|
250
|
+
- `standard.stores`: 매장 목록을 `code`, `name`, `address`, `distanceMeters`, `raw` 형태로 정규화합니다.
|
|
251
|
+
- `standard.theaters`: 영화관 목록을 `code`, `name`, `address`, `distanceMeters`, `raw` 형태로 정규화합니다.
|
|
398
252
|
|
|
399
|
-
|
|
400
|
-
GET /api/daiso/products?q={검색어}&page={페이지}&pageSize={개수}
|
|
401
|
-
```
|
|
253
|
+
### 운영 헬스 체크
|
|
402
254
|
|
|
403
|
-
|
|
404
|
-
| :--------- | :--: | :---------------------------- |
|
|
405
|
-
| `q` | O | 검색 키워드 |
|
|
406
|
-
| `page` | | 페이지 번호 (기본값: 1) |
|
|
407
|
-
| `pageSize` | | 페이지당 결과 수 (기본값: 30) |
|
|
255
|
+
공개 상태 페이지: **[Daiso MCP Status](https://aka-page.betteruptime.com/)**
|
|
408
256
|
|
|
409
|
-
|
|
257
|
+
서비스별 API 상태를 즉시 확인할 때는 `GET /api/health/checks`를 사용합니다. 이 엔드포인트는 `HEALTH_CHECK_SECRET` 환경 변수가 설정되어 있어야 하며, 요청에는 `Authorization: Bearer <secret>` 또는 `x-health-check-key: <secret>` 헤더가 필요합니다. 내부 체크 요청의 기준 URL은 `HEALTH_CHECK_BASE_URL`로 지정할 수 있습니다.
|
|
410
258
|
|
|
259
|
+
```bash
|
|
260
|
+
curl -H "Authorization: Bearer $HEALTH_CHECK_SECRET" \
|
|
261
|
+
"https://mcp.aka.page/api/health/checks?mode=full&fresh=true&includeSamples=true&timeoutMs=20000&slowThresholdMs=9000"
|
|
411
262
|
```
|
|
412
|
-
GET /api/daiso/stores?keyword={키워드}&sido={시도}&limit={개수}
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
| 파라미터 | 필수 | 설명 |
|
|
416
|
-
| :-------- | :--: | :-------------------------------------------------- |
|
|
417
|
-
| `keyword` | △ | 매장명/주소 키워드 (keyword 또는 sido 중 하나 필수) |
|
|
418
|
-
| `sido` | △ | 시/도 |
|
|
419
|
-
| `gugun` | | 구/군 |
|
|
420
|
-
| `dong` | | 동 |
|
|
421
|
-
| `limit` | | 최대 결과 수 (기본값: 50) |
|
|
422
263
|
|
|
423
|
-
|
|
264
|
+
주요 쿼리:
|
|
424
265
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
266
|
+
- `service=gs25`: 특정 서비스만 확인
|
|
267
|
+
- `check=lottemart.products`: 특정 체크만 확인
|
|
268
|
+
- `mode=quick|deep|full`: 체크 모드 선택
|
|
269
|
+
- `fresh=true`: 60초 캐시 우회
|
|
270
|
+
- `includeSamples=true`: 첫 결과 이름 샘플 포함
|
|
271
|
+
- `timeoutMs=20000`: 체크별 요청 제한 시간
|
|
272
|
+
- `slowThresholdMs=9000`: 지정 시간보다 느린 성공 응답을 degraded로 표시
|
|
428
273
|
|
|
429
|
-
|
|
430
|
-
| :---------- | :--: | :---------------------------- |
|
|
431
|
-
| `productId` | O | 제품 ID |
|
|
432
|
-
| `lat` | | 위도 (기본값: 37.5665) |
|
|
433
|
-
| `lng` | | 경도 (기본값: 126.978) |
|
|
434
|
-
| `keyword` | | 매장 검색어 |
|
|
435
|
-
| `page` | | 페이지 번호 (기본값: 1) |
|
|
436
|
-
| `pageSize` | | 페이지당 결과 수 (기본값: 30) |
|
|
274
|
+
상태 기준:
|
|
437
275
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
GET /api/oliveyoung/stores?keyword={키워드}&lat={위도}&lng={경도}
|
|
442
|
-
```
|
|
276
|
+
- `ok`: 필수 응답 구조와 최소 결과가 정상입니다.
|
|
277
|
+
- `degraded`: 기능은 살아 있지만 빈 결과, 느린 응답, 응답 구조 변화 등 확인이 필요합니다.
|
|
278
|
+
- `fail`: 외부 API 오류, 타임아웃, 인증 문제처럼 실제 장애로 봐야 합니다.
|
|
443
279
|
|
|
444
|
-
|
|
445
|
-
| :-------- | :--: | :---------------------------------- |
|
|
446
|
-
| `keyword` | | 매장명/지역 키워드 (예: 명동, 강남) |
|
|
447
|
-
| `lat` | | 위도 (기본값: 37.5665) |
|
|
448
|
-
| `lng` | | 경도 (기본값: 126.978) |
|
|
449
|
-
| `pageIdx` | | 페이지 번호 (기본값: 1) |
|
|
450
|
-
| `limit` | | 최대 결과 수 (기본값: 20) |
|
|
280
|
+
Better Stack 같은 외부 모니터링에서는 `fail`을 장애 알림 기준으로 보고, `degraded`는 느린 외부 API나 응답 품질 저하를 추적하는 경고 신호로 봅니다.
|
|
451
281
|
|
|
452
|
-
|
|
282
|
+
배포 전 로컬에서 CLI 모드까지 확인할 때는 아래 명령을 사용합니다.
|
|
453
283
|
|
|
454
|
-
```
|
|
455
|
-
|
|
284
|
+
```bash
|
|
285
|
+
npm run cli:smoke
|
|
456
286
|
```
|
|
457
287
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
| `keyword` | O | 검색 키워드 (예: 선크림, 립밤) |
|
|
461
|
-
| `lat` | | 위도 (기본값: 37.5665) |
|
|
462
|
-
| `lng` | | 경도 (기본값: 126.978) |
|
|
463
|
-
| `storeKeyword` | | 주변 매장 필터 키워드 |
|
|
464
|
-
| `page` | | 페이지 번호 (기본값: 1) |
|
|
465
|
-
| `size` | | 페이지당 결과 수 (기본값: 20) |
|
|
466
|
-
| `sort` | | 정렬 코드 (기본값: 01) |
|
|
467
|
-
| `includeSoldOut` | | 품절 포함 여부 (기본값: false) |
|
|
288
|
+
기본 `openapi.json`은 OpenAI Actions import 제한에 맞추기 위해 `GET /api/actions/query` 단일 facade만 노출합니다.
|
|
289
|
+
기존 서비스별 GET API는 유지되며, 자세한 배경은 [OpenAPI Actions Facade 문서](./docs/openapi-actions-facade.md)에 정리했습니다.
|
|
468
290
|
|
|
469
|
-
|
|
291
|
+
인터랙티브 예시:
|
|
470
292
|
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
|
|
293
|
+
```text
|
|
294
|
+
$ npx daiso
|
|
295
|
+
daiso 인터랙티브 모드
|
|
474
296
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
| `areaCode` | | 지역 코드 (기본값: 11, 서울) |
|
|
481
|
-
| `limit` | | 최대 결과 수 (기본값: 10) |
|
|
297
|
+
[서비스 선택]
|
|
298
|
+
1. 다이소
|
|
299
|
+
2. 올리브영
|
|
300
|
+
3. CU
|
|
301
|
+
서비스 번호를 선택하세요 (0: 종료): 1
|
|
482
302
|
|
|
483
|
-
|
|
303
|
+
매장 검색 키워드를 입력하세요: 강남
|
|
484
304
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
305
|
+
[매장 선택]
|
|
306
|
+
1. 다이소 강남점 | 서울 강남구 ...
|
|
307
|
+
2. 다이소 강남역점 | 서울 강남구 ...
|
|
308
|
+
입력: 번호 선택 | /키워드 필터 | all 전체보기 | 0 다시 검색
|
|
309
|
+
선택: /역점
|
|
310
|
+
선택: 1
|
|
488
311
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
| `movieId` | | 영화 ID (예: 25104500) |
|
|
494
|
-
| `areaCode` | | 지역 코드 (기본값: 11, 서울) |
|
|
312
|
+
[선택한 매장 정보]
|
|
313
|
+
- 매장명: 다이소 강남역점
|
|
314
|
+
- 주소: 서울 강남구 ...
|
|
315
|
+
- 전화: 02-...
|
|
495
316
|
|
|
496
|
-
|
|
317
|
+
찾을 상품 키워드를 입력하세요: 수납박스
|
|
497
318
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
| :---------- | :--: | :--------------------------------- |
|
|
504
|
-
| `playDate` | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) |
|
|
505
|
-
| `theaterId` | | 지점 ID |
|
|
506
|
-
| `movieId` | | 영화 ID |
|
|
507
|
-
| `areaCode` | | 지역 코드 (기본값: 11, 서울) |
|
|
508
|
-
| `limit` | | 최대 결과 수 (기본값: 50) |
|
|
319
|
+
[상품 선택]
|
|
320
|
+
1. 손잡이 수납박스 (2000원, ID: 1034604)
|
|
321
|
+
2. 접이식 수납박스 (3000원, ID: 1034605)
|
|
322
|
+
입력: 번호 선택 | /키워드 필터 | all 전체보기 | 0 취소
|
|
323
|
+
선택: 1
|
|
509
324
|
|
|
510
|
-
|
|
325
|
+
[재고 결과]
|
|
326
|
+
- 상품: 손잡이 수납박스
|
|
327
|
+
- 매장: 다이소 강남역점
|
|
328
|
+
- 재고 수량: 7
|
|
511
329
|
|
|
512
|
-
|
|
513
|
-
|
|
330
|
+
[다음 동작]
|
|
331
|
+
1. 같은 매장에서 다른 상품 찾기
|
|
332
|
+
2. 다른 매장/서비스 다시 선택하기
|
|
333
|
+
3. 종료하기
|
|
334
|
+
번호를 선택하세요: 3
|
|
335
|
+
인터랙티브 모드를 종료합니다.
|
|
514
336
|
```
|
|
515
337
|
|
|
516
|
-
|
|
517
|
-
| :----------- | :--: | :--------------------------------- |
|
|
518
|
-
| `playDate` | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) |
|
|
519
|
-
| `regionCode` | | 지역 코드 (예: 01 서울) |
|
|
520
|
-
| `limit` | | 최대 결과 수 (기본값: 30) |
|
|
521
|
-
| `timeoutMs` | | 요청 제한 시간(ms, 기본값: 15000) |
|
|
338
|
+
<br>
|
|
522
339
|
|
|
523
|
-
###
|
|
340
|
+
### 미지원 서비스
|
|
524
341
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
342
|
+
| 서비스 | 상태 |
|
|
343
|
+
| :---------------------------------------------------------------------------------------------------- | :-------- |
|
|
344
|
+
|  Google Gemini | ❌ 미지원 |
|
|
345
|
+
|  GitHub Copilot | ❌ 미지원 |
|
|
528
346
|
|
|
529
|
-
|
|
530
|
-
| :------------ | :--: | :--------------------------------- |
|
|
531
|
-
| `playDate` | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) |
|
|
532
|
-
| `theaterCode` | | CGV 극장 코드 (예: 0056) |
|
|
533
|
-
| `timeoutMs` | | 요청 제한 시간(ms, 기본값: 15000) |
|
|
347
|
+
<br>
|
|
534
348
|
|
|
535
|
-
|
|
349
|
+
## Special Thanks
|
|
536
350
|
|
|
537
|
-
|
|
538
|
-
GET /api/cgv/timetable?playDate={YYYYMMDD}&theaterCode={극장코드}&movieCode={영화코드}
|
|
539
|
-
```
|
|
351
|
+
이 프로젝트에 도움 주신 분들께 감사드립니다.
|
|
540
352
|
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
| `movieCode` | | CGV 영화 코드 |
|
|
546
|
-
| `limit` | | 최대 결과 수 (기본값: 50) |
|
|
547
|
-
| `timeoutMs` | | 요청 제한 시간(ms, 기본값: 15000) |
|
|
548
|
-
|
|
549
|
-
### 응답 형식
|
|
550
|
-
|
|
551
|
-
```json
|
|
552
|
-
{
|
|
553
|
-
"success": true,
|
|
554
|
-
"data": { ... },
|
|
555
|
-
"meta": { "total": 100, "page": 1, "pageSize": 30 }
|
|
556
|
-
}
|
|
557
|
-
```
|
|
353
|
+
- [@thecats1105](https://github.com/thecats1105): 다이소 진열 위치 조회 도구(`daiso_get_display_location`) 구현 및 API/테스트 연동
|
|
354
|
+
- [@betterthanhajin](https://github.com/betterthanhajin): CGV 서비스 프로바이더 구현(극장/영화/시간표 도구, 라우트·스펙·테스트 추가)
|
|
355
|
+
- [@LLagoon3](https://github.com/LLagoon3): 다이소 매장 재고 조회 신규 인증 흐름 전환 및 관련 테스트 보강
|
|
356
|
+
- [제로초님](https://youtube.com/shorts/ZgIqA1NCEp0?si=UW0pKsSpqmEi7lXG): 프로젝트 홍보 도움
|
|
558
357
|
|
|
559
358
|
<br>
|
|
560
359
|
|
|
@@ -562,36 +361,12 @@ GET /api/cgv/timetable?playDate={YYYYMMDD}&theaterCode={극장코드}&movieCode=
|
|
|
562
361
|
|
|
563
362
|
<br>
|
|
564
363
|
|
|
565
|
-
##
|
|
566
|
-
|
|
567
|
-
```
|
|
568
|
-
사용자: 수납박스 검색해줘
|
|
569
|
-
AI: daiso_search_products 도구로 제품 목록 조회
|
|
570
|
-
|
|
571
|
-
사용자: 이 제품 안산 중앙역 근처 매장에 재고 있어?
|
|
572
|
-
AI: daiso_check_inventory 도구로 특정 매장 재고 확인
|
|
573
|
-
|
|
574
|
-
사용자: 강남역 근처 다이소 매장 찾아줘
|
|
575
|
-
AI: daiso_find_stores 도구로 매장 검색
|
|
364
|
+
## 상세 문서
|
|
576
365
|
|
|
577
|
-
|
|
578
|
-
AI: oliveyoung_find_nearby_stores 도구로 주변 매장 검색
|
|
366
|
+
`Special Thanks` 이후에 있던 상세 설명은 별도 문서로 분리했습니다.
|
|
579
367
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
사용자: 강남역 근처 메가박스 지점 찾아줘
|
|
584
|
-
AI: megabox_find_nearby_theaters 도구로 주변 지점 조회
|
|
585
|
-
|
|
586
|
-
사용자: 메가박스 강남점 영화 목록과 잔여 좌석 알려줘
|
|
587
|
-
AI: megabox_list_now_showing / megabox_get_remaining_seats 도구로 회차/좌석 조회
|
|
588
|
-
|
|
589
|
-
사용자: 서울 지역 CGV 극장 목록 알려줘
|
|
590
|
-
AI: cgv_find_theaters 도구로 CGV 극장 목록 조회
|
|
591
|
-
|
|
592
|
-
사용자: CGV 강남 상영 영화랑 시간표 알려줘
|
|
593
|
-
AI: cgv_search_movies / cgv_get_timetable 도구로 영화/시간표 조회
|
|
594
|
-
```
|
|
368
|
+
- [서비스 레퍼런스](./docs/service-reference.md)
|
|
369
|
+
- [CONTRIBUTING 가이드](./CONTRIBUTING.md)
|
|
595
370
|
|
|
596
371
|
<br>
|
|
597
372
|
|
|
@@ -599,154 +374,95 @@ AI: cgv_search_movies / cgv_get_timetable 도구로 영화/시간표 조회
|
|
|
599
374
|
|
|
600
375
|
<br>
|
|
601
376
|
|
|
602
|
-
##
|
|
377
|
+
## docs 문서
|
|
603
378
|
|
|
604
|
-
|
|
605
|
-
# Node 버전 맞추기
|
|
606
|
-
nvm use
|
|
379
|
+
### 공통 가이드
|
|
607
380
|
|
|
608
|
-
|
|
609
|
-
|
|
381
|
+
- [서비스 레퍼런스](./docs/service-reference.md)
|
|
382
|
+
- [스크래핑 플레이북](./docs/scraping-playbook.md)
|
|
383
|
+
- [mitmproxy 가이드](./docs/mitmproxy-guide.md)
|
|
384
|
+
- [AI 지시문](./docs/ai-instruction.md)
|
|
610
385
|
|
|
611
|
-
|
|
612
|
-
cp .env.example .env
|
|
613
|
-
# .env 파일에 ZYTE_API_KEY 값 입력
|
|
386
|
+
### 다이소
|
|
614
387
|
|
|
615
|
-
|
|
616
|
-
|
|
388
|
+
- [다이소 네트워크 분석 결과](./docs/daiso-network-analysis-result.md)
|
|
389
|
+
- [다이소 Playwright 네트워크 분석](./docs/daiso-playwright-network-analysis.md)
|
|
390
|
+
- [다이소 리플레이 세션 테스트 HTML](./docs/daiso-replay-session-test.html)
|
|
391
|
+
- [다이소 테스트 리플레이 스크립트](./docs/daiso-test-replay.ts)
|
|
617
392
|
|
|
618
|
-
|
|
619
|
-
npm run dev
|
|
393
|
+
### CU
|
|
620
394
|
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
395
|
+
- [CU 네트워크 분석 결과](./docs/cu-network-analysis-result.md)
|
|
396
|
+
- [CU 앱 요청 캡처 가이드](./docs/cu-app-request-capture-guide.md)
|
|
397
|
+
- [CU 앱 스크래핑 리플레이 가이드](./docs/cu-app-scraping-replay-guide.md)
|
|
624
398
|
|
|
625
|
-
|
|
399
|
+
### 이마트24
|
|
626
400
|
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
401
|
+
- [이마트24 네트워크 분석 결과](./docs/emart24-network-analysis-result.md)
|
|
402
|
+
- [이마트24 앱 스크래핑 준비 가이드](./docs/emart24-app-scraping-preparation-guide.md)
|
|
403
|
+
- [이마트24 앱 스크래핑 리플레이 가이드](./docs/emart24-app-scraping-replay-guide.md)
|
|
630
404
|
|
|
631
|
-
|
|
632
|
-
npm run release:dry-run
|
|
405
|
+
### 롯데마트
|
|
633
406
|
|
|
634
|
-
|
|
635
|
-
npm run publish:public
|
|
636
|
-
```
|
|
407
|
+
- [롯데마트 모바일 도와센터 스크래핑 리플레이 계획](./docs/lottemart-mobile-scraping-replay-plan.md)
|
|
637
408
|
|
|
638
|
-
|
|
409
|
+
### 공통
|
|
639
410
|
|
|
640
|
-
|
|
411
|
+
- [OpenAPI Actions facade 리팩토링 배경](./docs/openapi-actions-facade.md)
|
|
641
412
|
|
|
642
|
-
|
|
413
|
+
### 올리브영
|
|
643
414
|
|
|
644
|
-
|
|
415
|
+
- [올리브영 네트워크 분석 결과](./docs/oliveyoung-network-analysis-result.md)
|
|
416
|
+
- [올리브영 Playwright MCP 온보딩](./docs/oliveyoung-playwright-mcp-onboarding.md)
|
|
417
|
+
- [올리브영 Playwright 네트워크 분석](./docs/oliveyoung-playwright-network-analysis.md)
|
|
418
|
+
- [올리브영 Lightpanda 검증](./docs/oliveyoung-lightpanda-validation.md)
|
|
419
|
+
- [올리브영 리플레이 세션 테스트 스크립트](./docs/oliveyoung-replay-session-test.ts)
|
|
420
|
+
- [올리브영 Zyte 대역폭 테스트](./docs/oliveyoung-zyte-bandwidth-test.ts)
|
|
421
|
+
- [올리브영 Zyte 리플레이 테스트](./docs/oliveyoung-zyte-replay-test.ts)
|
|
645
422
|
|
|
646
|
-
|
|
423
|
+
### 영화관
|
|
647
424
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
| 프레임워크 | Hono + TypeScript |
|
|
652
|
-
| 프로토콜 | MCP (Model Context Protocol) |
|
|
653
|
-
| 전송 | SSE (Server-Sent Events) |
|
|
425
|
+
- [CGV 네트워크 분석 결과](./docs/cgv-network-analysis-result.md)
|
|
426
|
+
- [메가박스 네트워크 분석 결과](./docs/megabox-network-analysis-result.md)
|
|
427
|
+
- [롯데시네마 네트워크 분석 결과](./docs/lottecinema-network-analysis-result.md)
|
|
654
428
|
|
|
655
|
-
|
|
429
|
+
### GS25
|
|
656
430
|
|
|
657
|
-
|
|
431
|
+
- [GS25 API 리플레이 방법론 (최종)](./docs/gs25-final-replay-methodology.md)
|
|
432
|
+
- [GS25 네트워크 분석 결과 (아카이브)](./docs/archive/gs25-network-analysis-result.md)
|
|
433
|
+
- [GS25 안드로이드 우회 캡처 가이드 (아카이브)](./docs/archive/gs25-android-bypass-capture-guide.md)
|
|
434
|
+
- [GS25 앱 캡처 시도 로그 (2026-03-08, 아카이브)](./docs/archive/gs25-app-capture-attempt-log-20260308.md)
|
|
435
|
+
- [GS25 앱 스크래핑 준비 가이드 (아카이브)](./docs/archive/gs25-app-scraping-preparation-guide.md)
|
|
436
|
+
- [GS25 세션 인계 문서 (2026-03-09, 아카이브)](./docs/archive/gs25-session-handoff-20260309.md)
|
|
658
437
|
|
|
659
438
|
<br>
|
|
660
439
|
|
|
661
|
-
|
|
440
|
+
---
|
|
662
441
|
|
|
663
|
-
|
|
664
|
-
daiso-mcp/
|
|
665
|
-
├── src/
|
|
666
|
-
│ ├── index.ts # MCP 서버 진입점
|
|
667
|
-
│ ├── core/ # 핵심 모듈
|
|
668
|
-
│ │ ├── types.ts # 공통 타입
|
|
669
|
-
│ │ ├── interfaces.ts # ServiceProvider 인터페이스
|
|
670
|
-
│ │ └── registry.ts # ServiceRegistry
|
|
671
|
-
│ ├── services/ # 서비스 프로바이더
|
|
672
|
-
│ │ ├── daiso/ # 다이소 서비스
|
|
673
|
-
│ │ ├── oliveyoung/ # 올리브영 서비스 (Zyte API)
|
|
674
|
-
│ │ ├── megabox/ # 메가박스 서비스
|
|
675
|
-
│ │ └── cgv/ # CGV 서비스
|
|
676
|
-
│ ├── api/ # REST API (MCP 미지원 서비스용)
|
|
677
|
-
│ │ ├── handlers.ts # 다이소/올리브영 API 핸들러
|
|
678
|
-
│ │ ├── megaboxHandlers.ts # 메가박스 API 핸들러
|
|
679
|
-
│ │ ├── cgvHandlers.ts # CGV API 핸들러
|
|
680
|
-
│ │ └── routes/ # 서비스별 API 라우트
|
|
681
|
-
│ ├── pages/ # 정적 페이지
|
|
682
|
-
│ │ └── prompt.ts # 에이전트용 프롬프트 페이지
|
|
683
|
-
│ └── utils/ # 유틸리티
|
|
684
|
-
├── wrangler.toml # Cloudflare Workers 설정
|
|
685
|
-
└── package.json
|
|
686
|
-
```
|
|
442
|
+
<div align="center">
|
|
687
443
|
|
|
688
444
|
<br>
|
|
689
445
|
|
|
690
|
-
|
|
446
|
+
MIT License
|
|
691
447
|
|
|
692
448
|
<br>
|
|
693
449
|
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
이 프로젝트는 **플러그인 기반 아키텍처**로 설계되어 새로운 서비스를 쉽게 추가할 수 있습니다.
|
|
697
|
-
|
|
698
|
-
### 핵심 컴포넌트
|
|
699
|
-
|
|
700
|
-
| 컴포넌트 | 역할 |
|
|
701
|
-
| :----------------- | :------------------------------------- |
|
|
702
|
-
| `ServiceProvider` | 모든 서비스가 구현해야 하는 인터페이스 |
|
|
703
|
-
| `ServiceRegistry` | 서비스 등록 및 MCP 서버 연결 관리 |
|
|
704
|
-
| `ToolRegistration` | 도구 메타데이터와 핸들러 정의 |
|
|
705
|
-
|
|
706
|
-
### 새 서비스 추가 방법
|
|
707
|
-
|
|
708
|
-
예: CU 편의점 서비스 추가
|
|
709
|
-
|
|
710
|
-
```typescript
|
|
711
|
-
// 1. src/services/cu/index.ts 생성
|
|
712
|
-
import type { ServiceProvider } from '../../core/interfaces.js';
|
|
713
|
-
|
|
714
|
-
class CuService implements ServiceProvider {
|
|
715
|
-
readonly metadata = {
|
|
716
|
-
id: 'cu',
|
|
717
|
-
name: 'CU 편의점',
|
|
718
|
-
version: '1.0.0',
|
|
719
|
-
};
|
|
720
|
-
|
|
721
|
-
getTools() {
|
|
722
|
-
return [
|
|
723
|
-
/* cu_search_products, cu_find_stores 등 */
|
|
724
|
-
];
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
export function createCuService(): ServiceProvider {
|
|
729
|
-
return new CuService();
|
|
730
|
-
}
|
|
731
|
-
```
|
|
732
|
-
|
|
733
|
-
```typescript
|
|
734
|
-
// 2. src/index.ts에 한 줄 추가
|
|
735
|
-
import { createCuService } from './services/cu/index.js';
|
|
736
|
-
|
|
737
|
-
registry.registerAll([createDaisoService, createCuService]);
|
|
738
|
-
```
|
|
739
|
-
|
|
740
|
-
<br>
|
|
450
|
+
</div>
|
|
741
451
|
|
|
742
452
|
---
|
|
743
453
|
|
|
744
|
-
|
|
454
|
+
## 신규 MCP 기능 추가 시 유의사항
|
|
745
455
|
|
|
746
|
-
|
|
456
|
+
새로운 서비스나 도구를 추가할 때는 구현만 끝내지 말고 아래 반영 범위를 함께 확인해야 합니다.
|
|
747
457
|
|
|
748
|
-
|
|
458
|
+
- `MCP`: `src/index.ts` 서비스 등록, 루트 서비스/도구 목록, 관련 테스트 반영
|
|
459
|
+
- `HTTPS`: GET API 핸들러/라우트, 프롬프트 페이지(`src/pages/prompt.ts`), 앱 통합 테스트 반영
|
|
460
|
+
- `CLI`: `src/cli.ts`, `src/cliHelp.ts`, CLI 테스트 반영
|
|
461
|
+
- `AI instruction`: [ai-instruction.md](./docs/ai-instruction.md) 사용 규칙/워크플로우 반영
|
|
462
|
+
- `README`: 지원 서비스 설명, 예시, 문서 링크 반영
|
|
463
|
+
- `OpenAPI`: 기본 `/openapi.json` facade 스펙, `/openapi-full.json` 전체 스펙, 관련 테스트 반영
|
|
749
464
|
|
|
750
|
-
|
|
465
|
+
기능 추가 후 최소 검증 기준:
|
|
751
466
|
|
|
752
|
-
|
|
467
|
+
- `npm run typecheck`
|
|
468
|
+
- `npm test`
|