UNPKG

@kakaopay-develop/agent-toolkit

Version:
463 lines (440 loc) 16.3 kB
// src/modelcontextprotocol/toolkit.ts import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; // src/shared/configuration.ts function isToolAllowed(tool9, configuration) { if (!configuration.actions) { return true; } const toolActions = tool9.actions; if (!toolActions) { return true; } for (const [product, actions] of Object.entries( toolActions )) { if (configuration.actions[product]) { for (const [action, allowed] of Object.entries( actions )) { if (allowed && configuration.actions[product][action]) { return true; } } } } return false; } // src/shared/payment/demoPayment.ts import { z } from "zod"; // src/shared/client.ts import axios from "axios"; var KakaoPayClient = class { constructor(secretKey) { const baseURL = "https://open-api.kakaopay.com"; this.client = axios.create({ baseURL: `${baseURL}`, headers: { Authorization: `SECRET_KEY ${secretKey}`, "Content-Type": "application/json" } }); } async post(url, data) { return await this.client.post(url, data); } }; var KAKAO_PAY_API_ENDPOINTS = { PAYMENT_READY: "/online/v1/payment/ready", PAYMENT_APPROVE: "/online/v1/payment/approve", PAYMENT_ORDER: "/online/v1/payment/order", PAYMENT_CANCEL: "/online/v1/payment/cancel", SUBSCRIPTION_REQUEST: "/online/v1/payment/subscription", SUBSCRIPTION_INACTIVE: "/online/v1/payment/manage/subscription/inactive", SUBSCRIPTION_GET: "/online/v1/payment/manage/subscription/status" }; // src/shared/payment/demoPayment.ts var demoPaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uB370\uBAA8 \uACB0\uC81C \uB9C1\uD06C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - item_name (string): \uC0C1\uD488\uBA85 - total_amount (number): \uC0C1\uD488 \uCD1D\uC561 - link_type (string): \uB9C1\uD06C \uC720\uD615 (PC \uB610\uB294 MOBILE) `; var demoPaymentParameters = (_context = {}) => z.object({ item_name: z.string().default("\uD14C\uC2A4\uD2B8 \uC0C1\uD488\uBA85").describe("\uC0C1\uD488\uBA85 (\uCD5C\uB300 100\uC790)"), total_amount: z.number().int().positive().default(1e3).describe("\uC0C1\uD488 \uCD1D\uC561"), link_type: z.enum(["PC", "MOBILE"]).default("PC").describe("\uB9C1\uD06C \uC720\uD615") }); var demoPayment = async (client, context, params) => { const apiParams = { partner_order_id: "partner_order_id", partner_user_id: "partner_user_id", item_name: params.item_name, quantity: 1, total_amount: params.total_amount, tax_free_amount: 0, approval_url: "https://payment-demo.kakaopay.com/online/approval", cancel_url: "https://payment-demo.kakaopay.com/online/cancel", fail_url: "https://payment-demo.kakaopay.com/online/fail" }; const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_READY, { cid: context.cid, ...apiParams }); const responseData = response.data; const link = params.link_type === "PC" ? responseData.next_redirect_pc_url : responseData.next_redirect_mobile_url; return { demo_link: `${link}?kpayTid=${responseData.tid}`, tid: responseData.tid }; }; var tool = (context) => ({ method: "demo_payment", name: "Demo Payment", description: demoPaymentPrompt(context), parameters: demoPaymentParameters(context), actions: { payment: { demo: true } }, execute: demoPayment }); var demoPayment_default = tool; // src/shared/payment/getPayment.ts import { z as z2 } from "zod"; var getPaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uC8FC\uBB38 \uC0C1\uD0DC\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - tid (string): \uACB0\uC81C \uACE0\uC720\uBC88\uD638 `; var getPaymentParameters = (_context = {}) => z2.object({ tid: z2.string().describe("\uACB0\uC81C \uACE0\uC720\uBC88\uD638") }); var getPayment = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_ORDER, { cid: context.cid, ...params }); return response.data; }; var tool2 = (context) => ({ method: "get_payment", name: "Get Payment", description: getPaymentPrompt(context), parameters: getPaymentParameters(context), actions: { payment: { get: true } }, execute: getPayment }); var getPayment_default = tool2; // src/shared/payment/readyPayment.ts import { z as z3 } from "zod"; var readyPaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uACB0\uC81C\uB97C \uC900\uBE44\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - partner_order_id (string): \uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 - partner_user_id (string): \uAC00\uB9F9\uC810 \uD68C\uC6D0 ID - item_name (string): \uC0C1\uD488\uBA85 - quantity (number): \uC0C1\uD488 \uC218\uB7C9 - total_amount (number): \uC0C1\uD488 \uCD1D\uC561 - tax_free_amount (number): \uC0C1\uD488 \uBE44\uACFC\uC138 \uAE08\uC561 - approval_url (string): \uACB0\uC81C \uC131\uACF5 \uC2DC redirect url - cancel_url (string): \uACB0\uC81C \uCDE8\uC18C \uC2DC redirect url - fail_url (string): \uACB0\uC81C \uC2E4\uD328 \uC2DC redirect url `; var ReadyPaymentSchema = z3.object({ partner_order_id: z3.string().describe("\uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 (\uCD5C\uB300 100\uC790)"), partner_user_id: z3.string().describe("\uAC00\uB9F9\uC810 \uD68C\uC6D0 ID (\uCD5C\uB300 100\uC790)"), item_name: z3.string().describe("\uC0C1\uD488\uBA85 (\uCD5C\uB300 100\uC790)"), quantity: z3.number().int().positive().describe("\uC0C1\uD488 \uC218\uB7C9"), total_amount: z3.number().int().positive().describe("\uC0C1\uD488 \uCD1D\uC561"), tax_free_amount: z3.number().int().min(0).describe("\uC0C1\uD488 \uBE44\uACFC\uC138 \uAE08\uC561"), approval_url: z3.string().url().describe("\uACB0\uC81C \uC131\uACF5 \uC2DC redirect url"), cancel_url: z3.string().url().describe("\uACB0\uC81C \uCDE8\uC18C \uC2DC redirect url"), fail_url: z3.string().url().describe("\uACB0\uC81C \uC2E4\uD328 \uC2DC redirect url") }); var readyPaymentParameters = (_context = {}) => ReadyPaymentSchema; var readyPayment = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_READY, { cid: context.cid, ...params }); return response.data; }; var tool3 = (context) => ({ method: "ready_payment", name: "Ready Payment", description: readyPaymentPrompt(context), parameters: readyPaymentParameters(context), actions: { payment: { ready: true } }, execute: readyPayment }); var readyPayment_default = tool3; // src/shared/payment/approvePayment.ts import { z as z4 } from "zod"; var approvePaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uB2E8\uAC74 \uACB0\uC81C\uB97C \uC2B9\uC778\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - tid (string): \uACB0\uC81C \uACE0\uC720\uBC88\uD638 - partner_order_id (string): \uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 - partner_user_id (string): \uAC00\uB9F9\uC810 \uD68C\uC6D0 ID - pg_token (string): \uACB0\uC81C\uC2B9\uC778 \uC694\uCCAD\uC744 \uC778\uC99D\uD558\uB294 \uD1A0\uD070 `; var approvePaymentParameters = (_context = {}) => z4.object({ tid: z4.string().describe("\uACB0\uC81C \uACE0\uC720\uBC88\uD638 (\uACB0\uC81C \uC900\uBE44\uC5D0\uC11C \uBC1B\uC740 tid)"), partner_order_id: z4.string().describe("\uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 (\uACB0\uC81C \uC900\uBE44 API \uC694\uCCAD\uACFC \uC77C\uCE58)"), partner_user_id: z4.string().describe("\uAC00\uB9F9\uC810 \uD68C\uC6D0 ID (\uACB0\uC81C \uC900\uBE44 API \uC694\uCCAD\uACFC \uC77C\uCE58)"), pg_token: z4.string().describe( "\uACB0\uC81C\uC2B9\uC778 \uC694\uCCAD\uC744 \uC778\uC99D\uD558\uB294 \uD1A0\uD070 (\uACB0\uC81C \uC218\uB2E8 \uC120\uD0DD \uC644\uB8CC \uD6C4 \uB9AC\uB2E4\uC774\uB809\uD2B8\uC5D0\uC11C \uBC1B\uC74C)" ) }); var approvePayment = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_APPROVE, { cid: context.cid, ...params }); return response.data; }; var tool4 = (context) => ({ method: "approve_payment", name: "Approve Payment", description: approvePaymentPrompt(context), parameters: approvePaymentParameters(context), actions: { payment: { approve: true } }, execute: approvePayment }); var approvePayment_default = tool4; // src/shared/payment/cancelPayment.ts import { z as z5 } from "zod"; var cancelPaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uACB0\uC81C\uB97C \uCDE8\uC18C\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - tid (string): \uACB0\uC81C \uACE0\uC720\uBC88\uD638 - cancel_amount (number): \uCDE8\uC18C \uAE08\uC561 - cancel_tax_free_amount (number): \uCDE8\uC18C \uBE44\uACFC\uC138 \uAE08\uC561 `; var cancelPaymentParameters = (_context = {}) => z5.object({ tid: z5.string().describe("\uACB0\uC81C \uACE0\uC720\uBC88\uD638 (20\uC790)"), cancel_amount: z5.number().int().positive().describe("\uCDE8\uC18C \uAE08\uC561"), cancel_tax_free_amount: z5.number().int().min(0).describe("\uCDE8\uC18C \uBE44\uACFC\uC138 \uAE08\uC561") }); var cancelPayment = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_CANCEL, { cid: context.cid, ...params }); return response.data; }; var tool5 = (context) => ({ method: "cancel_payment", name: "Cancel Payment", description: cancelPaymentPrompt(context), parameters: cancelPaymentParameters(context), actions: { payment: { cancel: true } }, execute: cancelPayment }); var cancelPayment_default = tool5; // src/shared/subscription/requestSubscription.ts import { z as z6 } from "zod"; var requestSubscriptionPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uC815\uAE30 \uACB0\uC81C\uB97C \uC694\uCCAD\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - sid (string): \uC815\uAE30 \uACB0\uC81C \uD0A4 - partner_order_id (string): \uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 - partner_user_id (string): \uAC00\uB9F9\uC810 \uD68C\uC6D0 ID - item_name (string): \uC0C1\uD488\uBA85 - quantity (number): \uC0C1\uD488 \uC218\uB7C9 - total_amount (number): \uC0C1\uD488 \uCD1D\uC561 - tax_free_amount (number): \uC0C1\uD488 \uBE44\uACFC\uC138 \uAE08\uC561 `; var requestSubscriptionParameters = (_context = {}) => z6.object({ sid: z6.string().describe("\uC815\uAE30 \uACB0\uC81C \uD0A4 (20\uC790)"), partner_order_id: z6.string().describe("\uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 (\uCD5C\uB300 100\uC790)"), partner_user_id: z6.string().describe("\uAC00\uB9F9\uC810 \uD68C\uC6D0 ID (\uCD5C\uB300 100\uC790)"), item_name: z6.string().describe("\uC0C1\uD488\uBA85 (\uCD5C\uB300 100\uC790)"), quantity: z6.number().int().positive().describe("\uC0C1\uD488 \uC218\uB7C9"), total_amount: z6.number().int().positive().describe("\uC0C1\uD488 \uCD1D\uC561"), tax_free_amount: z6.number().int().min(0).describe("\uC0C1\uD488 \uBE44\uACFC\uC138 \uAE08\uC561") }); var requestSubscription = async (client, context, params) => { const response = await client.post( KAKAO_PAY_API_ENDPOINTS.SUBSCRIPTION_REQUEST, { cid: context.cid, ...params } ); return response.data; }; var tool6 = (context) => ({ method: "request_subscription", name: "Request Subscription", description: requestSubscriptionPrompt(context), parameters: requestSubscriptionParameters(context), actions: { subscription: { request: true } }, execute: requestSubscription }); var requestSubscription_default = tool6; // src/shared/subscription/inactiveSubscription.ts import { z as z7 } from "zod"; var inactiveSubscriptionPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uC815\uAE30 \uACB0\uC81C\uB97C \uBE44\uD65C\uC131\uD654\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - sid (string): \uC815\uAE30 \uACB0\uC81C \uACE0\uC720\uBC88\uD638 `; var inactiveSubscriptionParameters = (_context = {}) => z7.object({ sid: z7.string().describe("\uC815\uAE30 \uACB0\uC81C \uACE0\uC720\uBC88\uD638 (20\uC790)") }); var inactiveSubscription = async (client, context, params) => { const response = await client.post( KAKAO_PAY_API_ENDPOINTS.SUBSCRIPTION_INACTIVE, { cid: context.cid, ...params } ); return response.data; }; var tool7 = (context) => ({ method: "inactive_subscription", name: "Inactive Subscription", description: inactiveSubscriptionPrompt(context), parameters: inactiveSubscriptionParameters(context), actions: { subscription: { inactive: true } }, execute: inactiveSubscription }); var inactiveSubscription_default = tool7; // src/shared/subscription/getSubscription.ts import { z as z8 } from "zod"; var getSubscriptionPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uC815\uAE30 \uACB0\uC81C\uB97C \uC2B9\uC778\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - sid (string): \uC815\uAE30 \uACB0\uC81C \uACE0\uC720\uBC88\uD638 `; var getSubscriptionParameters = (_context = {}) => z8.object({ sid: z8.string().describe("\uC815\uAE30 \uACB0\uC81C \uACE0\uC720\uBC88\uD638 (20\uC790)") }); var getSubscription = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.SUBSCRIPTION_GET, { cid: context.cid, ...params }); return response.data; }; var tool8 = (context) => ({ method: "get_subscription", name: "Get Subscription", description: getSubscriptionPrompt(context), parameters: getSubscriptionParameters(context), actions: { subscription: { get: true } }, execute: getSubscription }); var getSubscription_default = tool8; // src/shared/tools.ts var tools = (context) => [ demoPayment_default(context), getPayment_default(context), readyPayment_default(context), approvePayment_default(context), cancelPayment_default(context), requestSubscription_default(context), inactiveSubscription_default(context), getSubscription_default(context) ]; var tools_default = tools; // src/shared/api.ts var KakaoPayAPI = class { constructor(secretKey, context) { this.context = context || {}; this.kakaoPayClient = new KakaoPayClient(secretKey); this.tools = tools_default(this.context); } async run(method, arg) { try { const tool9 = this.tools.find((t) => t.method === method); if (!tool9) { throw new Error(`Invalid MCP method: ${method}`); } const output = await tool9.execute(this.kakaoPayClient, this.context, arg); return JSON.stringify(output); } catch (error) { if (error.response) { return JSON.stringify({ error: { http_status: error.response.status, ...error.response.data } }); } const errorMessage = error.message || "Unknown error"; return JSON.stringify({ error: { error_message: errorMessage } }); } } }; var api_default = KakaoPayAPI; // package.json var version = "0.1.2"; // src/modelcontextprotocol/toolkit.ts var KakaoPayAgentToolkit = class extends McpServer { constructor({ secretKey, configuration }) { super({ name: "KakaoPay", version }); this._kakaopay = new api_default(secretKey, configuration.context); const context = configuration.context || {}; const filteredTools = tools_default(context).filter( (tool9) => isToolAllowed(tool9, configuration) ); filteredTools.forEach((tool9) => { this.tool( tool9.method, tool9.description, tool9.parameters.shape, async (arg, _extra) => { const result = await this._kakaopay.run(tool9.method, arg); return { content: [ { type: "text", text: String(result) } ] }; } ); }); } }; var toolkit_default = KakaoPayAgentToolkit; export { api_default as KakaoPayAPI, toolkit_default as KakaoPayAgentToolkit }; //# sourceMappingURL=index.mjs.map