@portone/mcp-server 0.13.0

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 (576) hide show
  1. package/LICENSE-APACHE +201 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +165 -0
  4. package/assets/docs/README.md +27 -0
  5. package/assets/docs/api/backward-compatibility.md +40 -0
  6. package/assets/docs/blog/posts/2024-02/v2-oom.md +341 -0
  7. package/assets/docs/blog/posts/2024-02/v2-webhook.md +314 -0
  8. package/assets/docs/blog/posts/2024-02/v2-zio.md +529 -0
  9. package/assets/docs/blog/posts/2024-03/tgs.md +238 -0
  10. package/assets/docs/blog/posts/2024-04/gcp-datastream.md +307 -0
  11. package/assets/docs/blog/posts/2024-04/solid.md +558 -0
  12. package/assets/docs/blog/posts/2024-07/v2-event-sourcing-basic.md +231 -0
  13. package/assets/docs/help/admin-console/analytics/content32.md +270 -0
  14. package/assets/docs/help/admin-console/console-account/content31.md +94 -0
  15. package/assets/docs/help/admin-console/console_home/content34.md +82 -0
  16. package/assets/docs/help/admin-console/integration/content28.md +79 -0
  17. package/assets/docs/help/admin-console/payment-service/content29.md +260 -0
  18. package/assets/docs/help/admin-console/pg-settlement/content30.md +352 -0
  19. package/assets/docs/help/admin-console/platform-settlement/content33-1.md +201 -0
  20. package/assets/docs/help/api-sdk-2024-12-19.md +64 -0
  21. package/assets/docs/help/api-sdk-2025-01-15.md +84 -0
  22. package/assets/docs/help/applepay.md +46 -0
  23. package/assets/docs/help/content100000.md +46 -0
  24. package/assets/docs/help/content100002.md +52 -0
  25. package/assets/docs/help/content100004.md +29 -0
  26. package/assets/docs/help/content100014.md +50 -0
  27. package/assets/docs/help/content100015.md +20 -0
  28. package/assets/docs/help/content100016.md +28 -0
  29. package/assets/docs/help/content100020.md +28 -0
  30. package/assets/docs/help/content100022.md +40 -0
  31. package/assets/docs/help/content100023.md +21 -0
  32. package/assets/docs/help/content100024.md +25 -0
  33. package/assets/docs/help/content100025.md +40 -0
  34. package/assets/docs/help/content100026.md +20 -0
  35. package/assets/docs/help/content100027.md +24 -0
  36. package/assets/docs/help/content100029.md +29 -0
  37. package/assets/docs/help/content100030.md +82 -0
  38. package/assets/docs/help/content100033.md +44 -0
  39. package/assets/docs/help/content100035.md +34 -0
  40. package/assets/docs/help/content100036.md +14 -0
  41. package/assets/docs/help/content100037.md +16 -0
  42. package/assets/docs/help/content100038.md +32 -0
  43. package/assets/docs/help/content100039.md +28 -0
  44. package/assets/docs/help/content100040.md +31 -0
  45. package/assets/docs/help/content100041.md +37 -0
  46. package/assets/docs/help/content100044.md +15 -0
  47. package/assets/docs/help/content100045.md +21 -0
  48. package/assets/docs/help/content100046.md +34 -0
  49. package/assets/docs/help/content100047.md +32 -0
  50. package/assets/docs/help/content100048.md +25 -0
  51. package/assets/docs/help/content100049.md +20 -0
  52. package/assets/docs/help/content100052.md +147 -0
  53. package/assets/docs/help/content100053.md +40 -0
  54. package/assets/docs/help/content100054.md +18 -0
  55. package/assets/docs/help/content100055.md +37 -0
  56. package/assets/docs/help/content100056.md +15 -0
  57. package/assets/docs/help/content100057.md +28 -0
  58. package/assets/docs/help/content100058.md +36 -0
  59. package/assets/docs/help/content100059.md +23 -0
  60. package/assets/docs/help/content100060.md +43 -0
  61. package/assets/docs/help/content200001.md +21 -0
  62. package/assets/docs/help/content200002.md +38 -0
  63. package/assets/docs/help/content200005.md +30 -0
  64. package/assets/docs/help/content200012.md +91 -0
  65. package/assets/docs/help/content200013.md +52 -0
  66. package/assets/docs/help/content200015.md +41 -0
  67. package/assets/docs/help/content200016.md +30 -0
  68. package/assets/docs/help/content200017.md +39 -0
  69. package/assets/docs/help/content200018.md +105 -0
  70. package/assets/docs/help/content200019.md +59 -0
  71. package/assets/docs/help/content200020.md +42 -0
  72. package/assets/docs/help/content200023.md +54 -0
  73. package/assets/docs/help/content200024.md +49 -0
  74. package/assets/docs/help/content200025.md +68 -0
  75. package/assets/docs/help/content200027.md +34 -0
  76. package/assets/docs/help/content200028.md +70 -0
  77. package/assets/docs/help/content200029.md +71 -0
  78. package/assets/docs/help/content200030.md +67 -0
  79. package/assets/docs/help/content200032.md +39 -0
  80. package/assets/docs/help/content200033.md +21 -0
  81. package/assets/docs/help/content200034.md +34 -0
  82. package/assets/docs/help/content200037.md +38 -0
  83. package/assets/docs/help/content200038.md +50 -0
  84. package/assets/docs/help/content200039.md +45 -0
  85. package/assets/docs/help/content200040.md +15 -0
  86. package/assets/docs/help/content200043.md +23 -0
  87. package/assets/docs/help/content200044.md +33 -0
  88. package/assets/docs/help/content200045.md +25 -0
  89. package/assets/docs/help/content200046.md +104 -0
  90. package/assets/docs/help/content200048.md +34 -0
  91. package/assets/docs/help/content200049.md +54 -0
  92. package/assets/docs/help/content200050.md +43 -0
  93. package/assets/docs/help/content200051.md +81 -0
  94. package/assets/docs/help/content51.md +38 -0
  95. package/assets/docs/help/content61.md +165 -0
  96. package/assets/docs/help/core-service/channel-setting/danal.md +170 -0
  97. package/assets/docs/help/core-service/channel-setting/daou.md +118 -0
  98. package/assets/docs/help/core-service/channel-setting/eximbay.md +136 -0
  99. package/assets/docs/help/core-service/channel-setting/inicis.md +340 -0
  100. package/assets/docs/help/core-service/channel-setting/kakaopay.md +107 -0
  101. package/assets/docs/help/core-service/channel-setting/kcp_channel.md +235 -0
  102. package/assets/docs/help/core-service/channel-setting/kicc.md +114 -0
  103. package/assets/docs/help/core-service/channel-setting/kpn.md +93 -0
  104. package/assets/docs/help/core-service/channel-setting/ksnet.md +116 -0
  105. package/assets/docs/help/core-service/channel-setting/mobilians.md +107 -0
  106. package/assets/docs/help/core-service/channel-setting/naverpay.md +179 -0
  107. package/assets/docs/help/core-service/channel-setting/nice.md +210 -0
  108. package/assets/docs/help/core-service/channel-setting/payco.md +124 -0
  109. package/assets/docs/help/core-service/channel-setting/paymentwall.md +107 -0
  110. package/assets/docs/help/core-service/channel-setting/paypal.md +247 -0
  111. package/assets/docs/help/core-service/channel-setting/settle.md +123 -0
  112. package/assets/docs/help/core-service/channel-setting/smartro.md +164 -0
  113. package/assets/docs/help/core-service/channel-setting/smilepay.md +83 -0
  114. package/assets/docs/help/core-service/channel-setting/tosspay.md +168 -0
  115. package/assets/docs/help/core-service/channel-setting/tosspayments.md +232 -0
  116. package/assets/docs/help/core-service/channel-setting/welcome.md +110 -0
  117. package/assets/docs/help/core-service/how-to-use/additional-danal.md +71 -0
  118. package/assets/docs/help/core-service/how-to-use/additional-daou.md +65 -0
  119. package/assets/docs/help/core-service/how-to-use/additional-eximbay.md +54 -0
  120. package/assets/docs/help/core-service/how-to-use/additional-inicis.md +97 -0
  121. package/assets/docs/help/core-service/how-to-use/additional-kakaopay.md +56 -0
  122. package/assets/docs/help/core-service/how-to-use/additional-kcp.md +53 -0
  123. package/assets/docs/help/core-service/how-to-use/additional-kicc.md +67 -0
  124. package/assets/docs/help/core-service/how-to-use/additional-ksnet.md +68 -0
  125. package/assets/docs/help/core-service/how-to-use/additional-mobilians.md +71 -0
  126. package/assets/docs/help/core-service/how-to-use/additional-naverpay-order.md +69 -0
  127. package/assets/docs/help/core-service/how-to-use/additional-naverpay.md +72 -0
  128. package/assets/docs/help/core-service/how-to-use/additional-nice.md +112 -0
  129. package/assets/docs/help/core-service/how-to-use/additional-payco.md +68 -0
  130. package/assets/docs/help/core-service/how-to-use/additional-settle.md +70 -0
  131. package/assets/docs/help/core-service/how-to-use/additional-smartro.md +70 -0
  132. package/assets/docs/help/core-service/how-to-use/additional-tosspay.md +57 -0
  133. package/assets/docs/help/core-service/how-to-use/additional-tosspayments.md +47 -0
  134. package/assets/docs/help/core-service/how-to-use/additional-welcome.md +72 -0
  135. package/assets/docs/help/core-service/how-to-use/cancel-deadline-by-paymethod.md +68 -0
  136. package/assets/docs/help/core-service/how-to-use/cancel-guide-using-admin-console.md +49 -0
  137. package/assets/docs/help/core-service/how-to-use/cancel-reversal.md +114 -0
  138. package/assets/docs/help/core-service/how-to-use/cellphone-identity-verification.md +62 -0
  139. package/assets/docs/help/core-service/how-to-use/content200000.md +72 -0
  140. package/assets/docs/help/core-service/how-to-use/content200009.md +83 -0
  141. package/assets/docs/help/core-service/how-to-use/danal-contract.md +82 -0
  142. package/assets/docs/help/core-service/how-to-use/daou-contract.md +82 -0
  143. package/assets/docs/help/core-service/how-to-use/eximbay-contract.md +75 -0
  144. package/assets/docs/help/core-service/how-to-use/high-risk-industry.md +554 -0
  145. package/assets/docs/help/core-service/how-to-use/identity-verification-value.md +61 -0
  146. package/assets/docs/help/core-service/how-to-use/impossible-partial-cancel.md +53 -0
  147. package/assets/docs/help/core-service/how-to-use/information-pg.md +151 -0
  148. package/assets/docs/help/core-service/how-to-use/inicis-contract.md +95 -0
  149. package/assets/docs/help/core-service/how-to-use/inicis-vat.md +45 -0
  150. package/assets/docs/help/core-service/how-to-use/inicis-vbank-refund.md +45 -0
  151. package/assets/docs/help/core-service/how-to-use/kakao-contract.md +73 -0
  152. package/assets/docs/help/core-service/how-to-use/kakaopay-contract.md +41 -0
  153. package/assets/docs/help/core-service/how-to-use/kcp-contract.md +82 -0
  154. package/assets/docs/help/core-service/how-to-use/kcp-vat.md +39 -0
  155. package/assets/docs/help/core-service/how-to-use/kcp-vbank-refund.md +46 -0
  156. package/assets/docs/help/core-service/how-to-use/kicc-contract.md +81 -0
  157. package/assets/docs/help/core-service/how-to-use/ksnet-contract.md +78 -0
  158. package/assets/docs/help/core-service/how-to-use/mobilians-contract.md +81 -0
  159. package/assets/docs/help/core-service/how-to-use/naverpay-contract.md +86 -0
  160. package/assets/docs/help/core-service/how-to-use/naverpay-order-1.md +36 -0
  161. package/assets/docs/help/core-service/how-to-use/naverpay-order-contract.md +88 -0
  162. package/assets/docs/help/core-service/how-to-use/naverpay-order-diff.md +66 -0
  163. package/assets/docs/help/core-service/how-to-use/naverpay-order-review-items.md +66 -0
  164. package/assets/docs/help/core-service/how-to-use/naverpay-review-items.md +199 -0
  165. package/assets/docs/help/core-service/how-to-use/nice-contract.md +81 -0
  166. package/assets/docs/help/core-service/how-to-use/open-immediately.md +60 -0
  167. package/assets/docs/help/core-service/how-to-use/other-hosting-company.md +38 -0
  168. package/assets/docs/help/core-service/how-to-use/payco-contract.md +74 -0
  169. package/assets/docs/help/core-service/how-to-use/payment-settlement-method.md +30 -0
  170. package/assets/docs/help/core-service/how-to-use/paymentwall-contract.md +85 -0
  171. package/assets/docs/help/core-service/how-to-use/paypal-contract.md +66 -0
  172. package/assets/docs/help/core-service/how-to-use/point-service.md +293 -0
  173. package/assets/docs/help/core-service/how-to-use/refund-date.md +66 -0
  174. package/assets/docs/help/core-service/how-to-use/requirements.md +100 -0
  175. package/assets/docs/help/core-service/how-to-use/settle-contract.md +79 -0
  176. package/assets/docs/help/core-service/how-to-use/shopify-available-list.md +65 -0
  177. package/assets/docs/help/core-service/how-to-use/shopify-guide.md +62 -0
  178. package/assets/docs/help/core-service/how-to-use/small-business-commission-fee.md +55 -0
  179. package/assets/docs/help/core-service/how-to-use/smartro-contract.md +77 -0
  180. package/assets/docs/help/core-service/how-to-use/test-mode-cancel.md +63 -0
  181. package/assets/docs/help/core-service/how-to-use/tosspay-contract.md +82 -0
  182. package/assets/docs/help/core-service/how-to-use/tosspayments-contract.md +82 -0
  183. package/assets/docs/help/core-service/how-to-use/welcome-contract.md +81 -0
  184. package/assets/docs/help/core-service/how-to-use/withsoft-guide.md +69 -0
  185. package/assets/docs/help/core-service/how-to-use/wordpress-available-pg.md +49 -0
  186. package/assets/docs/help/core-service/how-to-use/wordpress-setting.md +50 -0
  187. package/assets/docs/help/core-service/payment-type/billing-key.md +72 -0
  188. package/assets/docs/help/core-service/payment-type/content200003.md +39 -0
  189. package/assets/docs/help/core-service/payment-type/content200007.md +176 -0
  190. package/assets/docs/help/core-service/payment-type/content200036.md +37 -0
  191. package/assets/docs/help/core-service/payment-type/content200042.md +150 -0
  192. package/assets/docs/help/core-service/payment-type/content200047.md +215 -0
  193. package/assets/docs/help/core-service/payment-type/content200052.md +142 -0
  194. package/assets/docs/help/core-service/payment-type/content200053.md +128 -0
  195. package/assets/docs/help/core-service/payment-type/crossborder.md +132 -0
  196. package/assets/docs/help/core-service/payment-type/eximbay-international.md +96 -0
  197. package/assets/docs/help/core-service/payment-type/hub-service-fee.md +79 -0
  198. package/assets/docs/help/core-service/payment-type/inicis-easypay-hub-fee.md +45 -0
  199. package/assets/docs/help/core-service/payment-type/inicis-international.md +65 -0
  200. package/assets/docs/help/core-service/payment-type/internationl-high-risk-industry.md +267 -0
  201. package/assets/docs/help/core-service/payment-type/internationl-pg.md +42 -0
  202. package/assets/docs/help/core-service/payment-type/kcp-easypay-hub-apply.md +49 -0
  203. package/assets/docs/help/core-service/payment-type/kcp-international.md +60 -0
  204. package/assets/docs/help/core-service/payment-type/nice-easypay-hub-fee.md +72 -0
  205. package/assets/docs/help/core-service/payment-type/nice-international.md +51 -0
  206. package/assets/docs/help/core-service/payment-type/paymentwall-international.md +84 -0
  207. package/assets/docs/help/core-service/payment-type/paypal-international.md +86 -0
  208. package/assets/docs/help/core-service/payment-type/paypal-payment-status.md +55 -0
  209. package/assets/docs/help/core-service/payment-type/schedule-logic-guide.md +49 -0
  210. package/assets/docs/help/core-service/payment-type/schedule-requirement.md +111 -0
  211. package/assets/docs/help/core-service/payment-type/schedule-validity-guide.md +68 -0
  212. package/assets/docs/help/core-service/payment-type/tosspayment-international.md +54 -0
  213. package/assets/docs/help/core-service/payment-type/tosspayments-easypay-hub-fee.md +42 -0
  214. package/assets/docs/help/core-service/payment-type/webhook-re-send.md +41 -0
  215. package/assets/docs/help/faq/console-faq/2-depth-auth.md +53 -0
  216. package/assets/docs/help/faq/console-faq/add-admin-account.md +42 -0
  217. package/assets/docs/help/faq/console-faq/change-console-url.md +51 -0
  218. package/assets/docs/help/faq/console-faq/impossible-login.md +30 -0
  219. package/assets/docs/help/faq/console-faq/payment-list.md +45 -0
  220. package/assets/docs/help/faq/console-faq/sub-store-mgnt.md +97 -0
  221. package/assets/docs/help/faq/general-inquiry/change-business-number.md +32 -0
  222. package/assets/docs/help/faq/general-inquiry/confirm-process.md +118 -0
  223. package/assets/docs/help/faq/general-inquiry/content200004.md +55 -0
  224. package/assets/docs/help/faq/general-inquiry/content200006.md +86 -0
  225. package/assets/docs/help/faq/general-inquiry/content200011.md +24 -0
  226. package/assets/docs/help/faq/general-inquiry/content200031.md +194 -0
  227. package/assets/docs/help/faq/general-inquiry/content200041.md +21 -0
  228. package/assets/docs/help/faq/general-inquiry/contract-checkpoint.md +49 -0
  229. package/assets/docs/help/faq/general-inquiry/main-user.md +56 -0
  230. package/assets/docs/help/faq/general-inquiry/platform-contract-method.md +67 -0
  231. package/assets/docs/help/faq/general-inquiry/platform-contract-pg.md +234 -0
  232. package/assets/docs/help/faq/general-inquiry/portone-advantages.md +71 -0
  233. package/assets/docs/help/faq/general-inquiry/real-channel-info.md +70 -0
  234. package/assets/docs/help/faq/general-inquiry/what-is-the-small-business-fee.md +41 -0
  235. package/assets/docs/help/faq/payment-faq/business-card-available.md +55 -0
  236. package/assets/docs/help/faq/payment-faq/business-info-change.md +96 -0
  237. package/assets/docs/help/faq/payment-faq/cancel-deadline.md +32 -0
  238. package/assets/docs/help/faq/payment-faq/cancel-guide.md +48 -0
  239. package/assets/docs/help/faq/payment-faq/cash-receipt-guide.md +64 -0
  240. package/assets/docs/help/faq/payment-faq/content200022.md +73 -0
  241. package/assets/docs/help/faq/payment-faq/pg-max-min-amount.md +158 -0
  242. package/assets/docs/help/faq/payment-faq/receipt-guide.md +38 -0
  243. package/assets/docs/help/faq/payment-faq/tosspayments-cash-receipt.md +32 -0
  244. package/assets/docs/help/faq/payment-faq/vbank-info.md +35 -0
  245. package/assets/docs/help/faq/payment-faq/vbank-service-detail.md +67 -0
  246. package/assets/docs/help/faq/payment-faq/vbank-test-guide.md +65 -0
  247. package/assets/docs/help/faq/platform-faq/platform_function_partnerbulkupload.md +190 -0
  248. package/assets/docs/help/faq/platform-faq/platform_infosec.md +56 -0
  249. package/assets/docs/help/faq/platform-faq/platform_nocode_guide.md +104 -0
  250. package/assets/docs/help/faq/platform-faq/platform_payout_guide.md +75 -0
  251. package/assets/docs/help/faq/platform-faq/platform_policymanagement_calculator.md +73 -0
  252. package/assets/docs/help/faq/platform-faq/platform_settlmentandpayout_guide.md +83 -0
  253. package/assets/docs/help/faq/platform-faq/platform_tax_setting_guide.md +108 -0
  254. package/assets/docs/help/faq/platform-faq/taxinvoice_guide.md +107 -0
  255. package/assets/docs/help/faq/platform-faq/taxinvoice_signupemail.md +67 -0
  256. package/assets/docs/help/holidays.md +29 -0
  257. package/assets/docs/help/notice-kakaopay-2025-06-30.md +47 -0
  258. package/assets/docs/help/platform-2024-11-07.md +73 -0
  259. package/assets/docs/help/platform-2024-11-25.md +91 -0
  260. package/assets/docs/help/platform-2024-12-10.md +71 -0
  261. package/assets/docs/help/platform-2025-03-04.md +54 -0
  262. package/assets/docs/help/platform-2025-04-03.md +105 -0
  263. package/assets/docs/help/platform-2025-04-08.md +120 -0
  264. package/assets/docs/help/platform-2025-05-14.md +70 -0
  265. package/assets/docs/help/platform-2025-1-16.md +65 -0
  266. package/assets/docs/help/platform-2025-2-10.md +75 -0
  267. package/assets/docs/help/platform-2025-2-13.md +43 -0
  268. package/assets/docs/help/portone-service/portone-service/content50.md +80 -0
  269. package/assets/docs/help/pricing/pg/domestic-and-oversea-fees.md +34 -0
  270. package/assets/docs/help/pricing/portone/portone-pricing.md +116 -0
  271. package/assets/docs/help/procedure/payment-integration/real-integration.md +43 -0
  272. package/assets/docs/help/procedure/payment-integration/test-integration.md +91 -0
  273. package/assets/docs/help/procedure/pg-application/content53.md +49 -0
  274. package/assets/docs/help/procedure/pg-application/content54.md +136 -0
  275. package/assets/docs/help/procedure/pg-application/content59.md +53 -0
  276. package/assets/docs/help/procedure/pg-application/start.md +154 -0
  277. package/assets/docs/help/procedure/recommendation/package.md +98 -0
  278. package/assets/docs/help/procedure/service-addition/add-service.md +98 -0
  279. package/assets/docs/help/recon_issue1.md +25 -0
  280. package/assets/docs/help/recon_issue2.md +29 -0
  281. package/assets/docs/help/service/identity-verification/identity-verification.md +65 -0
  282. package/assets/docs/help/service/integration-type/integration-type.md +49 -0
  283. package/assets/docs/help/service/payment-type/payment-type.md +100 -0
  284. package/assets/docs/help/service/paymethod/paymethod.md +100 -0
  285. package/assets/docs/help/service/pg/pg-service-list.md +339 -0
  286. package/assets/docs/help/service/version/portone-version.md +61 -0
  287. package/assets/docs/opi/ko/console/guide/account.md +111 -0
  288. package/assets/docs/opi/ko/console/guide/api-keys.md +34 -0
  289. package/assets/docs/opi/ko/console/guide/billing-payments.md +312 -0
  290. package/assets/docs/opi/ko/console/guide/channel-manage.md +303 -0
  291. package/assets/docs/opi/ko/console/guide/connect.md +84 -0
  292. package/assets/docs/opi/ko/console/guide/home.md +37 -0
  293. package/assets/docs/opi/ko/console/guide/integration.md +18 -0
  294. package/assets/docs/opi/ko/console/guide/list.md +183 -0
  295. package/assets/docs/opi/ko/console/guide/pay.md +14 -0
  296. package/assets/docs/opi/ko/console/guide/payments.md +298 -0
  297. package/assets/docs/opi/ko/console/guide/promotion.md +140 -0
  298. package/assets/docs/opi/ko/console/guide/readme.md +22 -0
  299. package/assets/docs/opi/ko/console/guide/reg.md +159 -0
  300. package/assets/docs/opi/ko/console/guide/smartrouting.md +74 -0
  301. package/assets/docs/opi/ko/console/pg.md +92 -0
  302. package/assets/docs/opi/ko/etc/recon.md +286 -0
  303. package/assets/docs/opi/ko/extra/confirm-process/readme-v1.md +98 -0
  304. package/assets/docs/opi/ko/extra/confirm-process/readme-v2.md +152 -0
  305. package/assets/docs/opi/ko/extra/identity-verification/readme-v2.md +261 -0
  306. package/assets/docs/opi/ko/extra/identity-verification/v1/all/0.md +35 -0
  307. package/assets/docs/opi/ko/extra/identity-verification/v1/all/1.md +44 -0
  308. package/assets/docs/opi/ko/extra/identity-verification/v1/all/2.md +75 -0
  309. package/assets/docs/opi/ko/extra/identity-verification/v1/all/3.md +134 -0
  310. package/assets/docs/opi/ko/extra/identity-verification/v1/all/readme.md +17 -0
  311. package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/1.md +35 -0
  312. package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/2.md +78 -0
  313. package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/3.md +75 -0
  314. package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/4.md +134 -0
  315. package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/readme.md +17 -0
  316. package/assets/docs/opi/ko/extra/identity-verification/v1/phone/1.md +37 -0
  317. package/assets/docs/opi/ko/extra/identity-verification/v1/phone/2.md +86 -0
  318. package/assets/docs/opi/ko/extra/identity-verification/v1/phone/3.md +77 -0
  319. package/assets/docs/opi/ko/extra/identity-verification/v1/phone/4.md +149 -0
  320. package/assets/docs/opi/ko/extra/identity-verification/v1/phone/readme.md +19 -0
  321. package/assets/docs/opi/ko/extra/identity-verification/v1/readme.md +9 -0
  322. package/assets/docs/opi/ko/extra/link-pay/readme-v1.md +235 -0
  323. package/assets/docs/opi/ko/extra/plugins/readme-v1.md +7 -0
  324. package/assets/docs/opi/ko/extra/plugins/shopify/readme-v1.md +54 -0
  325. package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-1.md +16 -0
  326. package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-2.md +32 -0
  327. package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-3.md +16 -0
  328. package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-4.md +35 -0
  329. package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-5.md +27 -0
  330. package/assets/docs/opi/ko/extra/plugins/wordpress/button.md +166 -0
  331. package/assets/docs/opi/ko/extra/plugins/wordpress/edd.md +56 -0
  332. package/assets/docs/opi/ko/extra/plugins/wordpress/readme-v1.md +10 -0
  333. package/assets/docs/opi/ko/extra/plugins/wordpress/woocommerce/payment.md +62 -0
  334. package/assets/docs/opi/ko/extra/plugins/wordpress/woocommerce/readme.md +30 -0
  335. package/assets/docs/opi/ko/extra/plugins/wordpress/woocommerce/subscription.md +60 -0
  336. package/assets/docs/opi/ko/extra/plugins/wordpress/woocommerce/vbank.md +64 -0
  337. package/assets/docs/opi/ko/extra/promotion/console-guide.md +148 -0
  338. package/assets/docs/opi/ko/extra/promotion/integration.md +769 -0
  339. package/assets/docs/opi/ko/extra/promotion/intro.md +31 -0
  340. package/assets/docs/opi/ko/extra/promotion/refund.md +316 -0
  341. package/assets/docs/opi/ko/extra/smart-routing/console-guide.md +73 -0
  342. package/assets/docs/opi/ko/extra/smart-routing/integration.md +1324 -0
  343. package/assets/docs/opi/ko/extra/smart-routing/intro.md +155 -0
  344. package/assets/docs/opi/ko/integration/cancel/v1/basic.md +324 -0
  345. package/assets/docs/opi/ko/integration/cancel/v1/virtual-account.md +99 -0
  346. package/assets/docs/opi/ko/integration/cancel/v2/readme.md +378 -0
  347. package/assets/docs/opi/ko/integration/checklist/readme-v1.md +83 -0
  348. package/assets/docs/opi/ko/integration/pg/v1/blue.md +99 -0
  349. package/assets/docs/opi/ko/integration/pg/v1/danal.md +409 -0
  350. package/assets/docs/opi/ko/integration/pg/v1/daou/readme.md +305 -0
  351. package/assets/docs/opi/ko/integration/pg/v1/daou/undefined.md +214 -0
  352. package/assets/docs/opi/ko/integration/pg/v1/eximbay.md +242 -0
  353. package/assets/docs/opi/ko/integration/pg/v1/hyphen.md +196 -0
  354. package/assets/docs/opi/ko/integration/pg/v1/inicis.md +444 -0
  355. package/assets/docs/opi/ko/integration/pg/v1/kakaopay.md +207 -0
  356. package/assets/docs/opi/ko/integration/pg/v1/kcp-v2-identity-verification.md +188 -0
  357. package/assets/docs/opi/ko/integration/pg/v1/kg.md +177 -0
  358. package/assets/docs/opi/ko/integration/pg/v1/kicc.md +308 -0
  359. package/assets/docs/opi/ko/integration/pg/v1/ksnet/readme.md +533 -0
  360. package/assets/docs/opi/ko/integration/pg/v1/ksnet/warning.md +175 -0
  361. package/assets/docs/opi/ko/integration/pg/v1/naver.md +558 -0
  362. package/assets/docs/opi/ko/integration/pg/v1/newtoss/readme.md +503 -0
  363. package/assets/docs/opi/ko/integration/pg/v1/newtoss/warning.md +364 -0
  364. package/assets/docs/opi/ko/integration/pg/v1/nhn-kcp.md +1186 -0
  365. package/assets/docs/opi/ko/integration/pg/v1/nice-v2/billing-api-caution.md +150 -0
  366. package/assets/docs/opi/ko/integration/pg/v1/nice-v2/payment-caution.md +429 -0
  367. package/assets/docs/opi/ko/integration/pg/v1/nice-v2/readme.md +364 -0
  368. package/assets/docs/opi/ko/integration/pg/v1/nice.md +319 -0
  369. package/assets/docs/opi/ko/integration/pg/v1/payco.md +201 -0
  370. package/assets/docs/opi/ko/integration/pg/v1/paymentwall.md +283 -0
  371. package/assets/docs/opi/ko/integration/pg/v1/paypal.md +158 -0
  372. package/assets/docs/opi/ko/integration/pg/v1/readme.md +73 -0
  373. package/assets/docs/opi/ko/integration/pg/v1/rt/readme.md +501 -0
  374. package/assets/docs/opi/ko/integration/pg/v1/rt/warning.md +297 -0
  375. package/assets/docs/opi/ko/integration/pg/v1/settle/mybank.md +304 -0
  376. package/assets/docs/opi/ko/integration/pg/v1/settle/readme.md +185 -0
  377. package/assets/docs/opi/ko/integration/pg/v1/smartro-v2/api.md +197 -0
  378. package/assets/docs/opi/ko/integration/pg/v1/smartro-v2/caution.md +387 -0
  379. package/assets/docs/opi/ko/integration/pg/v1/smartro-v2/readme.md +293 -0
  380. package/assets/docs/opi/ko/integration/pg/v1/smartro.md +104 -0
  381. package/assets/docs/opi/ko/integration/pg/v1/smilepay.md +97 -0
  382. package/assets/docs/opi/ko/integration/pg/v1/spb/readme.md +441 -0
  383. package/assets/docs/opi/ko/integration/pg/v1/spb/stc.md +226 -0
  384. package/assets/docs/opi/ko/integration/pg/v1/spb/warning.md +729 -0
  385. package/assets/docs/opi/ko/integration/pg/v1/toss-brandpay/module.md +227 -0
  386. package/assets/docs/opi/ko/integration/pg/v1/toss-brandpay/readme.md +404 -0
  387. package/assets/docs/opi/ko/integration/pg/v1/toss-brandpay/warning.md +81 -0
  388. package/assets/docs/opi/ko/integration/pg/v1/toss-brandpay/widget.md +152 -0
  389. package/assets/docs/opi/ko/integration/pg/v1/toss.md +112 -0
  390. package/assets/docs/opi/ko/integration/pg/v1/tosspay-v2/caution.md +65 -0
  391. package/assets/docs/opi/ko/integration/pg/v1/tosspay-v2/readme.md +308 -0
  392. package/assets/docs/opi/ko/integration/pg/v1/tosspay.md +110 -0
  393. package/assets/docs/opi/ko/integration/pg/v1/welcome/api.md +229 -0
  394. package/assets/docs/opi/ko/integration/pg/v1/welcome/caution.md +517 -0
  395. package/assets/docs/opi/ko/integration/pg/v1/welcome/readme.md +795 -0
  396. package/assets/docs/opi/ko/integration/pg/v2/danal-identity-verification.md +121 -0
  397. package/assets/docs/opi/ko/integration/pg/v2/eximbay-v2.md +964 -0
  398. package/assets/docs/opi/ko/integration/pg/v2/hyphen.md +205 -0
  399. package/assets/docs/opi/ko/integration/pg/v2/inicis-jp.md +403 -0
  400. package/assets/docs/opi/ko/integration/pg/v2/inicis-unified-identity-verification.md +89 -0
  401. package/assets/docs/opi/ko/integration/pg/v2/inicis-v2.md +1598 -0
  402. package/assets/docs/opi/ko/integration/pg/v2/kakaopay.md +108 -0
  403. package/assets/docs/opi/ko/integration/pg/v2/kcp-v2-identity-verification.md +291 -0
  404. package/assets/docs/opi/ko/integration/pg/v2/kcp-v2.md +1273 -0
  405. package/assets/docs/opi/ko/integration/pg/v2/kpn.md +1133 -0
  406. package/assets/docs/opi/ko/integration/pg/v2/ksnet.md +526 -0
  407. package/assets/docs/opi/ko/integration/pg/v2/naverpay.md +186 -0
  408. package/assets/docs/opi/ko/integration/pg/v2/nice-v2.md +868 -0
  409. package/assets/docs/opi/ko/integration/pg/v2/payletter-global.md +62 -0
  410. package/assets/docs/opi/ko/integration/pg/v2/paypal-v2.md +1874 -0
  411. package/assets/docs/opi/ko/integration/pg/v2/readme.md +194 -0
  412. package/assets/docs/opi/ko/integration/pg/v2/smartro-v2.md +1043 -0
  413. package/assets/docs/opi/ko/integration/pg/v2/tosspay-v2.md +433 -0
  414. package/assets/docs/opi/ko/integration/pg/v2/tosspayments.md +551 -0
  415. package/assets/docs/opi/ko/integration/pg/v2/welcome.md +1441 -0
  416. package/assets/docs/opi/ko/integration/ready/readme.md +1069 -0
  417. package/assets/docs/opi/ko/integration/start/v1/auth.md +483 -0
  418. package/assets/docs/opi/ko/integration/start/v1/non-auth.md +420 -0
  419. package/assets/docs/opi/ko/integration/start/v1/readme.md +9 -0
  420. package/assets/docs/opi/ko/integration/start/v2/billing/issue.md +122 -0
  421. package/assets/docs/opi/ko/integration/start/v2/billing/payment.md +41 -0
  422. package/assets/docs/opi/ko/integration/start/v2/billing/readme.md +24 -0
  423. package/assets/docs/opi/ko/integration/start/v2/billing/schedule.md +54 -0
  424. package/assets/docs/opi/ko/integration/start/v2/checkout.md +258 -0
  425. package/assets/docs/opi/ko/integration/start/v2/keyin.md +54 -0
  426. package/assets/docs/opi/ko/integration/start/v2/readme.md +120 -0
  427. package/assets/docs/opi/ko/integration/using-ai-tools.md +140 -0
  428. package/assets/docs/opi/ko/integration/virtual-account/readme.md +268 -0
  429. package/assets/docs/opi/ko/integration/webhook/readme-v1.md +242 -0
  430. package/assets/docs/opi/ko/integration/webhook/readme-v2.md +599 -0
  431. package/assets/docs/opi/ko/quick-guide/payment.md +3305 -0
  432. package/assets/docs/opi/ko/readme.md +193 -0
  433. package/assets/docs/opi/ko/support/agency-and-tier.md +51 -0
  434. package/assets/docs/opi/ko/support/code-info/card-code.md +29 -0
  435. package/assets/docs/opi/ko/support/code-info/code.md +22 -0
  436. package/assets/docs/opi/ko/support/code-info/pg-1.md +161 -0
  437. package/assets/docs/opi/ko/support/code-info/pg-2.md +41 -0
  438. package/assets/docs/opi/ko/support/code-info/pg-3.md +36 -0
  439. package/assets/docs/opi/ko/support/code-info/pg.md +41 -0
  440. package/assets/docs/opi/ko/support/code-info/portone-code.md +15 -0
  441. package/assets/docs/opi/ko/support/code-info/readme.md +20 -0
  442. package/assets/docs/opi/ko/support/contact.md +23 -0
  443. package/assets/docs/opi/ko/support/faq/undefined.md +60 -0
  444. package/assets/docs/opi/ko/support/flow.md +24 -0
  445. package/assets/docs/opi/ko/support/redirect.md +26 -0
  446. package/assets/docs/opi/ko/support/tax.md +142 -0
  447. package/assets/docs/opi/ko/support/tls-support.md +497 -0
  448. package/assets/docs/platform/ko/guides/dictionary.md +20 -0
  449. package/assets/docs/platform/ko/guides/process.md +33 -0
  450. package/assets/docs/platform/ko/guides/webhook.md +171 -0
  451. package/assets/docs/platform/ko/readme.md +64 -0
  452. package/assets/docs/platform/ko/usages/client.md +17 -0
  453. package/assets/docs/platform/ko/usages/contract.md +126 -0
  454. package/assets/docs/platform/ko/usages/discount.md +89 -0
  455. package/assets/docs/platform/ko/usages/fee.md +97 -0
  456. package/assets/docs/platform/ko/usages/order.md +1666 -0
  457. package/assets/docs/platform/ko/usages/partner.md +115 -0
  458. package/assets/docs/platform/ko/using-ai-tools.md +140 -0
  459. package/assets/docs/release-notes/api-sdk/2023-04-24.md +10 -0
  460. package/assets/docs/release-notes/api-sdk/2023-05-08.md +22 -0
  461. package/assets/docs/release-notes/api-sdk/2023-05-12.md +24 -0
  462. package/assets/docs/release-notes/api-sdk/2023-05-22.md +46 -0
  463. package/assets/docs/release-notes/api-sdk/2023-05-25.md +15 -0
  464. package/assets/docs/release-notes/api-sdk/2023-06-19.md +20 -0
  465. package/assets/docs/release-notes/api-sdk/2023-07-03.md +26 -0
  466. package/assets/docs/release-notes/api-sdk/2023-07-10.md +35 -0
  467. package/assets/docs/release-notes/api-sdk/2023-07-17.md +31 -0
  468. package/assets/docs/release-notes/api-sdk/2023-07-31.md +14 -0
  469. package/assets/docs/release-notes/api-sdk/2023-08-31.md +29 -0
  470. package/assets/docs/release-notes/api-sdk/2023-12-15.md +12 -0
  471. package/assets/docs/release-notes/api-sdk/2024-01-08.md +36 -0
  472. package/assets/docs/release-notes/api-sdk/2024-01-11.md +18 -0
  473. package/assets/docs/release-notes/api-sdk/2024-01-25.md +35 -0
  474. package/assets/docs/release-notes/api-sdk/2024-01-30.md +19 -0
  475. package/assets/docs/release-notes/api-sdk/2024-02-23.md +26 -0
  476. package/assets/docs/release-notes/api-sdk/2024-03-08.md +12 -0
  477. package/assets/docs/release-notes/api-sdk/2024-03-15.md +30 -0
  478. package/assets/docs/release-notes/api-sdk/2024-03-25.md +23 -0
  479. package/assets/docs/release-notes/api-sdk/2024-04-01.md +37 -0
  480. package/assets/docs/release-notes/api-sdk/2024-04-05.md +10 -0
  481. package/assets/docs/release-notes/api-sdk/2024-04-12.md +32 -0
  482. package/assets/docs/release-notes/api-sdk/2024-05-08.md +34 -0
  483. package/assets/docs/release-notes/api-sdk/2024-05-14.md +17 -0
  484. package/assets/docs/release-notes/api-sdk/2024-06-03.md +48 -0
  485. package/assets/docs/release-notes/api-sdk/2024-06-17.md +37 -0
  486. package/assets/docs/release-notes/api-sdk/2024-06-19.md +39 -0
  487. package/assets/docs/release-notes/api-sdk/2024-06-20.md +13 -0
  488. package/assets/docs/release-notes/api-sdk/2024-07-04.md +15 -0
  489. package/assets/docs/release-notes/api-sdk/2024-07-11.md +47 -0
  490. package/assets/docs/release-notes/api-sdk/2024-09-05.md +36 -0
  491. package/assets/docs/release-notes/api-sdk/2024-09-27.md +27 -0
  492. package/assets/docs/release-notes/api-sdk/2024-12-19.md +52 -0
  493. package/assets/docs/release-notes/api-sdk/2025-01-15.md +76 -0
  494. package/assets/docs/release-notes/api-sdk/2025-05-19.md +49 -0
  495. package/assets/docs/release-notes/console/2023-04-24.md +41 -0
  496. package/assets/docs/release-notes/console/2023-05-08.md +6 -0
  497. package/assets/docs/release-notes/console/2023-05-22.md +15 -0
  498. package/assets/docs/release-notes/console/2023-07-05.md +29 -0
  499. package/assets/docs/release-notes/console/2023-07-07.md +25 -0
  500. package/assets/docs/release-notes/console/2023-07-17.md +16 -0
  501. package/assets/docs/release-notes/console/2023-08-23.md +17 -0
  502. package/assets/docs/release-notes/console/2023-09-12.md +16 -0
  503. package/assets/docs/release-notes/console/2023-12-27.md +24 -0
  504. package/assets/docs/release-notes/console/2024-09-05.md +23 -0
  505. package/assets/docs/release-notes/platform/2023-08-31.md +16 -0
  506. package/assets/docs/release-notes/platform/2023-11-08.md +37 -0
  507. package/assets/docs/release-notes/platform/2023-11-14.md +28 -0
  508. package/assets/docs/release-notes/platform/2023-12-15.md +11 -0
  509. package/assets/docs/release-notes/platform/2024-05-20.md +31 -0
  510. package/assets/docs/release-notes/platform/2024-05-29.md +159 -0
  511. package/assets/docs/release-notes/platform/2024-06-05.md +30 -0
  512. package/assets/docs/release-notes/platform/2024-07-05.md +49 -0
  513. package/assets/docs/release-notes/platform/2024-07-11.md +62 -0
  514. package/assets/docs/release-notes/platform/2024-07-30.md +44 -0
  515. package/assets/docs/release-notes/platform/2024-08-07.md +37 -0
  516. package/assets/docs/release-notes/platform/2024-08-22.md +111 -0
  517. package/assets/docs/release-notes/platform/2024-10-21.md +75 -0
  518. package/assets/docs/release-notes/platform/2024-11-07.md +65 -0
  519. package/assets/docs/release-notes/platform/2024-11-25.md +82 -0
  520. package/assets/docs/release-notes/platform/2024-12-10.md +61 -0
  521. package/assets/docs/release-notes/platform/2025-01-16.md +56 -0
  522. package/assets/docs/release-notes/platform/2025-02-10.md +67 -0
  523. package/assets/docs/release-notes/platform/2025-02-13.md +27 -0
  524. package/assets/docs/release-notes/platform/2025-03-04.md +49 -0
  525. package/assets/docs/release-notes/platform/2025-03-17.md +40 -0
  526. package/assets/docs/release-notes/platform/2025-04-03.md +96 -0
  527. package/assets/docs/release-notes/platform/2025-04-08.md +119 -0
  528. package/assets/docs/release-notes/platform/2025-05-14.md +77 -0
  529. package/assets/docs/release-notes/platform/2025-07-02.md +64 -0
  530. package/assets/docs/release-notes/platform/2025-07-07.md +55 -0
  531. package/assets/docs/schema/browser-sdk.yml +6349 -0
  532. package/assets/docs/schema/v1.openapi.json +11632 -0
  533. package/assets/docs/schema/v1.openapi.yml +11489 -0
  534. package/assets/docs/schema/v2.graphql +13849 -0
  535. package/assets/docs/schema/v2.openapi.json +47721 -0
  536. package/assets/docs/schema/v2.openapi.yml +34749 -0
  537. package/assets/docs/sdk/ko/readme.md +56 -0
  538. package/assets/docs/sdk/ko/v1-mobile-sdk/readme.md +31 -0
  539. package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/cft-rt.md +32 -0
  540. package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/cft.md +108 -0
  541. package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/load-module-rt.md +10 -0
  542. package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/load-module.md +55 -0
  543. package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/payrq.md +502 -0
  544. package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/payrt.md +300 -0
  545. package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/readme.md +46 -0
  546. package/assets/docs/sdk/ko/v1-sdk/javascript-sdk-old/readme.md +33 -0
  547. package/assets/docs/sdk/ko/v2-mobile-sdk/android.md +268 -0
  548. package/assets/docs/sdk/ko/v2-mobile-sdk/react-native.md +239 -0
  549. package/assets/docs/sdk/ko/v2-mobile-sdk/readme.md +30 -0
  550. package/assets/docs/sdk/ko/v2-sdk/billing-key-and-pay-request.md +26 -0
  551. package/assets/docs/sdk/ko/v2-sdk/billing-key-and-pay-response.md +15 -0
  552. package/assets/docs/sdk/ko/v2-sdk/billing-key-request.md +24 -0
  553. package/assets/docs/sdk/ko/v2-sdk/billing-key-response.md +15 -0
  554. package/assets/docs/sdk/ko/v2-sdk/changelog.md +8 -0
  555. package/assets/docs/sdk/ko/v2-sdk/identity-verification-request.md +15 -0
  556. package/assets/docs/sdk/ko/v2-sdk/identity-verification-response.md +15 -0
  557. package/assets/docs/sdk/ko/v2-sdk/load-issue-billing-key-ui-request.md +15 -0
  558. package/assets/docs/sdk/ko/v2-sdk/load-issue-billing-key-ui-response.md +23 -0
  559. package/assets/docs/sdk/ko/v2-sdk/load-payment-ui-request.md +15 -0
  560. package/assets/docs/sdk/ko/v2-sdk/load-payment-ui-response.md +23 -0
  561. package/assets/docs/sdk/ko/v2-sdk/payment-request.md +15 -0
  562. package/assets/docs/sdk/ko/v2-sdk/payment-response.md +15 -0
  563. package/assets/docs/sdk/ko/v2-sdk/readme.md +73 -0
  564. package/assets/docs/sdk/ko/v2-sdk/update-load-issue-billing-key-ui-request.md +15 -0
  565. package/assets/docs/sdk/ko/v2-sdk/update-load-payment-ui-request.md +15 -0
  566. package/assets/docs/sdk/ko/v2-server-sdk/javascript.md +170 -0
  567. package/assets/docs/sdk/ko/v2-server-sdk/jvm.md +170 -0
  568. package/assets/docs/sdk/ko/v2-server-sdk/python.md +152 -0
  569. package/assets/docs/sdk/ko/v2-server-sdk/readme.md +259 -0
  570. package/assets/docs/v1-docs-full.md +36540 -0
  571. package/assets/docs/v2-docs-full.md +34980 -0
  572. package/assets/docs/website-links.md +331 -0
  573. package/assets/instructions.md +19 -0
  574. package/manifest.json +50 -0
  575. package/package.json +66 -0
  576. package/server/index.js +1764 -0
