bps-mcp-server 0.1.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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +197 -0
  3. package/dist/auth/api-key.provider.d.ts +12 -0
  4. package/dist/auth/api-key.provider.d.ts.map +1 -0
  5. package/dist/auth/api-key.provider.js +28 -0
  6. package/dist/auth/api-key.provider.js.map +1 -0
  7. package/dist/auth/factory.d.ts +4 -0
  8. package/dist/auth/factory.d.ts.map +1 -0
  9. package/dist/auth/factory.js +13 -0
  10. package/dist/auth/factory.js.map +1 -0
  11. package/dist/auth/oauth2.provider.d.ts +22 -0
  12. package/dist/auth/oauth2.provider.d.ts.map +1 -0
  13. package/dist/auth/oauth2.provider.js +64 -0
  14. package/dist/auth/oauth2.provider.js.map +1 -0
  15. package/dist/auth/types.d.ts +13 -0
  16. package/dist/auth/types.d.ts.map +1 -0
  17. package/dist/auth/types.js +2 -0
  18. package/dist/auth/types.js.map +1 -0
  19. package/dist/client/bps-client.d.ts +93 -0
  20. package/dist/client/bps-client.d.ts.map +1 -0
  21. package/dist/client/bps-client.js +255 -0
  22. package/dist/client/bps-client.js.map +1 -0
  23. package/dist/client/endpoints.d.ts +57 -0
  24. package/dist/client/endpoints.d.ts.map +1 -0
  25. package/dist/client/endpoints.js +166 -0
  26. package/dist/client/endpoints.js.map +1 -0
  27. package/dist/client/types.d.ts +273 -0
  28. package/dist/client/types.d.ts.map +1 -0
  29. package/dist/client/types.js +2 -0
  30. package/dist/client/types.js.map +1 -0
  31. package/dist/config/defaults.d.ts +24 -0
  32. package/dist/config/defaults.d.ts.map +1 -0
  33. package/dist/config/defaults.js +26 -0
  34. package/dist/config/defaults.js.map +1 -0
  35. package/dist/config/domain-aliases.d.ts +6 -0
  36. package/dist/config/domain-aliases.d.ts.map +1 -0
  37. package/dist/config/domain-aliases.js +105 -0
  38. package/dist/config/domain-aliases.js.map +1 -0
  39. package/dist/config/index.d.ts +71 -0
  40. package/dist/config/index.d.ts.map +1 -0
  41. package/dist/config/index.js +52 -0
  42. package/dist/config/index.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +31 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/prompts/analysis.prompts.d.ts +3 -0
  48. package/dist/prompts/analysis.prompts.d.ts.map +1 -0
  49. package/dist/prompts/analysis.prompts.js +171 -0
  50. package/dist/prompts/analysis.prompts.js.map +1 -0
  51. package/dist/resources/domain.resources.d.ts +5 -0
  52. package/dist/resources/domain.resources.d.ts.map +1 -0
  53. package/dist/resources/domain.resources.js +62 -0
  54. package/dist/resources/domain.resources.js.map +1 -0
  55. package/dist/server.d.ts +12 -0
  56. package/dist/server.d.ts.map +1 -0
  57. package/dist/server.js +43 -0
  58. package/dist/server.js.map +1 -0
  59. package/dist/services/attribution.d.ts +3 -0
  60. package/dist/services/attribution.d.ts.map +1 -0
  61. package/dist/services/attribution.js +8 -0
  62. package/dist/services/attribution.js.map +1 -0
  63. package/dist/services/cache.d.ts +21 -0
  64. package/dist/services/cache.d.ts.map +1 -0
  65. package/dist/services/cache.js +47 -0
  66. package/dist/services/cache.js.map +1 -0
  67. package/dist/services/data-formatter.d.ts +13 -0
  68. package/dist/services/data-formatter.d.ts.map +1 -0
  69. package/dist/services/data-formatter.js +166 -0
  70. package/dist/services/data-formatter.js.map +1 -0
  71. package/dist/services/domain-resolver.d.ts +22 -0
  72. package/dist/services/domain-resolver.d.ts.map +1 -0
  73. package/dist/services/domain-resolver.js +101 -0
  74. package/dist/services/domain-resolver.js.map +1 -0
  75. package/dist/tools/census.tools.d.ts +4 -0
  76. package/dist/tools/census.tools.d.ts.map +1 -0
  77. package/dist/tools/census.tools.js +28 -0
  78. package/dist/tools/census.tools.js.map +1 -0
  79. package/dist/tools/csa.tools.d.ts +4 -0
  80. package/dist/tools/csa.tools.d.ts.map +1 -0
  81. package/dist/tools/csa.tools.js +77 -0
  82. package/dist/tools/csa.tools.js.map +1 -0
  83. package/dist/tools/domain.tools.d.ts +5 -0
  84. package/dist/tools/domain.tools.d.ts.map +1 -0
  85. package/dist/tools/domain.tools.js +44 -0
  86. package/dist/tools/domain.tools.js.map +1 -0
  87. package/dist/tools/dynamic-data.tools.d.ts +5 -0
  88. package/dist/tools/dynamic-data.tools.d.ts.map +1 -0
  89. package/dist/tools/dynamic-data.tools.js +136 -0
  90. package/dist/tools/dynamic-data.tools.js.map +1 -0
  91. package/dist/tools/glossary.tools.d.ts +4 -0
  92. package/dist/tools/glossary.tools.d.ts.map +1 -0
  93. package/dist/tools/glossary.tools.js +32 -0
  94. package/dist/tools/glossary.tools.js.map +1 -0
  95. package/dist/tools/infographic.tools.d.ts +4 -0
  96. package/dist/tools/infographic.tools.d.ts.map +1 -0
  97. package/dist/tools/infographic.tools.js +60 -0
  98. package/dist/tools/infographic.tools.js.map +1 -0
  99. package/dist/tools/news.tools.d.ts +4 -0
  100. package/dist/tools/news.tools.d.ts.map +1 -0
  101. package/dist/tools/news.tools.js +55 -0
  102. package/dist/tools/news.tools.js.map +1 -0
  103. package/dist/tools/publication.tools.d.ts +4 -0
  104. package/dist/tools/publication.tools.d.ts.map +1 -0
  105. package/dist/tools/publication.tools.js +101 -0
  106. package/dist/tools/publication.tools.js.map +1 -0
  107. package/dist/tools/reference.tools.d.ts +4 -0
  108. package/dist/tools/reference.tools.d.ts.map +1 -0
  109. package/dist/tools/reference.tools.js +20 -0
  110. package/dist/tools/reference.tools.js.map +1 -0
  111. package/dist/tools/search.tools.d.ts +4 -0
  112. package/dist/tools/search.tools.d.ts.map +1 -0
  113. package/dist/tools/search.tools.js +22 -0
  114. package/dist/tools/search.tools.js.map +1 -0
  115. package/dist/tools/static-table.tools.d.ts +4 -0
  116. package/dist/tools/static-table.tools.d.ts.map +1 -0
  117. package/dist/tools/static-table.tools.js +47 -0
  118. package/dist/tools/static-table.tools.js.map +1 -0
  119. package/dist/tools/trade.tools.d.ts +4 -0
  120. package/dist/tools/trade.tools.d.ts.map +1 -0
  121. package/dist/tools/trade.tools.js +25 -0
  122. package/dist/tools/trade.tools.js.map +1 -0
  123. package/dist/tools/utility.tools.d.ts +4 -0
  124. package/dist/tools/utility.tools.d.ts.map +1 -0
  125. package/dist/tools/utility.tools.js +10 -0
  126. package/dist/tools/utility.tools.js.map +1 -0
  127. package/dist/transport/stdio.d.ts +3 -0
  128. package/dist/transport/stdio.d.ts.map +1 -0
  129. package/dist/transport/stdio.js +9 -0
  130. package/dist/transport/stdio.js.map +1 -0
  131. package/dist/utils/error.d.ts +13 -0
  132. package/dist/utils/error.d.ts.map +1 -0
  133. package/dist/utils/error.js +38 -0
  134. package/dist/utils/error.js.map +1 -0
  135. package/dist/utils/logger.d.ts +12 -0
  136. package/dist/utils/logger.d.ts.map +1 -0
  137. package/dist/utils/logger.js +47 -0
  138. package/dist/utils/logger.js.map +1 -0
  139. package/dist/utils/pagination.d.ts +11 -0
  140. package/dist/utils/pagination.d.ts.map +1 -0
  141. package/dist/utils/pagination.js +19 -0
  142. package/dist/utils/pagination.js.map +1 -0
  143. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"news.tools.d.ts","sourceRoot":"","sources":["../../src/tools/news.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAiE5E"}
