@ignfab/geocontext 0.9.5 → 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.
Files changed (128) hide show
  1. package/README.md +349 -259
  2. package/dist/gpf/adminexpress.d.ts +17 -8
  3. package/dist/gpf/adminexpress.js +40 -17
  4. package/dist/gpf/adminexpress.js.map +1 -1
  5. package/dist/gpf/altitude.d.ts +21 -9
  6. package/dist/gpf/altitude.js +5 -5
  7. package/dist/gpf/altitude.js.map +1 -1
  8. package/dist/gpf/geocode.d.ts +25 -4
  9. package/dist/gpf/geocode.js +5 -5
  10. package/dist/gpf/geocode.js.map +1 -1
  11. package/dist/gpf/parcellaire-express.d.ts +19 -9
  12. package/dist/gpf/parcellaire-express.js +59 -26
  13. package/dist/gpf/parcellaire-express.js.map +1 -1
  14. package/dist/gpf/urbanisme.d.ts +24 -16
  15. package/dist/gpf/urbanisme.js +81 -33
  16. package/dist/gpf/urbanisme.js.map +1 -1
  17. package/dist/gpf/{wfs.js → wfs-schema-catalog.js} +1 -1
  18. package/dist/gpf/wfs-schema-catalog.js.map +1 -0
  19. package/dist/helpers/RateLimiter.d.ts +44 -0
  20. package/dist/helpers/RateLimiter.js +52 -0
  21. package/dist/helpers/RateLimiter.js.map +1 -0
  22. package/dist/helpers/distance.d.ts +2 -1
  23. package/dist/helpers/distance.js +2 -1
  24. package/dist/helpers/distance.js.map +1 -1
  25. package/dist/helpers/errors/toolError.d.ts +30 -0
  26. package/dist/helpers/errors/toolError.js +193 -0
  27. package/dist/helpers/errors/toolError.js.map +1 -0
  28. package/dist/helpers/errors/zodErrorMapFr.d.ts +20 -0
  29. package/dist/helpers/errors/zodErrorMapFr.js +191 -0
  30. package/dist/helpers/errors/zodErrorMapFr.js.map +1 -0
  31. package/dist/helpers/http.d.ts +67 -7
  32. package/dist/helpers/http.js +458 -84
  33. package/dist/helpers/http.js.map +1 -1
  34. package/dist/helpers/jsonSchema.d.ts +20 -2
  35. package/dist/helpers/jsonSchema.js +12 -0
  36. package/dist/helpers/jsonSchema.js.map +1 -1
  37. package/dist/helpers/schemas.d.ts +4 -4
  38. package/dist/helpers/wfs_engine/attributeFilter.d.ts +51 -0
  39. package/dist/helpers/wfs_engine/attributeFilter.js +258 -0
  40. package/dist/helpers/wfs_engine/attributeFilter.js.map +1 -0
  41. package/dist/helpers/wfs_engine/byId.d.ts +76 -0
  42. package/dist/helpers/wfs_engine/byId.js +106 -0
  43. package/dist/helpers/wfs_engine/byId.js.map +1 -0
  44. package/dist/helpers/wfs_engine/execution.d.ts +72 -0
  45. package/dist/helpers/wfs_engine/execution.js +95 -0
  46. package/dist/helpers/wfs_engine/execution.js.map +1 -0
  47. package/dist/helpers/wfs_engine/features.d.ts +64 -0
  48. package/dist/helpers/wfs_engine/features.js +138 -0
  49. package/dist/helpers/wfs_engine/features.js.map +1 -0
  50. package/dist/helpers/wfs_engine/geometry.d.ts +16 -0
  51. package/dist/helpers/wfs_engine/geometry.js +44 -0
  52. package/dist/helpers/wfs_engine/geometry.js.map +1 -0
  53. package/dist/helpers/wfs_engine/properties.d.ts +51 -0
  54. package/dist/helpers/wfs_engine/properties.js +128 -0
  55. package/dist/helpers/wfs_engine/properties.js.map +1 -0
  56. package/dist/helpers/wfs_engine/queryPreparation.d.ts +32 -0
  57. package/dist/helpers/wfs_engine/queryPreparation.js +149 -0
  58. package/dist/helpers/wfs_engine/queryPreparation.js.map +1 -0
  59. package/dist/helpers/wfs_engine/request.d.ts +94 -0
  60. package/dist/helpers/wfs_engine/request.js +197 -0
  61. package/dist/helpers/wfs_engine/request.js.map +1 -0
  62. package/dist/helpers/wfs_engine/response.d.ts +80 -0
  63. package/dist/helpers/wfs_engine/response.js +135 -0
  64. package/dist/helpers/wfs_engine/response.js.map +1 -0
  65. package/dist/helpers/wfs_engine/schema.d.ts +209 -0
  66. package/dist/helpers/{wfs_internal → wfs_engine}/schema.js +50 -10
  67. package/dist/helpers/wfs_engine/schema.js.map +1 -0
  68. package/dist/helpers/wfs_engine/spatialCql.d.ts +46 -0
  69. package/dist/helpers/wfs_engine/spatialCql.js +54 -0
  70. package/dist/helpers/wfs_engine/spatialCql.js.map +1 -0
  71. package/dist/helpers/wfs_engine/spatialFilter.d.ts +14 -0
  72. package/dist/helpers/wfs_engine/spatialFilter.js +131 -0
  73. package/dist/helpers/wfs_engine/spatialFilter.js.map +1 -0
  74. package/dist/index.js +65 -23
  75. package/dist/index.js.map +1 -1
  76. package/dist/logger.d.ts +1 -1
  77. package/dist/logger.js +4 -1
  78. package/dist/logger.js.map +1 -1
  79. package/dist/tools/AdminexpressTool.d.ts +42 -33
  80. package/dist/tools/AdminexpressTool.js +19 -3
  81. package/dist/tools/AdminexpressTool.js.map +1 -1
  82. package/dist/tools/AltitudeTool.d.ts +35 -44
  83. package/dist/tools/AltitudeTool.js +19 -8
  84. package/dist/tools/AltitudeTool.js.map +1 -1
  85. package/dist/tools/AssietteSupTool.d.ts +51 -34
  86. package/dist/tools/AssietteSupTool.js +18 -2
  87. package/dist/tools/AssietteSupTool.js.map +1 -1
  88. package/dist/tools/BaseTool.d.ts +17 -0
  89. package/dist/tools/BaseTool.js +41 -0
  90. package/dist/tools/BaseTool.js.map +1 -0
  91. package/dist/tools/CadastreTool.d.ts +53 -33
  92. package/dist/tools/CadastreTool.js +18 -2
  93. package/dist/tools/CadastreTool.js.map +1 -1
  94. package/dist/tools/GeocodeTool.d.ts +53 -37
  95. package/dist/tools/GeocodeTool.js +17 -2
  96. package/dist/tools/GeocodeTool.js.map +1 -1
  97. package/dist/tools/GpfWfsDescribeTypeTool.d.ts +66 -94
  98. package/dist/tools/GpfWfsDescribeTypeTool.js +26 -15
  99. package/dist/tools/GpfWfsDescribeTypeTool.js.map +1 -1
  100. package/dist/tools/GpfWfsGetFeatureByIdTool.d.ts +89 -0
  101. package/dist/tools/GpfWfsGetFeatureByIdTool.js +99 -0
  102. package/dist/tools/GpfWfsGetFeatureByIdTool.js.map +1 -0
  103. package/dist/tools/GpfWfsGetFeaturesTool.d.ts +89 -123
  104. package/dist/tools/GpfWfsGetFeaturesTool.js +31 -144
  105. package/dist/tools/GpfWfsGetFeaturesTool.js.map +1 -1
  106. package/dist/tools/GpfWfsSearchTypesTool.d.ts +41 -32
  107. package/dist/tools/GpfWfsSearchTypesTool.js +18 -3
  108. package/dist/tools/GpfWfsSearchTypesTool.js.map +1 -1
  109. package/dist/tools/UrbanismeTool.d.ts +42 -33
  110. package/dist/tools/UrbanismeTool.js +18 -2
  111. package/dist/tools/UrbanismeTool.js.map +1 -1
  112. package/package.json +51 -24
  113. package/dist/gpf/wfs.js.map +0 -1
  114. package/dist/helpers/wfs.d.ts +0 -27
  115. package/dist/helpers/wfs.js +0 -55
  116. package/dist/helpers/wfs.js.map +0 -1
  117. package/dist/helpers/wfs_internal/compile.d.ts +0 -46
  118. package/dist/helpers/wfs_internal/compile.js +0 -595
  119. package/dist/helpers/wfs_internal/compile.js.map +0 -1
  120. package/dist/helpers/wfs_internal/request.d.ts +0 -38
  121. package/dist/helpers/wfs_internal/request.js +0 -92
  122. package/dist/helpers/wfs_internal/request.js.map +0 -1
  123. package/dist/helpers/wfs_internal/response.d.ts +0 -21
  124. package/dist/helpers/wfs_internal/response.js +0 -29
  125. package/dist/helpers/wfs_internal/response.js.map +0 -1
  126. package/dist/helpers/wfs_internal/schema.d.ts +0 -167
  127. package/dist/helpers/wfs_internal/schema.js.map +0 -1
  128. /package/dist/gpf/{wfs.d.ts → wfs-schema-catalog.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"AltitudeTool.js","sourceRoot":"","sources":["../../src/tools/AltitudeTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,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;AAE7D,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAIZ,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,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CAC7F,CAAC,CAAC;AAEH,MAAM,YAAa,SAAQ,OAAsB;IAC/C,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,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,OAAO;YACL,MAAM,EAAE,MAAM,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;SAC1D,CAAC;IACJ,CAAC;CACF;AAED,eAAe,YAAY,CAAC"}
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"}
@@ -1,17 +1,20 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing nearby servitudes d'utilité publique for a given point.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  declare const assietteSupInputSchema: z.ZodObject<{
4
7
  lon: z.ZodNumber;
5
8
  lat: z.ZodNumber;
6
9
  }, "strict", z.ZodTypeAny, {
7
- lon?: number;
8
- lat?: number;
10
+ lon: number;
11
+ lat: number;
9
12
  }, {
10
- lon?: number;
11
- lat?: number;
13
+ lon: number;
14
+ lat: number;
12
15
  }>;
