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":"domain-resolver.d.ts","sourceRoot":"","sources":["../../src/services/domain-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD,qBAAa,cAAc;IAKb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAS;gBAEM,MAAM,EAAE,SAAS;IAExC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YAKrB,WAAW;IAkBzB;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAiDtF,6BAA6B;IAC7B,UAAU,IAAI,SAAS,EAAE;CAG1B"}
@@ -0,0 +1,101 @@
1
+ import { DOMAIN_ALIASES } from "../config/domain-aliases.js";
2
+ import { logger } from "../utils/logger.js";
3
+ export class DomainResolver {
4
+ client;
5
+ domains = [];
6
+ nameIndex = new Map(); // lowercase name → domain_id
7
+ loaded = false;
8
+ constructor(client) {
9
+ this.client = client;
10
+ }
11
+ async ensureLoaded() {
12
+ if (this.loaded)
13
+ return;
14
+ await this.loadDomains();
15
+ }
16
+ async loadDomains() {
17
+ try {
18
+ const result = await this.client.listDomains("all");
19
+ this.domains = result.data;
20
+ this.nameIndex.clear();
21
+ for (const d of this.domains) {
22
+ this.nameIndex.set(d.domain_name.toLowerCase(), d.domain_id);
23
+ }
24
+ this.loaded = true;
25
+ logger.info(`Domain resolver loaded ${this.domains.length} domains`);
26
+ }
27
+ catch (error) {
28
+ logger.error("Failed to load domains", error);
29
+ throw error;
30
+ }
31
+ }
32
+ /**
33
+ * Resolve a query (name, alias, or code) to a BPS domain code.
34
+ * Returns null if no match found.
35
+ */
36
+ async resolve(query) {
37
+ await this.ensureLoaded();
38
+ const q = query.trim().toLowerCase();
39
+ // 1. Direct code match
40
+ const byCode = this.domains.find((d) => d.domain_id === q);
41
+ if (byCode)
42
+ return { domainId: byCode.domain_id, domainName: byCode.domain_name };
43
+ // 2. Alias match
44
+ const aliasId = DOMAIN_ALIASES[q];
45
+ if (aliasId) {
46
+ const byAlias = this.domains.find((d) => d.domain_id === aliasId);
47
+ if (byAlias)
48
+ return { domainId: byAlias.domain_id, domainName: byAlias.domain_name };
49
+ return { domainId: aliasId, domainName: query };
50
+ }
51
+ // 3. Exact name match
52
+ const exactId = this.nameIndex.get(q);
53
+ if (exactId) {
54
+ const d = this.domains.find((d) => d.domain_id === exactId);
55
+ return { domainId: d.domain_id, domainName: d.domain_name };
56
+ }
57
+ // 4. Partial/contains match
58
+ for (const [name, id] of this.nameIndex) {
59
+ if (name.includes(q) || q.includes(name)) {
60
+ const d = this.domains.find((d) => d.domain_id === id);
61
+ return { domainId: d.domain_id, domainName: d.domain_name };
62
+ }
63
+ }
64
+ // 5. Fuzzy match (simple Levenshtein)
65
+ let bestMatch = null;
66
+ let bestDistance = Infinity;
67
+ const maxDistance = Math.max(3, Math.floor(q.length * 0.4));
68
+ for (const [name, id] of this.nameIndex) {
69
+ const dist = levenshtein(q, name);
70
+ if (dist < bestDistance && dist <= maxDistance) {
71
+ bestDistance = dist;
72
+ const d = this.domains.find((d) => d.domain_id === id);
73
+ bestMatch = { domainId: d.domain_id, domainName: d.domain_name };
74
+ }
75
+ }
76
+ return bestMatch;
77
+ }
78
+ /** Get all loaded domains */
79
+ getDomains() {
80
+ return this.domains;
81
+ }
82
+ }
83
+ function levenshtein(a, b) {
84
+ const m = a.length;
85
+ const n = b.length;
86
+ const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
87
+ for (let i = 0; i <= m; i++)
88
+ dp[i][0] = i;
89
+ for (let j = 0; j <= n; j++)
90
+ dp[0][j] = j;
91
+ for (let i = 1; i <= m; i++) {
92
+ for (let j = 1; j <= n; j++) {
93
+ dp[i][j] =
94
+ a[i - 1] === b[j - 1]
95
+ ? dp[i - 1][j - 1]
96
+ : 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
97
+ }
98
+ }
99
+ return dp[m][n];
100
+ }
101
+ //# sourceMappingURL=domain-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-resolver.js","sourceRoot":"","sources":["../../src/services/domain-resolver.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 registerCensusTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=census.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"census.tools.d.ts","sourceRoot":"","sources":["../../src/tools/census.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,CAwC9E"}
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ import { formatList } from "../services/data-formatter.js";
3
+ import { formatErrorForUser } from "../utils/error.js";
4
+ export function registerCensusTools(server, client) {
5
+ server.tool("list_census_events", "Daftar kegiatan sensus BPS (Sensus Penduduk, Sensus Ekonomi, Sensus Pertanian, dll). Gunakan ID kegiatan untuk mengambil topik dan data sensus.", {}, async () => {
6
+ try {
7
+ const result = await client.listCensusEvents();
8
+ const text = formatList(result, (e) => `**${e.kegiatan}** (ID: ${e.id}) — Tahun: ${e.tahun_kegiatan}`, "Daftar Kegiatan Sensus");
9
+ return { content: [{ type: "text", text }] };
10
+ }
11
+ catch (error) {
12
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
13
+ }
14
+ });
15
+ server.tool("list_census_topics", "Daftar topik data yang tersedia untuk kegiatan sensus tertentu. Gunakan list_census_events untuk mendapatkan ID kegiatan.", {
16
+ kegiatan: z.string().describe("ID kegiatan sensus (dari list_census_events)"),
17
+ }, async ({ kegiatan }) => {
18
+ try {
19
+ const result = await client.listCensusTopics(kegiatan);
20
+ const text = formatList(result, (t) => `**${t.topik}** (ID: ${t.id}) — ${t.topic}`, "Daftar Topik Sensus");
21
+ return { content: [{ type: "text", text }] };
22
+ }
23
+ catch (error) {
24
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
25
+ }
26
+ });
27
+ }
28
+ //# sourceMappingURL=census.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"census.tools.js","sourceRoot":"","sources":["../../src/tools/census.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,mBAAmB,CAAC,MAAiB,EAAE,MAAiB;IACtE,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,iJAAiJ,EACjJ,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,UAAU,CACrB,MAAM,EACN,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,cAAc,EAAE,EACrE,wBAAwB,CACzB,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;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,2HAA2H,EAC3H;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,UAAU,CACrB,MAAM,EACN,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAClD,qBAAqB,CACtB,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 registerCsaTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=csa.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csa.tools.d.ts","sourceRoot":"","sources":["../../src/tools/csa.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAqG3E"}
@@ -0,0 +1,77 @@
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 registerCsaTools(server, client) {
6
+ server.tool("list_csa_categories", "Daftar kategori CSA (Classification of Statistical Activities) BPS. CSA adalah klasifikasi aktivitas statistik internasional.", {
7
+ domain: z.string().default("0000").describe("Kode domain BPS"),
8
+ }, async ({ domain }) => {
9
+ try {
10
+ const result = await client.listCsaSubjectCategories(domain);
11
+ const text = formatList(result, (c) => `**${c.title}** (ID: ${c.subcat_id})`, "Daftar Kategori CSA");
12
+ return { content: [{ type: "text", text }] };
13
+ }
14
+ catch (error) {
15
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
16
+ }
17
+ });
18
+ server.tool("list_csa_subjects", "Daftar subjek CSA untuk domain dan kategori tertentu.", {
19
+ domain: z.string().default("0000").describe("Kode domain BPS"),
20
+ subcat: z.number().optional().describe("Filter berdasarkan ID kategori CSA"),
21
+ }, async ({ domain, subcat }) => {
22
+ try {
23
+ const result = await client.listCsaSubjects(domain, subcat);
24
+ const text = formatList(result.data, (s) => `**${s.title}** (ID: ${s.sub_id}) — Kategori: ${s.subcat} — ${s.ntabel} tabel`, "Daftar Subjek CSA");
25
+ return { content: [{ type: "text", text }] };
26
+ }
27
+ catch (error) {
28
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
29
+ }
30
+ });
31
+ server.tool("list_csa_tables", "Daftar tabel CSA untuk domain dan subjek tertentu.", {
32
+ domain: z.string().default("0000").describe("Kode domain BPS"),
33
+ subject: z.number().optional().describe("Filter berdasarkan ID subjek CSA"),
34
+ page: z.number().optional().describe("Nomor halaman"),
35
+ }, async ({ domain, subject, page }) => {
36
+ try {
37
+ const result = await client.listCsaTables(domain, subject, page);
38
+ const text = formatList(result.data, (t) => {
39
+ let desc = `**${t.title}** (ID: ${t.id})`;
40
+ if (t.latest_period)
41
+ desc += ` — Periode terbaru: ${t.latest_period}`;
42
+ desc += ` — Update: ${t.last_update}`;
43
+ return desc;
44
+ }, "Daftar Tabel CSA");
45
+ return { content: [{ type: "text", text }] };
46
+ }
47
+ catch (error) {
48
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
49
+ }
50
+ });
51
+ server.tool("get_csa_table", "Ambil detail satu tabel CSA (termasuk konten tabel dalam format HTML).", {
52
+ domain: z.string().describe("Kode domain BPS"),
53
+ id: z.string().describe("ID tabel CSA"),
54
+ }, async ({ domain, id }) => {
55
+ try {
56
+ const detail = await client.getCsaTable(domain, id);
57
+ const lines = [
58
+ `## ${detail.title}`,
59
+ "",
60
+ `**ID:** ${detail.table_id}`,
61
+ `**Kategori CSA:** ${detail.subcsa}`,
62
+ `**Update:** ${detail.updt_date}`,
63
+ "",
64
+ detail.table,
65
+ ];
66
+ if (detail.excel) {
67
+ lines.push("", `**Download Excel:** ${detail.excel}`);
68
+ }
69
+ const text = appendAttribution(lines.join("\n"));
70
+ return { content: [{ type: "text", text }] };
71
+ }
72
+ catch (error) {
73
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
74
+ }
75
+ });
76
+ }
77
+ //# sourceMappingURL=csa.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csa.tools.js","sourceRoot":"","sources":["../../src/tools/csa.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { BpsClient } from "../client/bps-client.js";
3
+ import type { DomainResolver } from "../services/domain-resolver.js";
4
+ export declare function registerDomainTools(server: McpServer, client: BpsClient, resolver: DomainResolver): void;
5
+ //# sourceMappingURL=domain.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.tools.d.ts","sourceRoot":"","sources":["../../src/tools/domain.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAKrE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,cAAc,GACvB,IAAI,CAqDN"}
@@ -0,0 +1,44 @@
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 registerDomainTools(server, client, resolver) {
6
+ server.tool("list_domains", "Daftar domain/wilayah BPS (provinsi, kabupaten/kota). Gunakan type='prov' untuk provinsi, 'kab' untuk semua kabupaten, 'kabbyprov' untuk kabupaten per provinsi.", {
7
+ type: z.enum(["all", "prov", "kab", "kabbyprov"]).default("all").describe("Tipe domain: all, prov (provinsi), kab (kabupaten), kabbyprov (kabupaten per provinsi)"),
8
+ prov: z.string().optional().describe("ID provinsi (wajib jika type=kabbyprov). Contoh: '35' untuk Jawa Timur"),
9
+ }, async ({ type, prov }) => {
10
+ try {
11
+ const result = await client.listDomains(type, prov);
12
+ const text = formatList(result.data, (d) => `**${d.domain_name}** (kode: ${d.domain_id})`, "Daftar Domain/Wilayah");
13
+ return { content: [{ type: "text", text }] };
14
+ }
15
+ catch (error) {
16
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
17
+ }
18
+ });
19
+ server.tool("resolve_domain", "Konversi nama wilayah ke kode domain BPS. Mendukung nama resmi, singkatan (Jatim, Jabar, Jogja), dan fuzzy matching.", {
20
+ query: z.string().describe("Nama wilayah yang ingin di-resolve. Contoh: 'Surabaya', 'Jawa Timur', 'Jatim', '3578'"),
21
+ }, async ({ query }) => {
22
+ try {
23
+ const result = await resolver.resolve(query);
24
+ if (!result) {
25
+ return {
26
+ content: [{
27
+ type: "text",
28
+ text: appendAttribution(`Wilayah "${query}" tidak ditemukan. Coba gunakan nama resmi atau kode BPS.`),
29
+ }],
30
+ };
31
+ }
32
+ return {
33
+ content: [{
34
+ type: "text",
35
+ text: appendAttribution(`**${result.domainName}**\nKode domain: ${result.domainId}\n\nGunakan kode "${result.domainId}" sebagai parameter 'domain' di tool lainnya.`),
36
+ }],
37
+ };
38
+ }
39
+ catch (error) {
40
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=domain.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.tools.js","sourceRoot":"","sources":["../../src/tools/domain.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,MAAiB,EACjB,QAAwB;IAExB,MAAM,CAAC,IAAI,CACT,cAAc,EACd,kKAAkK,EAClK;QACE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wFAAwF,CAAC;QACnK,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;KAC/G,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,UAAU,CACrB,MAAM,CAAC,IAAI,EACX,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,aAAa,CAAC,CAAC,SAAS,GAAG,EACpD,uBAAuB,CACxB,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;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,sHAAsH,EACtH;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;KACpH,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,iBAAiB,CAAC,YAAY,KAAK,2DAA2D,CAAC;yBACtG,CAAC;iBACH,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB,CACrB,KAAK,MAAM,CAAC,UAAU,oBAAoB,MAAM,CAAC,QAAQ,qBAAqB,MAAM,CAAC,QAAQ,+CAA+C,CAC7I;qBACF,CAAC;aACH,CAAC;QACJ,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,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { BpsClient } from "../client/bps-client.js";
3
+ import type { Config } from "../config/index.js";
4
+ export declare function registerDynamicDataTools(server: McpServer, client: BpsClient, config: Config): void;
5
+ //# sourceMappingURL=dynamic-data.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-data.tools.d.ts","sourceRoot":"","sources":["../../src/tools/dynamic-data.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIjD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA4MnG"}
@@ -0,0 +1,136 @@
1
+ import { z } from "zod";
2
+ import { formatDynamicData, formatList } from "../services/data-formatter.js";
3
+ import { formatErrorForUser } from "../utils/error.js";
4
+ export function registerDynamicDataTools(server, client, config) {
5
+ server.tool("list_subjects", "Daftar subjek data statistik yang tersedia di BPS untuk domain tertentu. Subjek adalah kategori utama data (misal: Kependudukan, Kemiskinan, Perdagangan).", {
6
+ domain: z.string().default("0000").describe("Kode domain BPS. '0000' untuk nasional. Gunakan resolve_domain untuk mendapatkan kode."),
7
+ subcat: z.number().optional().describe("Filter berdasarkan kategori subjek (opsional)"),
8
+ }, async ({ domain, subcat }) => {
9
+ try {
10
+ const result = await client.listSubjects(domain, subcat);
11
+ const text = formatList(result.data, (s) => `**${s.title}** (ID: ${s.sub_id}) — ${s.ntabel ?? 0} tabel, ${s.nvar ?? 0} variabel`, "Daftar Subjek Statistik");
12
+ return { content: [{ type: "text", text }] };
13
+ }
14
+ catch (error) {
15
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
16
+ }
17
+ });
18
+ server.tool("list_subject_categories", "Daftar kategori subjek statistik BPS. Kategori mengelompokkan subjek-subjek terkait.", {
19
+ domain: z.string().default("0000").describe("Kode domain BPS"),
20
+ }, async ({ domain }) => {
21
+ try {
22
+ const result = await client.listSubjectCategories(domain);
23
+ const text = formatList(result, (c) => `**${c.title}** (ID: ${c.subcat_id})`, "Daftar Kategori Subjek");
24
+ return { content: [{ type: "text", text }] };
25
+ }
26
+ catch (error) {
27
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
28
+ }
29
+ });
30
+ server.tool("list_variables", "Daftar variabel data di tabel dinamis BPS. Variabel menentukan data spesifik yang bisa diambil (misal: Jumlah Penduduk, Angka Kemiskinan).", {
31
+ domain: z.string().default("0000").describe("Kode domain BPS"),
32
+ subject: z.number().optional().describe("Filter berdasarkan ID subjek"),
33
+ year: z.number().optional().describe("Filter berdasarkan tahun"),
34
+ page: z.number().optional().describe("Nomor halaman (default: 1)"),
35
+ }, async ({ domain, subject, year, page }) => {
36
+ try {
37
+ const result = await client.listVariables(domain, subject, year, page);
38
+ const text = formatList(result.data, (v) => {
39
+ let desc = `**${v.title}** (ID: ${v.var_id})`;
40
+ if (v.sub_name)
41
+ desc += ` — Subjek: ${v.sub_name}`;
42
+ if (v.unit)
43
+ desc += ` — Satuan: ${v.unit}`;
44
+ if (v.def)
45
+ desc += `\n ${v.def}`;
46
+ return desc;
47
+ }, "Daftar Variabel");
48
+ return { content: [{ type: "text", text }] };
49
+ }
50
+ catch (error) {
51
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
52
+ }
53
+ });
54
+ server.tool("list_vertical_variables", "Daftar variabel vertikal (breakdown/disaggregasi) untuk variabel tertentu. Contoh: jenis kelamin, kelompok umur.", {
55
+ domain: z.string().default("0000").describe("Kode domain BPS"),
56
+ var: z.number().optional().describe("ID variabel untuk melihat vertikal variabelnya"),
57
+ }, async ({ domain, var: varId }) => {
58
+ try {
59
+ const result = await client.listVerticalVariables(domain, varId);
60
+ const text = formatList(result, (v) => `**${v.label_vervar}** (ID: ${v.kode_vervar}) — Grup: ${v.name_group_vervar}`, "Daftar Variabel Vertikal");
61
+ return { content: [{ type: "text", text }] };
62
+ }
63
+ catch (error) {
64
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
65
+ }
66
+ });
67
+ server.tool("list_derived_variables", "Daftar turunan variabel (derived/aggregated categories). Contoh: total, rata-rata.", {
68
+ domain: z.string().default("0000").describe("Kode domain BPS"),
69
+ var: z.number().optional().describe("ID variabel"),
70
+ }, async ({ domain, var: varId }) => {
71
+ try {
72
+ const result = await client.listDerivedVariables(domain, varId);
73
+ const text = formatList(result, (v) => `**${v.label_turvar}** (ID: ${v.kode_turvar}) — Grup: ${v.name_group_turvar}`, "Daftar Turunan Variabel");
74
+ return { content: [{ type: "text", text }] };
75
+ }
76
+ catch (error) {
77
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
78
+ }
79
+ });
80
+ server.tool("list_periods", "Daftar periode data yang tersedia untuk variabel tertentu. Periode bisa berupa tahun, semester, triwulan, atau bulan.", {
81
+ domain: z.string().default("0000").describe("Kode domain BPS"),
82
+ var: z.number().optional().describe("ID variabel"),
83
+ }, async ({ domain, var: varId }) => {
84
+ try {
85
+ const result = await client.listPeriods(domain, varId);
86
+ const text = formatList(result, (p) => `**${p.th_name}** (ID: ${p.th_id})`, "Daftar Periode Data");
87
+ return { content: [{ type: "text", text }] };
88
+ }
89
+ catch (error) {
90
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
91
+ }
92
+ });
93
+ server.tool("list_derived_periods", "Daftar turunan periode untuk variabel tertentu.", {
94
+ domain: z.string().default("0000").describe("Kode domain BPS"),
95
+ var: z.number().optional().describe("ID variabel"),
96
+ }, async ({ domain, var: varId }) => {
97
+ try {
98
+ const result = await client.listDerivedPeriods(domain, varId);
99
+ const text = formatList(result, (p) => `**${p.turth_name}** (ID: ${p.turth_id})`, "Daftar Turunan Periode");
100
+ return { content: [{ type: "text", text }] };
101
+ }
102
+ catch (error) {
103
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
104
+ }
105
+ });
106
+ server.tool("list_units", "Daftar satuan data yang digunakan di domain tertentu. Contoh: Jiwa, Persen, Rupiah.", {
107
+ domain: z.string().default("0000").describe("Kode domain BPS"),
108
+ }, async ({ domain }) => {
109
+ try {
110
+ const result = await client.listUnits(domain);
111
+ const text = formatList(result, (u) => `**${u.unit}** (ID: ${u.unit_id})`, "Daftar Satuan Data");
112
+ return { content: [{ type: "text", text }] };
113
+ }
114
+ catch (error) {
115
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
116
+ }
117
+ });
118
+ server.tool("get_dynamic_data", "Ambil data dari tabel dinamis BPS. Ini adalah tool utama untuk mendapatkan data statistik. Gunakan list_variables untuk menemukan ID variabel, dan list_periods untuk menemukan kode periode.", {
119
+ domain: z.string().describe("Kode domain BPS. '0000' untuk nasional."),
120
+ var: z.string().describe("ID variabel (bisa beberapa, pisahkan dengan koma). Contoh: '1452' atau '1452,1453'"),
121
+ th: z.string().optional().describe("Kode periode/tahun (bisa beberapa). Contoh: '2023' atau '2020,2021,2022,2023'"),
122
+ turvar: z.string().optional().describe("Kode turunan variabel"),
123
+ vervar: z.string().optional().describe("Kode variabel vertikal"),
124
+ turth: z.string().optional().describe("Kode turunan periode"),
125
+ }, async ({ domain, var: varId, th, turvar, vervar, turth }) => {
126
+ try {
127
+ const result = await client.getDynamicData(domain, varId, th, turvar, vervar, turth);
128
+ const text = formatDynamicData(result, domain, config.defaultLang);
129
+ return { content: [{ type: "text", text }] };
130
+ }
131
+ catch (error) {
132
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
133
+ }
134
+ });
135
+ }
136
+ //# sourceMappingURL=dynamic-data.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-data.tools.js","sourceRoot":"","sources":["../../src/tools/dynamic-data.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 registerGlossaryTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=glossary.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glossary.tools.d.ts","sourceRoot":"","sources":["../../src/tools/glossary.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAiChF"}
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ import { formatList } from "../services/data-formatter.js";
3
+ import { formatErrorForUser } from "../utils/error.js";
4
+ export function registerGlossaryTools(server, client) {
5
+ server.tool("list_glossary", "Cari istilah di glosarium statistik BPS. Berguna untuk memahami definisi dan pengertian indikator statistik.", {
6
+ domain: z.string().default("0000").describe("Kode domain BPS"),
7
+ keyword: z.string().optional().describe("Kata kunci pencarian istilah"),
8
+ page: z.number().optional().describe("Nomor halaman"),
9
+ }, async ({ domain, keyword, page }) => {
10
+ try {
11
+ const result = await client.listGlossary(domain, keyword, page);
12
+ const text = formatList(result.data, (g) => {
13
+ const src = g._source;
14
+ let desc = `**${src.judulIndikator}**`;
15
+ const definisi = src.definisi?.trim();
16
+ if (definisi && definisi !== "." && definisi !== ". Produsen data oleh") {
17
+ desc += `\n ${definisi.substring(0, 300)}`;
18
+ }
19
+ if (src.satuan && src.satuan !== "-")
20
+ desc += ` (satuan: ${src.satuan})`;
21
+ if (src.sumberData)
22
+ desc += `\n _Sumber: ${src.sumberData}_`;
23
+ return desc;
24
+ }, "Glosarium Statistik BPS");
25
+ return { content: [{ type: "text", text }] };
26
+ }
27
+ catch (error) {
28
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
29
+ }
30
+ });
31
+ }
32
+ //# sourceMappingURL=glossary.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glossary.tools.js","sourceRoot":"","sources":["../../src/tools/glossary.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,qBAAqB,CAAC,MAAiB,EAAE,MAAiB;IACxE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,8GAA8G,EAC9G;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,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACvE,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,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,UAAU,CACrB,MAAM,CAAC,IAAI,EACX,CAAC,CAAC,EAAE,EAAE;gBACJ,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;gBACtB,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,cAAc,IAAI,CAAC;gBACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACtC,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;oBACxE,IAAI,IAAI,QAAQ,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC/C,CAAC;gBACD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;oBAAE,IAAI,IAAI,aAAa,GAAG,CAAC,MAAM,GAAG,CAAC;gBACzE,IAAI,GAAG,CAAC,UAAU;oBAAE,IAAI,IAAI,iBAAiB,GAAG,CAAC,UAAU,GAAG,CAAC;gBAC/D,OAAO,IAAI,CAAC;YACd,CAAC,EACD,yBAAyB,CAC1B,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 registerInfographicTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=infographic.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infographic.tools.d.ts","sourceRoot":"","sources":["../../src/tools/infographic.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,CAuEnF"}
@@ -0,0 +1,60 @@
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 registerInfographicTools(server, client) {
6
+ server.tool("list_infographics", "Daftar infografis dari BPS. Infografis berisi visualisasi data statistik yang mudah dipahami.", {
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.listInfographics(domain, keyword, page);
13
+ const pageInfo = result.page ? `\n\n*Halaman ${result.page.page} dari ${result.page.pages} (total: ${result.page.total})*` : "";
14
+ const text = formatList(result.data, (inf) => `**${inf.title.replace(/\(\d\)\d{4}-\d{2}-\d{2}$/, "").trim()}** (ID: ${inf.inf_id}) — ${inf.date}`, "Daftar Infografis BPS") + pageInfo;
15
+ return { content: [{ type: "text", text }] };
16
+ }
17
+ catch (error) {
18
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
19
+ }
20
+ });
21
+ server.tool("get_infographic", "Ambil detail satu infografis BPS termasuk deskripsi lengkap dan link download.", {
22
+ domain: z.string().describe("Kode domain BPS"),
23
+ id: z.number().describe("ID infografis"),
24
+ }, async ({ domain, id }) => {
25
+ try {
26
+ const inf = await client.getInfographic(domain, id);
27
+ const cleanTitle = inf.title.replace(/\(\d\)\d{4}-\d{2}-\d{2}$/, "").trim();
28
+ // Strip HTML tags from description
29
+ const cleanDesc = inf.desc
30
+ .replace(/<\/?[^>]+(>|$)/g, "")
31
+ .replace(/&lt;/g, "<")
32
+ .replace(/&gt;/g, ">")
33
+ .replace(/&amp;/g, "&")
34
+ .trim();
35
+ const lines = [
36
+ `## ${cleanTitle}`,
37
+ "",
38
+ `**Tanggal:** ${inf.date}`,
39
+ "",
40
+ "### Deskripsi",
41
+ cleanDesc,
42
+ "",
43
+ `**Gambar:** ${inf.img}`,
44
+ `**Download:** ${inf.dl}`,
45
+ ];
46
+ if (inf.related && inf.related.length > 0) {
47
+ lines.push("", "### Infografis Terkait");
48
+ for (const r of inf.related) {
49
+ lines.push(`- ${r.title.replace(/\(\d\)\d{4}-\d{2}-\d{2}$/, "").trim()} (ID: ${r.id})`);
50
+ }
51
+ }
52
+ const text = appendAttribution(lines.join("\n"));
53
+ return { content: [{ type: "text", text }] };
54
+ }
55
+ catch (error) {
56
+ return { content: [{ type: "text", text: formatErrorForUser(error) }], isError: true };
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=infographic.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infographic.tools.js","sourceRoot":"","sources":["../../src/tools/infographic.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 registerNewsTools(server: McpServer, client: BpsClient): void;
4
+ //# sourceMappingURL=news.tools.d.ts.map