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.
Files changed (166) hide show
  1. package/README.md +249 -533
  2. package/dist/api/actionsProxy.js +82 -0
  3. package/dist/api/cgvHandlers.js +103 -16
  4. package/dist/api/configStatus.js +19 -0
  5. package/dist/api/daisoHandlers.js +127 -0
  6. package/dist/api/emart24Handlers.js +176 -0
  7. package/dist/api/gs25Handlers.js +267 -0
  8. package/dist/api/handlers.js +209 -104
  9. package/dist/api/healthChecks.js +504 -0
  10. package/dist/api/lottecinemaHandlers.js +155 -0
  11. package/dist/api/lottemartHandlers.js +144 -0
  12. package/dist/api/megaboxHandlers.js +81 -50
  13. package/dist/api/response.js +2 -0
  14. package/dist/api/routes/cuRoutes.js +17 -0
  15. package/dist/api/routes/daisoRoutes.js +6 -1
  16. package/dist/api/routes/emart24Routes.js +22 -0
  17. package/dist/api/routes/gs25Routes.js +22 -0
  18. package/dist/api/routes/healthRoutes.js +61 -0
  19. package/dist/api/routes/lottecinemaRoutes.js +22 -0
  20. package/dist/api/routes/lottemartRoutes.js +18 -0
  21. package/dist/api/routes/oliveyoungRoutes.js +6 -1
  22. package/dist/api/routes/sevenelevenRoutes.js +32 -0
  23. package/dist/api/sevenelevenHandlers.js +200 -0
  24. package/dist/bin.js +0 -0
  25. package/dist/cli/args.js +75 -0
  26. package/dist/cli/commandOptions.js +38 -0
  27. package/dist/cli/commands/convenience.js +293 -0
  28. package/dist/cli/commands/daiso.js +112 -0
  29. package/dist/cli/constants.js +5 -0
  30. package/dist/cli/deps.js +48 -0
  31. package/dist/cli/http.js +156 -0
  32. package/dist/cli/interactiveFetch.js +31 -0
  33. package/dist/cli/interactiveItemSearch.js +261 -0
  34. package/dist/cli/interactivePrompt.js +50 -0
  35. package/dist/cli/interactiveTypes.js +4 -0
  36. package/dist/cli/types.js +4 -0
  37. package/dist/cli.js +87 -196
  38. package/dist/cliHelp.js +212 -1
  39. package/dist/cliInteractive.js +243 -0
  40. package/dist/cliPicker.js +57 -0
  41. package/dist/cliRenderer.js +90 -3
  42. package/dist/core/errors.js +66 -0
  43. package/dist/core/registry.js +227 -3
  44. package/dist/index.js +149 -9
  45. package/dist/pages/openapi.js +2 -1
  46. package/dist/pages/openapiFullSpec.js +58 -0
  47. package/dist/pages/openapiResponse.js +28 -0
  48. package/dist/pages/openapiSpec.js +2 -41
  49. package/dist/pages/openapiSpecActions.js +109 -0
  50. package/dist/pages/openapiSpecComponents.js +30 -391
  51. package/dist/pages/openapiSpecComponentsCgv.js +24 -0
  52. package/dist/pages/openapiSpecComponentsCu.js +112 -0
  53. package/dist/pages/openapiSpecComponentsDaisoOliveyoung.js +342 -0
  54. package/dist/pages/openapiSpecComponentsEmart24.js +141 -0
  55. package/dist/pages/openapiSpecComponentsGs25.js +109 -0
  56. package/dist/pages/openapiSpecComponentsLotteMart.js +85 -0
  57. package/dist/pages/openapiSpecComponentsLottecinema.js +163 -0
  58. package/dist/pages/openapiSpecComponentsMegabox.js +144 -0
  59. package/dist/pages/openapiSpecComponentsSeveneleven.js +82 -0
  60. package/dist/pages/openapiSpecPathsCgv.js +66 -3
  61. package/dist/pages/openapiSpecPathsCu.js +145 -0
  62. package/dist/pages/openapiSpecPathsDaiso.js +302 -0
  63. package/dist/pages/openapiSpecPathsDaisoOliveyoung.js +4 -376
  64. package/dist/pages/openapiSpecPathsEmart24.js +223 -0
  65. package/dist/pages/openapiSpecPathsGs25.js +166 -0
  66. package/dist/pages/openapiSpecPathsLotteMart.js +149 -0
  67. package/dist/pages/openapiSpecPathsLottecinema.js +212 -0
  68. package/dist/pages/openapiSpecPathsMegabox.js +52 -3
  69. package/dist/pages/openapiSpecPathsOliveyoung.js +266 -0
  70. package/dist/pages/openapiSpecPathsSeveneleven.js +234 -0
  71. package/dist/pages/prompt.js +8 -402
  72. package/dist/pages/promptCoreText.js +278 -0
  73. package/dist/pages/promptReferenceText.js +137 -0
  74. package/dist/pages/promptRetailCinemaText.js +274 -0
  75. package/dist/services/cgv/client.js +6 -1
  76. package/dist/services/cgv/index.js +3 -3
  77. package/dist/services/cgv/location.js +235 -0
  78. package/dist/services/cgv/tools/findTheaters.js +30 -5
  79. package/dist/services/cgv/tools/getTimetable.js +42 -14
  80. package/dist/services/cgv/tools/searchMovies.js +40 -12
  81. package/dist/services/cgv/transport.js +0 -3
  82. package/dist/services/cu/api.js +11 -0
  83. package/dist/services/cu/client.js +297 -0
  84. package/dist/services/cu/index.js +21 -0
  85. package/dist/services/cu/tools/checkInventory.js +123 -0
  86. package/dist/services/cu/tools/findNearbyStores.js +49 -0
  87. package/dist/services/cu/types.js +4 -0
  88. package/dist/services/daiso/api.js +22 -2
  89. package/dist/services/daiso/client.js +67 -0
  90. package/dist/services/daiso/index.js +4 -0
  91. package/dist/services/daiso/product.js +17 -0
  92. package/dist/services/daiso/tools/checkInventory.js +80 -43
  93. package/dist/services/daiso/tools/findInventoryByName.js +222 -0
  94. package/dist/services/daiso/tools/findStores.js +17 -7
  95. package/dist/services/daiso/tools/getDisplayLocation.js +75 -0
  96. package/dist/services/emart24/api.js +11 -0
  97. package/dist/services/emart24/client.js +182 -0
  98. package/dist/services/emart24/index.js +22 -0
  99. package/dist/services/emart24/inventoryLookup.js +134 -0
  100. package/dist/services/emart24/tools/checkInventory.js +54 -0
  101. package/dist/services/emart24/tools/findNearbyStores.js +72 -0
  102. package/dist/services/emart24/tools/searchProducts.js +73 -0
  103. package/dist/services/emart24/types.js +4 -0
  104. package/dist/services/gs25/api.js +9 -0
  105. package/dist/services/gs25/client.js +208 -0
  106. package/dist/services/gs25/index.js +22 -0
  107. package/dist/services/gs25/storeUtils.js +168 -0
  108. package/dist/services/gs25/tools/checkInventory.js +163 -0
  109. package/dist/services/gs25/tools/findNearbyStores.js +103 -0
  110. package/dist/services/gs25/tools/searchProducts.js +57 -0
  111. package/dist/services/gs25/types.js +4 -0
  112. package/dist/services/lottecinema/api.js +12 -0
  113. package/dist/services/lottecinema/client.js +161 -0
  114. package/dist/services/lottecinema/index.js +30 -0
  115. package/dist/services/lottecinema/location.js +191 -0
  116. package/dist/services/lottecinema/tools/findNearbyTheaters.js +47 -0
  117. package/dist/services/lottecinema/tools/getRemainingSeats.js +85 -0
  118. package/dist/services/lottecinema/tools/listNowShowing.js +79 -0
  119. package/dist/services/lottecinema/types.js +4 -0
  120. package/dist/services/lottemart/api.js +31 -0
  121. package/dist/services/lottemart/client.js +254 -0
  122. package/dist/services/lottemart/clientTypes.js +4 -0
  123. package/dist/services/lottemart/config.js +4 -0
  124. package/dist/services/lottemart/debug.js +92 -0
  125. package/dist/services/lottemart/geocode.js +49 -0
  126. package/dist/services/lottemart/index.js +30 -0
  127. package/dist/services/lottemart/keyword.js +29 -0
  128. package/dist/services/lottemart/parser.js +185 -0
  129. package/dist/services/lottemart/session.js +331 -0
  130. package/dist/services/lottemart/storeSearch.js +52 -0
  131. package/dist/services/lottemart/tools/findNearbyStores.js +67 -0
  132. package/dist/services/lottemart/tools/searchProducts.js +69 -0
  133. package/dist/services/lottemart/types.js +4 -0
  134. package/dist/services/lottemart/zetta.js +105 -0
  135. package/dist/services/megabox/location.js +219 -0
  136. package/dist/services/megabox/tools/findNearbyTheaters.js +13 -44
  137. package/dist/services/megabox/tools/getRemainingSeats.js +31 -3
  138. package/dist/services/megabox/tools/listNowShowing.js +31 -3
  139. package/dist/services/oliveyoung/api.js +2 -0
  140. package/dist/services/oliveyoung/client.js +225 -13
  141. package/dist/services/oliveyoung/index.js +3 -1
  142. package/dist/services/oliveyoung/tools/checkInventory.js +21 -5
  143. package/dist/services/oliveyoung/tools/searchProducts.js +57 -0
  144. package/dist/services/seveneleven/api.js +15 -0
  145. package/dist/services/seveneleven/client.js +286 -0
  146. package/dist/services/seveneleven/index.js +30 -0
  147. package/dist/services/seveneleven/inventory.js +302 -0
  148. package/dist/services/seveneleven/productKeyword.js +141 -0
  149. package/dist/services/seveneleven/tools/checkInventory.js +82 -0
  150. package/dist/services/seveneleven/tools/getCatalogSnapshot.js +55 -0
  151. package/dist/services/seveneleven/tools/getSearchPopwords.js +41 -0
  152. package/dist/services/seveneleven/tools/searchProducts.js +67 -0
  153. package/dist/services/seveneleven/tools/searchStores.js +45 -0
  154. package/dist/services/seveneleven/types.js +4 -0
  155. package/dist/utils/cliInteractiveHelpers.js +63 -0
  156. package/dist/utils/daisoKeyword.js +30 -0
  157. package/dist/utils/http.js +98 -12
  158. package/dist/utils/zyte.js +47 -26
  159. package/openapi.json +1979 -736
  160. package/openapi.yaml +1428 -541
  161. package/package.json +49 -18
  162. package/dist/tools/checkInventory.js +0 -98
  163. package/dist/tools/findStores.js +0 -125
  164. package/dist/tools/getPriceInfo.js +0 -77
  165. package/dist/tools/searchProducts.js +0 -61
  166. package/dist/types/index.js +0 -4
