kaax-mcp 0.1.12 → 0.1.13
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/dist/analysis-files.js +47 -3
- package/dist/analysis-files.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/analysis-files.js
CHANGED
|
@@ -14,10 +14,51 @@ import AdmZip from "adm-zip";
|
|
|
14
14
|
import { writeFile } from "fs/promises";
|
|
15
15
|
import { join } from "path";
|
|
16
16
|
import { downloadFile, safeFileName } from "./platform.js";
|
|
17
|
+
/**
|
|
18
|
+
* Build a sensible local filename for the `shape` URL. The server can
|
|
19
|
+
* publish it with any extension (.zip, .shp, .gpkg, .geojson…), so we
|
|
20
|
+
* sniff the URL and default to .zip if we can't tell — that's the
|
|
21
|
+
* portable container most exports use.
|
|
22
|
+
*/
|
|
23
|
+
function shapefileFileName(url, analysisType) {
|
|
24
|
+
const path = (() => {
|
|
25
|
+
try {
|
|
26
|
+
return new URL(url).pathname.toLowerCase();
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return url.toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
})();
|
|
32
|
+
const m = path.match(/\.(zip|shp|gpkg|geojson|json|kml)(\?|$)/);
|
|
33
|
+
const ext = m?.[1] ?? "zip";
|
|
34
|
+
return `${analysisType ?? "analysis"}_shape.${ext}`;
|
|
35
|
+
}
|
|
17
36
|
/** Categorises every downloadable artefact attached to one analysis. */
|
|
18
37
|
export function listAvailableFiles(record) {
|
|
19
38
|
const out = [];
|
|
20
39
|
const recordAny = record;
|
|
40
|
+
// Geometry first — these are the artefacts every GIS tool downstream
|
|
41
|
+
// actually needs.
|
|
42
|
+
if (typeof recordAny.linekml === "string" &&
|
|
43
|
+
/^https?:\/\//i.test(recordAny.linekml)) {
|
|
44
|
+
out.push({
|
|
45
|
+
key: "geometry.linekml",
|
|
46
|
+
label: "Line geometry — KML (resiembra / despoblación / path lines)",
|
|
47
|
+
url: recordAny.linekml,
|
|
48
|
+
fileName: `${record.analysisType ?? "analysis"}_lines.kml`,
|
|
49
|
+
kind: "kml",
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (typeof recordAny.shape === "string" &&
|
|
53
|
+
/^https?:\/\//i.test(recordAny.shape)) {
|
|
54
|
+
out.push({
|
|
55
|
+
key: "geometry.shape",
|
|
56
|
+
label: "Shapefile (zipped) — polygons / lines / points depending on analysis type",
|
|
57
|
+
url: recordAny.shape,
|
|
58
|
+
fileName: shapefileFileName(recordAny.shape, record.analysisType),
|
|
59
|
+
kind: "shapefile",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
21
62
|
const reports = recordAny.reports ?? {};
|
|
22
63
|
// The full-bundle ZIPs (most useful — they contain SHP + KML + PDFs).
|
|
23
64
|
if (reports.resending?.allReports) {
|
|
@@ -152,10 +193,13 @@ export async function downloadAnalysisFiles(record, outputDir, keys) {
|
|
|
152
193
|
outputPath: dl.outputPath,
|
|
153
194
|
bytesWritten: dl.bytesWritten,
|
|
154
195
|
};
|
|
155
|
-
// Best-effort unzip for
|
|
156
|
-
|
|
196
|
+
// Best-effort unzip for any ZIP we just downloaded. We trigger this
|
|
197
|
+
// off the final extension (not `kind`) so a shapefile bundle that
|
|
198
|
+
// ships as `_shape.zip` still gets unpacked into the directory the
|
|
199
|
+
// user can hand to QGIS.
|
|
200
|
+
if (/\.zip$/i.test(dl.outputPath)) {
|
|
157
201
|
try {
|
|
158
|
-
const extractDir =
|
|
202
|
+
const extractDir = dl.outputPath.replace(/\.zip$/i, "_extracted");
|
|
159
203
|
const zip = new AdmZip(dl.outputPath);
|
|
160
204
|
zip.extractAllTo(extractDir, /* overwrite */ true);
|
|
161
205
|
const entries = zip
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-files.js","sourceRoot":"","sources":["../src/analysis-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAgB3D,wEAAwE;AACxE,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"analysis-files.js","sourceRoot":"","sources":["../src/analysis-files.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -30,7 +30,7 @@ import { buildResources } from "./resources.js";
|
|
|
30
30
|
import { buildPrompts } from "./prompts.js";
|
|
31
31
|
import { runInit } from "./init.js";
|
|
32
32
|
const SERVER_NAME = "kaax-mcp";
|
|
33
|
-
const SERVER_VERSION = "0.1.
|
|
33
|
+
const SERVER_VERSION = "0.1.13";
|
|
34
34
|
function bail(msg) {
|
|
35
35
|
// stderr only — MCP clients pipe stdout for protocol traffic.
|
|
36
36
|
process.stderr.write(`[${SERVER_NAME}] ${msg}\n`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kaax-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13",
|
|
4
4
|
"description": "MCP server for Kaax — one-liner installer (`npx -y kaax-mcp init`) that wires Kaax into Claude Desktop, Claude Code, Cursor and Windsurf. Onboards new users, queries analyses, suggests configurations, converts shapefiles to KML and guides downloads.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|