@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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "dxt_version": "0.1",
3
3
  "name": "portone-mcp-server",
4
- "version": "0.17.0",
4
+ "version": "0.17.1",
5
5
  "description": "PortOne MCP Server for Developers",
6
6
  "author": {
7
7
  "name": "PortOne",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portone/mcp-server",
3
- "version": "0.17.0",
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.0",
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
- if (error instanceof Error) {
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
- var MAX_RANGE_MONTHS = 3;
2134
- function validateReconciliationDateRange(from, to) {
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
- maxTo.setUTCMonth(maxTo.getUTCMonth() + MAX_RANGE_MONTHS);
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 ${MAX_RANGE_MONTHS}\uAC1C\uC6D4\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.`;
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 3\uAC1C\uC6D4\uC785\uB2C8\uB2E4.
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 3\uAC1C\uC6D4\uC785\uB2C8\uB2E4.
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 3\uAC1C\uC6D4\uC785\uB2C8\uB2E4.
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",