perkakasku-mcp-server 1.0.1 → 1.0.2
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 +34 -0
- package/build/index.js +156 -16
- package/build/index.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -15,11 +15,13 @@ This is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) serve
|
|
|
15
15
|
## Setup
|
|
16
16
|
|
|
17
17
|
### 1. Install Dependencies
|
|
18
|
+
|
|
18
19
|
```bash
|
|
19
20
|
npm install
|
|
20
21
|
```
|
|
21
22
|
|
|
22
23
|
### 2. Configure Environment
|
|
24
|
+
|
|
23
25
|
Create a `.env` file in this directory or set the following environment variables:
|
|
24
26
|
|
|
25
27
|
```env
|
|
@@ -28,6 +30,7 @@ PERKAKASKU_API_TOKEN=your_bearer_token_here
|
|
|
28
30
|
```
|
|
29
31
|
|
|
30
32
|
### 3. Build the Server
|
|
33
|
+
|
|
31
34
|
```bash
|
|
32
35
|
npm run build
|
|
33
36
|
```
|
|
@@ -35,6 +38,7 @@ npm run build
|
|
|
35
38
|
## Adding to Claude Desktop
|
|
36
39
|
|
|
37
40
|
### Option A: Using npx (Easiest for Users)
|
|
41
|
+
|
|
38
42
|
Add this to your `claude_desktop_config.json`:
|
|
39
43
|
|
|
40
44
|
```json
|
|
@@ -53,6 +57,7 @@ Add this to your `claude_desktop_config.json`:
|
|
|
53
57
|
```
|
|
54
58
|
|
|
55
59
|
### Option B: Local Setup (For Developers)
|
|
60
|
+
|
|
56
61
|
```json
|
|
57
62
|
{
|
|
58
63
|
"mcpServers": {
|
|
@@ -71,6 +76,35 @@ Add this to your `claude_desktop_config.json`:
|
|
|
71
76
|
## Development
|
|
72
77
|
|
|
73
78
|
To run with `ts-node`:
|
|
79
|
+
|
|
74
80
|
```bash
|
|
75
81
|
npm run dev
|
|
76
82
|
```
|
|
83
|
+
|
|
84
|
+
## Smoke Tests
|
|
85
|
+
|
|
86
|
+
Run end-to-end MCP smoke tests against `api/v1/cli` (through MCP stdio transport):
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npm run test:smoke:build
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Required environment:
|
|
93
|
+
|
|
94
|
+
```env
|
|
95
|
+
PERKAKASKU_API_URL=https://www.perkakasku.com/api/v1/cli
|
|
96
|
+
PERKAKASKU_API_TOKEN=your_bearer_token_here
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Optional smoke fixtures (override defaults when needed):
|
|
100
|
+
|
|
101
|
+
```env
|
|
102
|
+
SMOKE_QUERY=bosch
|
|
103
|
+
SMOKE_PRODUCT_ID=TN677
|
|
104
|
+
SMOKE_CITY_ID=419
|
|
105
|
+
SMOKE_COURIER_ID=JNE
|
|
106
|
+
SMOKE_RFQ_EMAIL=smoke-test@perkakasku.com
|
|
107
|
+
SMOKE_RFQ_NAMA=MCP Smoke Test
|
|
108
|
+
SMOKE_RFQ_TELP=081234567890
|
|
109
|
+
SMOKE_RFQ_KEBUTUHAN=Automated MCP smoke test request. Ignore this submission.
|
|
110
|
+
```
|
package/build/index.js
CHANGED
|
@@ -7,12 +7,13 @@ import dotenv from "dotenv";
|
|
|
7
7
|
dotenv.config();
|
|
8
8
|
const API_URL = process.env.PERKAKASKU_API_URL || "https://www.perkakasku.com/api/v1/cli";
|
|
9
9
|
const API_TOKEN = process.env.PERKAKASKU_API_TOKEN;
|
|
10
|
+
const SERVER_VERSION = "1.0.2";
|
|
10
11
|
if (!API_TOKEN) {
|
|
11
|
-
console.error("Warning: PERKAKASKU_API_TOKEN is not set.");
|
|
12
|
+
console.error("Warning: PERKAKASKU_API_TOKEN is not set. Tool calls will fail until this is configured.");
|
|
12
13
|
}
|
|
13
14
|
const server = new Server({
|
|
14
15
|
name: "perkakasku-mcp-server",
|
|
15
|
-
version:
|
|
16
|
+
version: SERVER_VERSION,
|
|
16
17
|
}, {
|
|
17
18
|
capabilities: {
|
|
18
19
|
tools: {},
|
|
@@ -20,11 +21,14 @@ const server = new Server({
|
|
|
20
21
|
});
|
|
21
22
|
const apiClient = axios.create({
|
|
22
23
|
baseURL: API_URL,
|
|
24
|
+
timeout: 15000,
|
|
23
25
|
headers: {
|
|
24
26
|
"Content-Type": "application/json",
|
|
25
|
-
Authorization: `Bearer ${API_TOKEN}`,
|
|
26
27
|
},
|
|
27
28
|
});
|
|
29
|
+
if (API_TOKEN) {
|
|
30
|
+
apiClient.defaults.headers.common.Authorization = `Bearer ${API_TOKEN}`;
|
|
31
|
+
}
|
|
28
32
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
29
33
|
return {
|
|
30
34
|
tools: [
|
|
@@ -34,8 +38,14 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
34
38
|
inputSchema: {
|
|
35
39
|
type: "object",
|
|
36
40
|
properties: {
|
|
37
|
-
query: {
|
|
38
|
-
|
|
41
|
+
query: {
|
|
42
|
+
type: "string",
|
|
43
|
+
description: "Search query (e.g., 'bosch bor')",
|
|
44
|
+
},
|
|
45
|
+
page: {
|
|
46
|
+
type: "number",
|
|
47
|
+
description: "Page number (optional, default 1)",
|
|
48
|
+
},
|
|
39
49
|
},
|
|
40
50
|
required: ["query"],
|
|
41
51
|
},
|
|
@@ -100,7 +110,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
100
110
|
type: "object",
|
|
101
111
|
properties: {
|
|
102
112
|
city_id: { type: "number", description: "Destination city ID" },
|
|
103
|
-
courier_id: {
|
|
113
|
+
courier_id: {
|
|
114
|
+
type: "string",
|
|
115
|
+
description: "Courier ID (e.g., 'JNE', 'LLL')",
|
|
116
|
+
},
|
|
104
117
|
},
|
|
105
118
|
required: ["city_id", "courier_id"],
|
|
106
119
|
},
|
|
@@ -114,7 +127,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
114
127
|
email: { type: "string" },
|
|
115
128
|
nama: { type: "string" },
|
|
116
129
|
telepon: { type: "string" },
|
|
117
|
-
kebutuhan: {
|
|
130
|
+
kebutuhan: {
|
|
131
|
+
type: "string",
|
|
132
|
+
description: "Detailed description of needs",
|
|
133
|
+
},
|
|
118
134
|
},
|
|
119
135
|
required: ["email", "nama", "telepon", "kebutuhan"],
|
|
120
136
|
},
|
|
@@ -127,51 +143,175 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
127
143
|
properties: {},
|
|
128
144
|
},
|
|
129
145
|
},
|
|
146
|
+
{
|
|
147
|
+
name: "get_orders",
|
|
148
|
+
description: "List the 20 most recent orders for the logged-in user, or get full detail for a specific order by invoice number.",
|
|
149
|
+
inputSchema: {
|
|
150
|
+
type: "object",
|
|
151
|
+
properties: {
|
|
152
|
+
noinv: {
|
|
153
|
+
type: "string",
|
|
154
|
+
description: "Invoice number (e.g. 'INV2503001'). Omit to list recent orders.",
|
|
155
|
+
},
|
|
156
|
+
status: {
|
|
157
|
+
type: "string",
|
|
158
|
+
description: "Filter by status code. O=Waiting confirmation, B=Waiting payment, C=Customer confirmed, P=In process, S=Partial delivery, K=Delivered, D=Received, T=Cancelled.",
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: "generate_quotation",
|
|
165
|
+
description: "Generate a formal B2B quotation (Surat Penawaran) from the current cart. Valid for 7 days.",
|
|
166
|
+
inputSchema: {
|
|
167
|
+
type: "object",
|
|
168
|
+
properties: {
|
|
169
|
+
kota_id: { type: "number", description: "Destination city ID" },
|
|
170
|
+
courier_id: {
|
|
171
|
+
type: "string",
|
|
172
|
+
description: "Courier ID (e.g. 'JNE', 'LLL' for pickup)",
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
required: ["kota_id", "courier_id"],
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: "login",
|
|
180
|
+
description: "Authenticate with Perkakasku using email and password. Returns a session token and merges anonymous cart into the account.",
|
|
181
|
+
inputSchema: {
|
|
182
|
+
type: "object",
|
|
183
|
+
properties: {
|
|
184
|
+
email: { type: "string", description: "User email address" },
|
|
185
|
+
password: { type: "string", description: "User account password" },
|
|
186
|
+
},
|
|
187
|
+
required: ["email", "password"],
|
|
188
|
+
},
|
|
189
|
+
},
|
|
130
190
|
],
|
|
131
191
|
};
|
|
132
192
|
});
|
|
133
193
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
134
194
|
const { name, arguments: args } = request.params;
|
|
135
195
|
try {
|
|
196
|
+
if (!API_TOKEN) {
|
|
197
|
+
throw new Error("PERKAKASKU_API_TOKEN is required to call Perkakasku CLI API.");
|
|
198
|
+
}
|
|
136
199
|
switch (name) {
|
|
137
200
|
case "search_products": {
|
|
138
201
|
const query = args?.query;
|
|
139
202
|
const page = args?.page || 1;
|
|
140
203
|
const response = await apiClient.get(`/search.php?q=${encodeURIComponent(query)}&page=${page}`);
|
|
141
|
-
return {
|
|
204
|
+
return {
|
|
205
|
+
content: [
|
|
206
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
207
|
+
],
|
|
208
|
+
};
|
|
142
209
|
}
|
|
143
210
|
case "get_product_details": {
|
|
144
211
|
const id = args?.id;
|
|
145
212
|
const response = await apiClient.get(`/product.php?id=${encodeURIComponent(id)}`);
|
|
146
|
-
return {
|
|
213
|
+
return {
|
|
214
|
+
content: [
|
|
215
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
216
|
+
],
|
|
217
|
+
};
|
|
147
218
|
}
|
|
148
219
|
case "get_cart": {
|
|
149
220
|
const response = await apiClient.get("/cart/index.php");
|
|
150
|
-
return {
|
|
221
|
+
return {
|
|
222
|
+
content: [
|
|
223
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
224
|
+
],
|
|
225
|
+
};
|
|
151
226
|
}
|
|
152
227
|
case "add_to_cart": {
|
|
153
228
|
const response = await apiClient.post("/cart/add.php", args);
|
|
154
|
-
return {
|
|
229
|
+
return {
|
|
230
|
+
content: [
|
|
231
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
232
|
+
],
|
|
233
|
+
};
|
|
155
234
|
}
|
|
156
235
|
case "remove_from_cart": {
|
|
157
236
|
const response = await apiClient.post("/cart/remove.php", args);
|
|
158
|
-
return {
|
|
237
|
+
return {
|
|
238
|
+
content: [
|
|
239
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
240
|
+
],
|
|
241
|
+
};
|
|
159
242
|
}
|
|
160
243
|
case "shipping_estimate": {
|
|
161
244
|
const response = await apiClient.post("/shipping/estimate.php", args);
|
|
162
|
-
return {
|
|
245
|
+
return {
|
|
246
|
+
content: [
|
|
247
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
248
|
+
],
|
|
249
|
+
};
|
|
163
250
|
}
|
|
164
251
|
case "create_checkout": {
|
|
165
252
|
const response = await apiClient.post("/checkout/generate.php", args);
|
|
166
|
-
return {
|
|
253
|
+
return {
|
|
254
|
+
content: [
|
|
255
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
256
|
+
],
|
|
257
|
+
};
|
|
167
258
|
}
|
|
168
259
|
case "submit_simple_rfq": {
|
|
169
260
|
const response = await apiClient.post("/rfq/submit.php", args);
|
|
170
|
-
return {
|
|
261
|
+
return {
|
|
262
|
+
content: [
|
|
263
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
264
|
+
],
|
|
265
|
+
};
|
|
171
266
|
}
|
|
172
267
|
case "get_user_profile": {
|
|
173
268
|
const response = await apiClient.get("/profile.php");
|
|
174
|
-
return {
|
|
269
|
+
return {
|
|
270
|
+
content: [
|
|
271
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
272
|
+
],
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
case "get_orders": {
|
|
276
|
+
const noinv = args?.noinv;
|
|
277
|
+
const status = args?.status;
|
|
278
|
+
if (noinv) {
|
|
279
|
+
const response = await apiClient.get(`/orders.php?noinv=${encodeURIComponent(noinv)}`);
|
|
280
|
+
return {
|
|
281
|
+
content: [
|
|
282
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
283
|
+
],
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
const qs = status ? `?status=${encodeURIComponent(status)}` : "";
|
|
287
|
+
const response = await apiClient.get(`/orders.php${qs}`);
|
|
288
|
+
return {
|
|
289
|
+
content: [
|
|
290
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
291
|
+
],
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
case "generate_quotation": {
|
|
295
|
+
const response = await apiClient.post("/quotation/generate.php", {
|
|
296
|
+
kota_id: args?.kota_id,
|
|
297
|
+
courier_id: args?.courier_id,
|
|
298
|
+
});
|
|
299
|
+
return {
|
|
300
|
+
content: [
|
|
301
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
302
|
+
],
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
case "login": {
|
|
306
|
+
const response = await apiClient.post("/login.php", {
|
|
307
|
+
email: args?.email,
|
|
308
|
+
password: args?.password,
|
|
309
|
+
});
|
|
310
|
+
return {
|
|
311
|
+
content: [
|
|
312
|
+
{ type: "text", text: JSON.stringify(response.data, null, 2) },
|
|
313
|
+
],
|
|
314
|
+
};
|
|
175
315
|
}
|
|
176
316
|
default:
|
|
177
317
|
throw new Error(`Tool not found: ${name}`);
|
package/build/index.js.map
CHANGED
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "perkakasku-mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Model Context Protocol (MCP) server for Perkakasku e-commerce platform.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build": "tsc",
|
|
15
15
|
"start": "node build/index.js",
|
|
16
|
-
"dev": "ts-node src/index.ts"
|
|
16
|
+
"dev": "ts-node src/index.ts",
|
|
17
|
+
"test:smoke": "node scripts/smoke-test.mjs",
|
|
18
|
+
"test:smoke:build": "npm run build && npm run test:smoke"
|
|
17
19
|
},
|
|
18
20
|
"keywords": [],
|
|
19
21
|
"author": "",
|