@mapbox/mcp-server 0.14.0 → 0.15.1

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 (199) hide show
  1. package/README.md +11 -0
  2. package/dist/commonjs/index.js +38 -1
  3. package/dist/commonjs/index.js.map +1 -1
  4. package/dist/commonjs/resources/BaseResource.d.ts +18 -0
  5. package/dist/commonjs/resources/BaseResource.d.ts.map +1 -1
  6. package/dist/commonjs/resources/BaseResource.js +26 -4
  7. package/dist/commonjs/resources/BaseResource.js.map +1 -1
  8. package/dist/commonjs/resources/temporary/TemporaryDataResource.d.ts.map +1 -1
  9. package/dist/commonjs/resources/temporary/TemporaryDataResource.js +20 -10
  10. package/dist/commonjs/resources/temporary/TemporaryDataResource.js.map +1 -1
  11. package/dist/commonjs/resources/ui-apps/MapAppUIResource.d.ts.map +1 -1
  12. package/dist/commonjs/resources/ui-apps/MapAppUIResource.js +2 -8
  13. package/dist/commonjs/resources/ui-apps/MapAppUIResource.js.map +1 -1
  14. package/dist/commonjs/resources/ui-apps/mapAppCsp.d.ts +22 -0
  15. package/dist/commonjs/resources/ui-apps/mapAppCsp.d.ts.map +1 -0
  16. package/dist/commonjs/resources/ui-apps/mapAppCsp.js +39 -0
  17. package/dist/commonjs/resources/ui-apps/mapAppCsp.js.map +1 -0
  18. package/dist/commonjs/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
  19. package/dist/commonjs/resources/ui-apps/mapAppHtml.js +71 -9
  20. package/dist/commonjs/resources/ui-apps/mapAppHtml.js.map +1 -1
  21. package/dist/commonjs/tools/BaseTool.d.ts +19 -0
  22. package/dist/commonjs/tools/BaseTool.d.ts.map +1 -1
  23. package/dist/commonjs/tools/BaseTool.js +25 -3
  24. package/dist/commonjs/tools/BaseTool.js.map +1 -1
  25. package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  26. package/dist/commonjs/tools/directions-tool/DirectionsTool.js +4 -3
  27. package/dist/commonjs/tools/directions-tool/DirectionsTool.js.map +1 -1
  28. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
  29. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js +7 -4
  30. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
  31. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -0
  32. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
  33. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js +9 -1
  34. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
  35. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js +1 -1
  36. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts +11 -1
  37. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -1
  38. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js +3 -3
  39. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -1
  40. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js +132 -141
  41. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js.map +1 -1
  42. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +71 -10
  43. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -1
  44. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js +86 -10
  45. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -1
  46. package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts +2 -4
  47. package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
  48. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts +50 -0
  49. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
  50. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js +51 -2
  51. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
  52. package/dist/commonjs/tools/render-map-tool/RenderMapTool.js +50 -18
  53. package/dist/commonjs/tools/render-map-tool/RenderMapTool.js.map +1 -1
  54. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts +50 -0
  55. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
  56. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  57. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts.map +1 -1
  58. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js +2 -2
  59. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js.map +1 -1
  60. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +4 -3
  61. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  62. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
  63. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js +2 -2
  64. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
  65. package/dist/commonjs/utils/index.d.ts +2 -0
  66. package/dist/commonjs/utils/index.d.ts.map +1 -1
  67. package/dist/commonjs/utils/index.js +10 -1
  68. package/dist/commonjs/utils/index.js.map +1 -1
  69. package/dist/commonjs/utils/jsonSchema2020.d.ts +26 -0
  70. package/dist/commonjs/utils/jsonSchema2020.d.ts.map +1 -0
  71. package/dist/commonjs/utils/jsonSchema2020.js +143 -0
  72. package/dist/commonjs/utils/jsonSchema2020.js.map +1 -0
  73. package/dist/commonjs/utils/jwtUtils.d.ts +48 -0
  74. package/dist/commonjs/utils/jwtUtils.d.ts.map +1 -1
  75. package/dist/commonjs/utils/jwtUtils.js +63 -0
  76. package/dist/commonjs/utils/jwtUtils.js.map +1 -1
  77. package/dist/commonjs/utils/mapAppPayload.d.ts +109 -0
  78. package/dist/commonjs/utils/mapAppPayload.d.ts.map +1 -1
  79. package/dist/commonjs/utils/mapAppPayload.js +38 -2
  80. package/dist/commonjs/utils/mapAppPayload.js.map +1 -1
  81. package/dist/commonjs/utils/selfFetchRef.d.ts.map +1 -1
  82. package/dist/commonjs/utils/selfFetchRef.js +31 -0
  83. package/dist/commonjs/utils/selfFetchRef.js.map +1 -1
  84. package/dist/commonjs/utils/serverInstructions.d.ts +12 -0
  85. package/dist/commonjs/utils/serverInstructions.d.ts.map +1 -0
  86. package/dist/commonjs/utils/serverInstructions.js +28 -0
  87. package/dist/commonjs/utils/serverInstructions.js.map +1 -0
  88. package/dist/commonjs/utils/storeMapPayload.d.ts +11 -11
  89. package/dist/commonjs/utils/storeMapPayload.d.ts.map +1 -1
  90. package/dist/commonjs/utils/storeMapPayload.js +14 -13
  91. package/dist/commonjs/utils/storeMapPayload.js.map +1 -1
  92. package/dist/commonjs/utils/temporaryResourceManager.d.ts +10 -4
  93. package/dist/commonjs/utils/temporaryResourceManager.d.ts.map +1 -1
  94. package/dist/commonjs/utils/temporaryResourceManager.js.map +1 -1
  95. package/dist/commonjs/utils/tracing.d.ts +4 -0
  96. package/dist/commonjs/utils/tracing.d.ts.map +1 -1
  97. package/dist/commonjs/utils/tracing.js +20 -0
  98. package/dist/commonjs/utils/tracing.js.map +1 -1
  99. package/dist/commonjs/version.json +3 -3
  100. package/dist/esm/index.js +39 -2
  101. package/dist/esm/index.js.map +1 -1
  102. package/dist/esm/resources/BaseResource.d.ts +18 -0
  103. package/dist/esm/resources/BaseResource.d.ts.map +1 -1
  104. package/dist/esm/resources/BaseResource.js +26 -4
  105. package/dist/esm/resources/BaseResource.js.map +1 -1
  106. package/dist/esm/resources/temporary/TemporaryDataResource.d.ts.map +1 -1
  107. package/dist/esm/resources/temporary/TemporaryDataResource.js +21 -11
  108. package/dist/esm/resources/temporary/TemporaryDataResource.js.map +1 -1
  109. package/dist/esm/resources/ui-apps/MapAppUIResource.d.ts.map +1 -1
  110. package/dist/esm/resources/ui-apps/MapAppUIResource.js +2 -8
  111. package/dist/esm/resources/ui-apps/MapAppUIResource.js.map +1 -1
  112. package/dist/esm/resources/ui-apps/mapAppCsp.d.ts +22 -0
  113. package/dist/esm/resources/ui-apps/mapAppCsp.d.ts.map +1 -0
  114. package/dist/esm/resources/ui-apps/mapAppCsp.js +36 -0
  115. package/dist/esm/resources/ui-apps/mapAppCsp.js.map +1 -0
  116. package/dist/esm/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
  117. package/dist/esm/resources/ui-apps/mapAppHtml.js +71 -9
  118. package/dist/esm/resources/ui-apps/mapAppHtml.js.map +1 -1
  119. package/dist/esm/tools/BaseTool.d.ts +19 -0
  120. package/dist/esm/tools/BaseTool.d.ts.map +1 -1
  121. package/dist/esm/tools/BaseTool.js +25 -3
  122. package/dist/esm/tools/BaseTool.js.map +1 -1
  123. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  124. package/dist/esm/tools/directions-tool/DirectionsTool.js +5 -4
  125. package/dist/esm/tools/directions-tool/DirectionsTool.js.map +1 -1
  126. package/dist/esm/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
  127. package/dist/esm/tools/ground-location-tool/GroundLocationTool.js +7 -4
  128. package/dist/esm/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
  129. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -0
  130. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
  131. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js +9 -1
  132. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
  133. package/dist/esm/tools/isochrone-tool/IsochroneTool.js +2 -2
  134. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts +11 -1
  135. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -1
  136. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js +3 -3
  137. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -1
  138. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js +133 -142
  139. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js.map +1 -1
  140. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +71 -10
  141. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -1
  142. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js +85 -9
  143. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -1
  144. package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts +2 -4
  145. package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
  146. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts +50 -0
  147. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
  148. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js +51 -2
  149. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
  150. package/dist/esm/tools/render-map-tool/RenderMapTool.js +51 -19
  151. package/dist/esm/tools/render-map-tool/RenderMapTool.js.map +1 -1
  152. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts +50 -0
  153. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
  154. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  155. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts.map +1 -1
  156. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js +2 -2
  157. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js.map +1 -1
  158. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +4 -3
  159. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  160. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
  161. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js +3 -3
  162. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
  163. package/dist/esm/utils/index.d.ts +2 -0
  164. package/dist/esm/utils/index.d.ts.map +1 -1
  165. package/dist/esm/utils/index.js +6 -0
  166. package/dist/esm/utils/index.js.map +1 -1
  167. package/dist/esm/utils/jsonSchema2020.d.ts +26 -0
  168. package/dist/esm/utils/jsonSchema2020.d.ts.map +1 -0
  169. package/dist/esm/utils/jsonSchema2020.js +138 -0
  170. package/dist/esm/utils/jsonSchema2020.js.map +1 -0
  171. package/dist/esm/utils/jwtUtils.d.ts +48 -0
  172. package/dist/esm/utils/jwtUtils.d.ts.map +1 -1
  173. package/dist/esm/utils/jwtUtils.js +61 -0
  174. package/dist/esm/utils/jwtUtils.js.map +1 -1
  175. package/dist/esm/utils/mapAppPayload.d.ts +109 -0
  176. package/dist/esm/utils/mapAppPayload.d.ts.map +1 -1
  177. package/dist/esm/utils/mapAppPayload.js +38 -2
  178. package/dist/esm/utils/mapAppPayload.js.map +1 -1
  179. package/dist/esm/utils/selfFetchRef.d.ts.map +1 -1
  180. package/dist/esm/utils/selfFetchRef.js +31 -0
  181. package/dist/esm/utils/selfFetchRef.js.map +1 -1
  182. package/dist/esm/utils/serverInstructions.d.ts +12 -0
  183. package/dist/esm/utils/serverInstructions.d.ts.map +1 -0
  184. package/dist/esm/utils/serverInstructions.js +25 -0
  185. package/dist/esm/utils/serverInstructions.js.map +1 -0
  186. package/dist/esm/utils/storeMapPayload.d.ts +11 -11
  187. package/dist/esm/utils/storeMapPayload.d.ts.map +1 -1
  188. package/dist/esm/utils/storeMapPayload.js +14 -13
  189. package/dist/esm/utils/storeMapPayload.js.map +1 -1
  190. package/dist/esm/utils/temporaryResourceManager.d.ts +10 -4
  191. package/dist/esm/utils/temporaryResourceManager.d.ts.map +1 -1
  192. package/dist/esm/utils/temporaryResourceManager.js.map +1 -1
  193. package/dist/esm/utils/tracing.d.ts +4 -0
  194. package/dist/esm/utils/tracing.d.ts.map +1 -1
  195. package/dist/esm/utils/tracing.js +19 -0
  196. package/dist/esm/utils/tracing.js.map +1 -1
  197. package/dist/esm/version.json +3 -3
  198. package/package.json +2 -2
  199. package/patches/{@modelcontextprotocol+sdk+1.29.0.patch → @modelcontextprotocol+sdk+1.30.0.patch} +6 -2
