perkakasku-mcp-server 1.0.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.
package/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # Perkakasku MCP Server
2
+
3
+ This is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that exposes the Perkakasku CLI API as tools for AI agents.
4
+
5
+ ## Features
6
+
7
+ - **Search Products**: Search using the website's optimized scoring logic.
8
+ - **Product Details**: Get full specifications and pricing.
9
+ - **Cart Management**: Add, remove, and view items in a session-based cart.
10
+ - **Shipping Estimate**: Get real-time shipping costs.
11
+ - **Checkout**: Generate formal invoice/payment links.
12
+ - **RFQ**: Submit simple Requests for Quotation.
13
+ - **User Profile**: Fetch logged-in user details.
14
+
15
+ ## Setup
16
+
17
+ ### 1. Install Dependencies
18
+ ```bash
19
+ npm install
20
+ ```
21
+
22
+ ### 2. Configure Environment
23
+ Create a `.env` file in this directory or set the following environment variables:
24
+
25
+ ```env
26
+ PERKAKASKU_API_URL=https://www.perkakasku.com/api/v1/cli
27
+ PERKAKASKU_API_TOKEN=your_bearer_token_here
28
+ ```
29
+
30
+ ### 3. Build the Server
31
+ ```bash
32
+ npm run build
33
+ ```
34
+
35
+ ## Adding to Claude Desktop
36
+
37
+ ### Option A: Using npx (Easiest for Users)
38
+ Add this to your `claude_desktop_config.json`:
39
+
40
+ ```json
41
+ {
42
+ "mcpServers": {
43
+ "perkakasku": {
44
+ "command": "npx",
45
+ "args": ["-y", "perkakasku-mcp-server"],
46
+ "env": {
47
+ "PERKAKASKU_API_URL": "https://www.perkakasku.com/api/v1/cli",
48
+ "PERKAKASKU_API_TOKEN": "your_bearer_token_here"
49
+ }
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ ### Option B: Local Setup (For Developers)
56
+ ```json
57
+ {
58
+ "mcpServers": {
59
+ "perkakasku": {
60
+ "command": "node",
61
+ "args": ["/Users/handilimidjaja/Documents/aptana/main-website/mcp-server/build/index.js"],
62
+ "env": {
63
+ "PERKAKASKU_API_URL": "https://www.perkakasku.com/api/v1/cli",
64
+ "PERKAKASKU_API_TOKEN": "your_bearer_token_here"
65
+ }
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+ ## Development
72
+
73
+ To run with `ts-node`:
74
+ ```bash
75
+ npm run dev
76
+ ```
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/build/index.js ADDED
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
+ import axios from "axios";
6
+ import dotenv from "dotenv";
7
+ dotenv.config();
8
+ const API_URL = process.env.PERKAKASKU_API_URL || "https://www.perkakasku.com/api/v1/cli";
9
+ const API_TOKEN = process.env.PERKAKASKU_API_TOKEN;
10
+ if (!API_TOKEN) {
11
+ console.error("Warning: PERKAKASKU_API_TOKEN is not set.");
12
+ }
13
+ const server = new Server({
14
+ name: "perkakasku-mcp-server",
15
+ version: "1.0.0",
16
+ }, {
17
+ capabilities: {
18
+ tools: {},
19
+ },
20
+ });
21
+ const apiClient = axios.create({
22
+ baseURL: API_URL,
23
+ headers: {
24
+ "Content-Type": "application/json",
25
+ Authorization: `Bearer ${API_TOKEN}`,
26
+ },
27
+ });
28
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
29
+ return {
30
+ tools: [
31
+ {
32
+ name: "search_products",
33
+ description: "Search for products on Perkakasku using optimized pricing and ranking.",
34
+ inputSchema: {
35
+ type: "object",
36
+ properties: {
37
+ query: { type: "string", description: "Search query (e.g., 'bosch bor')" },
38
+ page: { type: "number", description: "Page number (optional, default 1)" },
39
+ },
40
+ required: ["query"],
41
+ },
42
+ },
43
+ {
44
+ name: "get_product_details",
45
+ description: "Get detailed information about a specific product, including specs and stock.",
46
+ inputSchema: {
47
+ type: "object",
48
+ properties: {
49
+ id: { type: "string", description: "Product code (e.g., 'PX471')" },
50
+ },
51
+ required: ["id"],
52
+ },
53
+ },
54
+ {
55
+ name: "get_cart",
56
+ description: "View the current items in the shopping cart.",
57
+ inputSchema: {
58
+ type: "object",
59
+ properties: {},
60
+ },
61
+ },
62
+ {
63
+ name: "add_to_cart",
64
+ description: "Add a product to the shopping cart.",
65
+ inputSchema: {
66
+ type: "object",
67
+ properties: {
68
+ product_id: { type: "string", description: "Product code" },
69
+ qty: { type: "number", description: "Quantity to add" },
70
+ },
71
+ required: ["product_id", "qty"],
72
+ },
73
+ },
74
+ {
75
+ name: "remove_from_cart",
76
+ description: "Remove a product from the shopping cart.",
77
+ inputSchema: {
78
+ type: "object",
79
+ properties: {
80
+ product_id: { type: "string", description: "Product code" },
81
+ },
82
+ required: ["product_id"],
83
+ },
84
+ },
85
+ {
86
+ name: "shipping_estimate",
87
+ description: "Get shipping cost estimates for items in the cart.",
88
+ inputSchema: {
89
+ type: "object",
90
+ properties: {
91
+ city_id: { type: "number", description: "Destination city ID" },
92
+ },
93
+ required: ["city_id"],
94
+ },
95
+ },
96
+ {
97
+ name: "create_checkout",
98
+ description: "Generate a checkout payment link or invoice.",
99
+ inputSchema: {
100
+ type: "object",
101
+ properties: {
102
+ city_id: { type: "number", description: "Destination city ID" },
103
+ courier_id: { type: "string", description: "Courier ID (e.g., 'JNE', 'LLL')" },
104
+ },
105
+ required: ["city_id", "courier_id"],
106
+ },
107
+ },
108
+ {
109
+ name: "submit_simple_rfq",
110
+ description: "Submit a simple Request for Quotation (RFQ).",
111
+ inputSchema: {
112
+ type: "object",
113
+ properties: {
114
+ email: { type: "string" },
115
+ nama: { type: "string" },
116
+ telepon: { type: "string" },
117
+ kebutuhan: { type: "string", description: "Detailed description of needs" },
118
+ },
119
+ required: ["email", "nama", "telepon", "kebutuhan"],
120
+ },
121
+ },
122
+ {
123
+ name: "get_user_profile",
124
+ description: "Get information about the logged-in user.",
125
+ inputSchema: {
126
+ type: "object",
127
+ properties: {},
128
+ },
129
+ },
130
+ ],
131
+ };
132
+ });
133
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
134
+ const { name, arguments: args } = request.params;
135
+ try {
136
+ switch (name) {
137
+ case "search_products": {
138
+ const query = args?.query;
139
+ const page = args?.page || 1;
140
+ const response = await apiClient.get(`/search.php?q=${encodeURIComponent(query)}&page=${page}`);
141
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
142
+ }
143
+ case "get_product_details": {
144
+ const id = args?.id;
145
+ const response = await apiClient.get(`/product.php?id=${encodeURIComponent(id)}`);
146
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
147
+ }
148
+ case "get_cart": {
149
+ const response = await apiClient.get("/cart/index.php");
150
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
151
+ }
152
+ case "add_to_cart": {
153
+ const response = await apiClient.post("/cart/add.php", args);
154
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
155
+ }
156
+ case "remove_from_cart": {
157
+ const response = await apiClient.post("/cart/remove.php", args);
158
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
159
+ }
160
+ case "shipping_estimate": {
161
+ const response = await apiClient.post("/shipping/estimate.php", args);
162
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
163
+ }
164
+ case "create_checkout": {
165
+ const response = await apiClient.post("/checkout/generate.php", args);
166
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
167
+ }
168
+ case "submit_simple_rfq": {
169
+ const response = await apiClient.post("/rfq/submit.php", args);
170
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
171
+ }
172
+ case "get_user_profile": {
173
+ const response = await apiClient.get("/profile.php");
174
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
175
+ }
176
+ default:
177
+ throw new Error(`Tool not found: ${name}`);
178
+ }
179
+ }
180
+ catch (error) {
181
+ const errorMessage = error.response?.data
182
+ ? JSON.stringify(error.response.data)
183
+ : error.message;
184
+ return {
185
+ content: [{ type: "text", text: `Error: ${errorMessage}` }],
186
+ isError: true,
187
+ };
188
+ }
189
+ });
190
+ async function main() {
191
+ const transport = new StdioServerTransport();
192
+ await server.connect(transport);
193
+ console.error("Perkakasku MCP Server running on stdio");
194
+ }
195
+ main().catch((error) => {
196
+ console.error("Fatal error in main():", error);
197
+ process.exit(1);
198
+ });
199
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uCAAuC,CAAC;AAC1F,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAEnD,IAAI,CAAC,SAAS,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,UAAU,SAAS,EAAE;KACrC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO;QACL,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EAAE,wEAAwE;gBACrF,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;wBAC1E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;qBAC3E;oBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;iBACpB;aACF;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,WAAW,EAAE,+EAA+E;gBAC5F,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;qBACpE;oBACD,QAAQ,EAAE,CAAC,IAAI,CAAC;iBACjB;aACF;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,8CAA8C;gBAC3D,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,qCAAqC;gBAClD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;wBAC3D,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;qBACxD;oBACD,QAAQ,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC;iBAChC;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,0CAA0C;gBACvD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;qBAC5D;oBACD,QAAQ,EAAE,CAAC,YAAY,CAAC;iBACzB;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,oDAAoD;gBACjE,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;qBAChE;oBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;iBACtB;aACF;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EAAE,8CAA8C;gBAC3D,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;wBAC/D,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;qBAC/E;oBACD,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;iBACpC;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,8CAA8C;gBAC3D,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;qBAC5E;oBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC;iBACpD;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,2CAA2C;gBACxD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;SACF;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,KAAK,GAAG,IAAI,EAAE,KAAe,CAAC;gBACpC,MAAM,IAAI,GAAI,IAAI,EAAE,IAAe,IAAI,CAAC,CAAC;gBACzC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBAChG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,EAAE,GAAG,IAAI,EAAE,EAAY,CAAC;gBAC9B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,mBAAmB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAClF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACxD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;gBAChE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;gBACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;gBACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,CAAC;YACD;gBACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI;YACvC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,YAAY,EAAE,EAAE,CAAC;YAC3D,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC1D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "perkakasku-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "Model Context Protocol (MCP) server for Perkakasku e-commerce platform.",
5
+ "main": "build/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "perkakasku-mcp-server": "build/index.js"
9
+ },
10
+ "files": [
11
+ "build"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "start": "node build/index.js",
16
+ "dev": "ts-node src/index.ts"
17
+ },
18
+ "keywords": [],
19
+ "author": "",
20
+ "license": "ISC",
21
+ "dependencies": {
22
+ "@modelcontextprotocol/sdk": "^1.27.1",
23
+ "axios": "^1.13.6",
24
+ "dotenv": "^17.3.1"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^25.5.0",
28
+ "ts-node": "^10.9.2",
29
+ "typescript": "^5.9.3"
30
+ }
31
+ }