bps-mcp-server 0.3.2 → 0.5.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.
Files changed (49) hide show
  1. package/README.md +157 -83
  2. package/dist/client/bps-client.d.ts.map +1 -1
  3. package/dist/client/bps-client.js +10 -11
  4. package/dist/client/bps-client.js.map +1 -1
  5. package/dist/config/defaults.js +11 -11
  6. package/dist/config/defaults.js.map +1 -1
  7. package/dist/config/index.d.ts +20 -61
  8. package/dist/config/index.d.ts.map +1 -1
  9. package/dist/config/index.js +5 -5
  10. package/dist/config/index.js.map +1 -1
  11. package/dist/prompts/analysis.prompts.js +1 -1
  12. package/dist/prompts/analysis.prompts.js.map +1 -1
  13. package/dist/server.d.ts.map +1 -1
  14. package/dist/server.js +3 -0
  15. package/dist/server.js.map +1 -1
  16. package/dist/tools/allstats.tools.js +1 -1
  17. package/dist/tools/allstats.tools.js.map +1 -1
  18. package/dist/tools/census.tools.js +1 -1
  19. package/dist/tools/census.tools.js.map +1 -1
  20. package/dist/tools/csa.tools.js +1 -1
  21. package/dist/tools/csa.tools.js.map +1 -1
  22. package/dist/tools/domain.tools.js +1 -1
  23. package/dist/tools/domain.tools.js.map +1 -1
  24. package/dist/tools/dynamic-data.tools.d.ts.map +1 -1
  25. package/dist/tools/dynamic-data.tools.js +14 -2
  26. package/dist/tools/dynamic-data.tools.js.map +1 -1
  27. package/dist/tools/glossary.tools.js +1 -1
  28. package/dist/tools/glossary.tools.js.map +1 -1
  29. package/dist/tools/infographic.tools.js +1 -1
  30. package/dist/tools/infographic.tools.js.map +1 -1
  31. package/dist/tools/news.tools.js +1 -1
  32. package/dist/tools/news.tools.js.map +1 -1
  33. package/dist/tools/publication.tools.js +1 -1
  34. package/dist/tools/publication.tools.js.map +1 -1
  35. package/dist/tools/reference.tools.d.ts.map +1 -1
  36. package/dist/tools/reference.tools.js +5 -2
  37. package/dist/tools/reference.tools.js.map +1 -1
  38. package/dist/tools/search.tools.d.ts.map +1 -1
  39. package/dist/tools/search.tools.js +13 -2
  40. package/dist/tools/search.tools.js.map +1 -1
  41. package/dist/tools/smart.tools.d.ts +9 -0
  42. package/dist/tools/smart.tools.d.ts.map +1 -0
  43. package/dist/tools/smart.tools.js +364 -0
  44. package/dist/tools/smart.tools.js.map +1 -0
  45. package/dist/tools/static-table.tools.js +1 -1
  46. package/dist/tools/static-table.tools.js.map +1 -1
  47. package/dist/tools/trade.tools.js +1 -1
  48. package/dist/tools/trade.tools.js.map +1 -1
  49. package/package.json +13 -11