@@ -6,10 +6,24 @@ exports.PlaceDetailsTool = void 0;
6
6
  const MapboxApiBasedTool_js_1 = require("../MapboxApiBasedTool.js");
7
7
  const PlaceDetailsTool_input_schema_js_1 = require("./PlaceDetailsTool.input.schema.js");
8
8
  const PlaceDetailsTool_output_schema_js_1 = require("./PlaceDetailsTool.output.schema.js");
9
- // API Documentation: https://docs.mapbox.com/api/search/details/
9
+ // API Documentation: https://docs.mapbox.com/api/search/places/
10
+ //
11
+ // This calls the Places API's Details/Retrieve endpoint, not the older,
12
+ // separate Details API (docs.mapbox.com/api/search/details/) this tool used
13
+ // previously. The Places API is Public Preview: its default quota is 1,000
14
+ // records/month per account and 100 records/sec, and its response contract
15
+ // may change without notice.
16
+ //
17
+ // The Places API only covers POIs. It rejects boundary/administrative
18
+ // mapbox_ids (neighborhoods, cities, regions) with a 422
19
+ // "Invalid mapbox_id format" error — confirmed live against the API with a
20
+ // city's mapbox_id from search_and_geocode_tool. Those IDs, and the
21
+ // enhanced Japan data the legacy API alone provides, still need the legacy
22
+ // Details API, so this tool falls back to it on that specific error rather
23
+ // than losing that capability outright.
10
24
  class PlaceDetailsTool extends MapboxApiBasedTool_js_1.MapboxApiBasedTool {
11
25
  name = 'place_details_tool';
12
- description = 'Retrieve detailed information about a specific place using its Mapbox ID. Use after search_and_geocode_tool, category_search_tool, or reverse_geocode_tool to get additional details such as photos, opening hours, ratings, phone numbers, and website URLs. Requires the mapbox_id field from a previous search result.';
26
+ description = 'Retrieve detailed information about a specific place using its Mapbox ID. Use after search_and_geocode_tool, category_search_tool, or reverse_geocode_tool to get additional details such as photos, opening hours, phone numbers, and website URLs. Requires the mapbox_id field from a previous search result. Primarily covers points of interest (businesses, addresses, buildings); mapbox_ids for neighborhoods, cities, or other administrative boundaries are also supported but return more limited data (name, address, coordinates — no photos, hours, or contact info). The primary POI lookup is Public Preview with a default quota of 1,000 requests/month; contact Mapbox if you need a higher volume.';
13
27
  annotations = {
14
28
  title: 'Place Details Tool',
15
29
  readOnlyHint: true,
@@ -24,145 +38,114 @@ class PlaceDetailsTool extends MapboxApiBasedTool_js_1.MapboxApiBasedTool {
24
38
  httpRequest: params.httpRequest
25
39
  });
26
40
  }
