daiso 1.0.3 → 1.0.5

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 (158) hide show
  1. package/README.md +218 -537
  2. package/dist/api/actionsProxy.js +82 -0
  3. package/dist/api/cgvHandlers.js +103 -16
  4. package/dist/api/daisoHandlers.js +127 -0
  5. package/dist/api/emart24Handlers.js +176 -0
  6. package/dist/api/gs25Handlers.js +256 -0
  7. package/dist/api/handlers.js +184 -108
  8. package/dist/api/healthChecks.js +332 -0
  9. package/dist/api/lottecinemaHandlers.js +155 -0
  10. package/dist/api/lottemartHandlers.js +128 -0
  11. package/dist/api/megaboxHandlers.js +81 -50
  12. package/dist/api/routes/cuRoutes.js +17 -0
  13. package/dist/api/routes/daisoRoutes.js +6 -1
  14. package/dist/api/routes/emart24Routes.js +22 -0
  15. package/dist/api/routes/gs25Routes.js +22 -0
  16. package/dist/api/routes/healthRoutes.js +44 -0
  17. package/dist/api/routes/lottecinemaRoutes.js +22 -0
  18. package/dist/api/routes/lottemartRoutes.js +18 -0
  19. package/dist/api/routes/oliveyoungRoutes.js +6 -1
  20. package/dist/api/routes/sevenelevenRoutes.js +32 -0
  21. package/dist/api/sevenelevenHandlers.js +200 -0
  22. package/dist/cli/args.js +54 -0
  23. package/dist/cli/commands/convenience.js +241 -0
  24. package/dist/cli/commands/daiso.js +96 -0
  25. package/dist/cli/constants.js +5 -0
  26. package/dist/cli/deps.js +48 -0
  27. package/dist/cli/http.js +98 -0
  28. package/dist/cli/interactiveFetch.js +31 -0
  29. package/dist/cli/interactiveItemSearch.js +259 -0
  30. package/dist/cli/interactivePrompt.js +49 -0
  31. package/dist/cli/interactiveTypes.js +4 -0
  32. package/dist/cli/types.js +4 -0
  33. package/dist/cli.js +66 -181
  34. package/dist/cliHelp.js +216 -9
  35. package/dist/cliInteractive.js +174 -0
  36. package/dist/cliPicker.js +56 -0
  37. package/dist/cliRenderer.js +139 -0
  38. package/dist/index.js +147 -8
  39. package/dist/pages/openapi.js +2 -1
  40. package/dist/pages/openapiFullSpec.js +58 -0
  41. package/dist/pages/openapiResponse.js +28 -0
  42. package/dist/pages/openapiSpec.js +2 -41
  43. package/dist/pages/openapiSpecActions.js +109 -0
  44. package/dist/pages/openapiSpecComponents.js +30 -391
  45. package/dist/pages/openapiSpecComponentsCgv.js +24 -0
  46. package/dist/pages/openapiSpecComponentsCu.js +112 -0
  47. package/dist/pages/openapiSpecComponentsDaisoOliveyoung.js +342 -0
  48. package/dist/pages/openapiSpecComponentsEmart24.js +141 -0
  49. package/dist/pages/openapiSpecComponentsGs25.js +109 -0
  50. package/dist/pages/openapiSpecComponentsLotteMart.js +85 -0
  51. package/dist/pages/openapiSpecComponentsLottecinema.js +163 -0
  52. package/dist/pages/openapiSpecComponentsMegabox.js +144 -0
  53. package/dist/pages/openapiSpecComponentsSeveneleven.js +82 -0
  54. package/dist/pages/openapiSpecPathsCgv.js +66 -3
  55. package/dist/pages/openapiSpecPathsCu.js +138 -0
  56. package/dist/pages/openapiSpecPathsDaiso.js +302 -0
  57. package/dist/pages/openapiSpecPathsDaisoOliveyoung.js +4 -376
  58. package/dist/pages/openapiSpecPathsEmart24.js +223 -0
  59. package/dist/pages/openapiSpecPathsGs25.js +166 -0
  60. package/dist/pages/openapiSpecPathsLotteMart.js +135 -0
  61. package/dist/pages/openapiSpecPathsLottecinema.js +212 -0
  62. package/dist/pages/openapiSpecPathsMegabox.js +52 -3
  63. package/dist/pages/openapiSpecPathsOliveyoung.js +231 -0
  64. package/dist/pages/openapiSpecPathsSeveneleven.js +234 -0
  65. package/dist/pages/prompt.js +8 -402
  66. package/dist/pages/promptCoreText.js +278 -0
  67. package/dist/pages/promptReferenceText.js +131 -0
  68. package/dist/pages/promptRetailCinemaText.js +273 -0
  69. package/dist/services/cgv/client.js +6 -1
  70. package/dist/services/cgv/index.js +3 -3
  71. package/dist/services/cgv/location.js +235 -0
  72. package/dist/services/cgv/tools/findTheaters.js +30 -5
  73. package/dist/services/cgv/tools/getTimetable.js +42 -14
  74. package/dist/services/cgv/tools/searchMovies.js +40 -12
  75. package/dist/services/cgv/transport.js +0 -3
  76. package/dist/services/cu/api.js +11 -0
  77. package/dist/services/cu/client.js +297 -0
  78. package/dist/services/cu/index.js +21 -0
  79. package/dist/services/cu/tools/checkInventory.js +123 -0
  80. package/dist/services/cu/tools/findNearbyStores.js +49 -0
  81. package/dist/services/cu/types.js +4 -0
  82. package/dist/services/daiso/api.js +22 -2
  83. package/dist/services/daiso/client.js +59 -0
  84. package/dist/services/daiso/index.js +2 -0
  85. package/dist/services/daiso/product.js +17 -0
  86. package/dist/services/daiso/tools/checkInventory.js +76 -41
  87. package/dist/services/daiso/tools/findStores.js +17 -7
  88. package/dist/services/daiso/tools/getDisplayLocation.js +75 -0
  89. package/dist/services/emart24/api.js +11 -0
  90. package/dist/services/emart24/client.js +173 -0
  91. package/dist/services/emart24/index.js +22 -0
  92. package/dist/services/emart24/inventoryLookup.js +134 -0
  93. package/dist/services/emart24/tools/checkInventory.js +54 -0
  94. package/dist/services/emart24/tools/findNearbyStores.js +72 -0
  95. package/dist/services/emart24/tools/searchProducts.js +63 -0
  96. package/dist/services/emart24/types.js +4 -0
  97. package/dist/services/gs25/api.js +9 -0
  98. package/dist/services/gs25/client.js +198 -0
  99. package/dist/services/gs25/index.js +22 -0
  100. package/dist/services/gs25/storeUtils.js +168 -0
  101. package/dist/services/gs25/tools/checkInventory.js +163 -0
  102. package/dist/services/gs25/tools/findNearbyStores.js +103 -0
  103. package/dist/services/gs25/tools/searchProducts.js +50 -0
  104. package/dist/services/gs25/types.js +4 -0
  105. package/dist/services/lottecinema/api.js +12 -0
  106. package/dist/services/lottecinema/client.js +161 -0
  107. package/dist/services/lottecinema/index.js +30 -0
  108. package/dist/services/lottecinema/location.js +191 -0
  109. package/dist/services/lottecinema/tools/findNearbyTheaters.js +47 -0
  110. package/dist/services/lottecinema/tools/getRemainingSeats.js +85 -0
  111. package/dist/services/lottecinema/tools/listNowShowing.js +79 -0
  112. package/dist/services/lottecinema/types.js +4 -0
  113. package/dist/services/lottemart/api.js +31 -0
  114. package/dist/services/lottemart/client.js +245 -0
  115. package/dist/services/lottemart/clientTypes.js +4 -0
  116. package/dist/services/lottemart/config.js +4 -0
  117. package/dist/services/lottemart/debug.js +92 -0
  118. package/dist/services/lottemart/geocode.js +49 -0
  119. package/dist/services/lottemart/index.js +30 -0
  120. package/dist/services/lottemart/keyword.js +29 -0
  121. package/dist/services/lottemart/parser.js +185 -0
  122. package/dist/services/lottemart/session.js +331 -0
  123. package/dist/services/lottemart/storeSearch.js +52 -0
  124. package/dist/services/lottemart/tools/findNearbyStores.js +67 -0
  125. package/dist/services/lottemart/tools/searchProducts.js +62 -0
  126. package/dist/services/lottemart/types.js +4 -0
  127. package/dist/services/lottemart/zetta.js +105 -0
  128. package/dist/services/megabox/location.js +219 -0
  129. package/dist/services/megabox/tools/findNearbyTheaters.js +13 -44
  130. package/dist/services/megabox/tools/getRemainingSeats.js +31 -3
  131. package/dist/services/megabox/tools/listNowShowing.js +31 -3
  132. package/dist/services/oliveyoung/api.js +2 -0
  133. package/dist/services/oliveyoung/client.js +150 -9
  134. package/dist/services/oliveyoung/index.js +3 -1
  135. package/dist/services/oliveyoung/tools/checkInventory.js +15 -4
  136. package/dist/services/oliveyoung/tools/searchProducts.js +57 -0
  137. package/dist/services/seveneleven/api.js +15 -0
  138. package/dist/services/seveneleven/client.js +279 -0
  139. package/dist/services/seveneleven/index.js +30 -0
  140. package/dist/services/seveneleven/inventory.js +302 -0
  141. package/dist/services/seveneleven/productKeyword.js +141 -0
  142. package/dist/services/seveneleven/tools/checkInventory.js +82 -0
  143. package/dist/services/seveneleven/tools/getCatalogSnapshot.js +55 -0
  144. package/dist/services/seveneleven/tools/getSearchPopwords.js +41 -0
  145. package/dist/services/seveneleven/tools/searchProducts.js +56 -0
  146. package/dist/services/seveneleven/tools/searchStores.js +45 -0
  147. package/dist/services/seveneleven/types.js +4 -0
  148. package/dist/utils/cliInteractiveHelpers.js +63 -0
  149. package/dist/utils/daisoKeyword.js +30 -0
  150. package/dist/utils/http.js +16 -2
  151. package/openapi.json +1977 -734
  152. package/openapi.yaml +1430 -543
  153. package/package.json +28 -15
  154. package/dist/tools/checkInventory.js +0 -98
  155. package/dist/tools/findStores.js +0 -125
  156. package/dist/tools/getPriceInfo.js +0 -77
  157. package/dist/tools/searchProducts.js +0 -61
  158. package/dist/types/index.js +0 -4
