@aborruso/ckan-mcp-server 0.4.86 → 0.4.88

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,19 @@
1
1
  # LOG
2
2
 
3
+ ## 2026-03-19
4
+
5
+ ### v0.4.88
6
+
7
+ - fix(`tools/organization.ts`): `ckan_organization_search` now shows `view_url` in markdown table and JSON output; `ckan_organization_show` JSON includes `view_url` — all using `portals.json` custom patterns
8
+
9
+
10
+
11
+ - evals(`evals/tool-selection`): tool selection eval pipeline — synthetic NL query generation (Gemini, 1583 records), train/eval split, fine-tuning Qwen2.5-0.5B with Unsloth on Colab T4; 86.3% accuracy on 8 tools; model published at huggingface.co/aborruso/ckan-tool-selector
12
+
13
+ ## 2026-03-17
14
+
15
+ - fix(`tools/sparql.ts`): add `; charset=utf-8` to POST Content-Type — fixes accented chars corruption in SPARQL queries (issue #22)
16
+
3
17
  ## 2026-03-16
4
18
 
5
19
  - docs(`tools/datastore.ts`): add security note to `ckan_datastore_search_sql` — clarifies SQL forwarding boundary; bump v0.4.86
package/dist/index.js CHANGED
@@ -1919,7 +1919,7 @@ function compactOrganizationList(result) {
1919
1919
  })
1920
1920
  };
1921
1921
  }
1922
- function compactOrganizationShow(result) {
1922
+ function compactOrganizationShow(result, serverUrl) {
1923
1923
  return {
1924
1924
  id: result.id,
1925
1925
  name: result.name,
@@ -1928,6 +1928,7 @@ function compactOrganizationShow(result) {
1928
1928
  image_url: result.image_url || null,
1929
1929
  package_count: result.package_count ?? 0,
1930
1930
  created: result.created || null,
1931
+ view_url: getOrganizationViewUrl(serverUrl, result),
1931
1932
  packages: (result.packages || []).map((pkg) => ({
1932
1933
  id: pkg.id,
1933
1934
  name: pkg.name,
@@ -2174,7 +2175,7 @@ Typical workflow: ckan_organization_show \u2192 ckan_package_show (inspect a dat
2174
2175
  }
2175
2176
  );
2176
2177
  if (params.response_format === "json" /* JSON */) {
2177
- const compact = compactOrganizationShow(result);
2178
+ const compact = compactOrganizationShow(result, params.server_url);
2178
2179
  return {
2179
2180
  content: [{ type: "text", text: truncateJson(compact) }],
2180
2181
  structuredContent: compact
@@ -2251,7 +2252,8 @@ Typical workflow: ckan_organization_search \u2192 ckan_organization_show (get de
2251
2252
  organizations: orgFacets.map((item) => ({
2252
2253
  name: item.name,
2253
2254
  display_name: item.display_name,
2254
- dataset_count: item.count
2255
+ dataset_count: item.count,
2256
+ view_url: getOrganizationViewUrl(params.server_url, { name: item.name })
2255
2257
  }))
2256
2258
  };
2257
2259
  return {
@@ -2281,12 +2283,13 @@ Typical workflow: ckan_organization_search \u2192 ckan_organization_show (get de
2281
2283
  markdown += `## Matching Organizations
2282
2284
 
2283
2285
  `;
2284
- markdown += `| Organization | Datasets |
2286
+ markdown += `| Organization | Datasets | Link |
2285
2287
  `;
2286
- markdown += `|--------------|----------|
2288
+ markdown += `|--------------|----------|------|
2287
2289
  `;
2288
2290
  for (const org of orgFacets) {
2289
- markdown += `| ${org.display_name || org.name} | ${org.count} |
2291
+ const viewUrl = getOrganizationViewUrl(params.server_url, { name: org.name });
2292
+ markdown += `| ${org.display_name || org.name} | ${org.count} | ${viewUrl} |
2290
2293
  `;
2291
2294
  }
2292
2295
  }
@@ -4246,7 +4249,7 @@ async function querySparqlEndpoint(endpointUrl, query) {
4246
4249
  response = await fetch(endpointUrl, {
4247
4250
  method: "POST",
4248
4251
  signal: controller.signal,
4249
- headers: { ...commonHeaders, "Content-Type": "application/sparql-query" },
4252
+ headers: { ...commonHeaders, "Content-Type": "application/sparql-query; charset=utf-8" },
4250
4253
  body: query
4251
4254
  });
4252
4255
  if (response.status === 403 || response.status === 405) {
@@ -5124,7 +5127,7 @@ var registerAllPrompts = (server2) => {
5124
5127
  function createServer() {
5125
5128
  return new McpServer({
5126
5129
  name: "ckan-mcp-server",
5127
- version: "0.4.86"
5130
+ version: "0.4.88"
5128
5131
  });
5129
5132
  }
5130
5133
  function registerAll(server2) {