27
- formatOpenHours(openHours) {
28
- const DAY_NAMES = [
29
- 'Sunday',
30
- 'Monday',
31
- 'Tuesday',
32
- 'Wednesday',
33
- 'Thursday',
34
- 'Friday',
35
- 'Saturday'
36
- ];
37
- // Use weekday_text if the API provides it — already formatted per day
38
- if (Array.isArray(openHours['weekday_text'])) {
39
- const lines = openHours['weekday_text']
40
- .map((line) => ` ${line}`)
41
- .join('\n');
42
- return `Hours:\n${lines}`;
43
- }
44
- // Fall back to parsing periods array
45
- if (!Array.isArray(openHours['periods']))
41
+ /** `opening_hours` is an OSM opening_hours string, e.g. "Mo 09:00-23:45; Tu 09:00-23:45; ...". */
42
+ formatOpeningHours(openingHours) {
43
+ const parts = openingHours
44
+ .split(';')
45
+ .map((part) => part.trim())
46
+ .filter(Boolean);
47
+ if (parts.length === 0)
46
48
  return '';
47
- const formatTime = (hhmm) => {
48
- const h = parseInt(hhmm.slice(0, 2), 10);
49
- const m = hhmm.slice(2);
50
- const period = h < 12 ? 'AM' : 'PM';
51
- const hour = h % 12 || 12;
52
- return m === '00' ? `${hour} ${period}` : `${hour}:${m} ${period}`;
53
- };
54
- // Group periods by open day
55
- const byDay = new Map();
56
- for (const period of openHours['periods']) {
57
- const day = period.open.day;
58
- const open = formatTime(period.open.time);
59
- const close = period.close ? formatTime(period.close.time) : 'midnight';
60
- const range = `${open} – ${close}`;
61
- const existing = byDay.get(day);
62
- if (existing) {
63
- existing.push(range);
64
- }
65
- else {
66
- byDay.set(day, [range]);
67
- }
68
- }
69
- const dayLines = DAY_NAMES.map((name, i) => {
70
- const ranges = byDay.get(i);
71
- return ` ${name}: ${ranges ? ranges.join(', ') : 'Closed'}`;
72
- });
73
- return `Hours:\n${dayLines.join('\n')}`;
49
+ const lines = parts.map((part) => ` ${part}`).join('\n');
50
+ return `Hours:\n${lines}`;
74
51
  }
75
52
  formatDetailsToText(data) {
76
- const props = data.properties;
77
53
  const lines = [];
78
- // Name
79
- lines.push(`Name: ${props.name}`);
80
- // Address
81
- if (props.full_address) {
82
- lines.push(`Address: ${props.full_address}`);
54
+ lines.push(`Name: ${data.name}`);
55
+ if (data.full_address) {
56
+ lines.push(`Address: ${data.full_address}`);
83
57
  }
84
- else if (props.place_formatted) {
85
- lines.push(`Address: ${props.place_formatted}`);
58
+ if (data.coordinates) {
59
+ lines.push(`Coordinates: ${data.coordinates.latitude}, ${data.coordinates.longitude}`);
86
60
  }
87
- else if (props.address) {
88
- lines.push(`Address: ${props.address}`);
61
+ if (data.primary_category) {
62
+ lines.push(`Type: ${data.primary_category}`);
89
63
  }
90
- // Coordinates from geometry
91
- if (data.geometry?.coordinates) {
92
- const [lng, lat] = data.geometry.coordinates;
93
- lines.push(`Coordinates: ${lat}, ${lng}`);
64
+ else if (data.feature_type) {
65
+ lines.push(`Type: ${data.feature_type}`);
94
66
  }
95
- // Feature type and categories
96
- if (props.feature_type) {
97
- lines.push(`Type: ${props.feature_type}`);
67
+ if (data.categories && data.categories.length > 0) {
68
+ lines.push(`Category: ${data.categories.join(', ')}`);
98
69
  }
99
- if (props.poi_category && props.poi_category.length > 0) {
100
- lines.push(`Category: ${props.poi_category.join(', ')}`);
70
+ if (data.brand) {
71
+ lines.push(`Brand: ${data.brand}`);
101
72
  }
102
- // Brand
103
- if (props.brand && props.brand.length > 0) {
104
- lines.push(`Brand: ${props.brand.join(', ')}`);
73
+ if (data.phone) {
74
+ lines.push(`Phone: ${data.phone}`);
105
75
  }
106
- // Venue attributes (phone, website, social media)
107
- const metadata = props.metadata;
108
- if (metadata) {
109
- if (metadata['phone']) {
110
- lines.push(`Phone: ${metadata['phone']}`);
111
- }
112
- if (metadata['website']) {
113
- lines.push(`Website: ${metadata['website']}`);
114
- }
115
- if (metadata['social_media'] &&
116
- typeof metadata['social_media'] === 'object') {
117
- const social = metadata['social_media'];
118
- const socialLinks = Object.entries(social)
119
- .map(([k, v]) => `${k}: ${v}`)
120
- .join(', ');
121
- if (socialLinks)
122
- lines.push(`Social: ${socialLinks}`);
123
- }
124
- // Visit attributes (hours, rating, price)
125
- if (metadata['price']) {
126
- lines.push(`Price: ${metadata['price']}`);
127
- }
128
- if (metadata['rating'] !== undefined) {
129
- lines.push(`Rating: ${metadata['rating']}`);
130
- }
131
- if (metadata['review_count'] !== undefined) {
132
- lines.push(`Reviews: ${metadata['review_count']}`);
133
- }
134
- if (metadata['popularity'] !== undefined) {
135
- lines.push(`Popularity: ${Math.round(metadata['popularity'] * 100)}%`);
136
- }
137
- if (metadata['open_hours'] &&
138
- typeof metadata['open_hours'] === 'object') {
139
- const formatted = this.formatOpenHours(metadata['open_hours']);
140
- if (formatted)
141
- lines.push(formatted);
142
- }
143
- // Photos
144
- if (Array.isArray(metadata['primary_photo'])) {
145
- const photos = metadata['primary_photo'];
146
- const photoUrls = photos
147
- .map((p) => p['url'] || p['thumb_url'])
148
- .filter(Boolean);
149
- if (photoUrls.length > 0) {
150
- lines.push(`Photos: ${photoUrls.join(', ')}`);
151
- }
76
+ if (data.website) {
77
+ lines.push(`Website: ${data.website}`);
78
+ }
79
+ if (data.score?.popularity !== undefined &&
80
+ data.score?.popularity !== null) {
81
+ lines.push(`Popularity: ${Math.round(data.score.popularity * 100)}%`);
82
+ }
83
+ if (data.permanently_closed) {
84
+ lines.push('Status: Permanently closed');
85
+ }
86
+ if (data.opening_hours) {
87
+ const formatted = this.formatOpeningHours(data.opening_hours);
88
+ if (formatted)
89
+ lines.push(formatted);
90
+ }
91
+ if (data.photos && data.photos.length > 0) {
92
+ const urls = data.photos.map((photo) => photo.url).filter(Boolean);
93
+ if (urls.length > 0) {
94
+ lines.push(`Photos: ${urls.join(', ')}`);
152
95
  }
153
96
  }
154
97
  return lines.join('\n');
155
98
  }
156
- async execute(input, accessToken,
157
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
158
- _context) {
99
+ errorResult(message) {
100
+ return {
101
+ content: [{ type: 'text', text: `Place Details API error: ${message}` }],
102
+ isError: true
103
+ };
104
+ }
105
+ successResult(data) {
106
+ return {
107
+ content: [{ type: 'text', text: this.formatDetailsToText(data) }],
108
+ structuredContent: data,
109
+ isError: false
110
+ };
111
+ }
112
+ /** Maps a legacy Details API `Feature` onto the flat Places API output shape. */
113
+ normalizeLegacyFeature(feature) {
114
+ const props = feature.properties;
115
+ const metadata = props.metadata;
116
+ return this.validateOutput({
117
+ mapbox_id: props.mapbox_id,
118
+ name: props.name,
119
+ full_address: props.full_address ?? props.place_formatted ?? props.address,
120
+ feature_type: props.feature_type,
121
+ coordinates: props.coordinates ??
122
+ (feature.geometry?.coordinates
123
+ ? {
124
+ longitude: feature.geometry.coordinates[0],
125
+ latitude: feature.geometry.coordinates[1]
126
+ }
127
+ : undefined),
128
+ bbox: props.bbox,
129
+ context: props.context,
130
+ categories: props.poi_category,
131
+ brand: props.brand && props.brand.length > 0
132
+ ? props.brand.join(', ')
133
+ : undefined,
134
+ phone: metadata?.['phone'],
135
+ website: metadata?.['website'],
136
+ metadata
137
+ });
138
+ }
139
+ /**
140
+ * Calls the legacy Details API, the only way to resolve boundary/
141
+ * administrative mapbox_ids (and the source of enhanced Japan data).
142
+ */
143
+ async fetchLegacyDetails(input, accessToken) {
159
144
  const url = new URL(`${MapboxApiBasedTool_js_1.MapboxApiBasedTool.mapboxApiEndpoint}search/details/v1/retrieve/${encodeURIComponent(input.mapbox_id)}`);
160
145
  url.searchParams.append('access_token', accessToken);
161
- // "basic" (name, feature_type, address, coordinates) is what the
162
- // Details API calls its default attribute set, and this tool's output
163
- // schema requires `properties.name`/`properties.feature_type` — so it
164
- // must always be requested, even if the caller's attribute_sets omits
165
- // it, or the API response fails output validation.
146
+ // "basic" (name, feature_type, address, coordinates) must always be
147
+ // requested — normalizeLegacyFeature() depends on those fields, even if
148
+ // the caller's attribute_sets omits it.
166
149
  const attributeSets = new Set(['basic', ...(input.attribute_sets ?? [])]);
167
150
  url.searchParams.append('attribute_sets', Array.from(attributeSets).join(','));
168
151
  if (input.language) {
@@ -173,24 +156,32 @@ class PlaceDetailsTool extends MapboxApiBasedTool_js_1.MapboxApiBasedTool {
173
156
  }
174
157
  const response = await this.httpRequest(url.toString());
175
158
  if (!response.ok) {
176
- const errorMessage = await this.getErrorMessage(response);
177
- return {
178
- content: [
179
- {
180
- type: 'text',
181
- text: `Place Details API error: ${errorMessage}`
182
- }
183
- ],
184
- isError: true
185
- };
159
+ return { ok: false, errorMessage: await this.getErrorMessage(response) };
186
160
  }
187
- const rawData = await response.json();
188
- const data = this.validateOutput(rawData);
189
- return {
190
- content: [{ type: 'text', text: this.formatDetailsToText(data) }],
191
- structuredContent: data,
192
- isError: false
193
- };
161
+ const rawFeature = PlaceDetailsTool_output_schema_js_1.LegacyPlaceDetailsFeatureSchema.parse(await response.json());
162
+ return { ok: true, data: this.normalizeLegacyFeature(rawFeature) };
163
+ }
164
+ async execute(input, accessToken,
165
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
166
+ _context) {
167
+ const url = new URL(`${MapboxApiBasedTool_js_1.MapboxApiBasedTool.mapboxApiEndpoint}places/v1/details/retrieve/${encodeURIComponent(input.mapbox_id)}`);
168
+ url.searchParams.append('access_token', accessToken);
169
+ const response = await this.httpRequest(url.toString());
170
+ if (response.ok) {
171
+ const data = this.validateOutput(await response.json());
172
+ return this.successResult(data);
173
+ }
174
+ // The Places API rejects non-POI mapbox_ids (boundaries/neighborhoods/
175
+ // cities/regions) with 422 "Invalid mapbox_id format" — fall back to the
176
+ // legacy Details API, which still resolves those, instead of erroring.
177
+ if (response.status === 422) {
178
+ const legacyResult = await this.fetchLegacyDetails(input, accessToken);
179
+ if (legacyResult.ok) {
180
+ return this.successResult(legacyResult.data);
181
+ }
182
+ return this.errorResult(legacyResult.errorMessage);
183
+ }
184
+ return this.errorResult(await this.getErrorMessage(response));
194
185
  }
195
186
  }
196
187
  exports.PlaceDetailsTool = PlaceDetailsTool;
@@ -1 +1 @@
1
- {"version":3,"file":"PlaceDetailsTool.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlaceDetailsTool.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,77 @@ import { z } from 'zod';
2
2
  /**
3
3
  * Output schema for PlaceDetailsTool
4
4
  *
5
- * Models the GeoJSON Feature returned by the Mapbox Details API.
6
- * Uses passthrough() to allow additional fields from optional attribute_sets
7
- * (photos, visit, venue) to pass through without validation errors.
5
+ * Models the flat Place record returned by the Mapbox Places API's Details
6
+ * endpoint (`places/v1/details/retrieve`), currently in Public Preview.
7
+ * Nearly every field beyond `mapbox_id`/`name` is optional and every nested
8
+ * object uses .passthrough() — live responses observed during development
9
+ * varied in which fields were present (e.g. `building` and `opening_hours`
10
+ * only appear on some places), and a Public Preview API's contract can add
11
+ * fields without notice, so this schema is deliberately permissive rather
12
+ * than risk an output-validation failure like the one fixed for the
13
+ * previous Details API (see CHANGELOG).
14
+ *
15
+ * `feature_type`, `bbox`, `context`, and `metadata` are never populated by
16
+ * the Places API itself — they're only present when `mapbox_id` resolved via
17
+ * the legacy Details API fallback (boundaries/neighborhoods/cities/regions,
18
+ * which the Places API rejects). See `PlaceDetailsTool.ts`'s
19
+ * `normalizeLegacyFeature`.
8
20
  */
9
21
  export declare const PlaceDetailsOutputSchema: z.ZodObject<{
22
+ mapbox_id: z.ZodString;
23
+ name: z.ZodString;
24
+ full_address: z.ZodOptional<z.ZodString>;
25
+ brand: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26
+ primary_category: z.ZodOptional<z.ZodString>;
27
+ categories: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ feature_type: z.ZodOptional<z.ZodString>;
29
+ bbox: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
30
+ context: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
31
+ metadata: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
32
+ opening_hours: z.ZodOptional<z.ZodString>;
33
+ permanently_closed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
34
+ phone: z.ZodOptional<z.ZodString>;
35
+ website: z.ZodOptional<z.ZodString>;
36
+ status: z.ZodOptional<z.ZodString>;
37
+ created_at: z.ZodOptional<z.ZodString>;
38
+ updated_at: z.ZodOptional<z.ZodString>;
39
+ score: z.ZodOptional<z.ZodObject<{
40
+ closed: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
41
+ reality: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
42
+ popularity: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
43
+ }, z.core.$loose>>;
44
+ coordinates: z.ZodOptional<z.ZodObject<{
45
+ latitude: z.ZodNumber;
46
+ longitude: z.ZodNumber;
47
+ source: z.ZodOptional<z.ZodString>;
48
+ routable_points: z.ZodOptional<z.ZodArray<z.ZodObject<{
49
+ name: z.ZodOptional<z.ZodString>;
50
+ latitude: z.ZodNumber;
51
+ longitude: z.ZodNumber;
52
+ }, z.core.$loose>>>;
53
+ }, z.core.$loose>>;
54
+ address: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
55
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
56
+ building: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
57
+ photos: z.ZodOptional<z.ZodArray<z.ZodObject<{
58
+ url: z.ZodString;
59
+ width: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
60
+ height: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
61
+ source: z.ZodOptional<z.ZodString>;
62
+ }, z.core.$loose>>>;
63
+ telemetry: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
64
+ }, z.core.$loose>;
65
+ /**
66
+ * Type inference for PlaceDetailsOutput
67
+ */
68
+ export type PlaceDetailsOutput = z.infer<typeof PlaceDetailsOutputSchema>;
69
+ /**
70
+ * Raw GeoJSON `Feature` returned by the legacy Details API
71
+ * (`search/details/v1/retrieve`). Only used for the fallback path — see
72
+ * `PlaceDetailsTool.ts`'s `normalizeLegacyFeature`, which maps this into
73
+ * `PlaceDetailsOutput`.
74
+ */
75
+ export declare const LegacyPlaceDetailsFeatureSchema: z.ZodObject<{
10
76
  type: z.ZodLiteral<"Feature">;
11
77
  geometry: z.ZodObject<{
12
78
  type: z.ZodLiteral<"Point">;
@@ -25,18 +91,13 @@ export declare const PlaceDetailsOutputSchema: z.ZodObject<{
25
91
  latitude: z.ZodNumber;
26
92
  }, z.core.$loose>>;
27
93
  bbox: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
28
- language: z.ZodOptional<z.ZodString>;
29
- maki: z.ZodOptional<z.ZodString>;
30
94
  poi_category: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
- poi_category_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
32
95
  brand: z.ZodOptional<z.ZodArray<z.ZodString>>;
33
- brand_id: z.ZodOptional<z.ZodArray<z.ZodString>>;
34
- external_ids: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
35
96
  metadata: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
36
97
  }, z.core.$loose>;
37
98
  }, z.core.$loose>;
38
99
  /**
39
- * Type inference for PlaceDetailsOutput
100
+ * Type inference for LegacyPlaceDetailsFeature
40
101
  */
41
- export type PlaceDetailsOutput = z.infer<typeof PlaceDetailsOutputSchema>;
102
+ export type LegacyPlaceDetailsFeature = z.infer<typeof LegacyPlaceDetailsFeatureSchema>;
42
103
  //# sourceMappingURL=PlaceDetailsTool.output.schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaceDetailsTool.output.schema.d.ts","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.output.schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwCrB,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"PlaceDetailsTool.output.schema.d.ts","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.output.schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmErB,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;iBAkC5B,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,+BAA+B,CACvC,CAAC"}
@@ -2,16 +2,98 @@
2
2
  // Copyright (c) Mapbox, Inc.
3
3
  // Licensed under the MIT License.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.PlaceDetailsOutputSchema = void 0;
5
+ exports.LegacyPlaceDetailsFeatureSchema = exports.PlaceDetailsOutputSchema = void 0;
6
6
  const zod_1 = require("zod");
7
7
  /**
8
8
  * Output schema for PlaceDetailsTool
9
9
  *
10
- * Models the GeoJSON Feature returned by the Mapbox Details API.
11
- * Uses passthrough() to allow additional fields from optional attribute_sets
12
- * (photos, visit, venue) to pass through without validation errors.
10
+ * Models the flat Place record returned by the Mapbox Places API's Details
11
+ * endpoint (`places/v1/details/retrieve`), currently in Public Preview.
12
+ * Nearly every field beyond `mapbox_id`/`name` is optional and every nested
13
+ * object uses .passthrough() — live responses observed during development
14
+ * varied in which fields were present (e.g. `building` and `opening_hours`
15
+ * only appear on some places), and a Public Preview API's contract can add
16
+ * fields without notice, so this schema is deliberately permissive rather
17
+ * than risk an output-validation failure like the one fixed for the
18
+ * previous Details API (see CHANGELOG).
19
+ *
20
+ * `feature_type`, `bbox`, `context`, and `metadata` are never populated by
21
+ * the Places API itself — they're only present when `mapbox_id` resolved via
22
+ * the legacy Details API fallback (boundaries/neighborhoods/cities/regions,
23
+ * which the Places API rejects). See `PlaceDetailsTool.ts`'s
24
+ * `normalizeLegacyFeature`.
13
25
  */
14
26
  exports.PlaceDetailsOutputSchema = zod_1.z
27
+ .object({
28
+ mapbox_id: zod_1.z.string(),
29
+ name: zod_1.z.string(),
30
+ full_address: zod_1.z.string().optional(),
31
+ brand: zod_1.z.string().nullable().optional(),
32
+ primary_category: zod_1.z.string().optional(),
33
+ categories: zod_1.z.array(zod_1.z.string()).optional(),
34
+ // Legacy Details API fallback only (see doc comment above).
35
+ feature_type: zod_1.z.string().optional(),
36
+ bbox: zod_1.z.tuple([zod_1.z.number(), zod_1.z.number(), zod_1.z.number(), zod_1.z.number()]).optional(),
37
+ context: zod_1.z.object({}).passthrough().optional(),
38
+ metadata: zod_1.z.object({}).passthrough().optional(),
39
+ // OSM opening_hours syntax, e.g. "Mo 09:00-23:45; Tu 09:00-23:45; ...".
40
+ opening_hours: zod_1.z.string().optional(),
41
+ permanently_closed: zod_1.z.boolean().nullable().optional(),
42
+ phone: zod_1.z.string().optional(),
43
+ website: zod_1.z.string().optional(),
44
+ status: zod_1.z.string().optional(),
45
+ created_at: zod_1.z.string().optional(),
46
+ updated_at: zod_1.z.string().optional(),
47
+ score: zod_1.z
48
+ .object({
49
+ closed: zod_1.z.number().nullable().optional(),
50
+ reality: zod_1.z.number().nullable().optional(),
51
+ popularity: zod_1.z.number().nullable().optional()
52
+ })
53
+ .passthrough()
54
+ .optional(),
55
+ coordinates: zod_1.z
56
+ .object({
57
+ latitude: zod_1.z.number(),
58
+ longitude: zod_1.z.number(),
59
+ source: zod_1.z.string().optional(),
60
+ routable_points: zod_1.z
61
+ .array(zod_1.z
62
+ .object({
63
+ name: zod_1.z.string().optional(),
64
+ latitude: zod_1.z.number(),
65
+ longitude: zod_1.z.number()
66
+ })
67
+ .passthrough())
68
+ .optional()
69
+ })
70
+ .passthrough()
71
+ .optional(),
72
+ address: zod_1.z.object({}).passthrough().optional(),
73
+ attributes: zod_1.z
74
+ .record(zod_1.z.string(), zod_1.z.union([zod_1.z.string(), zod_1.z.boolean(), zod_1.z.number()]))
75
+ .optional(),
76
+ building: zod_1.z.object({}).passthrough().optional(),
77
+ photos: zod_1.z
78
+ .array(zod_1.z
79
+ .object({
80
+ url: zod_1.z.string(),
81
+ width: zod_1.z.number().nullable().optional(),
82
+ height: zod_1.z.number().nullable().optional(),
83
+ source: zod_1.z.string().optional()
84
+ })
85
+ .passthrough())
86
+ .optional(),
87
+ telemetry: zod_1.z.object({}).passthrough().optional()
88
+ })
89
+ .passthrough();
90
+ /**
91
+ * Raw GeoJSON `Feature` returned by the legacy Details API
92
+ * (`search/details/v1/retrieve`). Only used for the fallback path — see
93
+ * `PlaceDetailsTool.ts`'s `normalizeLegacyFeature`, which maps this into
94
+ * `PlaceDetailsOutput`.
95
+ */
96
+ exports.LegacyPlaceDetailsFeatureSchema = zod_1.z
15
97
  .object({
16
98
  type: zod_1.z.literal('Feature'),
17
99
  geometry: zod_1.z
@@ -39,14 +121,8 @@ exports.PlaceDetailsOutputSchema = zod_1.z
39
121
  bbox: zod_1.z
40
122
  .tuple([zod_1.z.number(), zod_1.z.number(), zod_1.z.number(), zod_1.z.number()])
41
123
  .optional(),
42
- language: zod_1.z.string().optional(),
43
- maki: zod_1.z.string().optional(),
44
124
  poi_category: zod_1.z.array(zod_1.z.string()).optional(),
45
- poi_category_ids: zod_1.z.array(zod_1.z.string()).optional(),
46
125
  brand: zod_1.z.array(zod_1.z.string()).optional(),
47
- brand_id: zod_1.z.array(zod_1.z.string()).optional(),
48
- external_ids: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
49
- // metadata contains attribute_set fields (photos, visit, venue)
50
126
  metadata: zod_1.z.object({}).passthrough().optional()
51
127
  })
52
128
  .passthrough()
@@ -1 +1 @@
1
- {"version":3,"file":"PlaceDetailsTool.output.schema.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.output.schema.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAElC,6BAAwB;AAExB;;;;;;GAMG;AACU,QAAA,wBAAwB,GAAG,OAAC;KACtC,MAAM,CAAC;IACN,IAAI,EAAE,OAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,OAAC;SACR,MAAM,CAAC;QACN,IAAI,EAAE,OAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QACxB,WAAW,EAAE,OAAC,CAAC,KAAK,CAAC,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KAC/C,CAAC;SACD,WAAW,EAAE;IAChB,UAAU,EAAE,OAAC;SACV,MAAM,CAAC;QACN,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;QAChB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;QACrB,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACtC,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;QAC9C,WAAW,EAAE,OAAC;aACX,MAAM,CAAC;YACN,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;YACrB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;SACrB,CAAC;aACD,WAAW,EAAE;aACb,QAAQ,EAAE;QACb,IAAI,EAAE,OAAC;aACJ,KAAK,CAAC,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aACvD,QAAQ,EAAE;QACb,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,YAAY,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC5C,gBAAgB,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAChD,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACrC,QAAQ,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACxC,YAAY,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACzD,gEAAgE;QAChE,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;KAChD,CAAC;SACD,WAAW,EAAE;CACjB,CAAC;KACD,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"PlaceDetailsTool.output.schema.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.output.schema.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
2
2
  import { BaseTool } from '../BaseTool.js';
3
+ import { type MapAppCsp } from '../../resources/ui-apps/mapAppCsp.js';
3
4
  import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
4
5
  import { RenderMapInputSchema, type RenderMapInput } from './RenderMapTool.input.schema.js';
5
6
  import { RenderMapOutputSchema } from './RenderMapTool.output.schema.js';
@@ -33,10 +34,7 @@ export declare class RenderMapTool extends BaseTool<typeof RenderMapInputSchema,
33
34
  readonly meta: {
34
35
  ui: {
35
36
  resourceUri: string;
36
- csp: {
37
- connectDomains: string[];
38
- resourceDomains: string[];
39
- };
37
+ csp: MapAppCsp;
40
38
  };
41
39
  };
42
40
  private readonly httpRequest;