@portone/mcp-server 0.17.0 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/server/index.js +66 -34
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portone/mcp-server",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.1",
|
|
4
4
|
"description": "포트원 사용자를 위한 MCP (Model Context Protocol) 서버입니다. 포트원 개발자센터, 헬프센터 등 공식 문서 내용을 LLM(Large Language Model)에 제공해 정확한 정보를 바탕으로 사용자의 연동 및 질의를 돕도록 합니다.",
|
|
5
5
|
"main": "server/index.js",
|
|
6
6
|
"type": "module",
|
package/server/index.js
CHANGED
|
@@ -15,7 +15,7 @@ import { GraphQLClient } from "graphql-request";
|
|
|
15
15
|
// package.json
|
|
16
16
|
var package_default = {
|
|
17
17
|
name: "@portone/mcp-server",
|
|
18
|
-
version: "0.17.
|
|
18
|
+
version: "0.17.1",
|
|
19
19
|
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.",
|
|
20
20
|
main: "server/index.js",
|
|
21
21
|
type: "module",
|
|
@@ -1763,6 +1763,42 @@ import { parse as parse3 } from "graphql";
|
|
|
1763
1763
|
import { gql as gql3 } from "graphql-request";
|
|
1764
1764
|
import { match as match7, P as P6 } from "ts-pattern";
|
|
1765
1765
|
import z11 from "zod";
|
|
1766
|
+
|
|
1767
|
+
// src/tools/utils/requestError.ts
|
|
1768
|
+
function toRequestError(error) {
|
|
1769
|
+
const response = error?.response;
|
|
1770
|
+
const rawErrors = response?.errors;
|
|
1771
|
+
if (Array.isArray(rawErrors) && rawErrors.length > 0) {
|
|
1772
|
+
const errors = rawErrors.map((entry) => {
|
|
1773
|
+
const e = entry;
|
|
1774
|
+
const message2 = typeof e.message === "string" && e.message.length > 0 ? e.message : void 0;
|
|
1775
|
+
const code = e.extensions?.code != null ? String(e.extensions.code) : void 0;
|
|
1776
|
+
const path = Array.isArray(e.path) ? e.path.join(".") : void 0;
|
|
1777
|
+
return { message: message2, code, path };
|
|
1778
|
+
});
|
|
1779
|
+
const primary = errors[0];
|
|
1780
|
+
const message = primary.message ?? (primary.code != null ? `GraphQL \uC624\uB958 (code: ${primary.code})` : "GraphQL \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. (\uC11C\uBC84\uAC00 \uC0C1\uC138 \uBA54\uC2DC\uC9C0\uB97C \uBC18\uD658\uD558\uC9C0 \uC54A\uC74C)");
|
|
1781
|
+
return {
|
|
1782
|
+
type: "error",
|
|
1783
|
+
data: { message, type: "GraphQLError", errors }
|
|
1784
|
+
};
|
|
1785
|
+
}
|
|
1786
|
+
if (error instanceof Error) {
|
|
1787
|
+
return {
|
|
1788
|
+
type: "error",
|
|
1789
|
+
data: {
|
|
1790
|
+
message: error.message || error.name || "\uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.",
|
|
1791
|
+
type: error.name
|
|
1792
|
+
}
|
|
1793
|
+
};
|
|
1794
|
+
}
|
|
1795
|
+
return {
|
|
1796
|
+
type: "error",
|
|
1797
|
+
data: { message: "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.", cause: String(error) }
|
|
1798
|
+
};
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
// src/tools/request/getReconciliations.ts
|
|
1766
1802
|
var ErrorResponse3 = z11.object({
|
|
1767
1803
|
__typename: z11.string(),
|
|
1768
1804
|
message: z11.string().nullable()
|
|
@@ -2111,27 +2147,22 @@ async function getReconciliations({
|
|
|
2111
2147
|
data
|
|
2112
2148
|
}));
|
|
2113
2149
|
} catch (error) {
|
|
2114
|
-
|
|
2115
|
-
return {
|
|
2116
|
-
type: "error",
|
|
2117
|
-
data: error
|
|
2118
|
-
};
|
|
2119
|
-
} else {
|
|
2120
|
-
return {
|
|
2121
|
-
type: "error",
|
|
2122
|
-
data: {
|
|
2123
|
-
message: `\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.`,
|
|
2124
|
-
cause: error
|
|
2125
|
-
}
|
|
2126
|
-
};
|
|
2127
|
-
}
|
|
2150
|
+
return toRequestError(error);
|
|
2128
2151
|
}
|
|
2129
2152
|
}
|
|
2130
2153
|
|
|
2131
2154
|
// src/tools/utils/dateRange.ts
|
|
2132
2155
|
var LOOKBACK_MONTHS = 6;
|
|
2133
|
-
|
|
2134
|
-
|
|
2156
|
+
function maxRangeLabel(maxRange) {
|
|
2157
|
+
if ("months" in maxRange) {
|
|
2158
|
+
return `${maxRange.months}\uAC1C\uC6D4`;
|
|
2159
|
+
}
|
|
2160
|
+
if (maxRange.days % 7 === 0) {
|
|
2161
|
+
return `${maxRange.days / 7}\uC8FC`;
|
|
2162
|
+
}
|
|
2163
|
+
return `${maxRange.days}\uC77C`;
|
|
2164
|
+
}
|
|
2165
|
+
function validateReconciliationDateRange(from, to, maxRange) {
|
|
2135
2166
|
const fromDate = /* @__PURE__ */ new Date(`${from}T00:00:00Z`);
|
|
2136
2167
|
const toDate = /* @__PURE__ */ new Date(`${to}T00:00:00Z`);
|
|
2137
2168
|
if (Number.isNaN(fromDate.getTime()) || Number.isNaN(toDate.getTime())) {
|
|
@@ -2149,9 +2180,13 @@ function validateReconciliationDateRange(from, to) {
|
|
|
2149
2180
|
return `\uC870\uD68C \uC2DC\uC791\uC77C(from)\uC740 \uCD5C\uADFC ${LOOKBACK_MONTHS}\uAC1C\uC6D4 \uC774\uB0B4\uC5EC\uC57C \uD569\uB2C8\uB2E4. ${earliest.toISOString().slice(0, 10)} \uC774\uD6C4\uB85C \uC9C0\uC815\uD574\uC8FC\uC138\uC694.`;
|
|
2150
2181
|
}
|
|
2151
2182
|
const maxTo = new Date(fromDate);
|
|
2152
|
-
|
|
2183
|
+
if ("months" in maxRange) {
|
|
2184
|
+
maxTo.setUTCMonth(maxTo.getUTCMonth() + maxRange.months);
|
|
2185
|
+
} else {
|
|
2186
|
+
maxTo.setUTCDate(maxTo.getUTCDate() + maxRange.days);
|
|
2187
|
+
}
|
|
2153
2188
|
if (toDate > maxTo) {
|
|
2154
|
-
return `\uC870\uD68C \uAD6C\uAC04\uC740 \uCD5C\uB300 ${
|
|
2189
|
+
return `\uC870\uD68C \uAD6C\uAC04\uC740 \uCD5C\uB300 ${maxRangeLabel(maxRange)}\uAE4C\uC9C0 \uAC00\uB2A5\uD569\uB2C8\uB2E4. from(${from}) \uAE30\uC900 ${maxTo.toISOString().slice(0, 10)} \uC774\uB0B4\uB85C to\uB97C \uC9C0\uC815\uD574\uC8FC\uC138\uC694.`;
|
|
2155
2190
|
}
|
|
2156
2191
|
return null;
|
|
2157
2192
|
}
|
|
@@ -2231,7 +2266,7 @@ var config5 = {
|
|
|
2231
2266
|
\uB300\uC0AC \uBD88\uC77C\uCE58 \uC0C1\uC138\uB294 statuses=[NOT_MATCHED] \uB85C \uC870\uD68C \uD6C4 \uAC01 \uAC74\uC758 notMatchedReasons \uB97C \uD655\uC778\uD569\uB2C8\uB2E4.
|
|
2232
2267
|
\uB300\uC0AC \uBD88\uAC00 \uC0AC\uC720\uB294 INCOMPARABLE \uAC74\uC758 incomparableReason \uD544\uB4DC\uC5D0\uC11C \uD655\uC778\uD569\uB2C8\uB2E4.
|
|
2233
2268
|
\uB0A0\uC9DC\uB294 \uBC18\uB4DC\uC2DC YYYY-MM-DD \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD558\uBA70, dateType \uC73C\uB85C \uC815\uC0B0\uC77C/\uACB0\uC81C\uC77C \uAE30\uC900\uC744 \uC120\uD0DD\uD569\uB2C8\uB2E4.
|
|
2234
|
-
\uC870\uD68C \uAE30\uAC04 \uC81C\uC57D: from \uC740 \uCD5C\uADFC 6\uAC1C\uC6D4 \uC774\uB0B4\uC5EC\uC57C \uD558\uACE0, \uD55C \uBC88\uC5D0 \uC870\uD68C \uAC00\uB2A5\uD55C \uAD6C\uAC04\uC740 \uCD5C\uB300
|
|
2269
|
+
\uC870\uD68C \uAE30\uAC04 \uC81C\uC57D: from \uC740 \uCD5C\uADFC 6\uAC1C\uC6D4 \uC774\uB0B4\uC5EC\uC57C \uD558\uACE0, \uD55C \uBC88\uC5D0 \uC870\uD68C \uAC00\uB2A5\uD55C \uAD6C\uAC04\uC740 \uCD5C\uB300 2\uC8FC\uC785\uB2C8\uB2E4.
|
|
2235
2270
|
store \uC544\uC774\uB514\uB294 list_stores \uB3C4\uAD6C\uB85C \uBA3C\uC800 \uC870\uD68C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`,
|
|
2236
2271
|
inputSchema: InputSchema4.shape,
|
|
2237
2272
|
outputSchema: OutputSchema5.shape
|
|
@@ -2287,7 +2322,9 @@ function init5(tokenProvider, client) {
|
|
|
2287
2322
|
first,
|
|
2288
2323
|
after
|
|
2289
2324
|
}) => {
|
|
2290
|
-
const dateRangeError = validateReconciliationDateRange(from, to
|
|
2325
|
+
const dateRangeError = validateReconciliationDateRange(from, to, {
|
|
2326
|
+
days: 14
|
|
2327
|
+
});
|
|
2291
2328
|
if (dateRangeError != null) {
|
|
2292
2329
|
return toolErrorResult({
|
|
2293
2330
|
type: "error",
|
|
@@ -2616,15 +2653,6 @@ async function getSettlementStatistics({
|
|
|
2616
2653
|
return toRequestError(error);
|
|
2617
2654
|
}
|
|
2618
2655
|
}
|
|
2619
|
-
function toRequestError(error) {
|
|
2620
|
-
if (error instanceof Error) {
|
|
2621
|
-
return { type: "error", data: error };
|
|
2622
|
-
}
|
|
2623
|
-
return {
|
|
2624
|
-
type: "error",
|
|
2625
|
-
data: { message: `\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.`, cause: error }
|
|
2626
|
-
};
|
|
2627
|
-
}
|
|
2628
2656
|
|
|
2629
2657
|
// src/tools/getSettlementStatistics.ts
|
|
2630
2658
|
var name6 = "getSettlementStatistics";
|
|
@@ -2659,14 +2687,16 @@ var config6 = {
|
|
|
2659
2687
|
|
|
2660
2688
|
\uAC80\uC0C9 \uAD6C\uAC04 \uB0B4 \uD1B5\uD654\uBCC4 \uD569\uC0B0 \uD1B5\uACC4(\uC815\uC0B0/\uC815\uC0B0\uC608\uC815 \uAE08\uC561\xB7\uAC74\uC218)\uC640 \uC77C\uBCC4 \uD1B5\uACC4\uB97C \uC81C\uACF5\uD569\uB2C8\uB2E4.
|
|
2661
2689
|
\uB0A0\uC9DC\uB294 \uBC18\uB4DC\uC2DC YYYY-MM-DD \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD569\uB2C8\uB2E4.
|
|
2662
|
-
\uC870\uD68C \uAE30\uAC04 \uC81C\uC57D: from \uC740 \uCD5C\uADFC 6\uAC1C\uC6D4 \uC774\uB0B4\uC5EC\uC57C \uD558\uACE0, \uD55C \uBC88\uC5D0 \uC870\uD68C \uAC00\uB2A5\uD55C \uAD6C\uAC04\uC740 \uCD5C\uB300
|
|
2690
|
+
\uC870\uD68C \uAE30\uAC04 \uC81C\uC57D: from \uC740 \uCD5C\uADFC 6\uAC1C\uC6D4 \uC774\uB0B4\uC5EC\uC57C \uD558\uACE0, \uD55C \uBC88\uC5D0 \uC870\uD68C \uAC00\uB2A5\uD55C \uAD6C\uAC04\uC740 \uCD5C\uB300 1\uAC1C\uC6D4\uC785\uB2C8\uB2E4.
|
|
2663
2691
|
store \uC544\uC774\uB514\uB294 list_stores \uB3C4\uAD6C\uB85C \uBA3C\uC800 \uC870\uD68C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`,
|
|
2664
2692
|
inputSchema: InputSchema5.shape,
|
|
2665
2693
|
outputSchema: OutputSchema6.shape
|
|
2666
2694
|
};
|
|
2667
2695
|
function init6(tokenProvider, client) {
|
|
2668
2696
|
return async ({ store, from, to }) => {
|
|
2669
|
-
const dateRangeError = validateReconciliationDateRange(from, to
|
|
2697
|
+
const dateRangeError = validateReconciliationDateRange(from, to, {
|
|
2698
|
+
months: 1
|
|
2699
|
+
});
|
|
2670
2700
|
if (dateRangeError != null) {
|
|
2671
2701
|
return toolErrorResult({
|
|
2672
2702
|
type: "error",
|
|
@@ -2753,14 +2783,16 @@ var config7 = {
|
|
|
2753
2783
|
|
|
2754
2784
|
\uAC01 \uC77C\uC790\uBCC4\uB85C \uC815\uC0B0 \uAE08\uC561/\uAC74\uC218, PG \uC218\uC218\uB8CC, \uCDE8\uC18C, \uD6C4\uBCF4\uC815 \uD569\uC0B0\uCE58\uC640 \uC0C1\uC810\xB7PG\uBCC4 \uC0C1\uC138 \uB0B4\uC5ED\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4.
|
|
2755
2785
|
\uB0A0\uC9DC\uB294 \uBC18\uB4DC\uC2DC YYYY-MM-DD \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD569\uB2C8\uB2E4.
|
|
2756
|
-
\uC870\uD68C \uAE30\uAC04 \uC81C\uC57D: from \uC740 \uCD5C\uADFC 6\uAC1C\uC6D4 \uC774\uB0B4\uC5EC\uC57C \uD558\uACE0, \uD55C \uBC88\uC5D0 \uC870\uD68C \uAC00\uB2A5\uD55C \uAD6C\uAC04\uC740 \uCD5C\uB300
|
|
2786
|
+
\uC870\uD68C \uAE30\uAC04 \uC81C\uC57D: from \uC740 \uCD5C\uADFC 6\uAC1C\uC6D4 \uC774\uB0B4\uC5EC\uC57C \uD558\uACE0, \uD55C \uBC88\uC5D0 \uC870\uD68C \uAC00\uB2A5\uD55C \uAD6C\uAC04\uC740 \uCD5C\uB300 1\uAC1C\uC6D4\uC785\uB2C8\uB2E4.
|
|
2757
2787
|
store \uC544\uC774\uB514\uB294 list_stores \uB3C4\uAD6C\uB85C \uBA3C\uC800 \uC870\uD68C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`,
|
|
2758
2788
|
inputSchema: InputSchema6.shape,
|
|
2759
2789
|
outputSchema: OutputSchema7.shape
|
|
2760
2790
|
};
|
|
2761
2791
|
function init7(tokenProvider, client) {
|
|
2762
2792
|
return async ({ store, from, to, first, after }) => {
|
|
2763
|
-
const dateRangeError = validateReconciliationDateRange(from, to
|
|
2793
|
+
const dateRangeError = validateReconciliationDateRange(from, to, {
|
|
2794
|
+
months: 1
|
|
2795
|
+
});
|
|
2764
2796
|
if (dateRangeError != null) {
|
|
2765
2797
|
return toolErrorResult({
|
|
2766
2798
|
type: "error",
|