@@ -0,0 +1,55 @@
1
+ import { z } from "zod";
2
+ import { formatList } from "../services/data-formatter.js";
3
+ import { appendAttribution } from "../services/attribution.js";
4
+ import { formatErrorForUser } from "../utils/error.js";
5
+ export function registerNewsTools(server, client) {
6
+ server.tool("list_news", "Daftar berita dari website BPS. Berbeda dengan BRS (Berita Resmi Statistik), ini adalah berita umum BPS.", {
7
+ domain: z.string().default("0000").describe("Kode domain BPS"),
8
+ keyword: z.string().optional().describe("Kata kunci pencarian"),
9
+ page: z.number().optional().describe("Nomor halaman"),
10
+ }, async ({ domain, keyword, page }) => {
11
+ try {
12
+ const result = await client.listNews(domain, keyword, page);
13
+ const text = formatList(result.data, (n) => `**${n.title}** (ID: ${n.news_id}) — ${n.newscat_name} — ${n.rl_date}`, "Daftar Berita BPS");
14
+ return { content: [{ type: "text", text }] };
15
+ }
16
+ catch (error) {
17
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
18
+ }
19
+ });
20
+ server.tool("get_news", "Ambil detail satu berita dari website BPS.", {
21
+ domain: z.string().describe("Kode domain BPS"),
22
+ id: z.number().describe("ID berita"),
23
+ }, async ({ domain, id }) => {
24
+ try {
25
+ const detail = await client.getNews(domain, id);
26
+ const cleanNews = detail.news
27
+ .replace(/<\/?[^>]+(>|$)/g, "")
28
+ .replace(/&nbsp;/g, " ")
29
+ .replace(/&lt;/g, "<")
30
+ .replace(/&gt;/g, ">")
31
+ .replace(/&amp;/g, "&")
32
+ .trim();
33
+ const lines = [
34
+ `## ${detail.title}`,
35
+ "",
36
+ `**Kategori:** ${detail.newscat_name}`,
37
+ `**Tanggal:** ${detail.rl_date}`,
38
+ "",
39
+ cleanNews,
40
+ ];
41
+ if (detail.related && detail.related.length > 0) {
42
+ lines.push("", "### Berita Terkait");
43
+ for (const r of detail.related) {
44
+ lines.push(`- ${r.title} (ID: ${r.id})`);
45
+ }
46
+ }
47
+ const text = appendAttribution(lines.join("\n"));
48
+ return { content: [{ type: "text", text }] };
49
+ }
50
+ catch (error) {
51
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
52
+ }
53
+ });
54
+ }
55
+ //# sourceMappingURL=news.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"news.tools.js","sourceRoot":"","sources":["../../src/tools/news.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { BpsClient } from "../client/bps-client.js";
3
+ export declare function registerPublicationTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=publication.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publication.tools.d.ts","sourceRoot":"","sources":["../../src/tools/publication.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAuHnF"}
@@ -0,0 +1,101 @@
1
+ import { z } from "zod";
2
+ import { formatList } from "../services/data-formatter.js";
3
+ import { appendAttribution } from "../services/attribution.js";
4
+ import { formatErrorForUser } from "../utils/error.js";
5
+ export function registerPublicationTools(server, client) {
6
+ // Press Releases (BRS)
7
+ server.tool("list_press_releases", "Daftar Berita Resmi Statistik (BRS) dari BPS. BRS berisi rilis data resmi terbaru.", {
8
+ domain: z.string().default("0000").describe("Kode domain BPS"),
9
+ keyword: z.string().optional().describe("Kata kunci pencarian"),
10
+ year: z.number().optional().describe("Filter tahun"),
11
+ month: z.number().optional().describe("Filter bulan (1-12)"),
12
+ page: z.number().optional().describe("Nomor halaman"),
13
+ }, async ({ domain, keyword, year, month, page }) => {
14
+ try {
15
+ const result = await client.listPressReleases(domain, keyword, year, month, page);
16
+ const text = formatList(result.data, (pr) => {
17
+ let desc = `**${pr.title}** (ID: ${pr.brs_id}) — ${pr.rl_date}`;
18
+ if (pr.abstract)
19
+ desc += `\n ${pr.abstract.substring(0, 200)}...`;
20
+ return desc;
21
+ }, "Daftar Berita Resmi Statistik (BRS)");
22
+ return { content: [{ type: "text", text }] };
23
+ }
24
+ catch (error) {
25
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
26
+ }
27
+ });
28
+ server.tool("get_press_release", "Ambil detail satu Berita Resmi Statistik (BRS) dari BPS.", {
29
+ domain: z.string().describe("Kode domain BPS"),
30
+ id: z.number().describe("ID BRS"),
31
+ }, async ({ domain, id }) => {
32
+ try {
33
+ const pr = await client.getPressRelease(domain, id);
34
+ const lines = [
35
+ `## ${pr.title}`,
36
+ "",
37
+ `**Tanggal Rilis:** ${pr.rl_date}`,
38
+ ];
39
+ if (pr.abstract) {
40
+ lines.push("", "### Abstrak", pr.abstract);
41
+ }
42
+ if (pr.pdf) {
43
+ lines.push("", `**Download PDF:** ${pr.pdf}`);
44
+ }
45
+ const text = appendAttribution(lines.join("\n"));
46
+ return { content: [{ type: "text", text }] };
47
+ }
48
+ catch (error) {
49
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
50
+ }
51
+ });
52
+ // Publications
53
+ server.tool("list_publications", "Daftar publikasi BPS. Publikasi berisi analisis mendalam dan laporan statistik.", {
54
+ domain: z.string().default("0000").describe("Kode domain BPS"),
55
+ keyword: z.string().optional().describe("Kata kunci pencarian"),
56
+ year: z.number().optional().describe("Filter tahun"),
57
+ month: z.number().optional().describe("Filter bulan (1-12)"),
58
+ page: z.number().optional().describe("Nomor halaman"),
59
+ }, async ({ domain, keyword, year, month, page }) => {
60
+ try {
61
+ const result = await client.listPublications(domain, keyword, year, month, page);
62
+ const text = formatList(result.data, (pub) => {
63
+ let desc = `**${pub.title}** (ID: ${pub.pub_id}) — ${pub.rl_date}`;
64
+ if (pub.issn)
65
+ desc += ` — ISSN: ${pub.issn}`;
66
+ return desc;
67
+ }, "Daftar Publikasi");
68
+ return { content: [{ type: "text", text }] };
69
+ }
70
+ catch (error) {
71
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
72
+ }
73
+ });
74
+ server.tool("get_publication", "Ambil detail satu publikasi BPS.", {
75
+ domain: z.string().describe("Kode domain BPS"),
76
+ id: z.string().describe("ID publikasi"),
77
+ }, async ({ domain, id }) => {
78
+ try {
79
+ const pub = await client.getPublication(domain, id);
80
+ const lines = [
81
+ `## ${pub.title}`,
82
+ "",
83
+ `**Tanggal Rilis:** ${pub.rl_date}`,
84
+ ];
85
+ if (pub.issn)
86
+ lines.push(`**ISSN:** ${pub.issn}`);
87
+ if (pub.abstract) {
88
+ lines.push("", "### Abstrak", pub.abstract);
89
+ }
90
+ if (pub.pdf) {
91
+ lines.push("", `**Download PDF:** ${pub.pdf}`);
92
+ }
93
+ const text = appendAttribution(lines.join("\n"));
94
+ return { content: [{ type: "text", text }] };
95
+ }
96
+ catch (error) {
97
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
98
+ }
99
+ });
100
+ }
101
+ //# sourceMappingURL=publication.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publication.tools.js","sourceRoot":"","sources":["../../src/tools/publication.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { BpsClient } from "../client/bps-client.js";
3
+ export declare function registerReferenceTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=reference.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.tools.d.ts","sourceRoot":"","sources":["../../src/tools/reference.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAuBjF"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ import { formatList } from "../services/data-formatter.js";
3
+ import { formatErrorForUser } from "../utils/error.js";
4
+ export function registerReferenceTools(server, client) {
5
+ server.tool("list_strategic_indicators", "Daftar indikator strategis BPS. Indikator ini mencakup data-data utama seperti pertumbuhan ekonomi, inflasi, pengangguran, dan kemiskinan.", {
6
+ domain: z.string().default("0000").describe("Kode domain BPS"),
7
+ var: z.number().optional().describe("Filter berdasarkan ID variabel"),
8
+ page: z.number().optional().describe("Nomor halaman"),
9
+ }, async ({ domain, var: varId, page }) => {
10
+ try {
11
+ const result = await client.listStrategicIndicators(domain, varId, page);
12
+ const text = formatList(result.data, (ind) => `**${ind.title}** (ID: ${ind.indicator_id}) — Subjek: ${ind.sub_name}`, "Daftar Indikator Strategis");
13
+ return { content: [{ type: "text", text }] };
14
+ }
15
+ catch (error) {
16
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
17
+ }
18
+ });
19
+ }
20
+ //# sourceMappingURL=reference.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.tools.js","sourceRoot":"","sources":["../../src/tools/reference.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAiB;IACzE,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,4IAA4I,EAC5I;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACrE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KACtD,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACzE,MAAM,IAAI,GAAG,UAAU,CACrB,MAAM,CAAC,IAAI,EACX,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,WAAW,GAAG,CAAC,YAAY,eAAe,GAAG,CAAC,QAAQ,EAAE,EAC/E,4BAA4B,CAC7B,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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { BpsClient } from "../client/bps-client.js";
3
+ export declare function registerSearchTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=search.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.tools.d.ts","sourceRoot":"","sources":["../../src/tools/search.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAuB9E"}
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ import { appendAttribution } from "../services/attribution.js";
3
+ import { formatErrorForUser } from "../utils/error.js";
4
+ export function registerSearchTools(server, client) {
5
+ server.tool("search", "Pencarian data lintas tipe di BPS. Bisa mencari tabel statis, publikasi, BRS, indikator, dan data lainnya.", {
6
+ domain: z.string().default("0000").describe("Kode domain BPS"),
7
+ keyword: z.string().describe("Kata kunci pencarian"),
8
+ type: z.string().optional().describe("Filter tipe hasil: 'statictable', 'pressrelease', 'publication', 'strategicindicator' (opsional)"),
9
+ page: z.number().optional().describe("Nomor halaman"),
10
+ }, async ({ domain, keyword, type, page }) => {
11
+ try {
12
+ const result = await client.search(domain, keyword, type, page);
13
+ const text = appendAttribution(`## Hasil Pencarian: "${keyword}"\n\n` +
14
+ "```json\n" + JSON.stringify(result, null, 2) + "\n```");
15
+ return { content: [{ type: "text", text }] };
16
+ }
17
+ catch (error) {
18
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
19
+ }
20
+ });
21
+ }
22
+ //# sourceMappingURL=search.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.tools.js","sourceRoot":"","sources":["../../src/tools/search.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,mBAAmB,CAAC,MAAiB,EAAE,MAAiB;IACtE,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,4GAA4G,EAC5G;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACpD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kGAAkG,CAAC;QACxI,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KACtD,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,iBAAiB,CAC5B,wBAAwB,OAAO,OAAO;gBACtC,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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { BpsClient } from "../client/bps-client.js";
3
+ export declare function registerStaticTableTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=static-table.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-table.tools.d.ts","sourceRoot":"","sources":["../../src/tools/static-table.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAsDnF"}
@@ -0,0 +1,47 @@
1
+ import { z } from "zod";
2
+ import { formatList } from "../services/data-formatter.js";
3
+ import { appendAttribution } from "../services/attribution.js";
4
+ import { formatErrorForUser } from "../utils/error.js";
5
+ export function registerStaticTableTools(server, client) {
6
+ server.tool("list_static_tables", "Daftar tabel statis BPS. Tabel statis berisi data yang sudah di-format dalam bentuk tabel HTML.", {
7
+ domain: z.string().default("0000").describe("Kode domain BPS"),
8
+ keyword: z.string().optional().describe("Kata kunci pencarian"),
9
+ year: z.number().optional().describe("Filter tahun"),
10
+ month: z.number().optional().describe("Filter bulan (1-12)"),
11
+ page: z.number().optional().describe("Nomor halaman"),
12
+ }, async ({ domain, keyword, year, month, page }) => {
13
+ try {
14
+ const result = await client.listStaticTables(domain, keyword, year, month, page);
15
+ const text = formatList(result.data, (t) => `**${t.title}** (ID: ${t.table_id}) — Update: ${t.updt_date}`, "Daftar Tabel Statis");
16
+ return { content: [{ type: "text", text }] };
17
+ }
18
+ catch (error) {
19
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
20
+ }
21
+ });
22
+ server.tool("get_static_table", "Ambil detail satu tabel statis BPS (termasuk konten tabel dalam format HTML).", {
23
+ domain: z.string().describe("Kode domain BPS"),
24
+ id: z.number().describe("ID tabel statis"),
25
+ }, async ({ domain, id }) => {
26
+ try {
27
+ const detail = await client.getStaticTable(domain, id);
28
+ const lines = [
29
+ `## ${detail.title}`,
30
+ "",
31
+ `**ID:** ${detail.table_id}`,
32
+ `**Update:** ${detail.updt_date}`,
33
+ "",
34
+ detail.table, // HTML table content
35
+ ];
36
+ if (detail.excel) {
37
+ lines.push("", `**Download Excel:** ${detail.excel}`);
38
+ }
39
+ const text = appendAttribution(lines.join("\n"));
40
+ return { content: [{ type: "text", text }] };
41
+ }
42
+ catch (error) {
43
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
44
+ }
45
+ });
46
+ }
47
+ //# sourceMappingURL=static-table.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-table.tools.js","sourceRoot":"","sources":["../../src/tools/static-table.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { BpsClient } from "../client/bps-client.js";
3
+ export declare function registerTradeTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=trade.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade.tools.d.ts","sourceRoot":"","sources":["../../src/tools/trade.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAgC7E"}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ import { appendAttribution } from "../services/attribution.js";
3
+ import { formatErrorForUser } from "../utils/error.js";
4
+ export function registerTradeTools(server, client) {
5
+ server.tool("get_trade_data", "Ambil data perdagangan luar negeri (ekspor/impor) berdasarkan kode HS. Data mencakup nilai dan volume perdagangan Indonesia.", {
6
+ source: z.enum(["1", "2"]).describe("Sumber data: '1' untuk ekspor, '2' untuk impor"),
7
+ hs_code: z.string().describe("Kode HS (Harmonized System). Contoh: '0901' untuk kopi"),
8
+ hs_type: z.string().describe("Tipe HS: '2' untuk 2-digit, '4' untuk 4-digit, '6' untuk 6-digit"),
9
+ year: z.string().describe("Tahun data. Contoh: '2024'"),
10
+ period: z.string().describe("Periode: '0' untuk tahunan, '1'-'12' untuk bulanan"),
11
+ }, async ({ source, hs_code, hs_type, year, period }) => {
12
+ try {
13
+ const result = await client.getTradeData(Number(source), hs_code, hs_type, year, period);
14
+ const sourceLabel = source === "1" ? "Ekspor" : "Impor";
15
+ const text = appendAttribution(`## Data ${sourceLabel} — HS ${hs_code}\n\n` +
16
+ `**Tahun:** ${year} | **Periode:** ${period === "0" ? "Tahunan" : `Bulan ${period}`}\n\n` +
17
+ "```json\n" + JSON.stringify(result, null, 2) + "\n```");
18
+ return { content: [{ type: "text", text }] };
19
+ }
20
+ catch (error) {
21
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
22
+ }
23
+ });
24
+ }
25
+ //# sourceMappingURL=trade.tools.js.map
@@ -0,0 +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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ICacheProvider } from "../services/cache.js";
3
+ export declare function registerUtilityTools(server: McpServer, cache: ICacheProvider | null): void;
4
+ //# sourceMappingURL=utility.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utility.tools.d.ts","sourceRoot":"","sources":["../../src/tools/utility.tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAa1F"}
@@ -0,0 +1,10 @@
1
+ export function registerUtilityTools(server, cache) {
2
+ server.tool("cache_clear", "Bersihkan cache data BPS. Berguna jika ingin memastikan data terbaru diambil langsung dari API.", {}, async () => {
3
+ if (cache) {
4
+ await cache.clear();
5
+ return { content: [{ type: "text", text: "Cache berhasil dibersihkan." }] };
6
+ }
7
+ return { content: [{ type: "text", text: "Cache tidak aktif." }] };
8
+ });
9
+ }
10
+ //# sourceMappingURL=utility.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utility.tools.js","sourceRoot":"","sources":["../../src/tools/utility.tools.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,KAA4B;IAClF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,iGAAiG,EACjG,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC;IACrE,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function startStdioTransport(server: McpServer): Promise<void>;
3
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/transport/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E"}
@@ -0,0 +1,9 @@
1
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
2
+ import { logger } from "../utils/logger.js";
3
+ export async function startStdioTransport(server) {
4
+ const transport = new StdioServerTransport();
5
+ logger.info("Starting BPS MCP Server (stdio transport)");
6
+ await server.connect(transport);
7
+ logger.info("BPS MCP Server connected via stdio");
8
+ }
9
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/transport/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAiB;IACzD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAEzD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare class BpsApiError extends Error {
2
+ readonly statusCode?: number | undefined;
3
+ readonly endpoint?: string | undefined;
4
+ constructor(message: string, statusCode?: number | undefined, endpoint?: string | undefined);
5
+ }
6
+ export declare class BpsNotFoundError extends BpsApiError {
7
+ constructor(resource: string);
8
+ }
9
+ export declare class BpsAuthError extends BpsApiError {
10
+ constructor();
11
+ }
12
+ export declare function formatErrorForUser(error: unknown): string;
13
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;aAGlB,UAAU,CAAC,EAAE,MAAM;aACnB,QAAQ,CAAC,EAAE,MAAM;gBAFjC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,QAAQ,CAAC,EAAE,MAAM,YAAA;CAKpC;AAED,qBAAa,gBAAiB,SAAQ,WAAW;gBACnC,QAAQ,EAAE,MAAM;CAI7B;AAED,qBAAa,YAAa,SAAQ,WAAW;;CAK5C;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAczD"}
@@ -0,0 +1,38 @@
1
+ export class BpsApiError extends Error {
2
+ statusCode;
3
+ endpoint;
4
+ constructor(message, statusCode, endpoint) {
5
+ super(message);
6
+ this.statusCode = statusCode;
7
+ this.endpoint = endpoint;
8
+ this.name = "BpsApiError";
9
+ }
10
+ }
11
+ export class BpsNotFoundError extends BpsApiError {
12
+ constructor(resource) {
13
+ super(`Data tidak ditemukan: ${resource}`, 404);
14
+ this.name = "BpsNotFoundError";
15
+ }
16
+ }
17
+ export class BpsAuthError extends BpsApiError {
18
+ constructor() {
19
+ super("Autentikasi gagal. Periksa BPS_API_KEY Anda.", 401);
20
+ this.name = "BpsAuthError";
21
+ }
22
+ }
23
+ export function formatErrorForUser(error) {
24
+ if (error instanceof BpsAuthError) {
25
+ return "Autentikasi gagal. Pastikan BPS_API_KEY sudah benar. Dapatkan API key di https://webapi.bps.go.id";
26
+ }
27
+ if (error instanceof BpsNotFoundError) {
28
+ return error.message;
29
+ }
30
+ if (error instanceof BpsApiError) {
31
+ return `Error dari BPS API (${error.statusCode ?? "unknown"}): ${error.message}`;
32
+ }
33
+ if (error instanceof Error) {
34
+ return `Terjadi kesalahan: ${error.message}`;
35
+ }
36
+ return "Terjadi kesalahan yang tidak diketahui.";
37
+ }
38
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGlB;IACA;IAHlB,YACE,OAAe,EACC,UAAmB,EACnB,QAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,eAAU,GAAV,UAAU,CAAS;QACnB,aAAQ,GAAR,QAAQ,CAAS;QAGjC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAC/C,YAAY,QAAgB;QAC1B,KAAK,CAAC,yBAAyB,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C;QACE,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,mGAAmG,CAAC;IAC7G,CAAC;IACD,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,uBAAuB,KAAK,CAAC,UAAU,IAAI,SAAS,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACnF,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,yCAAyC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type LogLevel = "debug" | "info" | "warn" | "error";
2
+ export declare function setLogLevel(level: LogLevel): void;
3
+ /**
4
+ * Logger that writes to stderr to avoid interfering with stdio MCP transport.
5
+ */
6
+ export declare const logger: {
7
+ debug(message: string, data?: unknown): void;
8
+ info(message: string, data?: unknown): void;
9
+ warn(message: string, data?: unknown): void;
10
+ error(message: string, data?: unknown): void;
11
+ };
12
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAW3D,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAeD;;GAEG;AACH,eAAO,MAAM,MAAM;mBACF,MAAM,SAAS,OAAO,GAAG,IAAI;kBAK9B,MAAM,SAAS,OAAO,GAAG,IAAI;kBAK7B,MAAM,SAAS,OAAO,GAAG,IAAI;mBAK5B,MAAM,SAAS,OAAO,GAAG,IAAI;CAK7C,CAAC"}
@@ -0,0 +1,47 @@
1
+ const LEVELS = {
2
+ debug: 0,
3
+ info: 1,
4
+ warn: 2,
5
+ error: 3,
6
+ };
7
+ let currentLevel = "info";
8
+ export function setLogLevel(level) {
9
+ currentLevel = level;
10
+ }
11
+ function shouldLog(level) {
12
+ return LEVELS[level] >= LEVELS[currentLevel];
13
+ }
14
+ function formatMessage(level, message, data) {
15
+ const timestamp = new Date().toISOString();
16
+ const prefix = `[${timestamp}] [${level.toUpperCase()}]`;
17
+ if (data !== undefined) {
18
+ return `${prefix} ${message} ${JSON.stringify(data)}`;
19
+ }
20
+ return `${prefix} ${message}`;
21
+ }
22
+ /**
23
+ * Logger that writes to stderr to avoid interfering with stdio MCP transport.
24
+ */
25
+ export const logger = {
26
+ debug(message, data) {
27
+ if (shouldLog("debug")) {
28
+ process.stderr.write(formatMessage("debug", message, data) + "\n");
29
+ }
30
+ },
31
+ info(message, data) {
32
+ if (shouldLog("info")) {
33
+ process.stderr.write(formatMessage("info", message, data) + "\n");
34
+ }
35
+ },
36
+ warn(message, data) {
37
+ if (shouldLog("warn")) {
38
+ process.stderr.write(formatMessage("warn", message, data) + "\n");
39
+ }
40
+ },
41
+ error(message, data) {
42
+ if (shouldLog("error")) {
43
+ process.stderr.write(formatMessage("error", message, data) + "\n");
44
+ }
45
+ },
46
+ };
47
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAA6B;IACvC,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,IAAI,YAAY,GAAa,MAAM,CAAC;AAEpC,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC;AAED,SAAS,SAAS,CAAC,KAAe;IAChC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,aAAa,CAAC,KAAe,EAAE,OAAe,EAAE,IAAc;IACrE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;IACzD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Auto-pagination helper for BPS API endpoints that support page-based pagination.
3
+ *
4
+ * @param fetcher Function that fetches a single page, returns { data, totalPages }
5
+ * @param maxPages Safety limit to prevent infinite loops
6
+ */
7
+ export declare function fetchAllPages<T>(fetcher: (page: number) => Promise<{
8
+ data: T[];
9
+ totalPages: number;
10
+ }>, maxPages?: number): Promise<T[]>;
11
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,EACrE,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,CAAC,EAAE,CAAC,CAad"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Auto-pagination helper for BPS API endpoints that support page-based pagination.
3
+ *
4
+ * @param fetcher Function that fetches a single page, returns { data, totalPages }
5
+ * @param maxPages Safety limit to prevent infinite loops
6
+ */
7
+ export async function fetchAllPages(fetcher, maxPages = 20) {
8
+ const allData = [];
9
+ let page = 1;
10
+ let totalPages;
11
+ do {
12
+ const result = await fetcher(page);
13
+ allData.push(...result.data);
14
+ totalPages = result.totalPages;
15
+ page++;
16
+ } while (page <= totalPages && page <= maxPages);
17
+ return allData;
18
+ }
19
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAqE,EACrE,WAAmB,EAAE;IAErB,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,UAAkB,CAAC;IAEvB,GAAG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAI,EAAE,CAAC;IACT,CAAC,QAAQ,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,QAAQ,EAAE;IAEjD,OAAO,OAAO,CAAC;AACjB,CAAC"}