@@ -4,412 +4,18 @@
4
4
  * MCP 미지원 AI 에이전트를 위한 API 설명 페이지입니다.
5
5
  * 에이전트가 이 페이지를 읽고 GET API를 사용할 수 있습니다.
6
6
  */
7
+ import { buildPromptCoreText } from './promptCoreText.js';
8
+ import { buildPromptReferenceText } from './promptReferenceText.js';
9
+ import { buildPromptRetailCinemaText } from './promptRetailCinemaText.js';
7
10
  /**
8
11
  * 프롬프트 텍스트 생성
9
12
  */
10
13
  export function generatePromptText(baseUrl) {
11
- return `# 다이소 MCP API
12
-
13
- 다이소 제품 검색, 매장 찾기, 재고 확인을 위한 API입니다.
14
- 모든 요청은 GET 방식이며, 결과는 JSON으로 반환됩니다.
15
-
16
- Base URL: ${baseUrl}
17
-
18
- ---
19
-
20
- ## 사용 가능한 기능
21
-
22
- ### 1. 제품 검색
23
-
24
- **설명**: 키워드로 다이소 제품을 검색합니다.
25
-
26
- **URL**: ${baseUrl}/api/daiso/products?q={검색어}
27
-
28
- **필수 파라미터**:
29
- - q: 검색 키워드 (예: 수납박스, 펜, 정리함)
30
-
31
- **선택 파라미터**:
32
- - page: 페이지 번호 (기본값: 1)
33
- - pageSize: 페이지당 결과 수 (기본값: 30, 최대: 100)
34
-
35
- **예시**:
36
- - ${baseUrl}/api/daiso/products?q=수납박스
37
- - ${baseUrl}/api/daiso/products?q=펜&page=2&pageSize=10
38
-
39
- **응답 예시**:
40
- \`\`\`json
41
- {
42
- "success": true,
43
- "data": {
44
- "products": [
45
- {
46
- "id": "1234567890",
47
- "name": "PP 수납박스 대형",
48
- "price": 5000,
49
- "imageUrl": "https://img.daisomall.co.kr/...",
50
- "soldOut": false,
51
- "isNew": false,
52
- "pickupAvailable": true
53
- }
54
- ]
55
- },
56
- "meta": { "total": 150, "page": 1, "pageSize": 30 }
57
- }
58
- \`\`\`
59
-
60
- ---
61
-
62
- ### 2. 제품 상세 정보
63
-
64
- **설명**: 제품 ID로 상세 정보를 조회합니다.
65
-
66
- **URL**: ${baseUrl}/api/daiso/products/{제품ID}
67
-
68
- **예시**:
69
- - ${baseUrl}/api/daiso/products/1234567890
70
-
71
- **응답 예시**:
72
- \`\`\`json
73
- {
74
- "success": true,
75
- "data": {
76
- "id": "1234567890",
77
- "name": "PP 수납박스 대형",
78
- "price": 5000,
79
- "currency": "KRW",
80
- "imageUrl": "https://img.daisomall.co.kr/...",
81
- "brand": "다이소",
82
- "soldOut": false,
83
- "isNew": false
84
- }
85
- }
86
- \`\`\`
87
-
88
- ---
89
-
90
- ### 3. 매장 찾기
91
-
92
- **설명**: 키워드 또는 지역으로 다이소 매장을 검색합니다.
93
-
94
- **URL**: ${baseUrl}/api/daiso/stores?keyword={키워드}
95
-
96
- **필수 파라미터** (둘 중 하나 필수):
97
- - keyword: 매장명 또는 주소 키워드 (예: 강남, 홍대, 안산)
98
- - sido: 시/도 (예: 서울, 경기, 부산)
99
-
100
- **선택 파라미터**:
101
- - gugun: 구/군 (예: 강남구, 마포구)
102
- - dong: 동 (예: 역삼동, 합정동)
103
- - limit: 최대 결과 수 (기본값: 50)
104
-
105
- **예시**:
106
- - ${baseUrl}/api/daiso/stores?keyword=강남
107
- - ${baseUrl}/api/daiso/stores?sido=서울&gugun=마포구
108
- - ${baseUrl}/api/daiso/stores?keyword=홍대&limit=10
109
-
110
- **응답 예시**:
111
- \`\`\`json
112
- {
113
- "success": true,
114
- "data": {
115
- "stores": [
116
- {
117
- "name": "다이소 강남역점",
118
- "phone": "02-1234-5678",
119
- "address": "서울특별시 강남구 강남대로 123",
120
- "lat": 37.4979,
121
- "lng": 127.0276,
122
- "openTime": "10:00",
123
- "closeTime": "22:00",
124
- "options": {
125
- "parking": true,
126
- "pickup": true,
127
- "taxFree": false
128
- }
129
- }
130
- ]
131
- },
132
- "meta": { "total": 5 }
133
- }
134
- \`\`\`
135
-
136
- ---
137
-
138
- ### 4. 재고 확인
139
-
140
- **설명**: 특정 제품의 매장별 재고와 온라인 재고를 확인합니다.
141
-
142
- **URL**: ${baseUrl}/api/daiso/inventory?productId={제품ID}
143
-
144
- **필수 파라미터**:
145
- - productId: 제품 ID (제품 검색 API에서 조회한 id 값)
146
-
147
- **선택 파라미터**:
148
- - lat: 위도 (기본값: 37.5665, 서울 시청)
149
- - lng: 경도 (기본값: 126.978, 서울 시청)
150
- - keyword: 매장 검색어 (예: 안산, 강남)
151
- - page: 페이지 번호 (기본값: 1)
152
- - pageSize: 페이지당 결과 수 (기본값: 30)
153
-
154
- **예시**:
155
- - ${baseUrl}/api/daiso/inventory?productId=1234567890
156
- - ${baseUrl}/api/daiso/inventory?productId=1234567890&lat=37.3219&lng=126.8309
157
- - ${baseUrl}/api/daiso/inventory?productId=1234567890&keyword=안산
158
-
159
- **응답 예시**:
160
- \`\`\`json
161
- {
162
- "success": true,
163
- "data": {
164
- "productId": "1234567890",
165
- "location": { "latitude": 37.5665, "longitude": 126.978 },
166
- "onlineStock": 150,
167
- "storeInventory": {
168
- "totalStores": 25,
169
- "inStockCount": 18,
170
- "stores": [
171
- {
172
- "storeCode": "ST001",
173
- "storeName": "다이소 강남역점",
174
- "address": "서울특별시 강남구...",
175
- "distance": "0.5km",
176
- "quantity": 12,
177
- "options": { "parking": true, "pickup": true }
178
- }
179
- ]
180
- }
181
- },
182
- "meta": { "total": 25, "page": 1, "pageSize": 30 }
183
- }
184
- \`\`\`
185
-
186
- ---
187
-
188
- ### 5. 올리브영 매장 찾기
189
-
190
- **설명**: 위치 기반으로 주변 올리브영 매장을 검색합니다.
191
-
192
- **URL**: ${baseUrl}/api/oliveyoung/stores?keyword={키워드}
193
-
194
- **선택 파라미터**:
195
- - keyword: 매장명/지역 키워드 (예: 명동, 강남)
196
- - lat: 위도 (기본값: 37.5665)
197
- - lng: 경도 (기본값: 126.978)
198
- - pageIdx: 페이지 번호 (기본값: 1)
199
- - limit: 최대 결과 수 (기본값: 20)
200
-
201
- **예시**:
202
- - ${baseUrl}/api/oliveyoung/stores?keyword=명동
203
- - ${baseUrl}/api/oliveyoung/stores?lat=37.498&lng=127.027&limit=5
204
-
205
- ---
206
-
207
- ### 6. 올리브영 재고 확인
208
-
209
- **설명**: 상품 키워드 기준 올리브영 재고를 조회하고 주변 매장 목록을 함께 반환합니다.
210
-
211
- **URL**: ${baseUrl}/api/oliveyoung/inventory?keyword={검색어}
212
-
213
- **필수 파라미터**:
214
- - keyword: 상품 검색어 (예: 선크림, 립밤)
215
-
216
- **선택 파라미터**:
217
- - lat: 위도 (기본값: 37.5665)
218
- - lng: 경도 (기본값: 126.978)
219
- - storeKeyword: 매장 필터 키워드
220
- - page: 상품 검색 페이지 (기본값: 1)
221
- - size: 페이지당 결과 수 (기본값: 20)
222
- - includeSoldOut: 품절 포함 여부 (기본값: false)
223
-
224
- **예시**:
225
- - ${baseUrl}/api/oliveyoung/inventory?keyword=선크림
226
- - ${baseUrl}/api/oliveyoung/inventory?keyword=립밤&storeKeyword=명동
227
-
228
- ---
229
-
230
- ### 7. 메가박스 주변 지점 찾기
231
-
232
- **설명**: 사용자 좌표 기준으로 메가박스 지점을 거리순으로 조회합니다.
233
-
234
- **URL**: ${baseUrl}/api/megabox/theaters?lat={위도}&lng={경도}
235
-
236
- **선택 파라미터**:
237
- - lat: 위도 (기본값: 37.5665)
238
- - lng: 경도 (기본값: 126.978)
239
- - playDate: 조회 날짜 (YYYYMMDD, 기본값: 오늘)
240
- - areaCode: 지역 코드 (기본값: 11, 서울)
241
- - limit: 최대 결과 수 (기본값: 10)
242
-
243
- **예시**:
244
- - ${baseUrl}/api/megabox/theaters?lat=37.4982&lng=127.0264
245
- - ${baseUrl}/api/megabox/theaters?areaCode=11&limit=5
246
-
247
- ---
248
-
249
- ### 8. 메가박스 영화/회차 목록
250
-
251
- **설명**: 날짜/지점 조건으로 메가박스 영화와 상영 회차를 조회합니다.
252
-
253
- **URL**: ${baseUrl}/api/megabox/movies?playDate={YYYYMMDD}
254
-
255
- **선택 파라미터**:
256
- - playDate: 조회 날짜 (YYYYMMDD, 기본값: 오늘)
257
- - theaterId: 지점 ID (예: 1372)
258
- - movieId: 영화 ID (예: 25104500)
259
- - areaCode: 지역 코드 (기본값: 11)
260
-
261
- **예시**:
262
- - ${baseUrl}/api/megabox/movies?playDate=20260304&theaterId=1372
263
- - ${baseUrl}/api/megabox/movies?playDate=20260304&movieId=25104500
264
-
265
- ---
266
-
267
- ### 9. 메가박스 잔여 좌석 조회
268
-
269
- **설명**: 영화/지점/날짜 기준으로 회차별 잔여 좌석 수를 조회합니다.
270
-
271
- **URL**: ${baseUrl}/api/megabox/seats?playDate={YYYYMMDD}
272
-
273
- **선택 파라미터**:
274
- - playDate: 조회 날짜 (YYYYMMDD, 기본값: 오늘)
275
- - theaterId: 지점 ID
276
- - movieId: 영화 ID
277
- - areaCode: 지역 코드 (기본값: 11)
278
- - limit: 최대 결과 수 (기본값: 50)
279
-
280
- **예시**:
281
- - ${baseUrl}/api/megabox/seats?playDate=20260304&theaterId=1372
282
- - ${baseUrl}/api/megabox/seats?playDate=20260304&movieId=25104500&limit=20
283
-
284
- ---
285
-
286
- ### 10. CGV 극장 검색
287
-
288
- **설명**: 지역 코드 기준으로 CGV 극장 목록을 조회합니다.
289
-
290
- **URL**: ${baseUrl}/api/cgv/theaters?playDate={YYYYMMDD}
291
-
292
- **선택 파라미터**:
293
- - playDate: 조회 날짜 (YYYYMMDD, 기본값: 오늘)
294
- - regionCode: 지역 코드 (예: 01)
295
- - limit: 최대 결과 수 (기본값: 30)
296
-
297
- **예시**:
298
- - ${baseUrl}/api/cgv/theaters?playDate=20260304&regionCode=01
299
- - ${baseUrl}/api/cgv/theaters?playDate=20260304&limit=10
300
-
301
- ---
302
-
303
- ### 11. CGV 영화 검색
304
-
305
- **설명**: 날짜/극장 조건으로 CGV 영화 목록을 조회합니다.
306
-
307
- **URL**: ${baseUrl}/api/cgv/movies?playDate={YYYYMMDD}
308
-
309
- **선택 파라미터**:
310
- - playDate: 조회 날짜 (YYYYMMDD, 기본값: 오늘)
311
- - theaterCode: 극장 코드 (예: 0056)
312
-
313
- **예시**:
314
- - ${baseUrl}/api/cgv/movies?playDate=20260304&theaterCode=0056
315
-
316
- ---
317
-
318
- ### 12. CGV 시간표 조회
319
-
320
- **설명**: 날짜/극장/영화 조건으로 CGV 상영 시간표를 조회합니다.
321
-
322
- **URL**: ${baseUrl}/api/cgv/timetable?playDate={YYYYMMDD}
323
-
324
- **선택 파라미터**:
325
- - playDate: 조회 날짜 (YYYYMMDD, 기본값: 오늘)
326
- - theaterCode: 극장 코드 (예: 0056)
327
- - movieCode: 영화 코드
328
- - limit: 최대 결과 수 (기본값: 50)
329
-
330
- **예시**:
331
- - ${baseUrl}/api/cgv/timetable?playDate=20260304&theaterCode=0056
332
- - ${baseUrl}/api/cgv/timetable?playDate=20260304&movieCode=200001
333
-
334
- ---
335
-
336
- ## 응답 형식
337
-
338
- ### 성공 응답
339
- \`\`\`json
340
- {
341
- "success": true,
342
- "data": { ... },
343
- "meta": {
344
- "total": 100,
345
- "page": 1,
346
- "pageSize": 30
347
- }
348
- }
349
- \`\`\`
350
-
351
- ### 에러 응답
352
- \`\`\`json
353
- {
354
- "success": false,
355
- "error": {
356
- "code": "ERROR_CODE",
357
- "message": "에러 메시지"
358
- }
359
- }
360
- \`\`\`
361
-
362
- ### 에러 코드
363
- | 코드 | 설명 |
364
- |------|------|
365
- | MISSING_QUERY | 검색어가 누락됨 |
366
- | MISSING_PARAMS | 필수 파라미터 누락 |
367
- | MISSING_PRODUCT_ID | 제품 ID 누락 |
368
- | NOT_FOUND | 결과를 찾을 수 없음 |
369
- | SEARCH_FAILED | 검색 실패 |
370
- | FETCH_FAILED | 데이터 조회 실패 |
371
- | OLIVEYOUNG_STORE_SEARCH_FAILED | 올리브영 매장 조회 실패 |
372
- | OLIVEYOUNG_INVENTORY_CHECK_FAILED | 올리브영 재고 조회 실패 |
373
- | MEGABOX_THEATER_SEARCH_FAILED | 메가박스 지점 조회 실패 |
374
- | MEGABOX_MOVIE_LIST_FAILED | 메가박스 영화 목록 조회 실패 |
375
- | MEGABOX_SEAT_LIST_FAILED | 메가박스 좌석 조회 실패 |
376
- | CGV_THEATER_SEARCH_FAILED | CGV 극장 조회 실패 |
377
- | CGV_MOVIE_SEARCH_FAILED | CGV 영화 목록 조회 실패 |
378
- | CGV_TIMETABLE_FETCH_FAILED | CGV 시간표 조회 실패 |
379
-
380
- ---
381
-
382
- ## 사용 팁
383
-
384
- 1. **한글 검색어**: URL 인코딩이 자동으로 처리됩니다
385
- 2. **페이지네이션**: 결과가 많을 경우 page 파라미터 사용
386
- 3. **재고 확인 워크플로우**:
387
- - 먼저 /api/daiso/products로 제품 검색
388
- - 결과에서 원하는 제품의 id 확인
389
- - /api/daiso/inventory에 해당 id로 재고 조회
390
- 4. **위치 기반 재고**: lat, lng 파라미터로 가까운 매장 우선 조회
391
-
392
- ---
393
-
394
- ## MCP 지원 서비스
395
-
396
- MCP를 지원하는 AI 에이전트(Claude 등)는 더 풍부한 기능을 사용할 수 있습니다.
397
- MCP 연결 정보: ${baseUrl}/mcp
398
-
399
- 지원 도구:
400
- - daiso_search_products: 제품 검색
401
- - daiso_find_stores: 매장 검색
402
- - daiso_check_inventory: 재고 확인
403
- - daiso_get_price_info: 가격 정보 조회
404
- - oliveyoung_find_nearby_stores: 올리브영 주변 매장 탐색
405
- - oliveyoung_check_inventory: 올리브영 재고 파악
406
- - megabox_find_nearby_theaters: 메가박스 주변 지점 탐색
407
- - megabox_list_now_showing: 메가박스 영화 목록 조회
408
- - megabox_get_remaining_seats: 메가박스 잔여 좌석 조회
409
- - cgv_find_theaters: CGV 극장 검색
410
- - cgv_search_movies: CGV 영화 검색
411
- - cgv_get_timetable: CGV 시간표 조회
412
- `;
14
+ return [
15
+ buildPromptCoreText(baseUrl),
16
+ buildPromptRetailCinemaText(baseUrl),
17
+ buildPromptReferenceText(baseUrl),
18
+ ].join('');
413
19
  }