@@ -0,0 +1,234 @@
1
+ /**
2
+ * OpenAPI 경로 정의 (세븐일레븐)
3
+ */
4
+ export const OPENAPI_PATHS_SEVENELEVEN = {
5
+ '/api/seveneleven/products': {
6
+ get: {
7
+ operationId: 'sevenelevenSearchProducts',
8
+ summary: '세븐일레븐 상품 검색',
9
+ description: '키워드로 세븐일레븐 상품을 검색합니다.',
10
+ parameters: [
11
+ {
12
+ name: 'query',
13
+ in: 'query',
14
+ required: true,
15
+ description: '상품 검색어',
16
+ schema: { type: 'string' },
17
+ example: '삼각김밥',
18
+ },
19
+ {
20
+ name: 'page',
21
+ in: 'query',
22
+ required: false,
23
+ description: '페이지 번호',
24
+ schema: { type: 'integer', default: 1, minimum: 1 },
25
+ },
26
+ {
27
+ name: 'size',
28
+ in: 'query',
29
+ required: false,
30
+ description: '페이지당 결과 수',
31
+ schema: { type: 'integer', default: 20, minimum: 1, maximum: 100 },
32
+ },
33
+ {
34
+ name: 'sort',
35
+ in: 'query',
36
+ required: false,
37
+ description: '정렬 기준',
38
+ schema: { type: 'string', default: 'recommend' },
39
+ },
40
+ ],
41
+ responses: {
42
+ '200': {
43
+ description: '검색 성공',
44
+ content: {
45
+ 'application/json': {
46
+ schema: { $ref: '#/components/schemas/ProductSearchResponse' },
47
+ },
48
+ },
49
+ },
50
+ '400': {
51
+ description: '잘못된 요청 (검색어 누락)',
52
+ content: {
53
+ 'application/json': {
54
+ schema: { $ref: '#/components/schemas/ErrorResponse' },
55
+ },
56
+ },
57
+ },
58
+ },
59
+ },
60
+ },
61
+ '/api/seveneleven/stores': {
62
+ get: {
63
+ operationId: 'sevenelevenSearchStores',
64
+ summary: '세븐일레븐 매장 검색',
65
+ description: '키워드로 세븐일레븐 매장을 검색합니다.',
66
+ parameters: [
67
+ {
68
+ name: 'keyword',
69
+ in: 'query',
70
+ required: true,
71
+ description: '매장 검색어',
72
+ schema: { type: 'string' },
73
+ example: '안산 중앙역',
74
+ },
75
+ {
76
+ name: 'limit',
77
+ in: 'query',
78
+ required: false,
79
+ description: '최대 결과 수',
80
+ schema: { type: 'integer', default: 20, minimum: 1, maximum: 9999 },
81
+ },
82
+ ],
83
+ responses: {
84
+ '200': {
85
+ description: '검색 성공',
86
+ content: {
87
+ 'application/json': {
88
+ schema: { $ref: '#/components/schemas/StoreSearchResponse' },
89
+ },
90
+ },
91
+ },
92
+ '400': {
93
+ description: '잘못된 요청 (검색어 누락)',
94
+ content: {
95
+ 'application/json': {
96
+ schema: { $ref: '#/components/schemas/ErrorResponse' },
97
+ },
98
+ },
99
+ },
100
+ },
101
+ },
102
+ },
103
+ '/api/seveneleven/inventory': {
104
+ get: {
105
+ operationId: 'sevenelevenCheckInventory',
106
+ summary: '세븐일레븐 재고 확인',
107
+ description: '상품 키워드와 매장 키워드로 세븐일레븐 매장별 재고 수량을 조회합니다.',
108
+ parameters: [
109
+ {
110
+ name: 'keyword',
111
+ in: 'query',
112
+ required: true,
113
+ description: '재고를 확인할 상품 검색어',
114
+ schema: { type: 'string' },
115
+ example: '핫식스',
116
+ },
117
+ {
118
+ name: 'storeKeyword',
119
+ in: 'query',
120
+ required: false,
121
+ description: '매장명 또는 지역 키워드',
122
+ schema: { type: 'string' },
123
+ example: '안산 중앙역',
124
+ },
125
+ {
126
+ name: 'storeLimit',
127
+ in: 'query',
128
+ required: false,
129
+ description: '반환할 최대 매장 수',
130
+ schema: { type: 'integer', default: 20, minimum: 1, maximum: 100 },
131
+ },
132
+ {
133
+ name: 'timeoutMs',
134
+ in: 'query',
135
+ required: false,
136
+ description: '요청 제한 시간(ms)',
137
+ schema: { type: 'integer', default: 20000, minimum: 1000, maximum: 60000 },
138
+ },
139
+ ],
140
+ responses: {
141
+ '200': {
142
+ description: '조회 성공',
143
+ content: {
144
+ 'application/json': {
145
+ schema: { $ref: '#/components/schemas/SevenElevenInventoryResponse' },
146
+ },
147
+ },
148
+ },
149
+ '400': {
150
+ description: '잘못된 요청 (검색어 누락)',
151
+ content: {
152
+ 'application/json': {
153
+ schema: { $ref: '#/components/schemas/ErrorResponse' },
154
+ },
155
+ },
156
+ },
157
+ '500': {
158
+ description: '세븐일레븐 재고 조회 실패',
159
+ content: {
160
+ 'application/json': {
161
+ schema: { $ref: '#/components/schemas/ErrorResponse' },
162
+ },
163
+ },
164
+ },
165
+ },
166
+ },
167
+ },
168
+ '/api/seveneleven/popwords': {
169
+ get: {
170
+ operationId: 'sevenelevenGetSearchPopwords',
171
+ summary: '세븐일레븐 인기 검색어 조회',
172
+ description: '세븐일레븐 인기 검색어 목록을 조회합니다.',
173
+ parameters: [
174
+ {
175
+ name: 'label',
176
+ in: 'query',
177
+ required: false,
178
+ description: '조회 라벨 (기본값: home)',
179
+ schema: { type: 'string', default: 'home' },
180
+ },
181
+ ],
182
+ responses: {
183
+ '200': {
184
+ description: '조회 성공',
185
+ content: {
186
+ 'application/json': {
187
+ schema: { $ref: '#/components/schemas/ProductSearchResponse' },
188
+ },
189
+ },
190
+ },
191
+ },
192
+ },
193
+ },
194
+ '/api/seveneleven/catalog': {
195
+ get: {
196
+ operationId: 'sevenelevenGetCatalogSnapshot',
197
+ summary: '세븐일레븐 카탈로그 스냅샷',
198
+ description: '공개 카탈로그(페이지/이슈/기획전) 데이터를 조회합니다.',
199
+ parameters: [
200
+ {
201
+ name: 'includeIssues',
202
+ in: 'query',
203
+ required: false,
204
+ description: '이슈 상품 포함 여부',
205
+ schema: { type: 'boolean', default: true },
206
+ },
207
+ {
208
+ name: 'includeExhibition',
209
+ in: 'query',
210
+ required: false,
211
+ description: '기획전 포함 여부',
212
+ schema: { type: 'boolean', default: true },
213
+ },
214
+ {
215
+ name: 'limit',
216
+ in: 'query',
217
+ required: false,
218
+ description: '각 목록 최대 반환 수',
219
+ schema: { type: 'integer', default: 20, minimum: 1, maximum: 100 },
220
+ },
221
+ ],
222
+ responses: {
223
+ '200': {
224
+ description: '조회 성공',
225
+ content: {
226
+ 'application/json': {
227
+ schema: { $ref: '#/components/schemas/ProductSearchResponse' },
228
+ },
229
+ },
230
+ },
231
+ },
232
+ },
233
+ },
234
+ };
@@ -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
  * 프롬프트 페이지 응답 생성