@@ -0,0 +1,364 @@
1
+ import { z } from "zod/v4";
2
+ import { formatDynamicData } from "../services/data-formatter.js";
3
+ import { appendAttribution } from "../services/attribution.js";
4
+ import { logger } from "../utils/logger.js";
5
+ /**
6
+ * AI-friendly shortcut tools that reduce multi-step workflows to single calls.
7
+ */
8
+ export function registerSmartTools(server, client, resolver, config) {
9
+ // ---------- find_variable ----------
10
+ server.tool("find_variable", `Cari variabel data BPS berdasarkan kata kunci. Mencari di semua subjek yang relevan.
11
+
12
+ Contoh penggunaan:
13
+ - find_variable(keyword="penduduk") → variabel terkait jumlah penduduk
14
+ - find_variable(keyword="kemiskinan", domain="3500") → variabel kemiskinan di Jawa Timur
15
+ - find_variable(keyword="inflasi") → variabel inflasi nasional
16
+
17
+ Setelah mendapat var_id dari tool ini, gunakan get_dynamic_data untuk mengambil datanya.`, {
18
+ keyword: z.string().describe("Kata kunci pencarian variabel (misal: penduduk, kemiskinan, inflasi, pengangguran, PDRB)"),
19
+ domain: z.string().default("0000").describe("Kode domain BPS. '0000'=nasional. Gunakan resolve_domain jika perlu."),
20
+ subject: z.number().optional().describe("Filter berdasarkan ID subjek (opsional, gunakan list_subjects untuk melihat daftar)"),
21
+ }, async ({ keyword, domain, subject }) => {
22
+ try {
23
+ const allVars = [];
24
+ const kw = keyword.toLowerCase();
25
+ if (subject) {
26
+ // Search within specific subject
27
+ await searchVariablesInSubject(client, domain, subject, kw, allVars);
28
+ }
29
+ else {
30
+ // Use keyword → subject mapping + subject title matching
31
+ const mappedIds = getSubjectIdsForKeyword(kw);
32
+ const subjects = await client.listSubjects(domain);
33
+ const matchedIds = subjects.data
34
+ .filter(s => {
35
+ const t = s.title.toLowerCase();
36
+ return kw.split(/\s+/).some(w => w.length > 2 && t.includes(w)) || t.includes(kw);
37
+ })
38
+ .map(s => s.sub_id);
39
+ const subjectIds = [...new Set([...mappedIds, ...matchedIds])];
40
+ // Search in relevant subjects first
41
+ for (const subId of subjectIds.slice(0, 5)) {
42
+ await searchVariablesInSubject(client, domain, subId, kw, allVars);
43
+ if (allVars.length >= 15)
44
+ break;
45
+ }
46
+ // If no results from relevant subjects, try without subject filter
47
+ if (allVars.length === 0) {
48
+ await searchVariablesInSubject(client, domain, undefined, kw, allVars);
49
+ }
50
+ }
51
+ if (allVars.length === 0) {
52
+ return {
53
+ content: [{
54
+ type: "text",
55
+ text: appendAttribution(`Tidak ditemukan variabel yang cocok dengan "${keyword}" di domain ${domain}.\n\n` +
56
+ `**Tips:** Coba kata kunci yang lebih umum, atau gunakan list_subjects untuk melihat subjek yang tersedia, lalu filter dengan parameter subject.`),
57
+ }],
58
+ };
59
+ }
60
+ const lines = [
61
+ `## Variabel yang cocok dengan "${keyword}"`,
62
+ `**Domain:** ${domain} | **Ditemukan:** ${allVars.length} variabel`,
63
+ "",
64
+ ];
65
+ for (const v of allVars.slice(0, 15)) {
66
+ lines.push(`- **${v.title}** (var_id: \`${v.var_id}\`) — Subjek: ${v.sub_name}${v.unit ? ` — Satuan: ${v.unit}` : ""}`);
67
+ if (v.def)
68
+ lines.push(` _${v.def.substring(0, 150)}_`);
69
+ }
70
+ lines.push("");
71
+ lines.push("**Langkah selanjutnya:** Gunakan `get_dynamic_data(domain=\"" + domain + "\", var=\"<var_id>\")` untuk mengambil data.");
72
+ return { content: [{ type: "text", text: appendAttribution(lines.join("\n")) }] };
73
+ }
74
+ catch (error) {
75
+ const msg = error instanceof Error ? error.message : "Gagal mencari variabel";
76
+ return { content: [{ type: "text", text: msg }], isError: true };
77
+ }
78
+ });
79
+ // ---------- find_data ----------
80
+ server.tool("find_data", `Tool utama untuk AI: cari dan ambil data BPS dalam satu langkah.
81
+ Secara otomatis: resolve nama wilayah → cari variabel → ambil data.
82
+
83
+ Gunakan tool ini sebagai langkah PERTAMA ketika user bertanya tentang data statistik.
84
+
85
+ Contoh:
86
+ - find_data(query="jumlah penduduk", region="Jawa Timur", year="2023")
87
+ - find_data(query="angka kemiskinan", region="Indonesia", year="2020,2021,2022,2023")
88
+ - find_data(query="tingkat pengangguran", region="DKI Jakarta")
89
+ - find_data(query="PDRB", region="Bali", year="2023")
90
+ - find_data(query="inflasi", region="Indonesia", year="2024")
91
+
92
+ Jika hasilnya tidak sesuai, gunakan find_variable untuk mencari variabel yang lebih spesifik, lalu get_dynamic_data.`, {
93
+ query: z.string().describe("Deskripsi data yang dicari (misal: jumlah penduduk, angka kemiskinan, inflasi, PDRB, pengangguran)"),
94
+ region: z.string().default("Indonesia").describe("Nama wilayah (misal: Indonesia, Jawa Timur, Surabaya, DKI Jakarta). Mendukung nama resmi dan singkatan."),
95
+ year: z.string().optional().describe("Tahun data (misal: '2023' atau '2020,2021,2022,2023' untuk multi-tahun). Kosongkan untuk data terbaru."),
96
+ }, async ({ query, region, year }) => {
97
+ try {
98
+ // Step 1: Resolve domain
99
+ let domain = "0000";
100
+ let domainName = "Indonesia";
101
+ if (region.toLowerCase() !== "indonesia" && region !== "0000") {
102
+ const resolved = await resolver.resolve(region);
103
+ if (resolved) {
104
+ domain = resolved.domainId;
105
+ domainName = resolved.domainName;
106
+ }
107
+ else {
108
+ return {
109
+ content: [{
110
+ type: "text",
111
+ text: appendAttribution(`Wilayah "${region}" tidak ditemukan. Gunakan resolve_domain untuk mencari kode wilayah yang benar.`),
112
+ }],
113
+ isError: true,
114
+ };
115
+ }
116
+ }
117
+ // Step 2: Find matching variable by searching relevant subjects
118
+ const kw = query.toLowerCase();
119
+ let bestVar = null;
120
+ const candidates = [];
121
+ // Find subject IDs from keyword mapping + subject title matching
122
+ const mappedSubjectIds = getSubjectIdsForKeyword(kw);
123
+ const subjects = await client.listSubjects(domain);
124
+ const relevantSubjects = subjects.data.filter(s => {
125
+ const titleLower = s.title.toLowerCase();
126
+ return kw.split(/\s+/).some(w => w.length > 2 && titleLower.includes(w)) || titleLower.includes(kw);
127
+ });
128
+ const subjectIdsToSearch = [
129
+ ...new Set([...mappedSubjectIds, ...relevantSubjects.map(s => s.sub_id)])
130
+ ];
131
+ // Search in relevant subjects
132
+ for (const subId of subjectIdsToSearch.slice(0, 5)) {
133
+ const result = await client.listVariables(domain, subId, undefined, 1, 100);
134
+ if (!result.data || result.data.length === 0)
135
+ continue;
136
+ for (const v of result.data) {
137
+ const titleLower = v.title.toLowerCase();
138
+ const score = computeRelevanceScore(kw, titleLower, v.sub_name?.toLowerCase() || "");
139
+ if (score > 0) {
140
+ candidates.push({ var_id: v.var_id, title: v.title, sub_name: v.sub_name, unit: v.unit, score });
141
+ }
142
+ }
143
+ if (candidates.length >= 10)
144
+ break;
145
+ }
146
+ // If no results from subject-based search, try without subject filter
147
+ if (candidates.length === 0) {
148
+ const domainsToSearch = domain === "0000" ? ["0000"] : [domain, "0000"];
149
+ for (const searchDomain of domainsToSearch) {
150
+ for (let page = 1; page <= 2; page++) {
151
+ const result = await client.listVariables(searchDomain, undefined, undefined, page, 100);
152
+ if (!result.data || result.data.length === 0)
153
+ break;
154
+ for (const v of result.data) {
155
+ const titleLower = v.title.toLowerCase();
156
+ const score = computeRelevanceScore(kw, titleLower, v.sub_name?.toLowerCase() || "");
157
+ if (score > 0) {
158
+ candidates.push({ var_id: v.var_id, title: v.title, sub_name: v.sub_name, unit: v.unit, score });
159
+ }
160
+ }
161
+ if (candidates.length >= 5)
162
+ break;
163
+ if (result.data.length < 100)
164
+ break;
165
+ }
166
+ if (candidates.length >= 5)
167
+ break;
168
+ }
169
+ }
170
+ // Sort by relevance score
171
+ candidates.sort((a, b) => b.score - a.score);
172
+ bestVar = candidates[0] || null;
173
+ if (!bestVar) {
174
+ // Fallback: try strategic indicators
175
+ const indicators = await client.listStrategicIndicators(domain);
176
+ if (indicators.data && indicators.data.length > 0) {
177
+ for (const ind of indicators.data) {
178
+ const titleLower = ind.title.toLowerCase();
179
+ if (titleLower.includes(kw) || kw.split(/\s+/).some(w => titleLower.includes(w))) {
180
+ // Return strategic indicator data directly
181
+ const lines = [
182
+ `## ${ind.title}`,
183
+ `**Wilayah:** ${domainName} (${domain})`,
184
+ "",
185
+ ];
186
+ if (ind.data) {
187
+ lines.push("| Periode | Nilai |");
188
+ lines.push("| --- | --- |");
189
+ const entries = Object.entries(ind.data);
190
+ // Filter by year if specified
191
+ const filtered = year
192
+ ? entries.filter(([k]) => year.split(",").some(y => k.includes(y)))
193
+ : entries.slice(-10);
194
+ for (const [period, value] of filtered) {
195
+ lines.push(`| ${period} | ${typeof value === "number" ? value.toLocaleString("id-ID") : value} |`);
196
+ }
197
+ }
198
+ return { content: [{ type: "text", text: appendAttribution(lines.join("\n")) }] };
199
+ }
200
+ }
201
+ }
202
+ return {
203
+ content: [{
204
+ type: "text",
205
+ text: appendAttribution(`Tidak ditemukan data "${query}" untuk ${domainName}.\n\n` +
206
+ `**Saran:**\n` +
207
+ `1. Gunakan \`find_variable(keyword="${query}", domain="${domain}")\` untuk mencari variabel yang lebih spesifik\n` +
208
+ `2. Gunakan \`search(keyword="${query}")\` untuk pencarian lebih luas\n` +
209
+ `3. Gunakan \`list_strategic_indicators(domain="${domain}")\` untuk indikator utama`),
210
+ }],
211
+ };
212
+ }
213
+ // Step 3: Get data
214
+ logger.debug(`find_data: using var_id=${bestVar.var_id} (${bestVar.title}) for query="${query}"`);
215
+ // Resolve year to period IDs if needed
216
+ let periodParam = year;
217
+ if (year) {
218
+ try {
219
+ const periods = await client.listPeriods(domain, bestVar.var_id);
220
+ if (periods.length > 0) {
221
+ const yearNums = year.split(",").map(y => y.trim());
222
+ // BPS API returns periods with various field names: th_name, th, val
223
+ const matchingPeriods = periods.filter(p => {
224
+ const pAny = p;
225
+ const thName = String(pAny.th_name || pAny.th || "");
226
+ const thVal = String(pAny.val || "");
227
+ const thId = String(p.th_id);
228
+ return yearNums.some(y => thName.includes(y) || thVal.includes(y) || thId === y);
229
+ });
230
+ if (matchingPeriods.length > 0) {
231
+ periodParam = matchingPeriods.map(p => String(p.th_id)).join(",");
232
+ }
233
+ }
234
+ }
235
+ catch {
236
+ // If period lookup fails, try with raw year value
237
+ }
238
+ }
239
+ const result = await client.getDynamicData(domain, String(bestVar.var_id), periodParam);
240
+ const formatted = formatDynamicData(result, domain, config.defaultLang);
241
+ // Prepend context
242
+ const header = `**Pencarian:** "${query}" di ${domainName}${year ? ` (${year})` : ""}\n**Variabel:** ${bestVar.title} (ID: ${bestVar.var_id})\n\n`;
243
+ // If no datacontent, show alternatives
244
+ if (!result.datacontent || Object.keys(result.datacontent).length === 0) {
245
+ const altLines = [
246
+ `Data untuk variabel "${bestVar.title}" tidak tersedia${year ? ` untuk tahun ${year}` : ""} di ${domainName}.`,
247
+ "",
248
+ ];
249
+ if (candidates.length > 1) {
250
+ altLines.push("**Variabel alternatif yang ditemukan:**");
251
+ for (const c of candidates.slice(0, 5)) {
252
+ altLines.push(`- ${c.title} (var_id: \`${c.var_id}\`)${c.unit ? ` — ${c.unit}` : ""}`);
253
+ }
254
+ altLines.push("");
255
+ altLines.push("Gunakan `get_dynamic_data` dengan var_id di atas untuk mencoba variabel lain.");
256
+ }
257
+ return { content: [{ type: "text", text: appendAttribution(altLines.join("\n")) }] };
258
+ }
259
+ return { content: [{ type: "text", text: header + formatted }] };
260
+ }
261
+ catch (error) {
262
+ const msg = error instanceof Error ? error.message : "Gagal mengambil data";
263
+ return { content: [{ type: "text", text: msg }], isError: true };
264
+ }
265
+ });
266
+ }
267
+ // Common keyword → subject ID mapping (BPS subject IDs are stable across domains)
268
+ const KEYWORD_SUBJECTS = {
269
+ pengangguran: [6], tenaga: [6], kerja: [6], tpak: [6], angkatan: [6],
270
+ miskin: [23], kemiskinan: [23], gini: [23], ketimpangan: [23],
271
+ penduduk: [12], kependudukan: [12], fertilitas: [12], migrasi: [12],
272
+ inflasi: [3], harga: [3], ihk: [3],
273
+ pdrb: [52], ekonomi: [52, 35], pertumbuhan: [52],
274
+ ipm: [26], pembangunan: [26],
275
+ ekspor: [8], impor: [8], perdagangan: [8],
276
+ pertanian: [55], pangan: [55],
277
+ industri: [9], manufaktur: [9],
278
+ kesehatan: [30],
279
+ pendidikan: [28],
280
+ pariwisata: [16],
281
+ };
282
+ function getSubjectIdsForKeyword(kw) {
283
+ const ids = [];
284
+ for (const [keyword, subIds] of Object.entries(KEYWORD_SUBJECTS)) {
285
+ if (kw.includes(keyword))
286
+ ids.push(...subIds);
287
+ }
288
+ return [...new Set(ids)];
289
+ }
290
+ /**
291
+ * Search variables within a subject (or all if undefined) and add matches to results array.
292
+ */
293
+ async function searchVariablesInSubject(client, domain, subject, kw, results) {
294
+ const kwWords = kw.split(/\s+/).filter(w => w.length > 2);
295
+ for (let page = 1; page <= 3; page++) {
296
+ const result = await client.listVariables(domain, subject, undefined, page, 100);
297
+ if (!result.data || result.data.length === 0)
298
+ break;
299
+ for (const v of result.data) {
300
+ const titleLower = v.title.toLowerCase();
301
+ const defLower = (v.def || "").toLowerCase();
302
+ // Match if full keyword or any word matches
303
+ const matches = titleLower.includes(kw) || defLower.includes(kw) ||
304
+ kwWords.some(w => titleLower.includes(w));
305
+ if (matches) {
306
+ // Avoid duplicates
307
+ if (!results.some(r => r.var_id === v.var_id)) {
308
+ results.push({
309
+ var_id: v.var_id,
310
+ title: v.title,
311
+ sub_name: v.sub_name,
312
+ unit: v.unit,
313
+ def: v.def,
314
+ });
315
+ }
316
+ }
317
+ }
318
+ if (results.length >= 15)
319
+ break;
320
+ if (result.data.length < 100)
321
+ break;
322
+ }
323
+ }
324
+ /**
325
+ * Compute relevance score for a variable title against a search query.
326
+ * Higher score = more relevant.
327
+ */
328
+ function computeRelevanceScore(query, title, subName) {
329
+ let score = 0;
330
+ const queryWords = query.split(/\s+/).filter(w => w.length > 2);
331
+ // Exact phrase match in title
332
+ if (title.includes(query))
333
+ score += 100;
334
+ // Word-level matches in title
335
+ let wordMatches = 0;
336
+ for (const word of queryWords) {
337
+ if (title.includes(word)) {
338
+ score += 30;
339
+ wordMatches++;
340
+ }
341
+ if (subName.includes(word))
342
+ score += 15;
343
+ }
344
+ // Bonus for matching all query words
345
+ if (queryWords.length > 1 && wordMatches === queryWords.length)
346
+ score += 40;
347
+ // Title starts with query
348
+ if (title.startsWith(query))
349
+ score += 50;
350
+ // Prefer "tingkat" or "persentase" variants (main indicators)
351
+ if (title.includes("tingkat") || title.includes("persentase") || title.includes("jumlah"))
352
+ score += 20;
353
+ // Prefer shorter titles (more general/main indicators)
354
+ if (title.length < 60)
355
+ score += 15;
356
+ if (title.length > 100)
357
+ score -= 20;
358
+ // Penalize titles with "menurut" (breakdowns are less useful as primary)
359
+ const menurutCount = (title.match(/menurut/g) || []).length;
360
+ if (menurutCount > 1)
361
+ score -= 15;
362
+ return score;
363
+ }
364
+ //# sourceMappingURL=smart.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart.tools.js","sourceRoot":"","sources":["../../src/tools/smart.tools.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v4";
2
2
  import { formatList } from "../services/data-formatter.js";