414
20
  /**
415
21
  * 프롬프트 페이지 응답 생성
@@ -0,0 +1,278 @@
1
+ /**
2
+ * 프롬프트 핵심 API 섹션
3
+ */
4
+ export function buildPromptCoreText(baseUrl) {
5
+ return `# 다이소 MCP API
6
+
7
+ 다이소 제품 검색, 매장 찾기, 재고 확인을 위한 API입니다.
8
+ 모든 요청은 GET 방식이며, 결과는 JSON으로 반환됩니다.
9
+
10
+ Base URL: ${baseUrl}
11
+
12
+ ---
13
+
14
+ ## 사용 가능한 기능
15
+
16
+ ### 1. 제품 검색
17
+
18
+ **설명**: 키워드로 다이소 제품을 검색합니다.
19
+
20
+ **URL**: ${baseUrl}/api/daiso/products?q={검색어}
21
+
22
+ **필수 파라미터**:
23
+ - q: 검색 키워드 (예: 수납박스, 펜, 정리함)
24
+
25
+ **선택 파라미터**:
26
+ - page: 페이지 번호 (기본값: 1)
27
+ - pageSize: 페이지당 결과 수 (기본값: 30, 최대: 100)
28
+
29
+ **예시**:
30
+ - ${baseUrl}/api/daiso/products?q=수납박스
31
+ - ${baseUrl}/api/daiso/products?q=펜&page=2&pageSize=10
32
+
33
+ **응답 예시**:
34
+ \`\`\`json
35
+ {
36
+ "success": true,
37
+ "data": {
38
+ "products": [
39
+ {
40
+ "id": "1234567890",
41
+ "name": "PP 수납박스 대형",
42
+ "price": 5000,
43
+ "imageUrl": "https://cdn.daisomall.co.kr/...",
44
+ "soldOut": false,
45
+ "isNew": false,
46
+ "pickupAvailable": true
47
+ }
48
+ ]
49
+ },
50
+ "meta": { "total": 150, "page": 1, "pageSize": 30 }
51
+ }
52
+ \`\`\`
53
+
54
+ ---
55
+
56
+ ### 2. 제품 상세 정보
57
+
58
+ **설명**: 제품 ID로 상세 정보를 조회합니다.
59
+
60
+ **URL**: ${baseUrl}/api/daiso/products/{제품ID}
61
+
62
+ **예시**:
63
+ - ${baseUrl}/api/daiso/products/1234567890
64
+
65
+ **응답 예시**:
66
+ \`\`\`json
67
+ {
68
+ "success": true,
69
+ "data": {
70
+ "id": "1234567890",
71
+ "name": "PP 수납박스 대형",
72
+ "price": 5000,
73
+ "currency": "KRW",
74
+ "imageUrl": "https://cdn.daisomall.co.kr/...",
75
+ "brand": "다이소",
76
+ "soldOut": false,
77
+ "isNew": false
78
+ }
79
+ }
80
+ \`\`\`
81
+
82
+ ---
83
+
84
+ ### 3. 매장 찾기
85
+
86
+ **설명**: 키워드 또는 지역으로 다이소 매장을 검색합니다.
87
+
88
+ **URL**: ${baseUrl}/api/daiso/stores?keyword={키워드}
89
+
90
+ **필수 파라미터** (둘 중 하나 필수):
91
+ - keyword: 매장명 또는 주소 키워드 (예: 강남, 홍대, 안산)
92
+ - sido: 시/도 (예: 서울, 경기, 부산)
93
+
94
+ **선택 파라미터**:
95
+ - gugun: 구/군 (예: 강남구, 마포구)
96
+ - dong: 동 (예: 역삼동, 합정동)
97
+ - limit: 최대 결과 수 (기본값: 50)
98
+
99
+ **예시**:
100
+ - ${baseUrl}/api/daiso/stores?keyword=강남
101
+ - ${baseUrl}/api/daiso/stores?sido=서울&gugun=마포구
102
+ - ${baseUrl}/api/daiso/stores?keyword=홍대&limit=10
103
+
104
+ **응답 예시**:
105
+ \`\`\`json
106
+ {
107
+ "success": true,
108
+ "data": {
109
+ "stores": [
110
+ {
111
+ "name": "다이소 강남역점",
112
+ "phone": "02-1234-5678",
113
+ "address": "서울특별시 강남구 강남대로 123",
114
+ "lat": 37.4979,
115
+ "lng": 127.0276,
116
+ "openTime": "10:00",
117
+ "closeTime": "22:00",
118
+ "options": {
119
+ "parking": true,
120
+ "pickup": true,
121
+ "taxFree": false
122
+ }
123
+ }
124
+ ]
125
+ },
126
+ "meta": { "total": 5 }
127
+ }
128
+ \`\`\`
129
+
130
+ ---
131
+
132
+ ### 4. 재고 확인
133
+
134
+ **설명**: 특정 제품의 매장별 재고와 온라인 재고를 확인합니다.
135
+
136
+ **URL**: ${baseUrl}/api/daiso/inventory?productId={제품ID}
137
+
138
+ **필수 파라미터**:
139
+ - productId: 제품 ID (제품 검색 API에서 조회한 id 값)
140
+
141
+ **선택 파라미터**:
142
+ - lat: 위도 (기본값: 37.5665, 서울 시청)
143
+ - lng: 경도 (기본값: 126.978, 서울 시청)
144
+ - keyword: 매장 검색어 (예: 안산, 강남)
145
+ - page: 페이지 번호 (기본값: 1)
146
+ - pageSize: 페이지당 결과 수 (기본값: 30)
147
+
148
+ **주의**:
149
+ - 다이소 재고 조회는 storeCode가 필요하지 않습니다.
150
+ - storeCode는 재고 응답의 storeInventory.stores[].storeCode에서 확인한 뒤 진열 위치 조회에 사용합니다.
151
+ - 안산 중앙역 같은 역명 키워드가 비면 안산중앙역, 안산중앙, 고잔처럼 붙여쓴 변형으로 재시도하세요.
152
+
153
+ **예시**:
154
+ - ${baseUrl}/api/daiso/inventory?productId=1234567890
155
+ - ${baseUrl}/api/daiso/inventory?productId=1234567890&lat=37.3219&lng=126.8309
156
+ - ${baseUrl}/api/daiso/inventory?productId=1234567890&keyword=안산
157
+
158
+ **응답 예시**:
159
+ \`\`\`json
160
+ {
161
+ "success": true,
162
+ "data": {
163
+ "productId": "1234567890",
164
+ "product": {
165
+ "id": "1234567890",
166
+ "name": "PP 수납박스 대형",
167
+ "imageUrl": "https://cdn.daisomall.co.kr/...",
168
+ "brand": "다이소",
169
+ "soldOut": false,
170
+ "isNew": false
171
+ },
172
+ "location": { "latitude": 37.5665, "longitude": 126.978 },
173
+ "onlineStock": 150,
174
+ "storeInventory": {
175
+ "totalStores": 25,
176
+ "inStockCount": 18,
177
+ "stores": [
178
+ {
179
+ "storeCode": "ST001",
180
+ "storeName": "다이소 강남역점",
181
+ "address": "서울특별시 강남구...",
182
+ "distance": "0.5km",
183
+ "quantity": 12,
184
+ "options": { "parking": true, "pickup": true }
185
+ }
186
+ ]
187
+ }
188
+ },
189
+ "meta": { "total": 25, "page": 1, "pageSize": 30 }
190
+ }
191
+ \`\`\`
192
+
193
+ ---
194
+
195
+ ### 4-1. 진열 위치 조회
196
+
197
+ **설명**: 특정 상품이 특정 매장 내 어디에 진열되어 있는지(구역/층) 조회합니다.
198
+
199
+ **URL**: ${baseUrl}/api/daiso/display-location?productId={제품ID}&storeCode={매장코드}
200
+
201
+ **필수 파라미터**:
202
+ - productId: 제품 ID (제품 검색 API에서 조회한 id 값)
203
+ - storeCode: 매장 코드 (재고 확인 API 결과의 storeCode 값)
204
+
205
+ **예시**:
206
+ - ${baseUrl}/api/daiso/display-location?productId=1234567890&storeCode=04515
207
+
208
+ ---
209
+
210
+ ### 5. 올리브영 매장 찾기
211
+
212
+ **설명**: 위치 기반으로 주변 올리브영 매장을 검색합니다.
213
+
214
+ **URL**: ${baseUrl}/api/oliveyoung/stores?keyword={키워드}
215
+
216
+ **선택 파라미터**:
217
+ - keyword: 매장명/지역 키워드 (예: 명동, 강남)
218
+ - lat: 위도 (기본값: 37.5665)
219
+ - lng: 경도 (기본값: 126.978)
220
+ - pageIdx: 페이지 번호 (기본값: 1)
221
+ - limit: 최대 결과 수 (기본값: 20)
222
+
223
+ **예시**:
224
+ - ${baseUrl}/api/oliveyoung/stores?keyword=명동
225
+ - ${baseUrl}/api/oliveyoung/stores?lat=37.498&lng=127.027&limit=5
226
+
227
+ ---
228
+
229
+ ### 6. 올리브영 상품 검색
230
+
231
+ **설명**: 키워드로 올리브영 상품 목록을 조회합니다. 사용자가 "올리브영 마스크팩 어떤 거 있나요", "립밤 종류 보여줘"처럼 상품 후보나 종류를 묻는 경우에는 이 API를 먼저 사용하세요.
232
+
233
+ **표시 규칙**:
234
+ - 응답의 \`products[].imageUrl\`이 있으면 각 상품 이미지를 반드시 마크다운 이미지로 함께 렌더링합니다.
235
+ - 여러 상품이 나오면 첫 상품만 대표로 보여주지 말고, 이미지가 있는 상품은 전부 표시합니다.
236
+
237
+ **URL**: ${baseUrl}/api/oliveyoung/products?keyword={검색어}
238
+
239
+ **필수 파라미터**:
240
+ - keyword: 상품 검색어 (예: 마스크팩, 선크림, 립밤)
241
+
242
+ **선택 파라미터**:
243
+ - page: 상품 검색 페이지 (기본값: 1)
244
+ - size: 페이지당 상품 수 (기본값: 20)
245
+ - sort: 정렬 코드 (기본값: 01)
246
+ - includeSoldOut: 품절 포함 여부 (기본값: false)
247
+
248
+ **예시**:
249
+ - ${baseUrl}/api/oliveyoung/products?keyword=마스크팩
250
+ - ${baseUrl}/api/oliveyoung/products?keyword=립밤&size=10
251
+
252
+ ---
253
+
254
+ ### 7. 올리브영 재고 확인
255
+
256
+ **설명**: 상품 키워드 기준 올리브영 재고를 조회하고 주변 매장 목록을 함께 반환합니다. 상위 상품에는 storeInventory가 포함되며 매장별 재고 3개, 재고 9개 이상, 품절, 미판매 같은 상태를 제공합니다.
257
+
258
+ **URL**: ${baseUrl}/api/oliveyoung/inventory?keyword={검색어}
259
+
260
+ **필수 파라미터**:
261
+ - keyword: 상품 검색어 (예: 선크림, 립밤)
262
+
263
+ **선택 파라미터**:
264
+ - lat: 위도 (기본값: 37.5665)
265
+ - lng: 경도 (기본값: 126.978)
266
+ - storeKeyword: 매장 필터 키워드
267
+ - page: 상품 검색 페이지 (기본값: 1)
268
+ - size: 페이지당 결과 수 (기본값: 20)
269
+ - includeSoldOut: 품절 포함 여부 (기본값: false)
270
+
271
+ **예시**:
272
+ - ${baseUrl}/api/oliveyoung/inventory?keyword=선크림
273
+ - ${baseUrl}/api/oliveyoung/inventory?keyword=립밤&storeKeyword=명동
274
+
275
+ ---
276
+
277
+ `;
278
+ }