@aborruso/ckan-mcp-server 0.4.57 → 0.4.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # LOG
2
2
 
3
+ ## 2026-03-02 (v0.4.58)
4
+
5
+ - tools: add HVD note on synthesis queries — when `q=*:*` + org/tag facets (or `rows=0`) on dati.gov.it, auto-fetch real-time HVD count and append EU Reg. 2023/138 note to markdown output
6
+ - portals: add `hvd.category_field` config to dati.gov.it in `portals.json`
7
+ - utils: export `getPortalHvdConfig()` from `portal-config.ts`
8
+
9
+ ## 2026-03-02
10
+
11
+ - worker: enable Cloudflare Workers Logs (`[observability]` in `wrangler.toml`)
12
+ - worker: log structured JSON for every tool call (tool, server, q, fq, id, sql, etc.)
13
+
3
14
  ## 2026-03-02 (v0.4.57)
4
15
 
5
16
  - portals: add `data.stadt-zuerich.ch` (City of Zurich) with custom `organization_view_url` pointing to CKAN backend
package/dist/index.js CHANGED
@@ -34,6 +34,9 @@ var portals_default = {
34
34
  search: {
35
35
  force_text_field: true
36
36
  },
37
+ hvd: {
38
+ category_field: "hvd_category"
39
+ },
37
40
  dataset_view_url: "https://www.dati.gov.it/view-dataset/dataset?id={id}",
38
41
  organization_view_url: "https://www.dati.gov.it/view-dataset?organization={name}"
39
42
  },
@@ -173,6 +176,10 @@ function getPortalApiUrlForHostname(hostname) {
173
176
  });
174
177
  return portal ? normalizeUrl(portal.api_url) : null;
175
178
  }
179
+ function getPortalHvdConfig(serverUrl) {
180
+ const portal = getPortalConfig(serverUrl);
181
+ return portal?.hvd ?? null;
182
+ }
176
183
  function getPortalApiPath(serverUrl) {
177
184
  const portal = getPortalConfig(serverUrl);
178
185
  return portal?.api_path || "/api/3/action";
@@ -1016,6 +1023,28 @@ Typical workflow: ckan_package_search \u2192 ckan_package_show (get full metadat
1016
1023
  content: [{ type: "text", text: truncateText(JSON.stringify(result, null, 2)) }]
1017
1024
  };
1018
1025
  }
1026
+ let hvdNote = "";
1027
+ const isSynthesisQuery = (params.q === "*:*" || params.q === void 0) && (effectiveRows === 0 || params.facet_field && params.facet_field.some(
1028
+ (f) => ["organization", "tags", "groups", "res_format"].includes(f)
1029
+ ));
1030
+ if (isSynthesisQuery) {
1031
+ const hvdConfig = getPortalHvdConfig(params.server_url);
1032
+ if (hvdConfig) {
1033
+ try {
1034
+ const hvdResult = await makeCkanRequest(
1035
+ params.server_url,
1036
+ "package_search",
1037
+ { q: `${hvdConfig.category_field}:*`, rows: 0 }
1038
+ );
1039
+ if (hvdResult.count > 0) {
1040
+ hvdNote = `> **High Value Datasets (HVD)**: This portal contains **${hvdResult.count} datasets** classified as High Value Datasets under EU Regulation 2023/138.
1041
+
1042
+ `;
1043
+ }
1044
+ } catch {
1045
+ }
1046
+ }
1047
+ }
1019
1048
  let markdown = `# CKAN Package Search Results
1020
1049
 
1021
1050
  **Server**: ${params.server_url}
@@ -1031,7 +1060,7 @@ ${params.fq ? `**Filter**: ${params.fq}
1031
1060
  **Total Results**: ${result.count}
1032
1061
  **Showing**: ${result.results.length} results (from ${effectiveStart})
1033
1062
 
1034
- `;
1063
+ ${hvdNote}`;
1035
1064
  if (result.facets && Object.keys(result.facets).length > 0) {
1036
1065
  markdown += `## Facets
1037
1066