@@ -0,0 +1,1764 @@
1
+ #!/usr/bin/env node
2
+ var __defProp = Object.defineProperty;
3
+ var __export = (target, all) => {
4
+ for (var name13 in all)
5
+ __defProp(target, name13, { get: all[name13], enumerable: true });
6
+ };
7
+
8
+ // src/index.ts
9
+ import { dirname, join as join4 } from "path";
10
+ import { fileURLToPath } from "url";
11
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
12
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
13
+
14
+ // package.json
15
+ var package_default = {
16
+ name: "@portone/mcp-server",
17
+ version: "0.13.0",
18
+ description: "\uD3EC\uD2B8\uC6D0 \uC0AC\uC6A9\uC790\uB97C \uC704\uD55C MCP (Model Context Protocol) \uC11C\uBC84\uC785\uB2C8\uB2E4. \uD3EC\uD2B8\uC6D0 \uAC1C\uBC1C\uC790\uC13C\uD130, \uD5EC\uD504\uC13C\uD130 \uB4F1 \uACF5\uC2DD \uBB38\uC11C \uB0B4\uC6A9\uC744 LLM(Large Language Model)\uC5D0 \uC81C\uACF5\uD574 \uC815\uD655\uD55C \uC815\uBCF4\uB97C \uBC14\uD0D5\uC73C\uB85C \uC0AC\uC6A9\uC790\uC758 \uC5F0\uB3D9 \uBC0F \uC9C8\uC758\uB97C \uB3D5\uB3C4\uB85D \uD569\uB2C8\uB2E4.",
19
+ main: "server/index.js",
20
+ type: "module",
21
+ bin: {
22
+ "portone-mcp-server": "./server/index.js"
23
+ },
24
+ scripts: {
25
+ test: "vitest",
26
+ "update-docs": "node --experimental-strip-types update-docs.ts",
27
+ build: "tsup src/index.ts --outDir server --format esm",
28
+ "build:dxt": "node --experimental-strip-types scripts/build-dxt.ts",
29
+ dev: "node --experimental-strip-types src/index.ts",
30
+ start: "node server/index.js",
31
+ lint: "biome check .",
32
+ format: "biome format --write .",
33
+ typecheck: "tsc --noEmit",
34
+ "changeset:version": "changeset version && node scripts/sync-manifest-version.js && biome format --write manifest.json"
35
+ },
36
+ keywords: [
37
+ "mcp",
38
+ "portone",
39
+ "model-context-protocol"
40
+ ],
41
+ author: {
42
+ name: "PortOne",
43
+ email: "tech.support@portone.io"
44
+ },
45
+ license: "MIT OR Apache-2.0",
46
+ dependencies: {
47
+ "@modelcontextprotocol/sdk": "^1.15.0",
48
+ "@portone/server-sdk": "^0.15.0",
49
+ axios: "^1.7.2",
50
+ "gray-matter": "^4.0.3",
51
+ "js-yaml": "^4.1.0",
52
+ "ts-pattern": "^5.7.1",
53
+ zod: "^3.25.75"
54
+ },
55
+ packageManager: "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad",
56
+ devDependencies: {
57
+ "@biomejs/biome": "2.0.6",
58
+ "@changesets/cli": "^2.29.5",
59
+ "@types/js-yaml": "^4.0.9",
60
+ "@types/node": "^24.0.10",
61
+ tsup: "^8.5.0",
62
+ "type-fest": "^4.41.0",
63
+ typescript: "^5.8.3",
64
+ vitest: "^1.6.0"
65
+ },
66
+ engines: {
67
+ node: ">=22.6.0"
68
+ },
69
+ files: [
70
+ "server",
71
+ "assets",
72
+ "manifest.json",
73
+ "LICENSE-APACHE",
74
+ "LICENSE-MIT",
75
+ "README.md"
76
+ ],
77
+ repository: {
78
+ type: "git",
79
+ url: "https://github.com/portone-io/portone-mcp-server.git"
80
+ }
81
+ };
82
+
83
+ // src/loader/index.ts
84
+ import { join as join3 } from "path";
85
+
86
+ // src/loader/documents.ts
87
+ import { readdirSync, readFileSync as readFileSync2, statSync } from "fs";
88
+ import { join as join2, relative } from "path";
89
+
90
+ // src/loader/markdown.ts
91
+ import matter from "gray-matter";
92
+ function parseMarkdown(content) {
93
+ try {
94
+ const { data, content: body, matter: rawMatter } = matter(content);
95
+ if (Object.keys(data).length === 0) {
96
+ return { content };
97
+ }
98
+ const frontmatter = {
99
+ title: data.title,
100
+ description: data.description,
101
+ targetVersions: data.targetVersions,
102
+ allFieldsDict: data,
103
+ rawString: rawMatter || ""
104
+ };
105
+ return {
106
+ content: body,
107
+ frontmatter
108
+ };
109
+ } catch (error) {
110
+ console.error("Error parsing markdown frontmatter:", error);
111
+ return { content };
112
+ }
113
+ }
114
+
115
+ // src/loader/schema.ts
116
+ import { readFileSync } from "fs";
117
+ import { join } from "path";
118
+ import { load } from "js-yaml";
119
+ async function loadSchema(schemaPath) {
120
+ return {
121
+ openapiV1Json: {
122
+ content: readFileSync(join(schemaPath, "v1.openapi.json"), "utf-8")
123
+ },
124
+ openapiV1Yml: load(
125
+ readFileSync(join(schemaPath, "v1.openapi.yml"), "utf-8")
126
+ ),
127
+ openapiV2Json: {
128
+ content: readFileSync(join(schemaPath, "v2.openapi.json"), "utf-8")
129
+ },
130
+ openapiV2Yml: load(
131
+ readFileSync(join(schemaPath, "v2.openapi.yml"), "utf-8")
132
+ ),
133
+ browserSdkV2Yml: load(
134
+ readFileSync(join(schemaPath, "browser-sdk.yml"), "utf-8")
135
+ ),
136
+ graphqlV2: {
137
+ content: readFileSync(join(schemaPath, "v2.graphql"), "utf-8")
138
+ }
139
+ };
140
+ }
141
+
142
+ // src/loader/documents.ts
143
+ async function loadDocuments(assetsPath) {
144
+ const docsPath = join2(assetsPath, "docs");
145
+ const readmePath = join2(docsPath, "README.md");
146
+ const readme = readFileSync2(readmePath, "utf-8");
147
+ const markdownDocs = await loadMarkdownDocs(docsPath);
148
+ const schemaPath = join2(docsPath, "schema");
149
+ const schema = await loadSchema(schemaPath);
150
+ return {
151
+ readme,
152
+ markdownDocs,
153
+ schema
154
+ };
155
+ }
156
+ async function loadMarkdownDocs(docsPath) {
157
+ const docs = {};
158
+ const excludedFiles = ["v1-docs-full.md", "v2-docs-full.md"];
159
+ function walkDir(dir) {
160
+ const files = readdirSync(dir);
161
+ for (const file of files) {
162
+ const fullPath = join2(dir, file);
163
+ const stat = statSync(fullPath);
164
+ if (stat.isDirectory()) {
165
+ walkDir(fullPath);
166
+ } else if (file.endsWith(".md") && !excludedFiles.includes(file)) {
167
+ const relativePath = relative(docsPath, fullPath);
168
+ const content = readFileSync2(fullPath, "utf-8");
169
+ const parsed = parseMarkdown(content);
170
+ docs[relativePath] = {
171
+ path: relativePath,
172
+ ...parsed
173
+ };
174
+ }
175
+ }
176
+ }
177
+ walkDir(docsPath);
178
+ return docs;
179
+ }
180
+
181
+ // src/loader/index.ts
182
+ async function loadResources(assetsPath) {
183
+ const instructionsPath = join3(assetsPath, "instructions.md");
184
+ const instructions = await loadInstructions(instructionsPath);
185
+ const documents = await loadDocuments(assetsPath);
186
+ return {
187
+ instructions,
188
+ documents
189
+ };
190
+ }
191
+ async function loadInstructions(path) {
192
+ try {
193
+ const { readFileSync: readFileSync3 } = await import("fs");
194
+ return readFileSync3(path, "utf-8");
195
+ } catch (error) {
196
+ console.error(`Failed to load instructions from ${path}:`, error);
197
+ return "";
198
+ }
199
+ }
200
+
201
+ // src/tools/getIdentityVerification.ts
202
+ var getIdentityVerification_exports = {};
203
+ __export(getIdentityVerification_exports, {
204
+ config: () => config,
205
+ init: () => init,
206
+ name: () => name
207
+ });
208
+ import z2 from "zod";
209
+
210
+ // src/tools/utils/portoneRest.ts
211
+ import z from "zod";
212
+ var PgProviderSchema = z.enum([
213
+ "HTML5_INICIS",
214
+ "PAYPAL",
215
+ "PAYPAL_V2",
216
+ "INICIS",
217
+ "DANAL",
218
+ "NICE",
219
+ "DANAL_TPAY",
220
+ "JTNET",
221
+ "UPLUS",
222
+ "NAVERPAY",
223
+ "KAKAO",
224
+ "SETTLE",
225
+ "KCP",
226
+ "MOBILIANS",
227
+ "KAKAOPAY",
228
+ "NAVERCO",
229
+ "SYRUP",
230
+ "KICC",
231
+ "EXIMBAY",
232
+ "SMILEPAY",
233
+ "PAYCO",
234
+ "KCP_BILLING",
235
+ "ALIPAY",
236
+ "PAYPLE",
237
+ "CHAI",
238
+ "BLUEWALNUT",
239
+ "SMARTRO",
240
+ "SMARTRO_V2",
241
+ "PAYMENTWALL",
242
+ "TOSSPAYMENTS",
243
+ "KCP_QUICK",
244
+ "DAOU",
245
+ "GALAXIA",
246
+ "TOSSPAY",
247
+ "KCP_DIRECT",
248
+ "SETTLE_ACC",
249
+ "SETTLE_FIRM",
250
+ "INICIS_UNIFIED",
251
+ "KSNET",
252
+ "PINPAY",
253
+ "NICE_V2",
254
+ "TOSS_BRANDPAY",
255
+ "WELCOME",
256
+ "TOSSPAY_V2",
257
+ "INICIS_V2",
258
+ "KPN",
259
+ "KCP_V2",
260
+ "HYPHEN",
261
+ "EXIMBAY_V2",
262
+ "INICIS_JP",
263
+ "PAYLETTER_GLOBAL"
264
+ ]);
265
+ var PortOneVersion = z.enum(["V1", "V2"]);
266
+ var PAYMENT_FIELDS = [
267
+ "status",
268
+ "id",
269
+ "transactionId",
270
+ "storeId",
271
+ "version",
272
+ "scheduleId",
273
+ "requestedAt",
274
+ "updatedAt",
275
+ "statusChangedAt",
276
+ "orderName",
277
+ "amount",
278
+ "currency",
279
+ "promotionId",
280
+ "isCulturalExpense",
281
+ "products",
282
+ "productCount",
283
+ "country",
284
+ "paidAt",
285
+ "cancelledAt",
286
+ "failedAt",
287
+ "failure",
288
+ "method.type",
289
+ // 간편결제
290
+ "method.method.type",
291
+ "channel.type",
292
+ "channel.name",
293
+ "channel.pgProvider",
294
+ "escrow.status",
295
+ "escrow.company",
296
+ "escrow.sentAt",
297
+ "escrow.appliedAt",
298
+ "escrow.isAutomaticallyConfirmed",
299
+ "cashReceipt.status",
300
+ "cashReceipt.type",
301
+ "cashReceipt.totalAmount",
302
+ "cashReceipt.taxFreeAmount",
303
+ "cashReceipt.currency",
304
+ "cashReceipt.issuedAt",
305
+ "cashReceipt.cancelledAt",
306
+ "cancellations.status",
307
+ "cancellations.id",
308
+ "cancellations.totalAmount",
309
+ "cancellations.taxFreeAmount",
310
+ "cancellations.vatAmount",
311
+ "cancellations.easyPayDiscountAmount",
312
+ "cancellations.reason",
313
+ "cancellations.cancelledAt",
314
+ "cancellations.requestedAt",
315
+ "cancellations.trigger",
316
+ "disputes.status",
317
+ "disputes.reason",
318
+ "disputes.createdAt",
319
+ "disputes.resolvedAt",
320
+ "channelGroup.name",
321
+ "channelGroup.isForTest"
322
+ ];
323
+ var PaymentField = z.enum(PAYMENT_FIELDS);
324
+ var IDENTITY_VERIFICATION_FIELDS = [
325
+ "status",
326
+ "id",
327
+ "requestedAt",
328
+ "updatedAt",
329
+ "statusChangedAt",
330
+ "failure",
331
+ "version",
332
+ "channel.type",
333
+ "channel.name",
334
+ "channel.pgProvider"
335
+ ];
336
+ var IdentityVerificationField = z.enum(IDENTITY_VERIFICATION_FIELDS);
337
+ var JsonLiteral = z.string().or(z.number()).or(z.boolean());
338
+ var JsonValue = z.lazy(
339
+ () => JsonLiteral.or(z.array(JsonValue)).or(z.record(JsonValue))
340
+ );
341
+ function filterFields(fields, data) {
342
+ const withPrefixes = new Set(fields);
343
+ for (const field of fields) {
344
+ let searchPos = 0;
345
+ while (true) {
346
+ const dot = field.indexOf(".", searchPos);
347
+ if (dot === -1) break;
348
+ withPrefixes.add(field.slice(0, dot));
349
+ searchPos = dot + 1;
350
+ }
351
+ }
352
+ const parsed = JsonValue.safeParse(data);
353
+ if (parsed.success) {
354
+ return filterFieldsPath(parsed.data, "");
355
+ } else {
356
+ throw parsed.error;
357
+ }
358
+ function filterFieldsPath(data2, currentPath) {
359
+ if (typeof data2 === "object") {
360
+ if (Array.isArray(data2)) {
361
+ return data2.map((item) => filterFieldsPath(item, currentPath));
362
+ } else {
363
+ return Object.fromEntries(
364
+ Object.entries(data2).flatMap(([key, value]) => {
365
+ const childPath = currentPath === "" ? key : `${currentPath}.${key}`;
366
+ if (withPrefixes.has(childPath)) {
367
+ return [[key, filterFieldsPath(value, childPath)]];
368
+ } else {
369
+ return [];
370
+ }
371
+ })
372
+ );
373
+ }
374
+ } else {
375
+ return data2;
376
+ }
377
+ }
378
+ }
379
+
380
+ // src/tools/getIdentityVerification.ts
381
+ var name = "getIdentityVerification";
382
+ var config = {
383
+ title: "\uD3EC\uD2B8\uC6D0 \uBCF8\uC778\uC778\uC99D \uC815\uBCF4 \uC870\uD68C",
384
+ description: `\uACE0\uAC1D\uC0AC \uBCF8\uC778\uC778\uC99D \uAC70\uB798\uBC88\uD638\uB85C \uD3EC\uD2B8\uC6D0 \uC11C\uBC84\uC5D0\uC11C \uBCF8\uC778\uC778\uC99D \uC815\uBCF4\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4.
385
+ \uACE0\uAC1D\uC0AC \uBCF8\uC778\uC778\uC99D \uAC70\uB798\uBC88\uD638\uB294 \uD3EC\uD2B8\uC6D0 V1\uC5D0\uC11C\uB294 merchant_uid\uC774\uBA70, V2\uC5D0\uC11C\uB294 identityVerificationId\uC5D0 \uD574\uB2F9\uD569\uB2C8\uB2E4.
386
+
387
+ Note:
388
+ UNAUTHORIZED \uC5D0\uB7EC\uC758 \uACBD\uC6B0 MCP \uC11C\uBC84\uC758 API_SECRET \uD658\uACBD\uBCC0\uC218 \uC124\uC815\uC774 \uC798\uBABB\uB418\uC5C8\uC744 \uAC00\uB2A5\uC131\uC774 \uC788\uC2B5\uB2C8\uB2E4.
389
+ \uC18C\uBB38\uC790 imp_ \uD639\uC740 imps_ \uB85C \uC2DC\uC791\uD558\uB294 \uAC70\uB798\uBC88\uD638\uB294 \uACE0\uAC1D\uC0AC \uAC70\uB798\uBC88\uD638\uAC00 \uC544\uB2CC V1 \uD3EC\uD2B8\uC6D0 \uAC70\uB798\uBC88\uD638(imp_uid)\uC77C \uAC00\uB2A5\uC131\uC774 \uC788\uC2B5\uB2C8\uB2E4.
390
+ \uB0A0\uC9DC \uBC0F \uC2DC\uAC04 \uC815\uBCF4 \uD574\uC11D\uC5D0\uB294 \uD0C0\uC784\uC874\uC5D0 \uC720\uC758\uD558\uC138\uC694. \uD3EC\uD2B8\uC6D0\uC5D0\uC11C\uB294 RFC 3339\uB97C \uC0AC\uC6A9\uD558\uBA70, Z\uB294 Zulu Time\uC744 \uC758\uBBF8\uD569\uB2C8\uB2E4.`,
391
+ inputSchema: {
392
+ identityVerificationId: z2.string().describe("\uACE0\uAC1D\uC0AC\uC5D0\uC11C \uBC1C\uAE09\uD55C \uBCF8\uC778\uC778\uC99D \uAC70\uB798\uBC88\uD638\uC785\uB2C8\uB2E4."),
393
+ storeId: z2.string().optional().describe(
394
+ "\uD558\uC704 \uC0C1\uC810\uC744 \uD3EC\uD568\uD55C \uD2B9\uC815 \uC0C1\uC810\uC758 \uC778\uC99D \uAC74\uB9CC\uC744 \uC870\uD68C\uD560 \uACBD\uC6B0\uC5D0\uB9CC \uC785\uB825\uD569\uB2C8\uB2E4. `store-id-{uuid}` \uD615\uC2DD\uC785\uB2C8\uB2E4."
395
+ )
396
+ },
397
+ outputSchema: {
398
+ result: z2.object({}).passthrough().describe("\uBCF8\uC778\uC778\uC99D \uC815\uBCF4")
399
+ }
400
+ };
401
+ function init(httpClient) {
402
+ return async ({ identityVerificationId, storeId }) => {
403
+ const params = new URLSearchParams();
404
+ if (storeId) {
405
+ params.set("storeId", storeId);
406
+ }
407
+ const url = `/identity-verifications/${identityVerificationId}${params.toString() ? `?${params.toString()}` : ""}`;
408
+ try {
409
+ const response = await httpClient.get(url);
410
+ if (!response.ok) {
411
+ const errorText = await response.text();
412
+ return {
413
+ content: [
414
+ {
415
+ type: "text",
416
+ text: errorText
417
+ }
418
+ ],
419
+ isError: true
420
+ };
421
+ }
422
+ const data = await response.json();
423
+ const maskedData = filterFields(IDENTITY_VERIFICATION_FIELDS, data);
424
+ const structuredContent = {
425
+ result: maskedData
426
+ };
427
+ return {
428
+ content: [
429
+ {
430
+ type: "text",
431
+ text: JSON.stringify(structuredContent, null, 2)
432
+ }
433
+ ],
434
+ structuredContent
435
+ };
436
+ } catch {
437
+ return {
438
+ content: [
439
+ {
440
+ type: "text",
441
+ text: `\uC11C\uBC84\uB85C\uBD80\uD130 \uC798\uBABB\uB41C \uC751\uB2F5 \uC218\uC2E0`
442
+ }
443
+ ],
444
+ isError: true
445
+ };
446
+ }
447
+ };
448
+ }
449
+
450
+ // src/tools/getIdentityVerificationsByFilter.ts
451
+ var getIdentityVerificationsByFilter_exports = {};
452
+ __export(getIdentityVerificationsByFilter_exports, {
453
+ config: () => config2,
454
+ init: () => init2,
455
+ name: () => name2
456
+ });
457
+ import z3 from "zod";
458
+
459
+ // src/tools/utils/mapping.ts
460
+ function filterOutNone(obj) {
461
+ return Object.fromEntries(
462
+ Object.entries(obj).filter(([_, value]) => value !== void 0)
463
+ );
464
+ }
465
+
466
+ // src/tools/getIdentityVerificationsByFilter.ts
467
+ var IdentityVerificationTimeStamp = z3.enum([
468
+ "REQUESTED_AT",
469
+ "VERIFIED_AT",
470
+ "FAILED_AT",
471
+ "STATUS_UPDATED_AT"
472
+ ]);
473
+ var IdentityVerificationStatus = z3.enum(["READY", "VERIFIED", "FAILED"]);
474
+ var Carrier = z3.enum(["SKT", "KT", "LGU", "SKT_MVNO", "KT_MVNO", "LGU_MVNO"]);
475
+ var name2 = "getIdentityVerificationsByFilter";
476
+ var config2 = {
477
+ title: "\uD3EC\uD2B8\uC6D0 \uBCF8\uC778\uC778\uC99D \uB0B4\uC5ED \uAC80\uC0C9",
478
+ description: `\uD3EC\uD2B8\uC6D0 \uC11C\uBC84\uC5D0\uC11C \uC8FC\uC5B4\uC9C4 \uC870\uAC74\uC744 \uBAA8\uB450 \uB9CC\uC871\uD558\uB294 \uBCF8\uC778\uC778\uC99D \uC815\uBCF4\uB97C \uAC80\uC0C9\uD569\uB2C8\uB2E4.
479
+
480
+ Note:
481
+ \uCD5C\uB300 10\uAC1C\uC758 \uACB0\uACFC\uB9CC \uBC18\uD658\uB429\uB2C8\uB2E4.
482
+ UNAUTHORIZED \uC5D0\uB7EC\uC758 \uACBD\uC6B0 MCP \uC11C\uBC84\uC758 API_SECRET \uD658\uACBD\uBCC0\uC218 \uC124\uC815\uC774 \uC798\uBABB\uB418\uC5C8\uC744 \uAC00\uB2A5\uC131\uC774 \uC788\uC2B5\uB2C8\uB2E4.
483
+ \uB0A0\uC9DC \uBC0F \uC2DC\uAC04 \uC815\uBCF4 \uC785\uCD9C\uB825 \uC2DC\uC5D0\uB294 \uBC18\uB4DC\uC2DC \uD0C0\uC784\uC874\uC744 \uBA85\uC2DC\uD569\uB2C8\uB2E4.`,
484
+ inputSchema: {
485
+ fromTime: z3.string().datetime({ offset: true }).describe("\uC870\uD68C \uC2DC\uC791 \uC2DC\uAC04 (ISO 8601 \uD615\uC2DD)"),
486
+ untilTime: z3.string().datetime({ offset: true }).describe("\uC870\uD68C \uC885\uB8CC \uC2DC\uAC04 (ISO 8601 \uD615\uC2DD)"),
487
+ pageIndex: z3.number().min(0).describe("\uAC80\uC0C9\uD560 \uD398\uC774\uC9C0 \uC704\uCE58\uC785\uB2C8\uB2E4. 0\uBD80\uD130 \uC2DC\uC791\uD569\uB2C8\uB2E4."),
488
+ pageSize: z3.number().min(1).default(10).describe("\uD55C \uD398\uC774\uC9C0\uC5D0 \uBC18\uD658\uD560 \uACB0\uACFC\uC758 \uC218\uC785\uB2C8\uB2E4."),
489
+ fields: z3.array(IdentityVerificationField).describe("\uAC80\uC0C9 \uACB0\uACFC\uB85C \uBC1B\uC744 \uD544\uB4DC \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
490
+ timestampType: IdentityVerificationTimeStamp.default(
491
+ "STATUS_UPDATED_AT"
492
+ ).describe(`\uC870\uD68C \uBC94\uC704\uC758 \uAE30\uC900\uC774 \uBCF8\uC778\uC778\uC99D\uC744 \uCC98\uC74C \uC2DC\uB3C4\uD55C \uC2DC\uAC01\uC774\uBA74 "REQUESTED_AT",
493
+ \uBCF8\uC778\uC778\uC99D\uC774 \uC644\uB8CC\uB41C \uC2DC\uAC01\uC774\uBA74 "VERIFIED_AT", \uC2E4\uD328\uD55C \uC2DC\uAC01\uC774\uBA74 "FAILED_AT",
494
+ \uB9C8\uC9C0\uB9C9\uC73C\uB85C \uC0C1\uD0DC\uAC00 \uBCC0\uACBD\uB41C \uC2DC\uAC01\uC774\uBA74 "STATUS_UPDATED_AT"\uC785\uB2C8\uB2E4.`),
495
+ storeId: z3.string().optional().describe(
496
+ "\uD558\uC704 \uC0C1\uC810\uC744 \uD3EC\uD568\uD55C \uD2B9\uC815 \uC0C1\uC810\uC758 \uC778\uC99D \uAC74\uB9CC\uC744 \uC870\uD68C\uD560 \uACBD\uC6B0\uC5D0\uB9CC \uC785\uB825\uD569\uB2C8\uB2E4. `store-id-{uuid}` \uD615\uC2DD\uC785\uB2C8\uB2E4."
497
+ ),
498
+ status: z3.array(IdentityVerificationStatus).optional().describe("\uD3EC\uD568\uD560 \uBCF8\uC778\uC778\uC99D \uC0C1\uD0DC \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
499
+ pgProvider: z3.array(PgProviderSchema).optional().describe("\uBCF8\uC778\uC778\uC99D\uC774 \uC77C\uC5B4\uB09C \uACB0\uC81C\uB300\uD589\uC0AC \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
500
+ version: z3.enum(["V1", "V2"]).optional().describe("\uD3EC\uD568\uD560 \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC785\uB2C8\uB2E4. \uBBF8\uC785\uB825 \uC2DC \uBAA8\uB450 \uAC80\uC0C9\uB429\uB2C8\uB2E4."),
501
+ carrier: z3.array(Carrier).optional().describe("\uD3EC\uD568\uD560 \uD1B5\uC2E0\uC0AC \uBAA9\uB85D\uC785\uB2C8\uB2E4. MVNO\uB294 \uC54C\uB730\uD3F0\uC744 \uB73B\uD569\uB2C8\uB2E4."),
502
+ customerName: z3.string().optional().describe("\uBC1C\uAE09\uC790\uC758 \uC131\uBA85 \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4."),
503
+ pgMerchantId: z3.string().optional().describe("\uACB0\uC81C\uB300\uD589\uC0AC\uC5D0\uC11C \uC81C\uACF5\uD55C \uC0C1\uC810\uC544\uC774\uB514 (MID) \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4."),
504
+ isTest: z3.boolean().default(true).describe(
505
+ "\uD14C\uC2A4\uD2B8 \uC778\uC99D \uAC74\uC744 \uD3EC\uD568\uD560\uC9C0 \uC5EC\uBD80\uC785\uB2C8\uB2E4. \uBBF8\uC785\uB825 \uC2DC `true`\uC785\uB2C8\uB2E4."
506
+ )
507
+ },
508
+ outputSchema: {
509
+ items: z3.array(z3.object({}).passthrough()).describe("\uC870\uD68C\uB41C \uBCF8\uC778\uC778\uC99D \uAC74\uC758 \uBAA9\uB85D"),
510
+ totalCount: z3.number().describe("\uC870\uAC74\uC5D0 \uB9DE\uB294 \uBCF8\uC778\uC778\uC99D \uAC74\uC758 \uCD1D \uAC1C\uC218")
511
+ }
512
+ };
513
+ function init2(httpClient) {
514
+ return async ({
515
+ fromTime,
516
+ untilTime,
517
+ pageIndex,
518
+ pageSize,
519
+ fields,
520
+ timestampType,
521
+ storeId,
522
+ status,
523
+ pgProvider,
524
+ carrier,
525
+ customerName,
526
+ version,
527
+ pgMerchantId,
528
+ isTest
529
+ }) => {
530
+ const searchFilter = filterOutNone({
531
+ from: fromTime,
532
+ until: untilTime,
533
+ timeRangeField: timestampType,
534
+ storeId,
535
+ statuses: status,
536
+ pgProviders: pgProvider,
537
+ version,
538
+ carriers: carrier,
539
+ pgMerchantId,
540
+ isTest,
541
+ customer: filterOutNone({
542
+ name: customerName
543
+ })
544
+ });
545
+ const response = await httpClient.get(
546
+ `/identity-verifications?requestBody=${encodeURIComponent(
547
+ JSON.stringify({
548
+ filter: searchFilter,
549
+ page: {
550
+ number: pageIndex,
551
+ size: pageSize
552
+ }
553
+ })
554
+ )}`
555
+ );
556
+ if (!response.ok) {
557
+ const text = await response.text();
558
+ return { content: [{ type: "text", text }], isError: true };
559
+ }
560
+ try {
561
+ const data = await response.json();
562
+ const maskedItems = filterFields(fields, data.items);
563
+ const structuredContent = {
564
+ items: maskedItems,
565
+ totalCount: data.page.totalCount
566
+ };
567
+ return {
568
+ content: [
569
+ {
570
+ type: "text",
571
+ text: JSON.stringify(structuredContent, null, 2)
572
+ }
573
+ ],
574
+ structuredContent
575
+ };
576
+ } catch {
577
+ return {
578
+ content: [{ type: "text", text: "\uC11C\uBC84\uB85C\uBD80\uD130 \uC798\uBABB\uB41C \uC751\uB2F5 \uC218\uC2E0" }],
579
+ isError: true
580
+ };
581
+ }
582
+ };
583
+ }
584
+
585
+ // src/tools/getPayment.ts
586
+ var getPayment_exports = {};
587
+ __export(getPayment_exports, {
588
+ config: () => config3,
589
+ init: () => init3,
590
+ name: () => name3
591
+ });
592
+ import z4 from "zod";
593
+ var name3 = "getPayment";
594
+ var config3 = {
595
+ title: "\uD3EC\uD2B8\uC6D0 \uACB0\uC81C \uC815\uBCF4 \uC870\uD68C",
596
+ description: `\uACE0\uAC1D\uC0AC \uAC70\uB798\uBC88\uD638\uB85C \uD3EC\uD2B8\uC6D0 \uC11C\uBC84\uC5D0\uC11C \uACB0\uC81C \uB0B4\uC5ED\uC744 \uAC80\uC0C9\uD569\uB2C8\uB2E4. \uACE0\uAC1D\uC0AC \uAC70\uB798\uBC88\uD638\uB294 \uD3EC\uD2B8\uC6D0 V1\uC5D0\uC11C\uB294 merchant_uid\uC774\uBA70, V2\uC5D0\uC11C\uB294 paymentId\uC5D0 \uD574\uB2F9\uD569\uB2C8\uB2E4.`,
597
+ inputSchema: {
598
+ paymentId: z4.string().describe("\uACE0\uAC1D\uC0AC\uC5D0\uC11C \uBC1C\uAE09\uD55C \uAC70\uB798\uBC88\uD638\uC785\uB2C8\uB2E4."),
599
+ storeId: z4.string().optional().describe(
600
+ "\uD558\uC704 \uC0C1\uC810\uC744 \uD3EC\uD568\uD55C \uD2B9\uC815 \uC0C1\uC810\uC758 \uACB0\uC81C \uAC74\uB9CC\uC744 \uC870\uD68C\uD560 \uACBD\uC6B0\uC5D0\uB9CC \uC785\uB825\uD569\uB2C8\uB2E4. `store-id-{uuid}` \uD615\uC2DD\uC785\uB2C8\uB2E4."
601
+ )
602
+ },
603
+ outputSchema: {
604
+ result: z4.object({}).passthrough().describe("\uB9C8\uC2A4\uD0B9\uB41C \uACB0\uC81C \uC815\uBCF4")
605
+ }
606
+ };
607
+ function init3(httpClient) {
608
+ return async ({ paymentId, storeId }) => {
609
+ const params = new URLSearchParams();
610
+ if (storeId) {
611
+ params.set("storeId", storeId);
612
+ }
613
+ const url = `/payments/${paymentId}${params.toString() ? `?${params.toString()}` : ""}`;
614
+ try {
615
+ const response = await httpClient.get(url);
616
+ if (!response.ok) {
617
+ const errorText = await response.text();
618
+ return {
619
+ content: [
620
+ {
621
+ type: "text",
622
+ text: errorText
623
+ }
624
+ ],
625
+ isError: true
626
+ };
627
+ }
628
+ const data = await response.json();
629
+ const maskedData = filterFields(PAYMENT_FIELDS, data);
630
+ const structuredContent = {
631
+ result: maskedData
632
+ };
633
+ return {
634
+ content: [
635
+ {
636
+ type: "text",
637
+ text: JSON.stringify(structuredContent, null, 2)
638
+ }
639
+ ],
640
+ structuredContent
641
+ };
642
+ } catch {
643
+ return {
644
+ content: [
645
+ {
646
+ type: "text",
647
+ text: `\uC11C\uBC84\uB85C\uBD80\uD130 \uC798\uBABB\uB41C \uC751\uB2F5 \uC218\uC2E0`
648
+ }
649
+ ],
650
+ isError: true
651
+ };
652
+ }
653
+ };
654
+ }
655
+
656
+ // src/tools/getPaymentsByFilter.ts
657
+ var getPaymentsByFilter_exports = {};
658
+ __export(getPaymentsByFilter_exports, {
659
+ config: () => config4,
660
+ init: () => init4,
661
+ name: () => name4
662
+ });
663
+ import z5 from "zod";
664
+ var PaymentTimeRangeField = z5.enum(["CREATED_AT", "STATUS_CHANGED_AT"]);
665
+ var PaymentStatus = z5.enum([
666
+ "READY",
667
+ "PENDING",
668
+ "VIRTUAL_ACCOUNT_ISSUED",
669
+ "PAID",
670
+ "FAILED",
671
+ "PARTIAL_CANCELLED",
672
+ "CANCELLED"
673
+ ]);
674
+ var PaymentMethodType = z5.enum([
675
+ "CARD",
676
+ "TRANSFER",
677
+ "VIRTUAL_ACCOUNT",
678
+ "GIFT_CERTIFICATE",
679
+ "MOBILE",
680
+ "EASY_PAY",
681
+ "CONVENIENCE_STORE"
682
+ ]);
683
+ var name4 = "getPaymentsByFilter";
684
+ var config4 = {
685
+ title: "\uD3EC\uD2B8\uC6D0 \uACB0\uC81C \uB0B4\uC5ED \uAC80\uC0C9",
686
+ description: `\uD3EC\uD2B8\uC6D0 \uC11C\uBC84\uC5D0\uC11C \uC8FC\uC5B4\uC9C4 \uC870\uAC74\uC744 \uBAA8\uB450 \uB9CC\uC871\uD558\uB294 \uACB0\uC81C \uB0B4\uC5ED\uC744 \uCD5C\uB300 10\uAC1C\uAE4C\uC9C0 \uAC80\uC0C9\uD569\uB2C8\uB2E4.
687
+
688
+ Note:
689
+ UNAUTHORIZED \uC5D0\uB7EC\uC758 \uACBD\uC6B0 MCP \uC11C\uBC84\uC758 API_SECRET \uD658\uACBD\uBCC0\uC218 \uC124\uC815\uC774 \uC798\uBABB\uB418\uC5C8\uC744 \uAC00\uB2A5\uC131\uC774 \uC788\uC2B5\uB2C8\uB2E4.
690
+ \uC18C\uBB38\uC790 imp_ \uD639\uC740 imps_ \uB85C \uC2DC\uC791\uD558\uB294 \uAC70\uB798\uBC88\uD638\uB294 \uACE0\uAC1D\uC0AC \uAC70\uB798\uBC88\uD638\uAC00 \uC544\uB2CC V1 \uD3EC\uD2B8\uC6D0 \uAC70\uB798\uBC88\uD638(imp_uid)\uC77C \uAC00\uB2A5\uC131\uC774 \uC788\uC2B5\uB2C8\uB2E4.
691
+ \uB0A0\uC9DC \uBC0F \uC2DC\uAC04 \uC815\uBCF4 \uC785\uCD9C\uB825 \uC2DC\uC5D0\uB294 \uBC18\uB4DC\uC2DC \uD0C0\uC784\uC874\uC744 \uBA85\uC2DC\uD569\uB2C8\uB2E4.`,
692
+ inputSchema: {
693
+ fromTime: z5.string().datetime({ offset: true }).describe("\uC870\uD68C \uC2DC\uC791 \uC2DC\uAC04 (ISO 8601 \uD615\uC2DD)"),
694
+ untilTime: z5.string().datetime({ offset: true }).describe("\uC870\uD68C \uC885\uB8CC \uC2DC\uAC04 (ISO 8601 \uD615\uC2DD)"),
695
+ pageIndex: z5.number().min(0).describe("\uAC80\uC0C9\uD560 \uD398\uC774\uC9C0 \uC704\uCE58\uC785\uB2C8\uB2E4. 0\uBD80\uD130 \uC2DC\uC791\uD569\uB2C8\uB2E4."),
696
+ pageSize: z5.number().min(1).default(10).describe("\uD55C \uD398\uC774\uC9C0\uC5D0 \uBC18\uD658\uD560 \uACB0\uACFC\uC758 \uC218\uC785\uB2C8\uB2E4."),
697
+ fields: z5.array(PaymentField).describe("\uAC80\uC0C9 \uACB0\uACFC\uB85C \uBC1B\uC744 \uD544\uB4DC \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
698
+ timestampType: PaymentTimeRangeField.optional().default("STATUS_CHANGED_AT").describe(`\uC870\uD68C \uBC94\uC704\uAC00 \uACB0\uC81C\uB97C \uCC98\uC74C \uC2DC\uB3C4\uD55C \uC2DC\uAC01 \uAE30\uC900\uC774\uBA74 "CREATED_AT",
699
+ \uB9C8\uC9C0\uB9C9\uC73C\uB85C \uACB0\uC81C \uC0C1\uD0DC\uAC00 \uBCC0\uACBD\uB41C \uC2DC\uAC01 \uAE30\uC900\uC774\uBA74 "STATUS_CHANGED_AT"\uC785\uB2C8\uB2E4.
700
+ \uBBF8\uC785\uB825 \uC2DC "STATUS_CHANGED_AT"\uC785\uB2C8\uB2E4.`),
701
+ storeId: z5.string().optional().describe(
702
+ "\uD558\uC704 \uC0C1\uC810\uC744 \uD3EC\uD568\uD55C \uD2B9\uC815 \uC0C1\uC810\uC758 \uACB0\uC81C \uAC74\uB9CC\uC744 \uC870\uD68C\uD560 \uACBD\uC6B0\uC5D0\uB9CC \uC785\uB825\uD569\uB2C8\uB2E4. `store-id-{uuid}` \uD615\uC2DD\uC785\uB2C8\uB2E4."
703
+ ),
704
+ status: z5.array(PaymentStatus).optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C \uC0C1\uD0DC \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
705
+ methods: z5.array(PaymentMethodType).optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C \uC218\uB2E8 \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
706
+ pgProvider: z5.array(PgProviderSchema).optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C\uAC00 \uC77C\uC5B4\uB09C \uACB0\uC81C\uB300\uD589\uC0AC \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
707
+ isTest: z5.boolean().optional().default(true).describe("\uD14C\uC2A4\uD2B8 \uACB0\uC81C\uB97C \uD3EC\uD568\uD560\uC9C0 \uC5EC\uBD80\uC785\uB2C8\uB2E4. \uBBF8\uC785\uB825 \uC2DC `true`\uC785\uB2C8\uB2E4."),
708
+ version: z5.enum(["V1", "V2"]).optional().describe("\uD3EC\uD568\uD560 \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC785\uB2C8\uB2E4. \uBBF8\uC785\uB825 \uC2DC \uBAA8\uB450 \uAC80\uC0C9\uB429\uB2C8\uB2E4."),
709
+ currency: z5.string().optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C \uD1B5\uD654\uB97C \uB098\uD0C0\uB0B4\uB294 \uC138 \uC790\uB9AC \uD1B5\uD654 \uCF54\uB4DC\uC785\uB2C8\uB2E4."),
710
+ paymentId: z5.string().optional().describe(
711
+ "\uACE0\uAC1D\uC0AC\uC5D0\uC11C \uBC1C\uAE09\uD55C \uAC70\uB798\uBC88\uD638 \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4. V2\uC5D0\uC11C\uB294 paymentId, V1\uC5D0\uC11C\uB294 merchant_uid\uC5D0 \uB300\uC751\uB429\uB2C8\uB2E4."
712
+ ),
713
+ orderName: z5.string().optional().describe("\uACB0\uC81C \uC8FC\uBB38\uBA85 \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4."),
714
+ customerName: z5.string().optional().describe("\uAD6C\uB9E4\uC790\uC758 \uC131\uBA85 \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4."),
715
+ customerEmail: z5.string().optional().describe("\uAD6C\uB9E4\uC790\uC758 \uC774\uBA54\uC77C \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4."),
716
+ pgMerchantId: z5.string().optional().describe("\uACB0\uC81C\uB300\uD589\uC0AC\uC5D0\uC11C \uC81C\uACF5\uD55C \uC0C1\uC810\uC544\uC774\uB514 (MID) \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4.")
717
+ },
718
+ outputSchema: {
719
+ items: z5.array(z5.object({}).passthrough()).describe("\uC870\uD68C\uB41C \uACB0\uC81C \uAC74\uC758 \uBAA9\uB85D"),
720
+ totalCount: z5.number().describe("\uC870\uAC74\uC5D0 \uB9DE\uB294 \uBCF8\uC778\uC778\uC99D \uAC74\uC758 \uCD1D \uAC1C\uC218")
721
+ }
722
+ };
723
+ function init4(httpClient) {
724
+ return async ({
725
+ fromTime,
726
+ untilTime,
727
+ pageIndex,
728
+ pageSize,
729
+ fields,
730
+ timestampType,
731
+ storeId,
732
+ status,
733
+ methods,
734
+ pgProvider,
735
+ isTest,
736
+ version,
737
+ currency,
738
+ paymentId,
739
+ orderName,
740
+ customerName,
741
+ customerEmail,
742
+ pgMerchantId
743
+ }) => {
744
+ const textSearch = [
745
+ { field: "PAYMENT_ID", value: paymentId },
746
+ { field: "ORDER_NAME", value: orderName },
747
+ { field: "CUSTOMER_NAME", value: customerName },
748
+ { field: "CUSTOMER_EMAIL", value: customerEmail },
749
+ { field: "PG_MERCHANT_ID", value: pgMerchantId }
750
+ ].filter((item) => item.value !== void 0);
751
+ const searchFilter = filterOutNone({
752
+ from: fromTime,
753
+ until: untilTime,
754
+ timestampType,
755
+ storeId,
756
+ status,
757
+ methods,
758
+ pgProvider,
759
+ isTest,
760
+ version,
761
+ currency,
762
+ textSearch: textSearch.length > 0 ? textSearch : void 0
763
+ });
764
+ const response = await httpClient.get(
765
+ `/payments?requestBody=${encodeURIComponent(
766
+ JSON.stringify({
767
+ filter: searchFilter,
768
+ page: {
769
+ number: pageIndex,
770
+ size: pageSize
771
+ }
772
+ })
773
+ )}`
774
+ );
775
+ if (!response.ok) {
776
+ const text = await response.text();
777
+ return { content: [{ type: "text", text }], isError: true };
778
+ }
779
+ try {
780
+ const data = await response.json();
781
+ const maskedPayments = filterFields(fields, data.items);
782
+ const structuredContent = {
783
+ items: maskedPayments,
784
+ totalCount: data.page.totalCount
785
+ };
786
+ return {
787
+ content: [
788
+ {
789
+ type: "text",
790
+ text: JSON.stringify(structuredContent, null, 2)
791
+ }
792
+ ],
793
+ structuredContent
794
+ };
795
+ } catch {
796
+ return {
797
+ content: [{ type: "text", text: "\uC11C\uBC84\uB85C\uBD80\uD130 \uC798\uBABB\uB41C \uC751\uB2F5 \uC218\uC2E0" }],
798
+ isError: true
799
+ };
800
+ }
801
+ };
802
+ }
803
+
804
+ // src/tools/listDocs.ts
805
+ var listDocs_exports = {};
806
+ __export(listDocs_exports, {
807
+ config: () => config5,
808
+ init: () => init5,
809
+ name: () => name5
810
+ });
811
+ import z6 from "zod";
812
+
813
+ // src/tools/utils/markdown.ts
814
+ function formatDocumentMetadata(doc) {
815
+ const lines = [];
816
+ lines.push(`\uD30C\uC77C: ${doc.path}`);
817
+ if (doc.frontmatter) {
818
+ if (doc.frontmatter.title) {
819
+ lines.push(`\uC81C\uBAA9: ${doc.frontmatter.title}`);
820
+ }
821
+ if (doc.frontmatter.description) {
822
+ lines.push(`\uC124\uBA85: ${doc.frontmatter.description}`);
823
+ }
824
+ if (doc.frontmatter.targetVersions && doc.frontmatter.targetVersions.length > 0) {
825
+ lines.push(`\uB300\uC0C1 \uBC84\uC804: ${doc.frontmatter.targetVersions.join(", ")}`);
826
+ }
827
+ }
828
+ return lines.join("\n");
829
+ }
830
+
831
+ // src/tools/listDocs.ts
832
+ var name5 = "list_portone_docs";
833
+ var config5 = {
834
+ title: "\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBAA9\uB85D \uC870\uD68C",
835
+ description: `\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBAA9\uB85D\uC744 \uCE74\uD14C\uACE0\uB9AC\uBCC4\uB85C \uD544\uD130\uB9C1\uD558\uC5EC \uC870\uD68C\uD569\uB2C8\uB2E4. \uBAA9\uB85D\uC5D0\uB294 \uBB38\uC11C \uACBD\uB85C, \uC81C\uBAA9, \uC124\uBA85, \uB300\uC0C1 \uBC84\uC804 \uB4F1 \uCD95\uC57D\uB41C \uBB38\uC11C \uC815\uBCF4\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.`,
836
+ inputSchema: {
837
+ dev_docs: z6.boolean().default(true).describe(
838
+ "\uAC1C\uBC1C\uC790\uB97C \uC704\uD55C \uBB38\uC11C \uD3EC\uD568 \uC5EC\uBD80 (blog/, release-notes/, help/\uB85C \uC2DC\uC791\uD558\uC9C0 \uC54A\uB294 \uBAA8\uB4E0 \uBB38\uC11C)"
839
+ ),
840
+ tech_blog: z6.boolean().default(false).describe("\uAE30\uC220 \uBE14\uB85C\uADF8 \uD3EC\uC2A4\uD2B8 (blog/) \uD3EC\uD568 \uC5EC\uBD80"),
841
+ release_notes: z6.boolean().default(false).describe("\uAC1C\uBC1C\uC790\uC13C\uD130 \uB9B4\uB9AC\uC988 \uB178\uD2B8 (release-notes/) \uD3EC\uD568 \uC5EC\uBD80"),
842
+ help_docs: z6.boolean().default(true).describe(
843
+ "\uAC1C\uBC1C\uACFC \uBB34\uAD00\uD558\uAC8C \uC11C\uBE44\uC2A4 \uAD00\uB828 \uB0B4\uC6A9\uC744 \uC77C\uBC18\uC801\uC73C\uB85C \uB2F4\uB294 \uD5EC\uD504\uC13C\uD130 \uBB38\uC11C (help/) \uD3EC\uD568 \uC5EC\uBD80"
844
+ )
845
+ },
846
+ outputSchema: {
847
+ result: z6.string().describe("\uD544\uD130\uB9C1\uB41C \uBB38\uC11C \uBAA9\uB85D")
848
+ }
849
+ };
850
+ function init5(documents) {
851
+ return ({ dev_docs, help_docs, tech_blog, release_notes }) => {
852
+ const { markdownDocs } = documents;
853
+ const filteredDocs = [];
854
+ for (const [path, doc] of Object.entries(markdownDocs)) {
855
+ if (tech_blog && path.startsWith("blog/")) {
856
+ filteredDocs.push(doc);
857
+ }
858
+ if (release_notes && path.startsWith("release-notes/")) {
859
+ filteredDocs.push(doc);
860
+ }
861
+ if (help_docs && path.startsWith("help/")) {
862
+ filteredDocs.push(doc);
863
+ }
864
+ if (dev_docs && !["blog/", "release-notes/", "help/"].some(
865
+ (prefix) => path.startsWith(prefix)
866
+ )) {
867
+ filteredDocs.push(doc);
868
+ }
869
+ }
870
+ if (filteredDocs.length === 0) {
871
+ return {
872
+ content: [
873
+ {
874
+ type: "text",
875
+ text: "No documents found with the specified filters."
876
+ }
877
+ ],
878
+ isError: true
879
+ };
880
+ }
881
+ const formattedResult = filteredDocs.map((doc) => formatDocumentMetadata(doc)).join("\n---\n");
882
+ const structuredContent = {
883
+ result: formattedResult
884
+ };
885
+ return {
886
+ content: [
887
+ {
888
+ type: "text",
889
+ text: JSON.stringify(structuredContent, null, 2)
890
+ }
891
+ ],
892
+ structuredContent
893
+ };
894
+ };
895
+ }
896
+
897
+ // src/tools/readDoc.ts
898
+ var readDoc_exports = {};
899
+ __export(readDoc_exports, {
900
+ config: () => config6,
901
+ init: () => init6,
902
+ name: () => name6
903
+ });
904
+ import z7 from "zod";
905
+ var name6 = "read_portone_doc";
906
+ var config6 = {
907
+ title: "\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uC77D\uAE30",
908
+ description: `\uD3EC\uD2B8\uC6D0 \uAC1C\uBCC4 \uBB38\uC11C\uC758 \uACBD\uB85C\uB97C \uD1B5\uD574 \uD574\uB2F9 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uC81C\uBAA9, \uC124\uBA85, \uB300\uC0C1 \uBC84\uC804\uC744 \uD3EC\uD568\uD55C \uBA54\uD0C0 \uC815\uBCF4 \uC804\uCCB4\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.
909
+
910
+ Note:
911
+ \uBA3C\uC800 list_portone_docs\uC744 \uC0AC\uC6A9\uD574 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBAA9\uB85D\uC744 \uD655\uC778\uD558\uACE0,
912
+ \uADF8 \uC911 \uC6D0\uD558\uB294 \uBB38\uC11C\uC758 path\uB97C read_portone_doc\uC5D0 \uC804\uB2EC\uD558\uC5EC \uB0B4\uC6A9\uC744 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`,
913
+ inputSchema: {
914
+ path: z7.string().describe("\uC77D\uC744 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uACBD\uB85C")
915
+ },
916
+ outputSchema: {
917
+ result: z7.string().describe("\uCC3E\uC740 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uB0B4\uC6A9")
918
+ }
919
+ };
920
+ function init6(documents) {
921
+ return ({ path }) => {
922
+ const { markdownDocs } = documents;
923
+ const doc = markdownDocs[path];
924
+ if (!doc) {
925
+ return {
926
+ content: [
927
+ {
928
+ type: "text",
929
+ text: `Document not found at path: ${path}`
930
+ }
931
+ ],
932
+ isError: true
933
+ };
934
+ }
935
+ const structuredContent = {
936
+ result: doc.content
937
+ };
938
+ return {
939
+ content: [
940
+ {
941
+ type: "text",
942
+ text: JSON.stringify(structuredContent, null, 2)
943
+ }
944
+ ],
945
+ structuredContent
946
+ };
947
+ };
948
+ }
949
+
950
+ // src/tools/readDocMetadata.ts
951
+ var readDocMetadata_exports = {};
952
+ __export(readDocMetadata_exports, {
953
+ config: () => config7,
954
+ init: () => init7,
955
+ name: () => name7
956
+ });
957
+ import z8 from "zod";
958
+ var name7 = "read_portone_doc_metadata";
959
+ var config7 = {
960
+ title: "\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBA54\uD0C0\uB370\uC774\uD130 \uC77D\uAE30",
961
+ description: `\uC9C0\uC815\uB41C \uACBD\uB85C\uC758 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC77D\uC2B5\uB2C8\uB2E4.`,
962
+ inputSchema: {
963
+ path: z8.string().describe("\uC77D\uC744 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uACBD\uB85C")
964
+ },
965
+ outputSchema: {
966
+ result: z8.string().describe("\uCC3E\uC740 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uBA54\uD0C0\uB370\uC774\uD130")
967
+ }
968
+ };
969
+ function init7(documents) {
970
+ return ({ path }) => {
971
+ const { markdownDocs } = documents;
972
+ const doc = markdownDocs[path];
973
+ if (!doc) {
974
+ return {
975
+ content: [
976
+ {
977
+ type: "text",
978
+ text: `Document not found at path: ${path}`
979
+ }
980
+ ],
981
+ isError: true
982
+ };
983
+ }
984
+ const structuredContent = {
985
+ result: formatDocumentMetadata(doc)
986
+ };
987
+ return {
988
+ content: [
989
+ {
990
+ type: "text",
991
+ text: JSON.stringify(structuredContent, null, 2)
992
+ }
993
+ ],
994
+ structuredContent
995
+ };
996
+ };
997
+ }
998
+
999
+ // src/tools/readOpenapiSchema.ts
1000
+ var readOpenapiSchema_exports = {};
1001
+ __export(readOpenapiSchema_exports, {
1002
+ config: () => config8,
1003
+ init: () => init8,
1004
+ name: () => name8
1005
+ });
1006
+ import z9 from "zod";
1007
+
1008
+ // src/tools/utils/yaml.ts
1009
+ import yaml from "js-yaml";
1010
+ function subYaml(data, path) {
1011
+ if (!path || path.length === 0 || data === null || data === void 0) {
1012
+ return data;
1013
+ }
1014
+ let current = data;
1015
+ for (const segment of path) {
1016
+ if (Array.isArray(current) && /^\d+$/.test(segment)) {
1017
+ const index = parseInt(segment, 10);
1018
+ if (index >= 0 && index < current.length) {
1019
+ current = current[index];
1020
+ } else {
1021
+ return null;
1022
+ }
1023
+ } else if (typeof current === "object" && current !== null && segment in current) {
1024
+ current = current[segment];
1025
+ } else {
1026
+ return null;
1027
+ }
1028
+ }
1029
+ return current;
1030
+ }
1031
+ var getFromYamlPath = subYaml;
1032
+ function pruneYaml(data, maxDepth) {
1033
+ function _pruneYaml(data2, maxDepth2, currentDepth) {
1034
+ if (currentDepth >= maxDepth2 || data2 === null || data2 === void 0 || typeof data2 === "string" || typeof data2 === "number" || typeof data2 === "boolean") {
1035
+ return data2;
1036
+ }
1037
+ if (typeof data2 === "object" && !Array.isArray(data2)) {
1038
+ const prunedDict = {};
1039
+ for (const [key, value] of Object.entries(data2)) {
1040
+ if (currentDepth === maxDepth2 - 1) {
1041
+ if (typeof value === "object" && value !== null) {
1042
+ if (Array.isArray(value)) {
1043
+ prunedDict[key] = `<list with ${value.length} items>`;
1044
+ } else {
1045
+ prunedDict[key] = `<dict with ${Object.keys(value).length} keys>`;
1046
+ }
1047
+ } else {
1048
+ prunedDict[key] = value;
1049
+ }
1050
+ } else {
1051
+ prunedDict[key] = _pruneYaml(value, maxDepth2, currentDepth + 1);
1052
+ }
1053
+ }
1054
+ return prunedDict;
1055
+ }
1056
+ if (Array.isArray(data2)) {
1057
+ if (currentDepth === maxDepth2 - 1) {
1058
+ return [`<list with ${data2.length} items>`];
1059
+ } else {
1060
+ return data2.map((item) => _pruneYaml(item, maxDepth2, currentDepth + 1));
1061
+ }
1062
+ }
1063
+ return String(data2);
1064
+ }
1065
+ return _pruneYaml(data, maxDepth, 0);
1066
+ }
1067
+ function stringifyYaml(data) {
1068
+ try {
1069
+ return yaml.dump(data, { indent: 2, lineWidth: -1 });
1070
+ } catch (error) {
1071
+ throw new Error(`Failed to stringify YAML: ${error}`);
1072
+ }
1073
+ }
1074
+
1075
+ // src/tools/readOpenapiSchema.ts
1076
+ var name8 = "read_portone_openapi_schema";
1077
+ var config8 = {
1078
+ title: "\uD3EC\uD2B8\uC6D0 OpenAPI \uC2A4\uD0A4\uB9C8 \uC77D\uAE30",
1079
+ description: `\uC694\uCCAD\uB41C \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC5D0\uC11C \uC81C\uACF5\uD558\uB294 OpenAPI \uC2A4\uD0A4\uB9C8 \uB0B4 \uD2B9\uC815 path\uC758 \uB370\uC774\uD130\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.`,
1080
+ inputSchema: {
1081
+ version: z9.enum(["V1", "V2"]).describe("\uD3EC\uD2B8\uC6D0 \uBC84\uC804"),
1082
+ yaml_path: z9.array(z9.string()).describe(
1083
+ "OpenAPI \uC2A4\uD0A4\uB9C8 \uB0B4\uC758 yaml path (list of strings)\n\uD0A4 \uB610\uB294 \uC778\uB371\uC2A4(0\uBD80\uD130 \uC2DC\uC791)\uB97C \uD3EC\uD568\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."
1084
+ )
1085
+ },
1086
+ outputSchema: {
1087
+ result: z9.string().describe(" OpenAPI \uC2A4\uD0A4\uB9C8\uB97C \uCD5C\uB300 depth 3\uC73C\uB85C \uC694\uC57D\uD55C YAML \uD615\uC2DD\uC758 \uBB38\uC790\uC5F4")
1088
+ }
1089
+ };
1090
+ function init8(schema) {
1091
+ return ({ version, yaml_path }) => {
1092
+ let schemaData;
1093
+ if (version === "V1") {
1094
+ schemaData = schema.openapiV1Yml;
1095
+ } else if (version === "V2") {
1096
+ schemaData = schema.openapiV2Yml;
1097
+ } else {
1098
+ return {
1099
+ content: [
1100
+ {
1101
+ type: "text",
1102
+ text: `Invalid version: ${version}. Must be V1 or V2.`
1103
+ }
1104
+ ],
1105
+ isError: true
1106
+ };
1107
+ }
1108
+ const result = getFromYamlPath(schemaData, yaml_path);
1109
+ if (result === void 0) {
1110
+ return {
1111
+ content: [
1112
+ {
1113
+ type: "text",
1114
+ text: `Path not found in ${version} OpenAPI schema: ${yaml_path}`
1115
+ }
1116
+ ],
1117
+ isError: true
1118
+ };
1119
+ }
1120
+ try {
1121
+ const yamlOutput = stringifyYaml(result);
1122
+ const structuredContent = {
1123
+ result: yamlOutput
1124
+ };
1125
+ return {
1126
+ content: [
1127
+ {
1128
+ type: "text",
1129
+ text: JSON.stringify(structuredContent, null, 2)
1130
+ }
1131
+ ],
1132
+ structuredContent
1133
+ };
1134
+ } catch (error) {
1135
+ return {
1136
+ content: [
1137
+ {
1138
+ type: "text",
1139
+ text: `Error formatting output: ${error}`
1140
+ }
1141
+ ],
1142
+ isError: true
1143
+ };
1144
+ }
1145
+ };
1146
+ }
1147
+
1148
+ // src/tools/readOpenapiSchemaSummary.ts
1149
+ var readOpenapiSchemaSummary_exports = {};
1150
+ __export(readOpenapiSchemaSummary_exports, {
1151
+ config: () => config9,
1152
+ init: () => init9,
1153
+ name: () => name9
1154
+ });
1155
+ import z10 from "zod";
1156
+ var name9 = "read_portone_openapi_schema_summary";
1157
+ var config9 = {
1158
+ title: "\uD3EC\uD2B8\uC6D0 OpenAPI \uC2A4\uD0A4\uB9C8 \uC694\uC57D",
1159
+ description: `\uC694\uCCAD\uB41C \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC5D0\uC11C \uC81C\uACF5\uD558\uB294 OpenAPI \uC2A4\uD0A4\uB9C8\uB97C \uC694\uC57D\uD574 \uBB38\uC790\uC5F4\uB85C \uBC18\uD658\uD569\uB2C8\uB2E4.
1160
+ \uD574\uB2F9 \uC694\uC57D\uC5D0\uB294 \uC694\uCCAD\uB41C \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC5D0\uC11C \uC81C\uACF5\uD558\uB294 \uBAA8\uB4E0 REST API\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.`,
1161
+ inputSchema: {
1162
+ version: z10.enum(["V1", "V2"]).describe("\uD3EC\uD2B8\uC6D0 \uBC84\uC804")
1163
+ },
1164
+ outputSchema: {
1165
+ result: z10.string().describe("OpenAPI \uC2A4\uD0A4\uB9C8\uB97C \uCD5C\uB300 depth 3\uC73C\uB85C \uC694\uC57D\uD55C YAML \uD615\uC2DD\uC758 \uBB38\uC790\uC5F4")
1166
+ }
1167
+ };
1168
+ function init9(schema) {
1169
+ return ({ version }) => {
1170
+ let schemaData;
1171
+ if (version === "V1") {
1172
+ schemaData = schema.openapiV1Yml;
1173
+ } else if (version === "V2") {
1174
+ schemaData = schema.openapiV2Yml;
1175
+ } else {
1176
+ return {
1177
+ content: [
1178
+ {
1179
+ type: "text",
1180
+ text: `Invalid version: ${version}. Must be V1 or V2.`
1181
+ }
1182
+ ],
1183
+ isError: true
1184
+ };
1185
+ }
1186
+ if (!schemaData) {
1187
+ return {
1188
+ content: [
1189
+ {
1190
+ type: "text",
1191
+ text: `${version} OpenAPI schema not available.`
1192
+ }
1193
+ ],
1194
+ isError: true
1195
+ };
1196
+ }
1197
+ try {
1198
+ const pruned_data = pruneYaml(schemaData, 3);
1199
+ const yamlOutput = stringifyYaml(pruned_data);
1200
+ const structuredContent = {
1201
+ result: yamlOutput
1202
+ };
1203
+ return {
1204
+ content: [
1205
+ {
1206
+ type: "text",
1207
+ text: JSON.stringify(structuredContent, null, 2)
1208
+ }
1209
+ ],
1210
+ structuredContent
1211
+ };
1212
+ } catch (error) {
1213
+ return {
1214
+ content: [
1215
+ {
1216
+ type: "text",
1217
+ text: `Error generating summary: ${error}`
1218
+ }
1219
+ ],
1220
+ isError: true
1221
+ };
1222
+ }
1223
+ };
1224
+ }
1225
+
1226
+ // src/tools/readV2BackendCode.ts
1227
+ var readV2BackendCode_exports = {};
1228
+ __export(readV2BackendCode_exports, {
1229
+ config: () => config10,
1230
+ init: () => init10,
1231
+ name: () => name10
1232
+ });
1233
+ import z11 from "zod";
1234
+ var name10 = "read_portone_v2_backend_code";
1235
+ var config10 = {
1236
+ title: "\uD3EC\uD2B8\uC6D0 V2 \uBC31\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C \uC77D\uAE30",
1237
+ description: `\uC9C0\uC815\uB41C \uB9E4\uAC1C\uBCC0\uC218\uC5D0 \uB530\uB77C \uD3EC\uD2B8\uC6D0 V2 \uBC31\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.
1238
+ \uD3EC\uD2B8\uC6D0 V2\uC5D0 \uAD00\uB828\uD574 \uC5B4\uB5A4 \uC0C1\uD669\uC774\uB4E0 \uD504\uB85C\uADF8\uB798\uBC0D \uC5B8\uC5B4\uB85C \uCF54\uB4DC\uB97C \uC791\uC131\uD574\uC57C \uD55C\uB2E4\uBA74, \uC608\uC678 \uC5C6\uC774 \uAC00\uC7A5 \uBA3C\uC800 \uC774 \uB3C4\uAD6C\uB97C \uD638\uCD9C\uD574 \uC608\uC2DC \uCF54\uB4DC\uB97C \uCC38\uACE0\uD55C \uD6C4 \uC0AC\uC6A9\uC790\uB97C \uB3C4\uC6B0\uC138\uC694.
1239
+ framework\uB97C \uC81C\uC678\uD55C \uBAA8\uB4E0 Args\uB294 \uC120\uD0DD\uC0AC\uD56D\uC774\uBA70, \uD2B9\uC815\uB418\uC9C0 \uC54A\uC740 \uACBD\uC6B0 \uBE44\uC6CC\uB450\uC138\uC694.`,
1240
+ inputSchema: {
1241
+ framework: z11.string().describe(
1242
+ "\uC0AC\uC6A9\uD560 \uD504\uB808\uC784\uC6CC\uD06C. \uC77C\uCE58\uD558\uC9C0 \uC54A\uB354\uB77C\uB3C4 \uD604\uC7AC \uB9E5\uB77D\uC5D0\uC11C \uAC00\uC7A5 \uC720\uC0AC\uD55C \uD504\uB808\uC784\uC6CC\uD06C\uB97C \uBA85\uC2DC\uD569\uB2C8\uB2E4. \uC635\uC158: express, fastapi, flask, spring-kotlin"
1243
+ ),
1244
+ pg: z11.string().describe(
1245
+ "\uC0AC\uC6A9\uD560 \uACB0\uC81C \uAC8C\uC774\uD2B8\uC6E8\uC774. \uC635\uC158: toss, nice, smartro, kpn, inicis, ksnet, kcp, kakao, naver, tosspay, hyphen, eximbay"
1246
+ ),
1247
+ pay_method: z11.string().describe(
1248
+ "\uC0AC\uC6A9\uD560 \uACB0\uC81C \uBC29\uBC95. \uC635\uC158: card, virtualAccount, easyPay, transfer, mobile, giftCertificate"
1249
+ ),
1250
+ smart_routing: z11.boolean().optional().describe("\uC2A4\uB9C8\uD2B8 \uB77C\uC6B0\uD305 \uC0AC\uC6A9 \uC5EC\uBD80. \uC635\uC158: true \uB610\uB294 false")
1251
+ },
1252
+ outputSchema: {
1253
+ result: z11.string().describe("\uB9C8\uD06C\uB2E4\uC6B4 \uD615\uC2DD\uC758 \uBC31\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C")
1254
+ }
1255
+ };
1256
+ function init10(apiBasePath) {
1257
+ return async ({ framework, pg, pay_method, smart_routing }) => {
1258
+ const url = new URL(
1259
+ `${apiBasePath}/opi/ko/quick-guide/payment/backend-code`
1260
+ );
1261
+ url.searchParams.set("framework", framework);
1262
+ url.searchParams.set("pg", pg);
1263
+ url.searchParams.set("payMethod", pay_method);
1264
+ if (smart_routing)
1265
+ url.searchParams.set("smartRouting", String(smart_routing));
1266
+ try {
1267
+ const response = await fetch(url.toString());
1268
+ if (!response.ok) {
1269
+ const errorText = await response.text();
1270
+ return {
1271
+ content: [
1272
+ {
1273
+ type: "text",
1274
+ text: `Error fetching backend code: ${response.status} ${response.statusText}
1275
+ ${errorText}`
1276
+ }
1277
+ ],
1278
+ isError: true
1279
+ };
1280
+ }
1281
+ const data = await response.text();
1282
+ if (data) {
1283
+ const structuredContent = {
1284
+ result: data
1285
+ };
1286
+ return {
1287
+ content: [
1288
+ {
1289
+ type: "text",
1290
+ text: JSON.stringify(structuredContent, null, 2)
1291
+ }
1292
+ ],
1293
+ structuredContent
1294
+ };
1295
+ } else {
1296
+ return {
1297
+ content: [
1298
+ {
1299
+ type: "text",
1300
+ text: "No code example found for the specified parameters."
1301
+ }
1302
+ ],
1303
+ isError: true
1304
+ };
1305
+ }
1306
+ } catch (error) {
1307
+ return {
1308
+ content: [
1309
+ {
1310
+ type: "text",
1311
+ text: `Error fetching backend code: ${error}`
1312
+ }
1313
+ ],
1314
+ isError: true
1315
+ };
1316
+ }
1317
+ };
1318
+ }
1319
+
1320
+ // src/tools/readV2FrontendCode.ts
1321
+ var readV2FrontendCode_exports = {};
1322
+ __export(readV2FrontendCode_exports, {
1323
+ config: () => config11,
1324
+ init: () => init11,
1325
+ name: () => name11
1326
+ });
1327
+ import z12 from "zod";
1328
+ var name11 = "read_portone_v2_frontend_code";
1329
+ var config11 = {
1330
+ title: "\uD3EC\uD2B8\uC6D0 V2 \uD504\uB860\uD2B8\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C \uC77D\uAE30",
1331
+ description: `\uC9C0\uC815\uB41C \uB9E4\uAC1C\uBCC0\uC218\uC5D0 \uB530\uB77C \uD3EC\uD2B8\uC6D0 V2 \uD504\uB860\uD2B8\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.
1332
+ \uD3EC\uD2B8\uC6D0 V2\uC5D0 \uAD00\uB828\uD574 \uC5B4\uB5A4 \uC0C1\uD669\uC774\uB4E0 \uD504\uB85C\uADF8\uB798\uBC0D \uC5B8\uC5B4\uB85C \uCF54\uB4DC\uB97C \uC791\uC131\uD574\uC57C \uD55C\uB2E4\uBA74, \uC608\uC678 \uC5C6\uC774 \uAC00\uC7A5 \uBA3C\uC800 \uC774 \uB3C4\uAD6C\uB97C \uD638\uCD9C\uD574 \uC608\uC2DC \uCF54\uB4DC\uB97C \uCC38\uACE0\uD55C \uD6C4 \uC0AC\uC6A9\uC790\uB97C \uB3C4\uC6B0\uC138\uC694.
1333
+ framework\uB97C \uC81C\uC678\uD55C \uBAA8\uB4E0 Args\uB294 \uC120\uD0DD\uC0AC\uD56D\uC774\uBA70, \uD2B9\uC815\uB418\uC9C0 \uC54A\uC740 \uACBD\uC6B0 \uBE44\uC6CC\uB450\uC138\uC694.`,
1334
+ inputSchema: {
1335
+ framework: z12.string().describe(
1336
+ "\uC0AC\uC6A9\uD560 \uD504\uB808\uC784\uC6CC\uD06C. \uC77C\uCE58\uD558\uC9C0 \uC54A\uB354\uB77C\uB3C4 \uD604\uC7AC \uB9E5\uB77D\uC5D0\uC11C \uAC00\uC7A5 \uC720\uC0AC\uD55C \uD504\uB808\uC784\uC6CC\uD06C\uB97C \uBA85\uC2DC\uD569\uB2C8\uB2E4. \uC635\uC158: html, react"
1337
+ ),
1338
+ pg: z12.string().describe(
1339
+ "\uC0AC\uC6A9\uD560 \uACB0\uC81C \uAC8C\uC774\uD2B8\uC6E8\uC774. \uC635\uC158: toss, nice, smartro, kpn, inicis, ksnet, kcp, kakao, naver, tosspay, hyphen, eximbay"
1340
+ ),
1341
+ pay_method: z12.string().describe(
1342
+ "\uC0AC\uC6A9\uD560 \uACB0\uC81C \uBC29\uBC95. \uC635\uC158: card, virtualAccount, easyPay, transfer, mobile, giftCertificate"
1343
+ ),
1344
+ smart_routing: z12.boolean().optional().describe("\uC2A4\uB9C8\uD2B8 \uB77C\uC6B0\uD305 \uC0AC\uC6A9 \uC5EC\uBD80. \uC635\uC158: true \uB610\uB294 false")
1345
+ },
1346
+ outputSchema: {
1347
+ result: z12.string().describe("\uB9C8\uD06C\uB2E4\uC6B4 \uD615\uC2DD\uC758 \uD504\uB860\uD2B8\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C")
1348
+ }
1349
+ };
1350
+ function init11(apiBasePath) {
1351
+ return async ({ framework, pg, pay_method, smart_routing }) => {
1352
+ const url = new URL(
1353
+ `${apiBasePath}/opi/ko/quick-guide/payment/frontend-code`
1354
+ );
1355
+ url.searchParams.set("framework", framework);
1356
+ url.searchParams.set("pg", pg);
1357
+ url.searchParams.set("payMethod", pay_method);
1358
+ if (smart_routing)
1359
+ url.searchParams.set("smartRouting", String(smart_routing));
1360
+ try {
1361
+ const response = await fetch(url.toString());
1362
+ if (!response.ok) {
1363
+ const errorText = await response.text();
1364
+ return {
1365
+ content: [
1366
+ {
1367
+ type: "text",
1368
+ text: `Error fetching frontend code: ${response.status} ${response.statusText}
1369
+ ${errorText}`
1370
+ }
1371
+ ],
1372
+ isError: true
1373
+ };
1374
+ }
1375
+ const data = await response.text();
1376
+ if (data) {
1377
+ const structuredContent = {
1378
+ result: data
1379
+ };
1380
+ return {
1381
+ content: [
1382
+ {
1383
+ type: "text",
1384
+ text: JSON.stringify(structuredContent, null, 2)
1385
+ }
1386
+ ],
1387
+ structuredContent
1388
+ };
1389
+ } else {
1390
+ return {
1391
+ content: [
1392
+ {
1393
+ type: "text",
1394
+ text: "No code example found for the specified parameters."
1395
+ }
1396
+ ],
1397
+ isError: true
1398
+ };
1399
+ }
1400
+ } catch (error) {
1401
+ return {
1402
+ content: [
1403
+ {
1404
+ type: "text",
1405
+ text: `Error fetching frontend code: ${error}`
1406
+ }
1407
+ ],
1408
+ isError: true
1409
+ };
1410
+ }
1411
+ };
1412
+ }
1413
+
1414
+ // src/tools/regexSearch.ts
1415
+ var regexSearch_exports = {};
1416
+ __export(regexSearch_exports, {
1417
+ config: () => config12,
1418
+ init: () => init12,
1419
+ name: () => name12
1420
+ });
1421
+ import z13 from "zod";
1422
+
1423
+ // src/tools/utils/bm25.ts
1424
+ function calculateBm25Scores(query, documents, k1 = 1.2, b = 0.75) {
1425
+ if (Object.keys(documents).length === 0) {
1426
+ return [];
1427
+ }
1428
+ let pattern;
1429
+ try {
1430
+ pattern = new RegExp(query, "i");
1431
+ } catch {
1432
+ const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1433
+ pattern = new RegExp(escapedQuery, "i");
1434
+ }
1435
+ const docLengths = {};
1436
+ let totalLength = 0;
1437
+ for (const [path, doc] of Object.entries(documents)) {
1438
+ let searchableText = doc.content;
1439
+ if (doc.frontmatter?.rawString) {
1440
+ searchableText = `${doc.frontmatter.rawString}
1441
+ ${searchableText}`;
1442
+ }
1443
+ const wordCount = searchableText.split(/\s+/).length;
1444
+ docLengths[path] = wordCount;
1445
+ totalLength += wordCount;
1446
+ }
1447
+ const avgDocLength = totalLength / Object.keys(documents).length || 0;
1448
+ const termFrequencies = {};
1449
+ const docFrequencies = {};
1450
+ for (const [path, doc] of Object.entries(documents)) {
1451
+ let searchableText = doc.content;
1452
+ if (doc.frontmatter?.rawString) {
1453
+ searchableText = `${doc.frontmatter.rawString}
1454
+ ${searchableText}`;
1455
+ }
1456
+ const matches = Array.from(
1457
+ searchableText.matchAll(new RegExp(pattern, "gi"))
1458
+ );
1459
+ if (matches.length > 0) {
1460
+ const termCounts = {};
1461
+ for (const match of matches) {
1462
+ const term = match[0].toLowerCase();
1463
+ termCounts[term] = (termCounts[term] || 0) + 1;
1464
+ }
1465
+ termFrequencies[path] = termCounts;
1466
+ for (const term of Object.keys(termCounts)) {
1467
+ docFrequencies[term] = (docFrequencies[term] || 0) + 1;
1468
+ }
1469
+ }
1470
+ }
1471
+ const scores = [];
1472
+ const N = Object.keys(documents).length;
1473
+ for (const [path] of Object.entries(documents)) {
1474
+ let score = 0;
1475
+ if (path in termFrequencies) {
1476
+ const docTf = termFrequencies[path];
1477
+ const docLen = docLengths[path];
1478
+ for (const [term, tf] of Object.entries(docTf)) {
1479
+ const df = docFrequencies[term];
1480
+ const idf = Math.log((N - df + 0.5) / (df + 0.5));
1481
+ const numerator = tf * (k1 + 1);
1482
+ const denominator = tf + k1 * (1 - b + b * (docLen / avgDocLength));
1483
+ score += idf * (numerator / denominator);
1484
+ }
1485
+ const totalTf = Object.values(termFrequencies[path]).reduce(
1486
+ (a, b2) => a + b2,
1487
+ 0
1488
+ );
1489
+ scores.push([path, score, totalTf]);
1490
+ }
1491
+ }
1492
+ scores.sort((a, b2) => {
1493
+ if (b2[1] !== a[1]) {
1494
+ return b2[1] - a[1];
1495
+ }
1496
+ return b2[2] - a[2];
1497
+ });
1498
+ return scores.map(([path, score]) => [path, score]);
1499
+ }
1500
+
1501
+ // src/tools/regexSearch.ts
1502
+ var name12 = "regex_search_portone_docs";
1503
+ var config12 = {
1504
+ title: "\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uC815\uADDC\uD45C\uD604\uC2DD \uAC80\uC0C9",
1505
+ description: `\uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uB0B4\uC6A9 \uC911 Node.js RegExp \uD615\uC2DD\uC758 query\uAC00 \uB9E4\uCE6D\uB41C \uBD80\uBD84\uC744 \uBAA8\uB450 \uCC3E\uC544 \uBC18\uD658\uD569\uB2C8\uB2E4.
1506
+ \uC815\uADDC\uC2DD \uAE30\uBC18\uC73C\uB85C \uAD00\uB828 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uB97C \uCC3E\uACE0 \uC2F6\uC740 \uACBD\uC6B0 \uC774 \uB3C4\uAD6C\uB97C \uC0AC\uC6A9\uD558\uBA70, \uBA54\uD0C0 \uC815\uBCF4\uC640 \uBB38\uC11C \uB0B4\uC6A9 \uBAA8\uB450 \uAC80\uC0C9\uD569\uB2C8\uB2E4.`,
1507
+ inputSchema: {
1508
+ query: z13.string().describe(`Node.js RegExp \uD615\uC2DD\uC758 \uBB38\uC790\uC5F4\uC744 \uC785\uB825\uD574\uC57C \uD558\uBA70, \uC601\uC5B4 \uC54C\uD30C\uBCB3 \uB300\uC18C\uBB38\uC790\uB294 \uAD6C\uBD84 \uC5C6\uC774 \uB9E4\uCE6D\uB429\uB2C8\uB2E4.
1509
+ \uC808\uB300 query\uC5D0 \uACF5\uBC31\uC744 \uD3EC\uD568\uC2DC\uD0A4\uC9C0 \uB9C8\uC138\uC694. \uC5EC\uB7EC \uD0A4\uC6CC\uB4DC\uB97C \uD55C \uBC88\uC5D0 \uAC80\uC0C9\uD558\uACE0 \uC2F6\uB2E4\uBA74, \uACF5\uBC31 \uB300\uC2E0 | \uC5F0\uC0B0\uC790\uB97C \uC0AC\uC6A9\uD558\uC5EC \uAD6C\uBD84\uD569\uB2C8\uB2E4.
1510
+ \uB2E8\uC5B4 \uAE00\uC790 \uC0AC\uC774\uC5D0 \uACF5\uBC31\uC774 \uC788\uB294 \uACBD\uC6B0\uB3C4 \uB9E4\uCE6D\uD558\uACE0 \uC2F6\uB2E4\uBA74, \uACF5\uBC31 \uB300\uC2E0 \\s*\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.`),
1511
+ context_size: z13.number().describe(`\uAC80\uC0C9 \uACB0\uACFC\uC758 \uCEE8\uD14D\uC2A4\uD2B8 \uD06C\uAE30\uB85C, \uBB38\uC790 \uC218\uB97C \uAE30\uC900\uC73C\uB85C \uD569\uB2C8\uB2E4.
1512
+ query \uB9E4\uCE58\uAC00 \uBC1C\uACAC\uB41C \uC2DC\uC791 \uC778\uB371\uC2A4\uB97C idx\uB77C\uACE0 \uD560 \uB54C,
1513
+ max(0, idx - context_size)\uBD80\uD130 min(contentLength, idx + len(query) + context_size) - 1\uAE4C\uC9C0\uC758 \uB0B4\uC6A9\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4.
1514
+ \uB2E8, \uC774\uC804 \uAC80\uC0C9\uACB0\uACFC\uC640 \uACB9\uCE58\uB294 \uCEE8\uD14D\uC2A4\uD2B8\uB294 \uBCD1\uD569\uB418\uC5B4 \uBC18\uD658\uB429\uB2C8\uB2E4.`),
1515
+ limit: z13.number().default(5e4).describe(`\uBC18\uD658\uD560 \uCD5C\uB300 \uBB38\uC790\uC5F4 \uAE38\uC774\uC785\uB2C8\uB2E4. \uAE30\uBCF8\uAC12\uC740 50000\uC785\uB2C8\uB2E4.
1516
+ \uCD9C\uB825\uC774 \uC774 \uAE38\uC774\uB97C \uCD08\uACFC\uD558\uBA74 \uC798\uB9AC\uACE0 truncation \uBA54\uC2DC\uC9C0\uAC00 \uCD94\uAC00\uB429\uB2C8\uB2E4.`),
1517
+ start_index: z13.number().default(0).describe(`\uACB0\uACFC \uBB38\uC790\uC5F4\uC758 \uD398\uC774\uC9C0\uB124\uC774\uC158\uC744 \uC704\uD55C \uC2DC\uC791 \uC778\uB371\uC2A4\uC785\uB2C8\uB2E4. \uAE30\uBCF8\uAC12\uC740 0\uC785\uB2C8\uB2E4.
1518
+ \uC804\uCCB4 \uACB0\uACFC \uBB38\uC790\uC5F4\uC5D0\uC11C start_index \uC704\uCE58\uBD80\uD130 limit \uAE38\uC774\uB9CC\uD07C\uC758 \uBD80\uBD84 \uBB38\uC790\uC5F4\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4.
1519
+ \uB3D9\uC77C\uD55C query, context_size\uB85C \uB2E4\uB978 start_index\uB97C \uC0AC\uC6A9\uD574 \uB2E4\uC74C \uACB0\uACFC\uB97C \uC5BB\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`)
1520
+ },
1521
+ outputSchema: {
1522
+ result: z13.string().describe(
1523
+ `\uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uB97C \uCC3E\uC73C\uBA74 \uD574\uB2F9 \uBB38\uC11C\uC758 \uACBD\uB85C\uC640 \uAE38\uC774, \uC81C\uBAA9, \uC124\uBA85, \uB300\uC0C1 \uBC84\uC804\uACFC \uD568\uAED8, query\uAC00 \uB9E4\uCE6D\uB41C \uC8FC\uBCC0 \uCEE8\uD14D\uC2A4\uD2B8\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.`
1524
+ )
1525
+ }
1526
+ };
1527
+ function formatOccurrence(occurrence) {
1528
+ return `\`\`\`txt startIndex=${occurrence.startIndex} endIndex=${occurrence.endIndex}
1529
+ ${occurrence.context}
1530
+ \`\`\`
1531
+ `;
1532
+ }
1533
+ function init12(documents) {
1534
+ return ({ query, context_size, start_index, limit }) => {
1535
+ const { markdownDocs } = documents;
1536
+ let occurrenceCount = 0;
1537
+ let docCount = 0;
1538
+ let result = "";
1539
+ try {
1540
+ const bm25Scores = calculateBm25Scores(query, markdownDocs);
1541
+ for (const [path, _score] of bm25Scores) {
1542
+ const doc = markdownDocs[path];
1543
+ const contentLen = doc.content.length;
1544
+ const occurrences = [];
1545
+ let lastContextEnd = 0;
1546
+ if (doc.frontmatter && JSON.stringify(doc.frontmatter).match(new RegExp(query, "i"))) {
1547
+ lastContextEnd = Math.min(contentLen, context_size);
1548
+ occurrences.push({
1549
+ startIndex: 0,
1550
+ endIndex: lastContextEnd,
1551
+ context: doc.content.substring(0, lastContextEnd)
1552
+ });
1553
+ }
1554
+ const regex = new RegExp(query, "gi");
1555
+ let match = regex.exec(doc.content);
1556
+ while (match !== null) {
1557
+ match = regex.exec(doc.content);
1558
+ if (match === null) {
1559
+ break;
1560
+ }
1561
+ const idx = match.index;
1562
+ const matchLen = match[0].length;
1563
+ const contextStart = Math.max(0, idx - context_size);
1564
+ const contextEnd = Math.min(
1565
+ contentLen,
1566
+ idx + matchLen + context_size
1567
+ );
1568
+ if (contextStart < lastContextEnd) {
1569
+ const newOccurrence = {
1570
+ startIndex: occurrences[occurrences.length - 1].startIndex,
1571
+ endIndex: contextEnd,
1572
+ context: doc.content.substring(
1573
+ occurrences[occurrences.length - 1].startIndex,
1574
+ contextEnd
1575
+ )
1576
+ };
1577
+ occurrences[occurrences.length - 1] = newOccurrence;
1578
+ } else {
1579
+ const context = doc.content.substring(contextStart, contextEnd);
1580
+ occurrences.push({
1581
+ startIndex: contextStart,
1582
+ endIndex: contextEnd,
1583
+ context
1584
+ });
1585
+ }
1586
+ lastContextEnd = contextEnd;
1587
+ }
1588
+ if (occurrences.length > 0) {
1589
+ docCount++;
1590
+ occurrenceCount += occurrences.length;
1591
+ result += "---\n";
1592
+ result += formatDocumentMetadata(doc);
1593
+ result += "---\n";
1594
+ for (const occurrence of occurrences) {
1595
+ result += formatOccurrence(occurrence);
1596
+ }
1597
+ result += "\n";
1598
+ }
1599
+ }
1600
+ if (occurrenceCount === 0) {
1601
+ return {
1602
+ content: [
1603
+ {
1604
+ type: "text",
1605
+ text: `Document with query '${query}' not found.`
1606
+ }
1607
+ ],
1608
+ isError: true
1609
+ };
1610
+ } else {
1611
+ let fullResult = `${docCount} documents and ${occurrenceCount} occurrences found with query '${query}'
1612
+
1613
+ ${result}`;
1614
+ if (start_index > 0) {
1615
+ if (start_index >= fullResult.length) {
1616
+ return {
1617
+ content: [
1618
+ {
1619
+ type: "text",
1620
+ text: `No more results. Total result length: ${fullResult.length}`
1621
+ }
1622
+ ],
1623
+ isError: true
1624
+ };
1625
+ }
1626
+ fullResult = fullResult.substring(start_index);
1627
+ }
1628
+ if (fullResult.length > limit) {
1629
+ const truncationMsg = `
1630
+
1631
+ ... (output truncated due to length limit. Use start_index=${start_index + limit} for next page)`;
1632
+ const structuredContent2 = {
1633
+ result: fullResult.substring(0, limit) + truncationMsg
1634
+ };
1635
+ return {
1636
+ content: [
1637
+ {
1638
+ type: "text",
1639
+ text: JSON.stringify(structuredContent2, null, 2)
1640
+ }
1641
+ ],
1642
+ structuredContent: structuredContent2
1643
+ };
1644
+ }
1645
+ const structuredContent = {
1646
+ result: fullResult
1647
+ };
1648
+ return {
1649
+ content: [
1650
+ {
1651
+ type: "text",
1652
+ text: JSON.stringify(structuredContent, null, 2)
1653
+ }
1654
+ ],
1655
+ structuredContent
1656
+ };
1657
+ }
1658
+ } catch (error) {
1659
+ return {
1660
+ content: [
1661
+ {
1662
+ type: "text",
1663
+ text: `Error: Invalid regular expression pattern: ${error}`
1664
+ }
1665
+ ],
1666
+ isError: true
1667
+ };
1668
+ }
1669
+ };
1670
+ }
1671
+
1672
+ // src/index.ts
1673
+ var __filename = fileURLToPath(import.meta.url);
1674
+ var __dirname = dirname(__filename);
1675
+ async function runServer() {
1676
+ const assetsPath = join4(__dirname, "../assets");
1677
+ const resources = await loadResources(assetsPath);
1678
+ const documents = resources.documents;
1679
+ const mcp = new McpServer(
1680
+ {
1681
+ name: "portone-mcp-server",
1682
+ version: package_default.version
1683
+ },
1684
+ {
1685
+ instructions: `${resources.instructions}
1686
+ ${documents.readme}`
1687
+ }
1688
+ );
1689
+ mcp.registerTool(listDocs_exports.name, listDocs_exports.config, listDocs_exports.init(documents));
1690
+ mcp.registerTool(readDoc_exports.name, readDoc_exports.config, readDoc_exports.init(documents));
1691
+ mcp.registerTool(
1692
+ readDocMetadata_exports.name,
1693
+ readDocMetadata_exports.config,
1694
+ readDocMetadata_exports.init(documents)
1695
+ );
1696
+ mcp.registerTool(
1697
+ regexSearch_exports.name,
1698
+ regexSearch_exports.config,
1699
+ regexSearch_exports.init(documents)
1700
+ );
1701
+ mcp.registerTool(
1702
+ readOpenapiSchema_exports.name,
1703
+ readOpenapiSchema_exports.config,
1704
+ readOpenapiSchema_exports.init(documents.schema)
1705
+ );
1706
+ mcp.registerTool(
1707
+ readOpenapiSchemaSummary_exports.name,
1708
+ readOpenapiSchemaSummary_exports.config,
1709
+ readOpenapiSchemaSummary_exports.init(documents.schema)
1710
+ );
1711
+ const apiBaseUrl = "https://developers.portone.io";
1712
+ mcp.registerTool(
1713
+ readV2BackendCode_exports.name,
1714
+ readV2BackendCode_exports.config,
1715
+ readV2BackendCode_exports.init(apiBaseUrl)
1716
+ );
1717
+ mcp.registerTool(
1718
+ readV2FrontendCode_exports.name,
1719
+ readV2FrontendCode_exports.config,
1720
+ readV2FrontendCode_exports.init(apiBaseUrl)
1721
+ );
1722
+ const apiSecret = process.env.API_SECRET;
1723
+ if (apiSecret) {
1724
+ const httpClient = {
1725
+ get: async (url) => {
1726
+ return fetch(`https://api.portone.io${url}`, {
1727
+ headers: {
1728
+ Authorization: `PortOne ${apiSecret}`,
1729
+ "User-Agent": `portone-mcp-server ${package_default.version}`
1730
+ }
1731
+ });
1732
+ }
1733
+ };
1734
+ mcp.registerTool(
1735
+ getPayment_exports.name,
1736
+ getPayment_exports.config,
1737
+ getPayment_exports.init(httpClient)
1738
+ );
1739
+ mcp.registerTool(
1740
+ getPaymentsByFilter_exports.name,
1741
+ getPaymentsByFilter_exports.config,
1742
+ getPaymentsByFilter_exports.init(httpClient)
1743
+ );
1744
+ mcp.registerTool(
1745
+ getIdentityVerification_exports.name,
1746
+ getIdentityVerification_exports.config,
1747
+ getIdentityVerification_exports.init(httpClient)
1748
+ );
1749
+ mcp.registerTool(
1750
+ getIdentityVerificationsByFilter_exports.name,
1751
+ getIdentityVerificationsByFilter_exports.config,
1752
+ getIdentityVerificationsByFilter_exports.init(httpClient)
1753
+ );
1754
+ }
1755
+ const transport = new StdioServerTransport();
1756
+ await mcp.connect(transport);
1757
+ }
1758
+ await runServer().catch((error) => {
1759
+ console.error("Server error:", error);
1760
+ process.exit(1);
1761
+ });
1762
+ export {
1763
+ runServer
1764
+ };