@ignfab/geocontext 0.9.6 → 0.9.7
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/README.md +334 -257
- package/dist/gpf/adminexpress.d.ts +17 -8
- package/dist/gpf/adminexpress.js +40 -17
- package/dist/gpf/adminexpress.js.map +1 -1
- package/dist/gpf/altitude.d.ts +21 -9
- package/dist/gpf/altitude.js +5 -5
- package/dist/gpf/altitude.js.map +1 -1
- package/dist/gpf/geocode.d.ts +25 -4
- package/dist/gpf/geocode.js +5 -5
- package/dist/gpf/geocode.js.map +1 -1
- package/dist/gpf/parcellaire-express.d.ts +19 -9
- package/dist/gpf/parcellaire-express.js +59 -26
- package/dist/gpf/parcellaire-express.js.map +1 -1
- package/dist/gpf/urbanisme.d.ts +24 -16
- package/dist/gpf/urbanisme.js +81 -33
- package/dist/gpf/urbanisme.js.map +1 -1
- package/dist/gpf/{wfs.js → wfs-schema-catalog.js} +1 -1
- package/dist/gpf/wfs-schema-catalog.js.map +1 -0
- package/dist/helpers/RateLimiter.d.ts +44 -0
- package/dist/helpers/RateLimiter.js +52 -0
- package/dist/helpers/RateLimiter.js.map +1 -0
- package/dist/helpers/distance.d.ts +2 -1
- package/dist/helpers/distance.js +2 -1
- package/dist/helpers/distance.js.map +1 -1
- package/dist/helpers/errors/toolError.d.ts +30 -0
- package/dist/helpers/errors/toolError.js +193 -0
- package/dist/helpers/errors/toolError.js.map +1 -0
- package/dist/helpers/errors/zodErrorMapFr.d.ts +20 -0
- package/dist/helpers/errors/zodErrorMapFr.js +191 -0
- package/dist/helpers/errors/zodErrorMapFr.js.map +1 -0
- package/dist/helpers/http.d.ts +67 -7
- package/dist/helpers/http.js +458 -84
- package/dist/helpers/http.js.map +1 -1
- package/dist/helpers/jsonSchema.d.ts +16 -4
- package/dist/helpers/jsonSchema.js +7 -1
- package/dist/helpers/jsonSchema.js.map +1 -1
- package/dist/helpers/schemas.d.ts +4 -4
- package/dist/helpers/wfs_engine/attributeFilter.d.ts +51 -0
- package/dist/helpers/wfs_engine/attributeFilter.js +258 -0
- package/dist/helpers/wfs_engine/attributeFilter.js.map +1 -0
- package/dist/helpers/wfs_engine/byId.d.ts +76 -0
- package/dist/helpers/wfs_engine/byId.js +106 -0
- package/dist/helpers/wfs_engine/byId.js.map +1 -0
- package/dist/helpers/wfs_engine/execution.d.ts +72 -0
- package/dist/helpers/wfs_engine/execution.js +95 -0
- package/dist/helpers/wfs_engine/execution.js.map +1 -0
- package/dist/helpers/wfs_engine/features.d.ts +64 -0
- package/dist/helpers/wfs_engine/features.js +138 -0
- package/dist/helpers/wfs_engine/features.js.map +1 -0
- package/dist/helpers/wfs_engine/geometry.d.ts +16 -0
- package/dist/helpers/wfs_engine/geometry.js +44 -0
- package/dist/helpers/wfs_engine/geometry.js.map +1 -0
- package/dist/helpers/wfs_engine/properties.d.ts +51 -0
- package/dist/helpers/wfs_engine/properties.js +128 -0
- package/dist/helpers/wfs_engine/properties.js.map +1 -0
- package/dist/helpers/wfs_engine/queryPreparation.d.ts +32 -0
- package/dist/helpers/wfs_engine/queryPreparation.js +149 -0
- package/dist/helpers/wfs_engine/queryPreparation.js.map +1 -0
- package/dist/helpers/{wfs_internal → wfs_engine}/request.d.ts +49 -2
- package/dist/helpers/{wfs_internal → wfs_engine}/request.js +77 -1
- package/dist/helpers/wfs_engine/request.js.map +1 -0
- package/dist/helpers/wfs_engine/response.d.ts +80 -0
- package/dist/helpers/wfs_engine/response.js +135 -0
- package/dist/helpers/wfs_engine/response.js.map +1 -0
- package/dist/helpers/wfs_engine/schema.d.ts +209 -0
- package/dist/helpers/{wfs_internal → wfs_engine}/schema.js +50 -10
- package/dist/helpers/wfs_engine/schema.js.map +1 -0
- package/dist/helpers/wfs_engine/spatialCql.d.ts +46 -0
- package/dist/helpers/wfs_engine/spatialCql.js +54 -0
- package/dist/helpers/wfs_engine/spatialCql.js.map +1 -0
- package/dist/helpers/wfs_engine/spatialFilter.d.ts +14 -0
- package/dist/helpers/wfs_engine/spatialFilter.js +131 -0
- package/dist/helpers/wfs_engine/spatialFilter.js.map +1 -0
- package/dist/index.js +65 -23
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.js +4 -1
- package/dist/logger.js.map +1 -1
- package/dist/tools/AdminexpressTool.d.ts +42 -33
- package/dist/tools/AdminexpressTool.js +17 -2
- package/dist/tools/AdminexpressTool.js.map +1 -1
- package/dist/tools/AltitudeTool.d.ts +35 -44
- package/dist/tools/AltitudeTool.js +19 -8
- package/dist/tools/AltitudeTool.js.map +1 -1
- package/dist/tools/AssietteSupTool.d.ts +51 -34
- package/dist/tools/AssietteSupTool.js +17 -2
- package/dist/tools/AssietteSupTool.js.map +1 -1
- package/dist/tools/BaseTool.d.ts +17 -0
- package/dist/tools/BaseTool.js +41 -0
- package/dist/tools/BaseTool.js.map +1 -0
- package/dist/tools/CadastreTool.d.ts +53 -33
- package/dist/tools/CadastreTool.js +17 -2
- package/dist/tools/CadastreTool.js.map +1 -1
- package/dist/tools/GeocodeTool.d.ts +53 -37
- package/dist/tools/GeocodeTool.js +17 -2
- package/dist/tools/GeocodeTool.js.map +1 -1
- package/dist/tools/GpfWfsDescribeTypeTool.d.ts +66 -94
- package/dist/tools/GpfWfsDescribeTypeTool.js +25 -14
- package/dist/tools/GpfWfsDescribeTypeTool.js.map +1 -1
- package/dist/tools/GpfWfsGetFeatureByIdTool.d.ts +52 -73
- package/dist/tools/GpfWfsGetFeatureByIdTool.js +50 -107
- package/dist/tools/GpfWfsGetFeatureByIdTool.js.map +1 -1
- package/dist/tools/GpfWfsGetFeaturesTool.d.ts +89 -114
- package/dist/tools/GpfWfsGetFeaturesTool.js +29 -120
- package/dist/tools/GpfWfsGetFeaturesTool.js.map +1 -1
- package/dist/tools/GpfWfsSearchTypesTool.d.ts +41 -32
- package/dist/tools/GpfWfsSearchTypesTool.js +18 -3
- package/dist/tools/GpfWfsSearchTypesTool.js.map +1 -1
- package/dist/tools/UrbanismeTool.d.ts +42 -33
- package/dist/tools/UrbanismeTool.js +17 -2
- package/dist/tools/UrbanismeTool.js.map +1 -1
- package/package.json +51 -24
- package/dist/gpf/wfs.js.map +0 -1
- package/dist/helpers/wfs.d.ts +0 -27
- package/dist/helpers/wfs.js +0 -55
- package/dist/helpers/wfs.js.map +0 -1
- package/dist/helpers/wfs_internal/compile.d.ts +0 -55
- package/dist/helpers/wfs_internal/compile.js +0 -596
- package/dist/helpers/wfs_internal/compile.js.map +0 -1
- package/dist/helpers/wfs_internal/request.js.map +0 -1
- package/dist/helpers/wfs_internal/response.d.ts +0 -29
- package/dist/helpers/wfs_internal/response.js +0 -59
- package/dist/helpers/wfs_internal/response.js.map +0 -1
- package/dist/helpers/wfs_internal/schema.d.ts +0 -167
- package/dist/helpers/wfs_internal/schema.js.map +0 -1
- /package/dist/gpf/{wfs.d.ts → wfs-schema-catalog.d.ts} +0 -0
package/dist/index.js
CHANGED
|
@@ -3,24 +3,15 @@ import { MCPServer } from "mcp-framework";
|
|
|
3
3
|
import { dirname, join } from "path";
|
|
4
4
|
import { fileURLToPath } from "url";
|
|
5
5
|
import { readFileSync } from "fs";
|
|
6
|
+
import logger from "./logger.js";
|
|
6
7
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const TRANSPORTS = {
|
|
8
|
-
stdio: {
|
|
9
|
-
type: "stdio",
|
|
10
|
-
},
|
|
11
|
-
http: {
|
|
12
|
-
type: "http-stream",
|
|
13
|
-
options: {
|
|
14
|
-
port: 3000,
|
|
15
|
-
cors: {
|
|
16
|
-
allowOrigin: "*",
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
8
|
function isTransportType(value) {
|
|
22
|
-
return
|
|
9
|
+
return value === "stdio" || value === "http";
|
|
23
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Get the transport type from the environment variable TRANSPORT_TYPE.
|
|
13
|
+
* Valid values are "stdio" and "http". If not set, defaults to "stdio".
|
|
14
|
+
*/
|
|
24
15
|
function getTransportType() {
|
|
25
16
|
const transportType = process.env.TRANSPORT_TYPE ?? "stdio";
|
|
26
17
|
if (!isTransportType(transportType)) {
|
|
@@ -28,22 +19,73 @@ function getTransportType() {
|
|
|
28
19
|
}
|
|
29
20
|
return transportType;
|
|
30
21
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Get the HTTP port from the environment variable HTTP_PORT.
|
|
24
|
+
* The variable should be a decimal integer between 1 and 65535. If not set, defaults to 3000.
|
|
25
|
+
*/
|
|
26
|
+
function getHttpPort() {
|
|
27
|
+
const rawPort = process.env.HTTP_PORT?.trim();
|
|
28
|
+
const invalidHttpPortMessage = `Invalid HTTP_PORT: ${rawPort}. Expected a decimal integer between 1 and 65535.`;
|
|
29
|
+
if (!rawPort) {
|
|
30
|
+
return 3000;
|
|
31
|
+
}
|
|
32
|
+
if (!/^\d+$/.test(rawPort)) {
|
|
33
|
+
throw new Error(invalidHttpPortMessage);
|
|
34
|
+
}
|
|
35
|
+
const port = Number(rawPort);
|
|
36
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
37
|
+
throw new Error(invalidHttpPortMessage);
|
|
34
38
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
return port;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get CORS allowed origins from the environment variable HTTP_CORS_ALLOWED_ORIGINS.
|
|
43
|
+
* The variable should be a comma-separated list of origins .
|
|
44
|
+
*/
|
|
45
|
+
function getCorsAllowedOrigins() {
|
|
46
|
+
if (process.env.HTTP_CORS_ALLOWED_ORIGINS === undefined) {
|
|
47
|
+
logger.warn('Security : HTTP_CORS_ALLOWED_ORIGINS is not set. It is recommended to set this variable to prevent DNS rebinding attacks (e.g., HTTP_CORS_ALLOWED_ORIGINS="http://localhost:3000,https://geollm.beta.ign.fr".');
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
const rawOrigins = process.env.HTTP_CORS_ALLOWED_ORIGINS?.trim();
|
|
51
|
+
const allowedOrigins = rawOrigins
|
|
52
|
+
?.split(",")
|
|
53
|
+
.map((origin) => origin.trim())
|
|
54
|
+
.filter(Boolean);
|
|
55
|
+
if (!allowedOrigins || allowedOrigins.length === 0) {
|
|
56
|
+
logger.warn('Security : HTTP_CORS_ALLOWED_ORIGINS is empty. It is recommended to set this variable to prevent DNS rebinding attacks (e.g., HTTP_CORS_ALLOWED_ORIGINS="http://localhost:3000,https://geollm.beta.ign.fr".');
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
return allowedOrigins;
|
|
60
|
+
}
|
|
61
|
+
function buildTransport(transportType) {
|
|
62
|
+
// Handle stdio transport configuration
|
|
63
|
+
if (transportType === "stdio") {
|
|
64
|
+
return {
|
|
65
|
+
type: "stdio",
|
|
66
|
+
};
|
|
38
67
|
}
|
|
68
|
+
// Handle HTTP transport configuration
|
|
69
|
+
const host = process.env.HTTP_HOST?.trim() || '127.0.0.1';
|
|
70
|
+
const endpoint = process.env.HTTP_MCP_ENDPOINT?.trim() || '/mcp';
|
|
71
|
+
const port = getHttpPort();
|
|
39
72
|
return {
|
|
40
|
-
|
|
73
|
+
type: "http-stream",
|
|
41
74
|
options: {
|
|
42
|
-
|
|
75
|
+
port: port,
|
|
76
|
+
endpoint,
|
|
77
|
+
responseMode: "stream",
|
|
78
|
+
cors: {
|
|
79
|
+
allowOrigin: "*",
|
|
80
|
+
allowedOrigins: getCorsAllowedOrigins(),
|
|
81
|
+
},
|
|
43
82
|
host,
|
|
44
83
|
},
|
|
45
84
|
};
|
|
46
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Get the version from package.json for the MCP server metadata.
|
|
88
|
+
*/
|
|
47
89
|
function getVersion() {
|
|
48
90
|
const pkgMetadata = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8"));
|
|
49
91
|
if (!pkgMetadata?.version || typeof pkgMetadata.version !== "string") {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
CHANGED
package/dist/logger.js
CHANGED
|
@@ -4,8 +4,11 @@ const formats = {
|
|
|
4
4
|
json: format.json(),
|
|
5
5
|
simple: format.simple()
|
|
6
6
|
};
|
|
7
|
+
function isLogFormat(value) {
|
|
8
|
+
return Object.keys(formats).includes(value);
|
|
9
|
+
}
|
|
7
10
|
const LOG_FORMAT = process.env.LOG_FORMAT ? process.env.LOG_FORMAT : 'simple';
|
|
8
|
-
if (!
|
|
11
|
+
if (!isLogFormat(LOG_FORMAT)) {
|
|
9
12
|
throw new Error(`LOG_FORMAT=${LOG_FORMAT} not found!`);
|
|
10
13
|
}
|
|
11
14
|
const logger = createLogger({
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAE1E,MAAM,OAAO,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;CAC1B,CAAC;AAIF,SAAS,WAAW,CAAC,KAAa;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AAE9E,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;IAC3B,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC;IACxB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC;QACzC;;;WAGG;QACH,IAAI,UAAU,CAAC,OAAO,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;SAC/C,CAAC;KACL,CAAC,CAAC,CAAC;QACA,IAAI,UAAU,CAAC,IAAI,CAAC;YAChB,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,OAAO;SACjB,CAAC;KACL;CACJ,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool exposing administrative units that cover a given point.
|
|
3
|
+
*/
|
|
4
|
+
import BaseTool from "./BaseTool.js";
|
|
2
5
|
import { z } from "zod";
|
|
3
6
|
declare const adminexpressInputSchema: z.ZodObject<{
|
|
4
7
|
lon: z.ZodNumber;
|
|
5
8
|
lat: z.ZodNumber;
|
|
6
9
|
}, "strict", z.ZodTypeAny, {
|
|
7
|
-
lon
|
|
8
|
-
lat
|
|
10
|
+
lon: number;
|
|
11
|
+
lat: number;
|
|
9
12
|
}, {
|
|
10
|
-
lon
|
|
11
|
-
lat
|
|
13
|
+
lon: number;
|
|
14
|
+
lat: number;
|
|
12
15
|
}>;
|
|
13
16
|
type AdminexpressInput = z.infer<typeof adminexpressInputSchema>;
|
|
14
|
-
declare class AdminexpressTool extends
|
|
17
|
+
declare class AdminexpressTool extends BaseTool<AdminexpressInput> {
|
|
15
18
|
name: string;
|
|
16
19
|
title: string;
|
|
17
20
|
annotations: {
|
|
@@ -30,11 +33,11 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
|
|
|
30
33
|
typename: z.ZodString;
|
|
31
34
|
feature_id: z.ZodString;
|
|
32
35
|
}, "strip", z.ZodTypeAny, {
|
|
33
|
-
typename
|
|
34
|
-
feature_id
|
|
36
|
+
typename: string;
|
|
37
|
+
feature_id: string;
|
|
35
38
|
}, {
|
|
36
|
-
typename
|
|
37
|
-
feature_id
|
|
39
|
+
typename: string;
|
|
40
|
+
feature_id: string;
|
|
38
41
|
}>;
|
|
39
42
|
}, "strip", z.ZodUnknown, z.objectOutputType<{
|
|
40
43
|
type: z.ZodString;
|
|
@@ -44,11 +47,11 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
|
|
|
44
47
|
typename: z.ZodString;
|
|
45
48
|
feature_id: z.ZodString;
|
|
46
49
|
}, "strip", z.ZodTypeAny, {
|
|
47
|
-
typename
|
|
48
|
-
feature_id
|
|
50
|
+
typename: string;
|
|
51
|
+
feature_id: string;
|
|
49
52
|
}, {
|
|
50
|
-
typename
|
|
51
|
-
feature_id
|
|
53
|
+
typename: string;
|
|
54
|
+
feature_id: string;
|
|
52
55
|
}>;
|
|
53
56
|
}, z.ZodUnknown, "strip">, z.objectInputType<{
|
|
54
57
|
type: z.ZodString;
|
|
@@ -58,15 +61,15 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
|
|
|
58
61
|
typename: z.ZodString;
|
|
59
62
|
feature_id: z.ZodString;
|
|
60
63
|
}, "strip", z.ZodTypeAny, {
|
|
61
|
-
typename
|
|
62
|
-
feature_id
|
|
64
|
+
typename: string;
|
|
65
|
+
feature_id: string;
|
|
63
66
|
}, {
|
|
64
|
-
typename
|
|
65
|
-
feature_id
|
|
67
|
+
typename: string;
|
|
68
|
+
feature_id: string;
|
|
66
69
|
}>;
|
|
67
70
|
}, z.ZodUnknown, "strip">>, "many">;
|
|
68
71
|
}, "strip", z.ZodTypeAny, {
|
|
69
|
-
results
|
|
72
|
+
results: z.objectOutputType<{
|
|
70
73
|
type: z.ZodString;
|
|
71
74
|
id: z.ZodString;
|
|
72
75
|
bbox: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
|
|
@@ -74,15 +77,15 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
|
|
|
74
77
|
typename: z.ZodString;
|
|
75
78
|
feature_id: z.ZodString;
|
|
76
79
|
}, "strip", z.ZodTypeAny, {
|
|
77
|
-
typename
|
|
78
|
-
feature_id
|
|
80
|
+
typename: string;
|
|
81
|
+
feature_id: string;
|
|
79
82
|
}, {
|
|
80
|
-
typename
|
|
81
|
-
feature_id
|
|
83
|
+
typename: string;
|
|
84
|
+
feature_id: string;
|
|
82
85
|
}>;
|
|
83
86
|
}, z.ZodUnknown, "strip">[];
|
|
84
87
|
}, {
|
|
85
|
-
results
|
|
88
|
+
results: z.objectInputType<{
|
|
86
89
|
type: z.ZodString;
|
|
87
90
|
id: z.ZodString;
|
|
88
91
|
bbox: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
|
|
@@ -90,11 +93,11 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
|
|
|
90
93
|
typename: z.ZodString;
|
|
91
94
|
feature_id: z.ZodString;
|
|
92
95
|
}, "strip", z.ZodTypeAny, {
|
|
93
|
-
typename
|
|
94
|
-
feature_id
|
|
96
|
+
typename: string;
|
|
97
|
+
feature_id: string;
|
|
95
98
|
}, {
|
|
96
|
-
typename
|
|
97
|
-
feature_id
|
|
99
|
+
typename: string;
|
|
100
|
+
feature_id: string;
|
|
98
101
|
}>;
|
|
99
102
|
}, z.ZodUnknown, "strip">[];
|
|
100
103
|
}>;
|
|
@@ -102,14 +105,20 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
|
|
|
102
105
|
lon: z.ZodNumber;
|
|
103
106
|
lat: z.ZodNumber;
|
|
104
107
|
}, "strict", z.ZodTypeAny, {
|
|
105
|
-
lon
|
|
106
|
-
lat
|
|
108
|
+
lon: number;
|
|
109
|
+
lat: number;
|
|
107
110
|
}, {
|
|
108
|
-
lon
|
|
109
|
-
lat
|
|
111
|
+
lon: number;
|
|
112
|
+
lat: number;
|
|
110
113
|
}>;
|
|
114
|
+
/**
|
|
115
|
+
* Looks up the administrative units covering the requested point.
|
|
116
|
+
*
|
|
117
|
+
* @param input Normalized tool input.
|
|
118
|
+
* @returns The matching administrative units enriched with reusable `feature_ref` metadata.
|
|
119
|
+
*/
|
|
111
120
|
execute(input: AdminexpressInput): Promise<{
|
|
112
|
-
results:
|
|
121
|
+
results: import("../helpers/wfs_engine/response.js").FlatItem[];
|
|
113
122
|
}>;
|
|
114
123
|
}
|
|
115
124
|
export default AdminexpressTool;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool exposing administrative units that cover a given point.
|
|
3
|
+
*/
|
|
4
|
+
import BaseTool from "./BaseTool.js";
|
|
2
5
|
import { z } from "zod";
|
|
3
6
|
import { getAdminUnits, ADMINEXPRESS_TYPES, ADMINEXPRESS_SOURCE } from "../gpf/adminexpress.js";
|
|
4
7
|
import { READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS } from "../helpers/toolAnnotations.js";
|
|
5
8
|
import { featureRefSchema, lonSchema, latSchema } from "../helpers/schemas.js";
|
|
9
|
+
import logger from "../logger.js";
|
|
10
|
+
// --- Schema ---
|
|
6
11
|
const adminexpressInputSchema = z.object({
|
|
7
12
|
lon: lonSchema,
|
|
8
13
|
lat: latSchema,
|
|
@@ -18,7 +23,8 @@ const adminexpressResultSchema = z
|
|
|
18
23
|
const adminexpressOutputSchema = z.object({
|
|
19
24
|
results: z.array(adminexpressResultSchema).describe("La liste des unités administratives couvrant le point demandé."),
|
|
20
25
|
});
|
|
21
|
-
|
|
26
|
+
// --- Tool ---
|
|
27
|
+
class AdminexpressTool extends BaseTool {
|
|
22
28
|
name = "adminexpress";
|
|
23
29
|
title = "Unités administratives";
|
|
24
30
|
annotations = READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS;
|
|
@@ -31,7 +37,16 @@ class AdminexpressTool extends MCPTool {
|
|
|
31
37
|
].join("\n");
|
|
32
38
|
outputSchemaShape = adminexpressOutputSchema;
|
|
33
39
|
schema = adminexpressInputSchema;
|
|
40
|
+
/**
|
|
41
|
+
* Looks up the administrative units covering the requested point.
|
|
42
|
+
*
|
|
43
|
+
* @param input Normalized tool input.
|
|
44
|
+
* @returns The matching administrative units enriched with reusable `feature_ref` metadata.
|
|
45
|
+
*/
|
|
34
46
|
async execute(input) {
|
|
47
|
+
logger.info(`[tool] execute ${this.name} ...`, {
|
|
48
|
+
input: input
|
|
49
|
+
});
|
|
35
50
|
return {
|
|
36
51
|
results: await getAdminUnits(input.lon, input.lat),
|
|
37
52
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminexpressTool.js","sourceRoot":"","sources":["../../src/tools/AdminexpressTool.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AdminexpressTool.js","sourceRoot":"","sources":["../../src/tools/AdminexpressTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,iBAAiB;AAEjB,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAMZ,MAAM,wBAAwB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/F,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACnE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAC,QAAQ,EAAE;IAC/F,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mHAAmH,CAAC;CAC5J,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEzB,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,gEAAgE,CAAC;CACtH,CAAC,CAAC;AAEH,eAAe;AAEf,MAAM,gBAAiB,SAAQ,QAA2B;IACxD,IAAI,GAAG,cAAc,CAAC;IACtB,KAAK,GAAG,wBAAwB,CAAC;IACjC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG;QACZ,8GAA8G,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,0FAA0F;QACrO,4GAA4G;QAC5G,6MAA6M;QAC7M,yGAAyG;QACzG,aAAa,mBAAmB,IAAI;KACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACH,iBAAiB,GAAG,wBAAwB,CAAC;IAEvD,MAAM,GAAG,uBAAuB,CAAC;IAEjC;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,KAAwB;QACpC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,MAAM,EAAE;YAC7C,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;SACnD,CAAC;IACJ,CAAC;CACF;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool exposing altitude lookup for a single geographic position.
|
|
3
|
+
*/
|
|
4
|
+
import BaseTool from "./BaseTool.js";
|
|
2
5
|
import { z } from "zod";
|
|
3
6
|
declare const altitudeInputSchema: z.ZodObject<{
|
|
4
7
|
lon: z.ZodNumber;
|
|
5
8
|
lat: z.ZodNumber;
|
|
6
9
|
}, "strict", z.ZodTypeAny, {
|
|
7
|
-
lon
|
|
8
|
-
lat
|
|
10
|
+
lon: number;
|
|
11
|
+
lat: number;
|
|
9
12
|
}, {
|
|
10
|
-
lon
|
|
11
|
-
lat
|
|
13
|
+
lon: number;
|
|
14
|
+
lat: number;
|
|
12
15
|
}>;
|
|
13
16
|
type AltitudeInput = z.infer<typeof altitudeInputSchema>;
|
|
14
|
-
declare class AltitudeTool extends
|
|
17
|
+
declare class AltitudeTool extends BaseTool<AltitudeInput> {
|
|
15
18
|
name: string;
|
|
16
19
|
title: string;
|
|
17
20
|
annotations: {
|
|
@@ -22,54 +25,42 @@ declare class AltitudeTool extends MCPTool<AltitudeInput> {
|
|
|
22
25
|
};
|
|
23
26
|
description: string;
|
|
24
27
|
protected outputSchemaShape: z.ZodObject<{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
accuracy: z.ZodString;
|
|
30
|
-
}, "strip", z.ZodTypeAny, {
|
|
31
|
-
lon?: number;
|
|
32
|
-
lat?: number;
|
|
33
|
-
altitude?: number;
|
|
34
|
-
accuracy?: string;
|
|
35
|
-
}, {
|
|
36
|
-
lon?: number;
|
|
37
|
-
lat?: number;
|
|
38
|
-
altitude?: number;
|
|
39
|
-
accuracy?: string;
|
|
40
|
-
}>;
|
|
28
|
+
lon: z.ZodNumber;
|
|
29
|
+
lat: z.ZodNumber;
|
|
30
|
+
altitude: z.ZodNumber;
|
|
31
|
+
accuracy: z.ZodString;
|
|
41
32
|
}, "strip", z.ZodTypeAny, {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
accuracy?: string;
|
|
47
|
-
};
|
|
33
|
+
lon: number;
|
|
34
|
+
lat: number;
|
|
35
|
+
altitude: number;
|
|
36
|
+
accuracy: string;
|
|
48
37
|
}, {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
accuracy?: string;
|
|
54
|
-
};
|
|
38
|
+
lon: number;
|
|
39
|
+
lat: number;
|
|
40
|
+
altitude: number;
|
|
41
|
+
accuracy: string;
|
|
55
42
|
}>;
|
|
56
43
|
schema: z.ZodObject<{
|
|
57
44
|
lon: z.ZodNumber;
|
|
58
45
|
lat: z.ZodNumber;
|
|
59
46
|
}, "strict", z.ZodTypeAny, {
|
|
60
|
-
lon
|
|
61
|
-
lat
|
|
47
|
+
lon: number;
|
|
48
|
+
lat: number;
|
|
62
49
|
}, {
|
|
63
|
-
lon
|
|
64
|
-
lat
|
|
50
|
+
lon: number;
|
|
51
|
+
lat: number;
|
|
65
52
|
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Resolves the altitude information for the requested position.
|
|
55
|
+
*
|
|
56
|
+
* @param input Normalized tool input.
|
|
57
|
+
* @returns The altitude payload returned by the upstream service.
|
|
58
|
+
*/
|
|
66
59
|
execute(input: AltitudeInput): Promise<{
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
accuracy: any;
|
|
72
|
-
};
|
|
60
|
+
lon: number;
|
|
61
|
+
lat: number;
|
|
62
|
+
altitude: number;
|
|
63
|
+
accuracy: string;
|
|
73
64
|
}>;
|
|
74
65
|
}
|
|
75
66
|
export default AltitudeTool;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool exposing altitude lookup for a single geographic position.
|
|
3
|
+
*/
|
|
4
|
+
import BaseTool from "./BaseTool.js";
|
|
2
5
|
import { z } from "zod";
|
|
3
6
|
import { ALTITUDE_SOURCE, getAltitudeByLocation } from "../gpf/altitude.js";
|
|
4
7
|
import { READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS } from "../helpers/toolAnnotations.js";
|
|
5
8
|
import { lonSchema, latSchema } from "../helpers/schemas.js";
|
|
9
|
+
import logger from "../logger.js";
|
|
10
|
+
// --- Schema ---
|
|
6
11
|
const altitudeInputSchema = z.object({
|
|
7
12
|
lon: lonSchema,
|
|
8
13
|
lat: latSchema,
|
|
@@ -13,20 +18,26 @@ const altitudeResultSchema = z.object({
|
|
|
13
18
|
altitude: z.number().describe("L'altitude du point."),
|
|
14
19
|
accuracy: z.string().describe("L'information de précision associée à l'altitude."),
|
|
15
20
|
});
|
|
16
|
-
const altitudeOutputSchema =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class AltitudeTool extends MCPTool {
|
|
21
|
+
const altitudeOutputSchema = altitudeResultSchema;
|
|
22
|
+
// --- Tool ---
|
|
23
|
+
class AltitudeTool extends BaseTool {
|
|
20
24
|
name = "altitude";
|
|
21
25
|
title = "Altitude d’une position";
|
|
22
26
|
annotations = READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS;
|
|
23
27
|
description = `Renvoie l'altitude (en mètres) et la précision de la mesure (accuracy) d'un point géographique à partir de sa longitude et de sa latitude. (source : ${ALTITUDE_SOURCE}).`;
|
|
24
28
|
outputSchemaShape = altitudeOutputSchema;
|
|
25
29
|
schema = altitudeInputSchema;
|
|
30
|
+
/**
|
|
31
|
+
* Resolves the altitude information for the requested position.
|
|
32
|
+
*
|
|
33
|
+
* @param input Normalized tool input.
|
|
34
|
+
* @returns The altitude payload returned by the upstream service.
|
|
35
|
+
*/
|
|
26
36
|
async execute(input) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
};
|
|
37
|
+
logger.info(`[tool] execute ${this.name} ...`, {
|
|
38
|
+
input: input
|
|
39
|
+
});
|
|
40
|
+
return await getAltitudeByLocation(input.lon, input.lat);
|
|
30
41
|
}
|
|
31
42
|
}
|
|
32
43
|
export default AltitudeTool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AltitudeTool.js","sourceRoot":"","sources":["../../src/tools/AltitudeTool.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AltitudeTool.js","sourceRoot":"","sources":["../../src/tools/AltitudeTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,iBAAiB;AAEjB,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAMZ,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACnF,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD,eAAe;AAEf,MAAM,YAAa,SAAQ,QAAuB;IAChD,IAAI,GAAG,UAAU,CAAC;IAClB,KAAK,GAAG,yBAAyB,CAAC;IAClC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG,wJAAwJ,eAAe,IAAI,CAAC;IAChL,iBAAiB,GAAG,oBAAoB,CAAC;IAEnD,MAAM,GAAG,mBAAmB,CAAC;IAE7B;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,MAAM,EAAE;YAC7C,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,OAAO,MAAM,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;CACF;AAED,eAAe,YAAY,CAAC"}
|