13
16
  type AssietteSupInput = z.infer<typeof assietteSupInputSchema>;
14
- declare class AssietteSupTool extends MCPTool<AssietteSupInput> {
17
+ declare class AssietteSupTool extends BaseTool<AssietteSupInput> {
15
18
  name: string;
16
19
  title: string;
17
20
  annotations: {
@@ -30,11 +33,11 @@ declare class AssietteSupTool extends MCPTool<AssietteSupInput> {
30
33
  typename: z.ZodString;
31
34
  feature_id: z.ZodString;
32
35
  }, "strip", z.ZodTypeAny, {
33
- typename?: string;
34
- feature_id?: string;
36
+ typename: string;
37
+ feature_id: string;
35
38
  }, {
36
- typename?: string;
37
- feature_id?: string;
39
+ typename: string;
40
+ feature_id: string;
38
41
  }>>;
39
42
  distance: z.ZodNumber;
40
43
  }, "strip", z.ZodUnknown, z.objectOutputType<{
@@ -45,11 +48,11 @@ declare class AssietteSupTool extends MCPTool<AssietteSupInput> {
45
48
  typename: z.ZodString;
46
49
  feature_id: z.ZodString;
47
50
  }, "strip", z.ZodTypeAny, {
48
- typename?: string;
49
- feature_id?: string;
51
+ typename: string;
52
+ feature_id: string;
50
53
  }, {
51
- typename?: string;
52
- feature_id?: string;
54
+ typename: string;
55
+ feature_id: string;
53
56
  }>>;
54
57
  distance: z.ZodNumber;
55
58
  }, z.ZodUnknown, "strip">, z.objectInputType<{
@@ -60,16 +63,16 @@ declare class AssietteSupTool extends MCPTool<AssietteSupInput> {
60
63
  typename: z.ZodString;
61
64
  feature_id: z.ZodString;
62
65
  }, "strip", z.ZodTypeAny, {
63
- typename?: string;
64
- feature_id?: string;
66
+ typename: string;
67
+ feature_id: string;
65
68
  }, {
66
- typename?: string;
67
- feature_id?: string;
69
+ typename: string;
70
+ feature_id: string;
68
71
  }>>;
69
72
  distance: z.ZodNumber;
70
73
  }, z.ZodUnknown, "strip">>, "many">;
71
74
  }, "strip", z.ZodTypeAny, {
72
- results?: z.objectOutputType<{
75
+ results: z.objectOutputType<{
73
76
  type: z.ZodString;
74
77
  id: z.ZodString;
75
78
  bbox: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -77,16 +80,16 @@ declare class AssietteSupTool extends MCPTool<AssietteSupInput> {
77
80
  typename: z.ZodString;
78
81
  feature_id: z.ZodString;
79
82
  }, "strip", z.ZodTypeAny, {
80
- typename?: string;
81
- feature_id?: string;
83
+ typename: string;
84
+ feature_id: string;
82
85
  }, {
83
- typename?: string;
84
- feature_id?: string;
86
+ typename: string;
87
+ feature_id: string;
85
88
  }>>;
86
89
  distance: z.ZodNumber;
87
90
  }, z.ZodUnknown, "strip">[];
88
91
  }, {
89
- results?: z.objectInputType<{
92
+ results: z.objectInputType<{
90
93
  type: z.ZodString;
91
94
  id: z.ZodString;
92
95
  bbox: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -94,11 +97,11 @@ declare class AssietteSupTool extends MCPTool<AssietteSupInput> {
94
97
  typename: z.ZodString;
95
98
  feature_id: z.ZodString;
96
99
  }, "strip", z.ZodTypeAny, {
97
- typename?: string;
98
- feature_id?: string;
100
+ typename: string;
101
+ feature_id: string;
99
102
  }, {
100
- typename?: string;
101
- feature_id?: string;
103
+ typename: string;
104
+ feature_id: string;
102
105
  }>>;
103
106
  distance: z.ZodNumber;
104
107
  }, z.ZodUnknown, "strip">[];
@@ -107,16 +110,30 @@ declare class AssietteSupTool extends MCPTool<AssietteSupInput> {
107
110
  lon: z.ZodNumber;
108
111
  lat: z.ZodNumber;
109
112
  }, "strict", z.ZodTypeAny, {
110
- lon?: number;
111
- lat?: number;
113
+ lon: number;
114
+ lat: number;
112
115
  }, {
113
- lon?: number;
114
- lat?: number;
116
+ lon: number;
117
+ lat: number;
115
118
  }>;
119
+ /**
120
+ * Looks up nearby SUP footprints relevant to the requested point.
121
+ *
122
+ * @param input Normalized tool input.
123
+ * @returns The list of nearby assiettes with optional reusable `feature_ref` metadata.
124
+ */
116
125
  execute(input: AssietteSupInput): Promise<{
117
- results: {
126
+ results: (Record<string, unknown> & {
127
+ type: string;
128
+ id: string;
129
+ bbox?: number[];
130
+ feature_ref?: {
131
+ typename: string;
132
+ feature_id: string;
133
+ };
134
+ } & {
118
135
  distance: number;
119
- }[];
136
+ })[];
120
137
  }>;
121
138
  }
122
139
  export default AssietteSupTool;
@@ -1,8 +1,13 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing nearby servitudes d'utilité publique for a given point.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  import { getAssiettesServitudes, URBANISME_SOURCE } from "../gpf/urbanisme.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 assietteSupInputSchema = z.object({
7
12
  lon: lonSchema,
8
13
  lat: latSchema,
@@ -19,7 +24,8 @@ const assietteSupResultSchema = z
19
24
  const assietteSupOutputSchema = z.object({
20
25
  results: z.array(assietteSupResultSchema).describe("La liste des assiettes de servitudes d'utilité publique pertinentes pour le point demandé."),
21
26
  });
22
- class AssietteSupTool extends MCPTool {
27
+ // --- Tool ---
28
+ class AssietteSupTool extends BaseTool {
23
29
  name = "assiette_sup";
24
30
  title = "Servitudes d’utilité publique";
25
31
  annotations = READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS;
@@ -27,11 +33,21 @@ class AssietteSupTool extends MCPTool {
27
33
  "Renvoie, pour un point donné par sa longitude et sa latitude, la liste des assiettes de servitudes d'utilité publique (SUP) pertinentes à proximité, avec leurs propriétés associées.",
28
34
  "Une SUP est une contrainte légale sur l'usage du sol liée à un équipement ou une infrastructure publique (ex : AC pour patrimoine, EL pour voirie, PT pour télécoms, I pour installations classées...).",
29
35
  "Les résultats peuvent inclure des assiettes ponctuelles, linéaires ou surfaciques et exposent un `feature_ref` WFS réutilisable quand il est disponible.",
36
+ "Pour récupérer exactement l'objet correspondant au `feature_ref`, utiliser `gpf_wfs_get_feature_by_id`.",
30
37
  `(source : ${URBANISME_SOURCE}).`
31
38
  ].join("\n");
32
39
  outputSchemaShape = assietteSupOutputSchema;
33
40
  schema = assietteSupInputSchema;
41
+ /**
42
+ * Looks up nearby SUP footprints relevant to the requested point.
43
+ *
44
+ * @param input Normalized tool input.
45
+ * @returns The list of nearby assiettes with optional reusable `feature_ref` metadata.
46
+ */
34
47
  async execute(input) {
48
+ logger.info(`[tool] execute ${this.name} ...`, {
49
+ input: input
50
+ });
35
51
  return {
36
52
  results: await getAssiettesServitudes(input.lon, input.lat),
37
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AssietteSupTool.js","sourceRoot":"","sources":["../../src/tools/AssietteSupTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAIZ,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IACxF,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,QAAQ,EAAE;IACnF,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mHAAmH,CAAC,CAAC,QAAQ,EAAE;IACtK,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;CACrG,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEzB,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,4FAA4F,CAAC;CACjJ,CAAC,CAAC;AAEH,MAAM,eAAgB,SAAQ,OAAyB;IACrD,IAAI,GAAG,cAAc,CAAC;IACtB,KAAK,GAAG,+BAA+B,CAAC;IACxC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG;QACZ,uLAAuL;QACvL,yMAAyM;QACzM,0JAA0J;QAC1J,aAAa,gBAAgB,IAAI;KAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACH,iBAAiB,GAAG,uBAAuB,CAAC;IAEtD,MAAM,GAAG,sBAAsB,CAAC;IAEhC,KAAK,CAAC,OAAO,CAAC,KAAuB;QACnC,OAAO;YACL,OAAO,EAAE,MAAM,sBAAsB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;SAC5D,CAAC;IACJ,CAAC;CACF;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"AssietteSupTool.js","sourceRoot":"","sources":["../../src/tools/AssietteSupTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,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,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAMZ,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IACxF,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,QAAQ,EAAE;IACnF,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mHAAmH,CAAC,CAAC,QAAQ,EAAE;IACtK,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;CACrG,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEzB,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,4FAA4F,CAAC;CACjJ,CAAC,CAAC;AAEH,eAAe;AAEf,MAAM,eAAgB,SAAQ,QAA0B;IACtD,IAAI,GAAG,cAAc,CAAC;IACtB,KAAK,GAAG,+BAA+B,CAAC;IACxC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG;QACZ,uLAAuL;QACvL,yMAAyM;QACzM,0JAA0J;QAC1J,yGAAyG;QACzG,aAAa,gBAAgB,IAAI;KAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACH,iBAAiB,GAAG,uBAAuB,CAAC;IAEtD,MAAM,GAAG,sBAAsB,CAAC;IAEhC;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,KAAuB;QACnC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,MAAM,EAAE;YAC7C,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,MAAM,sBAAsB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;SAC5D,CAAC;IACJ,CAAC;CACF;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { MCPTool } from "mcp-framework";
2
+ export default abstract class BaseTool<TInput extends Record<string, any> = any> extends MCPTool<TInput> {
3
+ toolCall(request: {
4
+ params: {
5
+ name: string;
6
+ arguments?: Record<string, unknown>;
7
+ };
8
+ }): Promise<import("mcp-framework").ToolResponse>;
9
+ protected createErrorResponse(error: unknown): {
10
+ content: {
11
+ type: "text";
12
+ text: string;
13
+ }[];
14
+ structuredContent: Record<string, unknown>;
15
+ isError: boolean;
16
+ };
17
+ }
@@ -0,0 +1,41 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { MCPTool } from "mcp-framework";
3
+ import { normalizeToolError } from "../helpers/errors/toolError.js";
4
+ import logger from "../logger.js";
5
+ const toolInputStorage = new AsyncLocalStorage();
6
+ export default class BaseTool extends MCPTool {
7
+ async toolCall(request) {
8
+ return toolInputStorage.run(request.params.arguments || {}, () => super.toolCall(request));
9
+ }
10
+ createErrorResponse(error) {
11
+ const payload = normalizeToolError(error);
12
+ const metadata = {
13
+ tool: this.name,
14
+ problem_type: payload.type,
15
+ problem_title: payload.title,
16
+ error_codes: payload.errors.map((item) => item.code),
17
+ };
18
+ const toolInput = toolInputStorage.getStore();
19
+ if (toolInput !== undefined) {
20
+ metadata.input = toolInput;
21
+ }
22
+ if (payload.upstream?.status !== undefined) {
23
+ metadata.upstream_status = payload.upstream.status;
24
+ }
25
+ if (error instanceof Error && error.name && error.name !== "Error") {
26
+ metadata.error_name = error.name;
27
+ }
28
+ logger.error(`[tool] failed ${this.name}: ${payload.detail}`, metadata);
29
+ return {
30
+ content: [
31
+ {
32
+ type: "text",
33
+ text: payload.detail,
34
+ },
35
+ ],
36
+ structuredContent: payload,
37
+ isError: true,
38
+ };
39
+ }
40
+ }
41
+ //# sourceMappingURL=BaseTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseTool.js","sourceRoot":"","sources":["../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,MAAM,gBAAgB,GAAG,IAAI,iBAAiB,EAA2B,CAAC;AAE1E,MAAM,CAAC,OAAO,OAAgB,QAAmD,SAAQ,OAAe;IACtG,KAAK,CAAC,QAAQ,CAAC,OAKd;QACC,OAAO,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7F,CAAC;IAES,mBAAmB,CAAC,KAAc;QAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAA4B;YACxC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,OAAO,CAAC,IAAI;YAC1B,aAAa,EAAE,OAAO,CAAC,KAAK;YAC5B,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACrD,CAAC;QAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;QAC7B,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3C,QAAQ,CAAC,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrD,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACnE,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;QACnC,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;QAExE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO,CAAC,MAAM;iBACrB;aACF;YACD,iBAAiB,EAAE,OAAkC;YACrD,OAAO,EAAE,IAAI;SACd,CAAC;IAEJ,CAAC;CACF"}
@@ -1,17 +1,20 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing nearby cadastral objects for a given point.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  declare const cadastreInputSchema: z.ZodObject<{
4
7
  lon: z.ZodNumber;
5
8
  lat: z.ZodNumber;
6
9
  }, "strict", z.ZodTypeAny, {
7
- lon?: number;
8
- lat?: number;
10
+ lon: number;
11
+ lat: number;
9
12
  }, {
10
- lon?: number;
11
- lat?: number;
13
+ lon: number;
14
+ lat: number;
12
15
  }>;
13
16
  type CadastreInput = z.infer<typeof cadastreInputSchema>;
14
- declare class CadastreTool extends MCPTool<CadastreInput> {
17
+ declare class CadastreTool extends BaseTool<CadastreInput> {
15
18
  name: string;
16
19
  title: string;
17
20
  annotations: {
@@ -30,11 +33,11 @@ declare class CadastreTool extends MCPTool<CadastreInput> {
30
33
  typename: z.ZodString;
31
34
  feature_id: z.ZodString;
32
35
  }, "strip", z.ZodTypeAny, {
33
- typename?: string;
34
- feature_id?: string;
36
+ typename: string;
37
+ feature_id: string;
35
38
  }, {
36
- typename?: string;
37
- feature_id?: string;
39
+ typename: string;
40
+ feature_id: string;
38
41
  }>;
39
42
  distance: z.ZodNumber;
40
43
  source: z.ZodString;
@@ -46,11 +49,11 @@ declare class CadastreTool extends MCPTool<CadastreInput> {
46
49
  typename: z.ZodString;
47
50
  feature_id: z.ZodString;
48
51
  }, "strip", z.ZodTypeAny, {
49
- typename?: string;
50
- feature_id?: string;
52
+ typename: string;
53
+ feature_id: string;
51
54
  }, {
52
- typename?: string;
53
- feature_id?: string;
55
+ typename: string;
56
+ feature_id: string;
54
57
  }>;
55
58
  distance: z.ZodNumber;
56
59
  source: z.ZodString;
@@ -62,17 +65,17 @@ declare class CadastreTool extends MCPTool<CadastreInput> {
62
65
  typename: z.ZodString;
63
66
  feature_id: z.ZodString;
64
67
  }, "strip", z.ZodTypeAny, {
65
- typename?: string;
66
- feature_id?: string;
68
+ typename: string;
69
+ feature_id: string;
67
70
  }, {
68
- typename?: string;
69
- feature_id?: string;
71
+ typename: string;
72
+ feature_id: string;
70
73
  }>;
71
74
  distance: z.ZodNumber;
72
75
  source: z.ZodString;
73
76
  }, z.ZodUnknown, "strip">>, "many">;
74
77
  }, "strip", z.ZodTypeAny, {
75
- results?: z.objectOutputType<{
78
+ results: z.objectOutputType<{
76
79
  type: z.ZodString;
77
80
  id: z.ZodString;
78
81
  bbox: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -80,17 +83,17 @@ declare class CadastreTool extends MCPTool<CadastreInput> {
80
83
  typename: z.ZodString;
81
84
  feature_id: z.ZodString;
82
85
  }, "strip", z.ZodTypeAny, {
83
- typename?: string;
84
- feature_id?: string;
86
+ typename: string;
87
+ feature_id: string;
85
88
  }, {
86
- typename?: string;
87
- feature_id?: string;
89
+ typename: string;
90
+ feature_id: string;
88
91
  }>;
89
92
  distance: z.ZodNumber;
90
93
  source: z.ZodString;
91
94
  }, z.ZodUnknown, "strip">[];
92
95
  }, {
93
- results?: z.objectInputType<{
96
+ results: z.objectInputType<{
94
97
  type: z.ZodString;
95
98
  id: z.ZodString;
96
99
  bbox: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -98,11 +101,11 @@ declare class CadastreTool extends MCPTool<CadastreInput> {
98
101
  typename: z.ZodString;
99
102
  feature_id: z.ZodString;
100
103
  }, "strip", z.ZodTypeAny, {
101
- typename?: string;
102
- feature_id?: string;
104
+ typename: string;
105
+ feature_id: string;
103
106
  }, {
104
- typename?: string;
105
- feature_id?: string;
107
+ typename: string;
108
+ feature_id: string;
106
109
  }>;
107
110
  distance: z.ZodNumber;
108
111
  source: z.ZodString;
@@ -112,14 +115,31 @@ declare class CadastreTool extends MCPTool<CadastreInput> {
112
115
  lon: z.ZodNumber;
113
116
  lat: z.ZodNumber;
114
117
  }, "strict", z.ZodTypeAny, {
115
- lon?: number;
116
- lat?: number;
118
+ lon: number;
119
+ lat: number;
117
120
  }, {
118
- lon?: number;
119
- lat?: number;
121
+ lon: number;
122
+ lat: number;
120
123
  }>;
124
+ /**
125
+ * Returns the nearest cadastral objects around the requested point.
126
+ *
127
+ * @param input Normalized tool input.
128
+ * @returns The nearest cadastral objects, at most one per cadastral type.
129
+ */
121
130
  execute(input: CadastreInput): Promise<{
122
- results: array<object>;
131
+ results: (Record<string, unknown> & {
132
+ type: string;
133
+ id: string;
134
+ bbox?: number[];
135
+ feature_ref?: {
136
+ typename: string;
137
+ feature_id: string;
138
+ };
139
+ } & {
140
+ distance: number;
141
+ source: string;
142
+ })[];
123
143
  }>;
124
144
  }
125
145
  export default CadastreTool;
@@ -1,8 +1,13 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing nearby cadastral objects for a given point.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  import { getParcellaireExpress, PARCELLAIRE_EXPRESS_TYPES, PARCELLAIRE_EXPRESS_SOURCE } from "../gpf/parcellaire-express.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 cadastreInputSchema = z.object({
7
12
  lon: lonSchema,
8
13
  lat: latSchema,
@@ -20,7 +25,8 @@ const cadastreResultSchema = z
20
25
  const cadastreOutputSchema = z.object({
21
26
  results: z.array(cadastreResultSchema).describe("La liste des objets cadastraux les plus proches du point demandé."),
22
27
  });
23
- class CadastreTool extends MCPTool {
28
+ // --- Tool ---
29
+ class CadastreTool extends BaseTool {
24
30
  name = "cadastre";
25
31
  title = "Informations cadastrales";
26
32
  annotations = READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS;
@@ -29,11 +35,21 @@ class CadastreTool extends MCPTool {
29
35
  "Les résultats sont retournés au plus une fois par type lorsqu'ils sont disponibles et incluent un `feature_ref` WFS réutilisable.",
30
36
  "Le `feature_ref` est directement réutilisable dans `gpf_wfs_get_features` avec `spatial_operator=\"intersects_feature\"`.",
31
37
  "La distance de recherche est fixée à 10 mètres. Si aucun objet n'est trouvé dans les 10 mètres, le résultat est vide.",
38
+ "Pour récupérer exactement l'objet correspondant au `feature_ref`, utiliser `gpf_wfs_get_feature_by_id`.",
32
39
  `(source : ${PARCELLAIRE_EXPRESS_SOURCE}).`
33
40
  ].join("\n");
34
41
  outputSchemaShape = cadastreOutputSchema;
35
42
  schema = cadastreInputSchema;
43
+ /**
44
+ * Returns the nearest cadastral objects around the requested point.
45
+ *
46
+ * @param input Normalized tool input.
47
+ * @returns The nearest cadastral objects, at most one per cadastral type.
48
+ */
36
49
  async execute(input) {
50
+ logger.info(`[tool] execute ${this.name} ...`, {
51
+ input: input
52
+ });
37
53
  return {
38
54
  results: await getParcellaireExpress(input.lon, input.lat),
39
55
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CadastreTool.js","sourceRoot":"","sources":["../../src/tools/CadastreTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC7H,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAIZ,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjG,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC,CAAC,QAAQ,EAAE;IAC1F,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mHAAmH,CAAC;IAC3J,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;IAC1G,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAClE,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEzB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,mEAAmE,CAAC;CACrH,CAAC,CAAC;AAGH,MAAM,YAAa,SAAQ,OAAsB;IAC/C,IAAI,GAAG,UAAU,CAAC;IAClB,KAAK,GAAG,0BAA0B,CAAC;IACnC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG;QACZ,yGAAyG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD;QACrM,mIAAmI;QACnI,2HAA2H;QAC3H,wHAAwH;QACxH,aAAa,0BAA0B,IAAI;KAC5C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACH,iBAAiB,GAAG,oBAAoB,CAAC;IAEnD,MAAM,GAAG,mBAAmB,CAAC;IAE7B,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,OAAO;YACL,OAAO,EAAE,MAAM,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;SAC3D,CAAC;IACJ,CAAC;CACF;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"CadastreTool.js","sourceRoot":"","sources":["../../src/tools/CadastreTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC7H,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,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;KAC3B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjG,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC,CAAC,QAAQ,EAAE;IAC1F,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mHAAmH,CAAC;IAC3J,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;IAC1G,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAClE,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEzB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,mEAAmE,CAAC;CACrH,CAAC,CAAC;AAEH,eAAe;AAEf,MAAM,YAAa,SAAQ,QAAuB;IAChD,IAAI,GAAG,UAAU,CAAC;IAClB,KAAK,GAAG,0BAA0B,CAAC;IACnC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG;QACZ,yGAAyG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD;QACrM,mIAAmI;QACnI,2HAA2H;QAC3H,wHAAwH;QACxH,yGAAyG;QACzG,aAAa,0BAA0B,IAAI;KAC5C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACH,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;YACL,OAAO,EAAE,MAAM,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;SAC3D,CAAC;IACJ,CAAC;CACF;AAED,eAAe,YAAY,CAAC"}
@@ -1,17 +1,20 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing free-text geocoding and autocomplete.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  declare const geocodeInputSchema: z.ZodObject<{
4
7
  text: z.ZodString;
5
8
  maximumResponses: z.ZodOptional<z.ZodNumber>;
6
9
  }, "strict", z.ZodTypeAny, {
7
- text?: string;
8
- maximumResponses?: number;
10
+ text: string;
11
+ maximumResponses?: number | undefined;
9
12
  }, {
10
- text?: string;
11
- maximumResponses?: number;
13
+ text: string;
14
+ maximumResponses?: number | undefined;
12
15
  }>;
13
16
  type GeocodeInput = z.infer<typeof geocodeInputSchema>;
14
- declare class GeocodeTool extends MCPTool<GeocodeInput> {
17
+ declare class GeocodeTool extends BaseTool<GeocodeInput> {
15
18
  name: string;
16
19
  title: string;
17
20
  annotations: {
@@ -30,51 +33,64 @@ declare class GeocodeTool extends MCPTool<GeocodeInput> {
30
33
  city: z.ZodOptional<z.ZodString>;
31
34
  zipcode: z.ZodOptional<z.ZodString>;
32
35
  }, "strip", z.ZodTypeAny, {
33
- lon?: number;
34
- lat?: number;
35
- fulltext?: string;
36
- kind?: string;
37
- city?: string;
38
- zipcode?: string;
36
+ lon: number;
37
+ lat: number;
38
+ fulltext: string;
39
+ kind?: string | undefined;
40
+ city?: string | undefined;
41
+ zipcode?: string | undefined;
39
42
  }, {
40
- lon?: number;
41
- lat?: number;
42
- fulltext?: string;
43
- kind?: string;
44
- city?: string;
45
- zipcode?: string;
43
+ lon: number;
44
+ lat: number;
45
+ fulltext: string;
46
+ kind?: string | undefined;
47
+ city?: string | undefined;
48
+ zipcode?: string | undefined;
46
49
  }>, "many">;
47
50
  }, "strip", z.ZodTypeAny, {
48
- results?: {
49
- lon?: number;
50
- lat?: number;
51
- fulltext?: string;
52
- kind?: string;
53
- city?: string;
54
- zipcode?: string;
51
+ results: {
52
+ lon: number;
53
+ lat: number;
54
+ fulltext: string;
55
+ kind?: string | undefined;
56
+ city?: string | undefined;
57
+ zipcode?: string | undefined;
55
58
  }[];
56
59
  }, {
57
- results?: {
58
- lon?: number;
59
- lat?: number;
60
- fulltext?: string;
61
- kind?: string;
62
- city?: string;
63
- zipcode?: string;
60
+ results: {
61
+ lon: number;
62
+ lat: number;
63
+ fulltext: string;
64
+ kind?: string | undefined;
65
+ city?: string | undefined;
66
+ zipcode?: string | undefined;
64
67
  }[];
65
68
  }>;
66
69
  schema: z.ZodObject<{
67
70
  text: z.ZodString;
68
71
  maximumResponses: z.ZodOptional<z.ZodNumber>;
69
72
  }, "strict", z.ZodTypeAny, {
70
- text?: string;
71
- maximumResponses?: number;
73
+ text: string;
74
+ maximumResponses?: number | undefined;
72
75
  }, {
73
- text?: string;
74
- maximumResponses?: number;
76
+ text: string;
77
+ maximumResponses?: number | undefined;
75
78
  }>;
79
+ /**
80
+ * Geocodes a free-text query and returns the ordered candidate list.
81
+ *
82
+ * @param input Normalized tool input.
83
+ * @returns The ordered list of geocoded candidates.
84
+ */
76
85
  execute(input: GeocodeInput): Promise<{
77
- results: any;
86
+ results: {
87
+ lon: number;
88
+ lat: number;
89
+ fulltext: string;
90
+ kind: string;
91
+ city: string;
92
+ zipcode: string;
93
+ }[];
78
94
  }>;
79
95
  }
80
96
  export default GeocodeTool;
@@ -1,7 +1,12 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing free-text geocoding and autocomplete.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  import { geocode, GEOCODE_SOURCE } from "../gpf/geocode.js";
4
7
  import { READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS } from "../helpers/toolAnnotations.js";
8
+ import logger from "../logger.js";
9
+ // --- Schema ---
5
10
  const geocodeInputSchema = z.object({
6
11
  text: z
7
12
  .string()
@@ -27,7 +32,8 @@ const geocodeResultSchema = z.object({
27
32
  const geocodeOutputSchema = z.object({
28
33
  results: z.array(geocodeResultSchema).describe("La liste ordonnée des résultats géocodés."),
29
34
  });
30
- class GeocodeTool extends MCPTool {
35
+ // --- Tool ---
36
+ class GeocodeTool extends BaseTool {
31
37
  name = "geocode";
32
38
  title = "Géocodage de lieux et d’adresses";
33
39
  annotations = READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS;
@@ -38,7 +44,16 @@ class GeocodeTool extends MCPTool {
38
44
  ].join("\n");
39
45
  outputSchemaShape = geocodeOutputSchema;
40
46
  schema = geocodeInputSchema;
47
+ /**
48
+ * Geocodes a free-text query and returns the ordered candidate list.
49
+ *
50
+ * @param input Normalized tool input.
51
+ * @returns The ordered list of geocoded candidates.
52
+ */
41
53
  async execute(input) {
54
+ logger.info(`[tool] execute ${this.name} ...`, {
55
+ input: input
56
+ });
42
57
  return {
43
58
  results: await geocode(input.text, input.maximumResponses),
44
59
  };