3
3
  import { appendAttribution } from "../services/attribution.js";
4
4
  import { formatErrorForUser } from "../utils/error.js";
@@ -1 +1 @@
1
- {"version":3,"file":"static-table.tools.js","sourceRoot":"","sources":["../../src/tools/static-table.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"static-table.tools.js","sourceRoot":"","sources":["../../src/tools/static-table.tools.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v4";
2
2
  import { appendAttribution } from "../services/attribution.js";
3
3
  import { formatErrorForUser } from "../utils/error.js";
4
4
  export function registerTradeTools(server, client) {
@@ -1 +1 @@
1
- {"version":3,"file":"trade.tools.js","sourceRoot":"","sources":["../../src/tools/trade.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAiB;IACrE,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,8HAA8H,EAC9H;QACE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACrF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;QACtF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;QAChG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KAClF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CACtC,MAAM,CAAC,MAAM,CAAU,EACvB,OAAO,EACP,OAAO,EACP,IAAI,EACJ,MAAM,CACP,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,MAAM,IAAI,GAAG,iBAAiB,CAC5B,WAAW,WAAW,SAAS,OAAO,MAAM;gBAC5C,cAAc,IAAI,mBAAmB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM;gBACzF,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,CACxD,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACzF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"trade.tools.js","sourceRoot":"","sources":["../../src/tools/trade.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAiB;IACrE,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,8HAA8H,EAC9H;QACE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACrF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;QACtF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;QAChG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KAClF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CACtC,MAAM,CAAC,MAAM,CAAU,EACvB,OAAO,EACP,OAAO,EACP,IAAI,EACJ,MAAM,CACP,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,MAAM,IAAI,GAAG,iBAAiB,CAC5B,WAAW,WAAW,SAAS,OAAO,MAAM;gBAC5C,cAAc,IAAI,mBAAmB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM;gBACzF,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,CACxD,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACzF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bps-mcp-server",
3
- "version": "0.3.2",
3
+ "version": "0.5.0",
4
4
  "description": "MCP server for BPS (Badan Pusat Statistik) Indonesia statistics data",
5
5
  "author": "Murphi",
6
6
  "license": "MIT",
@@ -25,6 +25,7 @@
25
25
  "build": "tsc",
26
26
  "dev": "tsc --watch",
27
27
  "start": "node --env-file=.env dist/index.js",
28
+ "prepublishOnly": "npm run build",
28
29
  "lint": "eslint src/",
29
30
  "typecheck": "tsc --noEmit",
30
31
  "typecheck:worker": "tsc --noEmit --project tsconfig.worker.json",
@@ -37,22 +38,23 @@
37
38
  "deploy:dry": "wrangler deploy --dry-run"
38
39
  },
39
40
  "dependencies": {
40
- "@modelcontextprotocol/sdk": "^1.12.1",
41
+ "@cloudflare/workers-oauth-provider": "^0.6.0",
42
+ "@modelcontextprotocol/sdk": "^1.29.0",
41
43
  "cheerio": "^1.2.0",
42
- "zod": "^3.24.4"
44
+ "zod": "^4.4.3"
43
45
  },
44
46
  "devDependencies": {
45
- "@cloudflare/workers-types": "^4.20250414.0",
47
+ "@cloudflare/workers-types": "^4.20260519.0",
46
48
  "@eslint/js": "^10.0.1",
47
- "@types/node": "^22.15.3",
48
- "eslint": "^10.1.0",
49
- "typescript": "^5.8.3",
50
- "typescript-eslint": "^8.58.0",
51
- "vitest": "^3.1.2",
52
- "wrangler": "^4.0.0"
49
+ "@types/node": "^22.19.19",
50
+ "eslint": "^10.4.0",
51
+ "typescript": "^6.0.3",
52
+ "typescript-eslint": "^8.59.4",
53
+ "vitest": "^4.1.6",
54
+ "wrangler": "^4.93.0"
53
55
  },
54
56
  "engines": {
55
- "node": ">=18.0.0"
57
+ "node": ">=22.0.0"
56
58
  },
57
59
  "keywords": [
58
60
  "mcp",