@mapbox/mcp-server 0.13.0 → 0.15.0

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 (257) hide show
  1. package/README.md +111 -14
  2. package/dist/commonjs/cli.d.ts.map +1 -1
  3. package/dist/commonjs/cli.js +5 -2
  4. package/dist/commonjs/cli.js.map +1 -1
  5. package/dist/commonjs/index.js +38 -1
  6. package/dist/commonjs/index.js.map +1 -1
  7. package/dist/commonjs/resources/BaseResource.d.ts +18 -0
  8. package/dist/commonjs/resources/BaseResource.d.ts.map +1 -1
  9. package/dist/commonjs/resources/BaseResource.js +26 -4
  10. package/dist/commonjs/resources/BaseResource.js.map +1 -1
  11. package/dist/commonjs/resources/resourceRegistry.d.ts +1 -2
  12. package/dist/commonjs/resources/resourceRegistry.d.ts.map +1 -1
  13. package/dist/commonjs/resources/resourceRegistry.js +0 -2
  14. package/dist/commonjs/resources/resourceRegistry.js.map +1 -1
  15. package/dist/commonjs/resources/temporary/TemporaryDataResource.d.ts.map +1 -1
  16. package/dist/commonjs/resources/temporary/TemporaryDataResource.js +20 -10
  17. package/dist/commonjs/resources/temporary/TemporaryDataResource.js.map +1 -1
  18. package/dist/commonjs/resources/ui-apps/MapAppUIResource.d.ts.map +1 -1
  19. package/dist/commonjs/resources/ui-apps/MapAppUIResource.js +2 -8
  20. package/dist/commonjs/resources/ui-apps/MapAppUIResource.js.map +1 -1
  21. package/dist/commonjs/resources/ui-apps/mapAppCsp.d.ts +22 -0
  22. package/dist/commonjs/resources/ui-apps/mapAppCsp.d.ts.map +1 -0
  23. package/dist/commonjs/resources/ui-apps/mapAppCsp.js +39 -0
  24. package/dist/commonjs/resources/ui-apps/mapAppCsp.js.map +1 -0
  25. package/dist/commonjs/resources/ui-apps/mapAppHtml.d.ts +3 -3
  26. package/dist/commonjs/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
  27. package/dist/commonjs/resources/ui-apps/mapAppHtml.js +89 -13
  28. package/dist/commonjs/resources/ui-apps/mapAppHtml.js.map +1 -1
  29. package/dist/commonjs/tools/BaseTool.d.ts +19 -0
  30. package/dist/commonjs/tools/BaseTool.d.ts.map +1 -1
  31. package/dist/commonjs/tools/BaseTool.js +25 -3
  32. package/dist/commonjs/tools/BaseTool.js.map +1 -1
  33. package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts +16 -0
  34. package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  35. package/dist/commonjs/tools/directions-tool/DirectionsTool.js +107 -2
  36. package/dist/commonjs/tools/directions-tool/DirectionsTool.js.map +1 -1
  37. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
  38. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js +7 -4
  39. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
  40. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -0
  41. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
  42. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js +9 -1
  43. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
  44. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js +1 -1
  45. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts +11 -1
  46. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -1
  47. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js +3 -3
  48. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -1
  49. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js +134 -139
  50. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js.map +1 -1
  51. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +71 -10
  52. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -1
  53. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js +86 -10
  54. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -1
  55. package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts +2 -4
  56. package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
  57. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts +50 -0
  58. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
  59. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js +51 -2
  60. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
  61. package/dist/commonjs/tools/render-map-tool/RenderMapTool.js +50 -18
  62. package/dist/commonjs/tools/render-map-tool/RenderMapTool.js.map +1 -1
  63. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts +50 -0
  64. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
  65. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  66. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts.map +1 -1
  67. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js +2 -2
  68. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js.map +1 -1
  69. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +6 -3
  70. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  71. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
  72. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts +3 -3
  73. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts.map +1 -1
  74. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.js +16 -2
  75. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.js.map +1 -1
  76. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js +17 -6
  77. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
  78. package/dist/commonjs/utils/index.d.ts +2 -0
  79. package/dist/commonjs/utils/index.d.ts.map +1 -1
  80. package/dist/commonjs/utils/index.js +8 -1
  81. package/dist/commonjs/utils/index.js.map +1 -1
  82. package/dist/commonjs/utils/jsonSchema2020.d.ts +26 -0
  83. package/dist/commonjs/utils/jsonSchema2020.d.ts.map +1 -0
  84. package/dist/commonjs/utils/jsonSchema2020.js +143 -0
  85. package/dist/commonjs/utils/jsonSchema2020.js.map +1 -0
  86. package/dist/commonjs/utils/jwtUtils.d.ts +48 -0
  87. package/dist/commonjs/utils/jwtUtils.d.ts.map +1 -1
  88. package/dist/commonjs/utils/jwtUtils.js +63 -0
  89. package/dist/commonjs/utils/jwtUtils.js.map +1 -1
  90. package/dist/commonjs/utils/mapAppPayload.d.ts +109 -0
  91. package/dist/commonjs/utils/mapAppPayload.d.ts.map +1 -1
  92. package/dist/commonjs/utils/mapAppPayload.js +38 -2
  93. package/dist/commonjs/utils/mapAppPayload.js.map +1 -1
  94. package/dist/commonjs/utils/redactToken.d.ts +3 -0
  95. package/dist/commonjs/utils/redactToken.d.ts.map +1 -0
  96. package/dist/commonjs/utils/redactToken.js +55 -0
  97. package/dist/commonjs/utils/redactToken.js.map +1 -0
  98. package/dist/commonjs/utils/redactingSpanExporter.d.ts +24 -0
  99. package/dist/commonjs/utils/redactingSpanExporter.d.ts.map +1 -0
  100. package/dist/commonjs/utils/redactingSpanExporter.js +97 -0
  101. package/dist/commonjs/utils/redactingSpanExporter.js.map +1 -0
  102. package/dist/commonjs/utils/selfFetchRef.d.ts.map +1 -1
  103. package/dist/commonjs/utils/selfFetchRef.js +31 -0
  104. package/dist/commonjs/utils/selfFetchRef.js.map +1 -1
  105. package/dist/commonjs/utils/serverInstructions.d.ts +12 -0
  106. package/dist/commonjs/utils/serverInstructions.d.ts.map +1 -0
  107. package/dist/commonjs/utils/serverInstructions.js +28 -0
  108. package/dist/commonjs/utils/serverInstructions.js.map +1 -0
  109. package/dist/commonjs/utils/storeMapPayload.d.ts +11 -11
  110. package/dist/commonjs/utils/storeMapPayload.d.ts.map +1 -1
  111. package/dist/commonjs/utils/storeMapPayload.js +14 -13
  112. package/dist/commonjs/utils/storeMapPayload.js.map +1 -1
  113. package/dist/commonjs/utils/temporaryResourceManager.d.ts +10 -4
  114. package/dist/commonjs/utils/temporaryResourceManager.d.ts.map +1 -1
  115. package/dist/commonjs/utils/temporaryResourceManager.js.map +1 -1
  116. package/dist/commonjs/utils/tracing.d.ts +4 -0
  117. package/dist/commonjs/utils/tracing.d.ts.map +1 -1
  118. package/dist/commonjs/utils/tracing.js +24 -1
  119. package/dist/commonjs/utils/tracing.js.map +1 -1
  120. package/dist/commonjs/utils/urlSafety.d.ts +23 -7
  121. package/dist/commonjs/utils/urlSafety.d.ts.map +1 -1
  122. package/dist/commonjs/utils/urlSafety.js +84 -66
  123. package/dist/commonjs/utils/urlSafety.js.map +1 -1
  124. package/dist/commonjs/version.json +3 -3
  125. package/dist/esm/cli.d.ts.map +1 -1
  126. package/dist/esm/cli.js +5 -2
  127. package/dist/esm/cli.js.map +1 -1
  128. package/dist/esm/index.js +39 -2
  129. package/dist/esm/index.js.map +1 -1
  130. package/dist/esm/resources/BaseResource.d.ts +18 -0
  131. package/dist/esm/resources/BaseResource.d.ts.map +1 -1
  132. package/dist/esm/resources/BaseResource.js +26 -4
  133. package/dist/esm/resources/BaseResource.js.map +1 -1
  134. package/dist/esm/resources/resourceRegistry.d.ts +1 -2
  135. package/dist/esm/resources/resourceRegistry.d.ts.map +1 -1
  136. package/dist/esm/resources/resourceRegistry.js +0 -2
  137. package/dist/esm/resources/resourceRegistry.js.map +1 -1
  138. package/dist/esm/resources/temporary/TemporaryDataResource.d.ts.map +1 -1
  139. package/dist/esm/resources/temporary/TemporaryDataResource.js +21 -11
  140. package/dist/esm/resources/temporary/TemporaryDataResource.js.map +1 -1
  141. package/dist/esm/resources/ui-apps/MapAppUIResource.d.ts.map +1 -1
  142. package/dist/esm/resources/ui-apps/MapAppUIResource.js +2 -8
  143. package/dist/esm/resources/ui-apps/MapAppUIResource.js.map +1 -1
  144. package/dist/esm/resources/ui-apps/mapAppCsp.d.ts +22 -0
  145. package/dist/esm/resources/ui-apps/mapAppCsp.d.ts.map +1 -0
  146. package/dist/esm/resources/ui-apps/mapAppCsp.js +36 -0
  147. package/dist/esm/resources/ui-apps/mapAppCsp.js.map +1 -0
  148. package/dist/esm/resources/ui-apps/mapAppHtml.d.ts +3 -3
  149. package/dist/esm/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
  150. package/dist/esm/resources/ui-apps/mapAppHtml.js +89 -13
  151. package/dist/esm/resources/ui-apps/mapAppHtml.js.map +1 -1
  152. package/dist/esm/tools/BaseTool.d.ts +19 -0
  153. package/dist/esm/tools/BaseTool.d.ts.map +1 -1
  154. package/dist/esm/tools/BaseTool.js +25 -3
  155. package/dist/esm/tools/BaseTool.js.map +1 -1
  156. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts +16 -0
  157. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  158. package/dist/esm/tools/directions-tool/DirectionsTool.js +108 -3
  159. package/dist/esm/tools/directions-tool/DirectionsTool.js.map +1 -1
  160. package/dist/esm/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
  161. package/dist/esm/tools/ground-location-tool/GroundLocationTool.js +7 -4
  162. package/dist/esm/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
  163. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -0
  164. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
  165. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js +9 -1
  166. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
  167. package/dist/esm/tools/isochrone-tool/IsochroneTool.js +2 -2
  168. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts +11 -1
  169. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -1
  170. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js +3 -3
  171. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -1
  172. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js +135 -140
  173. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js.map +1 -1
  174. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +71 -10
  175. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -1
  176. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js +85 -9
  177. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -1
  178. package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts +2 -4
  179. package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
  180. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts +50 -0
  181. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
  182. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js +51 -2
  183. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
  184. package/dist/esm/tools/render-map-tool/RenderMapTool.js +51 -19
  185. package/dist/esm/tools/render-map-tool/RenderMapTool.js.map +1 -1
  186. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts +50 -0
  187. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
  188. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  189. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts.map +1 -1
  190. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js +2 -2
  191. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js.map +1 -1
  192. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +6 -3
  193. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  194. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
  195. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts +3 -3
  196. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts.map +1 -1
  197. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.js +17 -3
  198. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.js.map +1 -1
  199. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js +18 -7
  200. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
  201. package/dist/esm/utils/index.d.ts +2 -0
  202. package/dist/esm/utils/index.d.ts.map +1 -1
  203. package/dist/esm/utils/index.js +5 -0
  204. package/dist/esm/utils/index.js.map +1 -1
  205. package/dist/esm/utils/jsonSchema2020.d.ts +26 -0
  206. package/dist/esm/utils/jsonSchema2020.d.ts.map +1 -0
  207. package/dist/esm/utils/jsonSchema2020.js +138 -0
  208. package/dist/esm/utils/jsonSchema2020.js.map +1 -0
  209. package/dist/esm/utils/jwtUtils.d.ts +48 -0
  210. package/dist/esm/utils/jwtUtils.d.ts.map +1 -1
  211. package/dist/esm/utils/jwtUtils.js +61 -0
  212. package/dist/esm/utils/jwtUtils.js.map +1 -1
  213. package/dist/esm/utils/mapAppPayload.d.ts +109 -0
  214. package/dist/esm/utils/mapAppPayload.d.ts.map +1 -1
  215. package/dist/esm/utils/mapAppPayload.js +38 -2
  216. package/dist/esm/utils/mapAppPayload.js.map +1 -1
  217. package/dist/esm/utils/redactToken.d.ts +3 -0
  218. package/dist/esm/utils/redactToken.d.ts.map +1 -0
  219. package/dist/esm/utils/redactToken.js +52 -0
  220. package/dist/esm/utils/redactToken.js.map +1 -0
  221. package/dist/esm/utils/redactingSpanExporter.d.ts +24 -0
  222. package/dist/esm/utils/redactingSpanExporter.d.ts.map +1 -0
  223. package/dist/esm/utils/redactingSpanExporter.js +93 -0
  224. package/dist/esm/utils/redactingSpanExporter.js.map +1 -0
  225. package/dist/esm/utils/selfFetchRef.d.ts.map +1 -1
  226. package/dist/esm/utils/selfFetchRef.js +31 -0
  227. package/dist/esm/utils/selfFetchRef.js.map +1 -1
  228. package/dist/esm/utils/serverInstructions.d.ts +12 -0
  229. package/dist/esm/utils/serverInstructions.d.ts.map +1 -0
  230. package/dist/esm/utils/serverInstructions.js +25 -0
  231. package/dist/esm/utils/serverInstructions.js.map +1 -0
  232. package/dist/esm/utils/storeMapPayload.d.ts +11 -11
  233. package/dist/esm/utils/storeMapPayload.d.ts.map +1 -1
  234. package/dist/esm/utils/storeMapPayload.js +14 -13
  235. package/dist/esm/utils/storeMapPayload.js.map +1 -1
  236. package/dist/esm/utils/temporaryResourceManager.d.ts +10 -4
  237. package/dist/esm/utils/temporaryResourceManager.d.ts.map +1 -1
  238. package/dist/esm/utils/temporaryResourceManager.js.map +1 -1
  239. package/dist/esm/utils/tracing.d.ts +4 -0
  240. package/dist/esm/utils/tracing.d.ts.map +1 -1
  241. package/dist/esm/utils/tracing.js +23 -1
  242. package/dist/esm/utils/tracing.js.map +1 -1
  243. package/dist/esm/utils/urlSafety.d.ts +23 -7
  244. package/dist/esm/utils/urlSafety.d.ts.map +1 -1
  245. package/dist/esm/utils/urlSafety.js +80 -66
  246. package/dist/esm/utils/urlSafety.js.map +1 -1
  247. package/dist/esm/version.json +3 -3
  248. package/package.json +3 -2
  249. package/patches/{@modelcontextprotocol+sdk+1.29.0.patch → @modelcontextprotocol+sdk+1.30.0.patch} +6 -2
  250. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.d.ts +0 -15
  251. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.d.ts.map +0 -1
  252. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.js +0 -262
  253. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.js.map +0 -1
  254. package/dist/esm/resources/ui-apps/StaticMapUIResource.d.ts +0 -15
  255. package/dist/esm/resources/ui-apps/StaticMapUIResource.d.ts.map +0 -1
  256. package/dist/esm/resources/ui-apps/StaticMapUIResource.js +0 -258
  257. package/dist/esm/resources/ui-apps/StaticMapUIResource.js.map +0 -1
@@ -7,7 +7,15 @@ export const PoiSchema = z.object({
7
7
  longitude: z.number(),
8
8
  latitude: z.number(),
9
9
  category: z.string().optional(),
10
- distance_meters: z.number().optional()
10
+ distance_meters: z.number().optional(),
11
+ mapbox_id: z
12
+ .string()
13
+ .optional()
14
+ .describe('Mapbox id for this place. Pass it to place_details_tool to retrieve ratings, popularity, opening hours, and phone number.'),
15
+ external_ids: z
16
+ .record(z.string(), z.string())
17
+ .optional()
18
+ .describe('Upstream supplier ids for this place, keyed by supplier (e.g. dataplor, tripadvisor). Use to attribute where the record came from.')
11
19
  });
12
20
  export const IsochroneSummarySchema = z.object({
13
21
  profile: z.string(),
@@ -1 +1 @@
1
- {"version":3,"file":"GroundLocationTool.output.schema.js","sourceRoot":"","sources":["../../../../src/tools/ground-location-tool/GroundLocationTool.output.schema.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,SAAS,CAAC;SAChB,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,SAAS,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACnD,kCAAkC,CACnC;IACD,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CAAC,oDAAoD,CAAC;IACjE,YAAY,EAAE,eAAe,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"GroundLocationTool.output.schema.js","sourceRoot":"","sources":["../../../../src/tools/ground-location-tool/GroundLocationTool.output.schema.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,2HAA2H,CAC5H;IACH,YAAY,EAAE,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SAC9B,QAAQ,EAAE;SACV,QAAQ,CACP,oIAAoI,CACrI;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,SAAS,CAAC;SAChB,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,SAAS,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACnD,kCAAkC,CACnC;IACD,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CAAC,oDAAoD,CAAC;IACjE,YAAY,EAAE,eAAe,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,WAAW,EAAE,CAAC"}
@@ -8,7 +8,7 @@ import { IsochroneResponseSchema } from './IsochroneTool.output.schema.js';
8
8
  import { temporaryResourceManager } from '../../utils/temporaryResourceManager.js';
9
9
  import { renderHint } from '../../utils/storeMapPayload.js';
10
10
  import { buildSelfFetchRef } from '../../utils/selfFetchRef.js';
11
- import { getUserNameFromToken } from '../../utils/jwtUtils.js';
11
+ import { getOwnerKeyFromToken } from '../../utils/jwtUtils.js';
12
12
  export class IsochroneTool extends MapboxApiBasedTool {
13
13
  name = 'isochrone_tool';
14
14
  description = `Computes areas that are reachable within a specified amount of time from a location, and returns the reachable regions as contours of Polygons or LineStrings in GeoJSON format that you can display on a map.
@@ -124,7 +124,7 @@ export class IsochroneTool extends MapboxApiBasedTool {
124
124
  uri: resourceUri,
125
125
  data,
126
126
  metadata: { toolName: this.name, size: responseSize },
127
- owner: getUserNameFromToken(accessToken)
127
+ owner: getOwnerKeyFromToken(accessToken)
128
128
  });
129
129
  const contourCount = data.features?.length ?? 0;
130
130
  const summaryText = `Isochrone computed: ${contourCount} contour${contourCount !== 1 ? 's' : ''}\n\n⚠️ Full response (${Math.round(responseSize / 1024)}KB) exceeds context limit.\n\nFull GeoJSON stored as temporary resource.\nResource URI: ${resourceUri}\nTTL: 30 minutes\n\nUse the MCP resource API to retrieve full GeoJSON if needed.`;
@@ -18,8 +18,18 @@ export declare class PlaceDetailsTool extends MapboxApiBasedTool<typeof PlaceDet
18
18
  constructor(params: {
19
19
  httpRequest: HttpRequest;
20
20
  });
21
- private formatOpenHours;
21
+ /** `opening_hours` is an OSM opening_hours string, e.g. "Mo 09:00-23:45; Tu 09:00-23:45; ...". */
22
+ private formatOpeningHours;
22
23
  private formatDetailsToText;
24
+ private errorResult;
25
+ private successResult;
26
+ /** Maps a legacy Details API `Feature` onto the flat Places API output shape. */
27
+ private normalizeLegacyFeature;
28
+ /**
29
+ * Calls the legacy Details API, the only way to resolve boundary/
30
+ * administrative mapbox_ids (and the source of enhanced Japan data).
31
+ */
32
+ private fetchLegacyDetails;
23
33
  protected execute(input: z.infer<typeof PlaceDetailsInputSchema>, accessToken: string, _context: ToolExecutionContext): Promise<CallToolResult>;
24
34
  }
25
35
  //# sourceMappingURL=PlaceDetailsTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaceDetailsTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EACL,wBAAwB,EAEzB,MAAM,qCAAqC,CAAC;AAI7C,qBAAa,gBAAiB,SAAQ,kBAAkB,CACtD,OAAO,uBAAuB,EAC9B,OAAO,wBAAwB,CAChC;IACC,IAAI,SAAwB;IAC5B,WAAW,SACmT;IAC9T,WAAW;;;;;;MAMT;gBAEU,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;IAQhD,OAAO,CAAC,eAAe;IA0DvB,OAAO,CAAC,mBAAmB;cAiGX,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,EAC9C,WAAW,EAAE,MAAM,EAEnB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC;CA2C3B"}
1
+ {"version":3,"file":"PlaceDetailsTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EACL,wBAAwB,EAIzB,MAAM,qCAAqC,CAAC;AAkB7C,qBAAa,gBAAiB,SAAQ,kBAAkB,CACtD,OAAO,uBAAuB,EAC9B,OAAO,wBAAwB,CAChC;IACC,IAAI,SAAwB;IAC5B,WAAW,SACgrB;IAC3rB,WAAW;;;;;;MAMT;gBAEU,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;IAQhD,kGAAkG;IAClG,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,mBAAmB;IA6D3B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAQrB,iFAAiF;IACjF,OAAO,CAAC,sBAAsB;IAiC9B;;;OAGG;YACW,kBAAkB;cAqChB,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,EAC9C,WAAW,EAAE,MAAM,EAEnB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC;CA4B3B"}
@@ -11,14 +11,14 @@ export const PlaceDetailsInputSchema = z.object({
11
11
  attribute_sets: z
12
12
  .array(z.enum(['basic', 'photos', 'visit', 'venue']))
13
13
  .optional()
14
- .describe('Which attribute sets to include in the response. Options: "basic" (address/coordinates, always included), "photos" (place photo URLs), "visit" (opening hours, rating, price level, popularity), "venue" (phone number, website URL, social media links). When not specified, only basic attributes are returned.'),
14
+ .describe('Only used when mapbox_id resolves via the legacy Details API fallback (boundaries, neighborhoods, cities, regions — see mapbox_id\'s description). Which attribute sets to include in that response. Options: "basic" (name/address/coordinates — always requested regardless of whether you list it here), "photos" (place photo URLs), "visit" (opening hours, rating, price level, popularity), "venue" (phone number, website URL, social media links). Ignored for POI lookups, which go through the Places API and have no equivalent parameter.'),
15
15
  language: z
16
16
  .string()
17
17
  .optional()
18
- .describe('BCP 47 language tag for localized results (e.g. "en", "fr", "de", "ja"). Affects place names and address formatting.'),
18
+ .describe('Only used when mapbox_id resolves via the legacy Details API fallback (see attribute_sets). BCP 47 language tag for localized results (e.g. "en", "fr", "de", "ja"). Affects place names and address formatting. Ignored for POI lookups.'),
19
19
  worldview: z
20
20
  .enum(['ar', 'cn', 'in', 'jp', 'ma', 'ru', 'tr', 'us'])
21
21
  .optional()
22
- .describe('Worldview for geopolitically sensitive content such as disputed borders. Options: "ar" (Argentina), "cn" (China), "in" (India), "jp" (Japan), "ma" (Morocco), "ru" (Russia), "tr" (Turkey), "us" (United States, default).')
22
+ .describe('Only used when mapbox_id resolves via the legacy Details API fallback (see attribute_sets). Worldview for geopolitically sensitive content such as disputed borders. Options: "ar" (Argentina), "cn" (China), "in" (India), "jp" (Japan), "ma" (Morocco), "ru" (Russia), "tr" (Turkey), "us" (United States, default). Ignored for POI lookups.')
23
23
  });
24
24
  //# sourceMappingURL=PlaceDetailsTool.input.schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaceDetailsTool.input.schema.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.input.schema.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CACP,0MAA0M,CAC3M;IACH,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;SACpD,QAAQ,EAAE;SACV,QAAQ,CACP,mTAAmT,CACpT;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sHAAsH,CACvH;IACH,SAAS,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACtD,QAAQ,EAAE;SACV,QAAQ,CACP,4NAA4N,CAC7N;CACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"PlaceDetailsTool.input.schema.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.input.schema.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CACP,0MAA0M,CAC3M;IACH,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;SACpD,QAAQ,EAAE;SACV,QAAQ,CACP,whBAAwhB,CACzhB;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,2OAA2O,CAC5O;IACH,SAAS,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACtD,QAAQ,EAAE;SACV,QAAQ,CACP,iVAAiV,CAClV;CACJ,CAAC,CAAC"}
@@ -2,11 +2,25 @@
2
2
  // Licensed under the MIT License.
3
3
  import { MapboxApiBasedTool } from '../MapboxApiBasedTool.js';
4
4
  import { PlaceDetailsInputSchema } from './PlaceDetailsTool.input.schema.js';
5
- import { PlaceDetailsOutputSchema } from './PlaceDetailsTool.output.schema.js';
6
- // API Documentation: https://docs.mapbox.com/api/search/details/
5
+ import { PlaceDetailsOutputSchema, LegacyPlaceDetailsFeatureSchema } from './PlaceDetailsTool.output.schema.js';
6
+ // API Documentation: https://docs.mapbox.com/api/search/places/
7
+ //
8
+ // This calls the Places API's Details/Retrieve endpoint, not the older,
9
+ // separate Details API (docs.mapbox.com/api/search/details/) this tool used
10
+ // previously. The Places API is Public Preview: its default quota is 1,000
11
+ // records/month per account and 100 records/sec, and its response contract
12
+ // may change without notice.
13
+ //
14
+ // The Places API only covers POIs. It rejects boundary/administrative
15
+ // mapbox_ids (neighborhoods, cities, regions) with a 422
16
+ // "Invalid mapbox_id format" error — confirmed live against the API with a
17
+ // city's mapbox_id from search_and_geocode_tool. Those IDs, and the
18
+ // enhanced Japan data the legacy API alone provides, still need the legacy
19
+ // Details API, so this tool falls back to it on that specific error rather
20
+ // than losing that capability outright.
7
21
  export class PlaceDetailsTool extends MapboxApiBasedTool {
8
22
  name = 'place_details_tool';
9
- 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.';
23
+ 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.';
10
24
  annotations = {
11
25
  title: 'Place Details Tool',
12
26
  readOnlyHint: true,
@@ -21,143 +35,116 @@ export class PlaceDetailsTool extends MapboxApiBasedTool {
21
35
  httpRequest: params.httpRequest
22
36
  });
23
37
  }
24
- formatOpenHours(openHours) {
25
- const DAY_NAMES = [
26
- 'Sunday',
27
- 'Monday',
28
- 'Tuesday',
29
- 'Wednesday',
30
- 'Thursday',
31
- 'Friday',
32
- 'Saturday'
33
- ];
34
- // Use weekday_text if the API provides it — already formatted per day
35
- if (Array.isArray(openHours['weekday_text'])) {
36
- const lines = openHours['weekday_text']
37
- .map((line) => ` ${line}`)
38
- .join('\n');
39
- return `Hours:\n${lines}`;
40
- }
41
- // Fall back to parsing periods array
42
- if (!Array.isArray(openHours['periods']))
38
+ /** `opening_hours` is an OSM opening_hours string, e.g. "Mo 09:00-23:45; Tu 09:00-23:45; ...". */
39
+ formatOpeningHours(openingHours) {
40
+ const parts = openingHours
41
+ .split(';')
42
+ .map((part) => part.trim())
43
+ .filter(Boolean);
44
+ if (parts.length === 0)
43
45
  return '';
44
- const formatTime = (hhmm) => {
45
- const h = parseInt(hhmm.slice(0, 2), 10);
46
- const m = hhmm.slice(2);
47
- const period = h < 12 ? 'AM' : 'PM';
48
- const hour = h % 12 || 12;
49
- return m === '00' ? `${hour} ${period}` : `${hour}:${m} ${period}`;
50
- };
51
- // Group periods by open day
52
- const byDay = new Map();
53
- for (const period of openHours['periods']) {
54
- const day = period.open.day;
55
- const open = formatTime(period.open.time);
56
- const close = period.close ? formatTime(period.close.time) : 'midnight';
57
- const range = `${open} – ${close}`;
58
- const existing = byDay.get(day);
59
- if (existing) {
60
- existing.push(range);
61
- }
62
- else {
63
- byDay.set(day, [range]);
64
- }
65
- }
66
- const dayLines = DAY_NAMES.map((name, i) => {
67
- const ranges = byDay.get(i);
68
- return ` ${name}: ${ranges ? ranges.join(', ') : 'Closed'}`;
69
- });
70
- return `Hours:\n${dayLines.join('\n')}`;
46
+ const lines = parts.map((part) => ` ${part}`).join('\n');
47
+ return `Hours:\n${lines}`;
71
48
  }
72
49
  formatDetailsToText(data) {
73
- const props = data.properties;
74
50
  const lines = [];
75
- // Name
76
- lines.push(`Name: ${props.name}`);
77
- // Address
78
- if (props.full_address) {
79
- lines.push(`Address: ${props.full_address}`);
51
+ lines.push(`Name: ${data.name}`);
52
+ if (data.full_address) {
53
+ lines.push(`Address: ${data.full_address}`);
80
54
  }
81
- else if (props.place_formatted) {
82
- lines.push(`Address: ${props.place_formatted}`);
55
+ if (data.coordinates) {
56
+ lines.push(`Coordinates: ${data.coordinates.latitude}, ${data.coordinates.longitude}`);
83
57
  }
84
- else if (props.address) {
85
- lines.push(`Address: ${props.address}`);
58
+ if (data.primary_category) {
59
+ lines.push(`Type: ${data.primary_category}`);
86
60
  }
87
- // Coordinates from geometry
88
- if (data.geometry?.coordinates) {
89
- const [lng, lat] = data.geometry.coordinates;
90
- lines.push(`Coordinates: ${lat}, ${lng}`);
61
+ else if (data.feature_type) {
62
+ lines.push(`Type: ${data.feature_type}`);
91
63
  }
92
- // Feature type and categories
93
- if (props.feature_type) {
94
- lines.push(`Type: ${props.feature_type}`);
64
+ if (data.categories && data.categories.length > 0) {
65
+ lines.push(`Category: ${data.categories.join(', ')}`);
95
66
  }
96
- if (props.poi_category && props.poi_category.length > 0) {
97
- lines.push(`Category: ${props.poi_category.join(', ')}`);
67
+ if (data.brand) {
68
+ lines.push(`Brand: ${data.brand}`);
98
69
  }
99
- // Brand
100
- if (props.brand && props.brand.length > 0) {
101
- lines.push(`Brand: ${props.brand.join(', ')}`);
70
+ if (data.phone) {
71
+ lines.push(`Phone: ${data.phone}`);
102
72
  }
103
- // Venue attributes (phone, website, social media)
104
- const metadata = props.metadata;
105
- if (metadata) {
106
- if (metadata['phone']) {
107
- lines.push(`Phone: ${metadata['phone']}`);
108
- }
109
- if (metadata['website']) {
110
- lines.push(`Website: ${metadata['website']}`);
111
- }
112
- if (metadata['social_media'] &&
113
- typeof metadata['social_media'] === 'object') {
114
- const social = metadata['social_media'];
115
- const socialLinks = Object.entries(social)
116
- .map(([k, v]) => `${k}: ${v}`)
117
- .join(', ');
118
- if (socialLinks)
119
- lines.push(`Social: ${socialLinks}`);
120
- }
121
- // Visit attributes (hours, rating, price)
122
- if (metadata['price']) {
123
- lines.push(`Price: ${metadata['price']}`);
124
- }
125
- if (metadata['rating'] !== undefined) {
126
- lines.push(`Rating: ${metadata['rating']}`);
127
- }
128
- if (metadata['review_count'] !== undefined) {
129
- lines.push(`Reviews: ${metadata['review_count']}`);
130
- }
131
- if (metadata['popularity'] !== undefined) {
132
- lines.push(`Popularity: ${Math.round(metadata['popularity'] * 100)}%`);
133
- }
134
- if (metadata['open_hours'] &&
135
- typeof metadata['open_hours'] === 'object') {
136
- const formatted = this.formatOpenHours(metadata['open_hours']);
137
- if (formatted)
138
- lines.push(formatted);
139
- }
140
- // Photos
141
- if (Array.isArray(metadata['primary_photo'])) {
142
- const photos = metadata['primary_photo'];
143
- const photoUrls = photos
144
- .map((p) => p['url'] || p['thumb_url'])
145
- .filter(Boolean);
146
- if (photoUrls.length > 0) {
147
- lines.push(`Photos: ${photoUrls.join(', ')}`);
148
- }
73
+ if (data.website) {
74
+ lines.push(`Website: ${data.website}`);
75
+ }
76
+ if (data.score?.popularity !== undefined &&
77
+ data.score?.popularity !== null) {
78
+ lines.push(`Popularity: ${Math.round(data.score.popularity * 100)}%`);
79
+ }
80
+ if (data.permanently_closed) {
81
+ lines.push('Status: Permanently closed');
82
+ }
83
+ if (data.opening_hours) {
84
+ const formatted = this.formatOpeningHours(data.opening_hours);
85
+ if (formatted)
86
+ lines.push(formatted);
87
+ }
88
+ if (data.photos && data.photos.length > 0) {
89
+ const urls = data.photos.map((photo) => photo.url).filter(Boolean);
90
+ if (urls.length > 0) {
91
+ lines.push(`Photos: ${urls.join(', ')}`);
149
92
  }
150
93
  }
151
94
  return lines.join('\n');
152
95
  }
153
- async execute(input, accessToken,
154
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
155
- _context) {
96
+ errorResult(message) {
97
+ return {
98
+ content: [{ type: 'text', text: `Place Details API error: ${message}` }],
99
+ isError: true
100
+ };
101
+ }
102
+ successResult(data) {
103
+ return {
104
+ content: [{ type: 'text', text: this.formatDetailsToText(data) }],
105
+ structuredContent: data,
106
+ isError: false
107
+ };
108
+ }
109
+ /** Maps a legacy Details API `Feature` onto the flat Places API output shape. */
110
+ normalizeLegacyFeature(feature) {
111
+ const props = feature.properties;
112
+ const metadata = props.metadata;
113
+ return this.validateOutput({
114
+ mapbox_id: props.mapbox_id,
115
+ name: props.name,
116
+ full_address: props.full_address ?? props.place_formatted ?? props.address,
117
+ feature_type: props.feature_type,
118
+ coordinates: props.coordinates ??
119
+ (feature.geometry?.coordinates
120
+ ? {
121
+ longitude: feature.geometry.coordinates[0],
122
+ latitude: feature.geometry.coordinates[1]
123
+ }
124
+ : undefined),
125
+ bbox: props.bbox,
126
+ context: props.context,
127
+ categories: props.poi_category,
128
+ brand: props.brand && props.brand.length > 0
129
+ ? props.brand.join(', ')
130
+ : undefined,
131
+ phone: metadata?.['phone'],
132
+ website: metadata?.['website'],
133
+ metadata
134
+ });
135
+ }
136
+ /**
137
+ * Calls the legacy Details API, the only way to resolve boundary/
138
+ * administrative mapbox_ids (and the source of enhanced Japan data).
139
+ */
140
+ async fetchLegacyDetails(input, accessToken) {
156
141
  const url = new URL(`${MapboxApiBasedTool.mapboxApiEndpoint}search/details/v1/retrieve/${encodeURIComponent(input.mapbox_id)}`);
157
142
  url.searchParams.append('access_token', accessToken);
158
- if (input.attribute_sets && input.attribute_sets.length > 0) {
159
- url.searchParams.append('attribute_sets', input.attribute_sets.join(','));
160
- }
143
+ // "basic" (name, feature_type, address, coordinates) must always be
144
+ // requested — normalizeLegacyFeature() depends on those fields, even if
145
+ // the caller's attribute_sets omits it.
146
+ const attributeSets = new Set(['basic', ...(input.attribute_sets ?? [])]);
147
+ url.searchParams.append('attribute_sets', Array.from(attributeSets).join(','));
161
148
  if (input.language) {
162
149
  url.searchParams.append('language', input.language);
163
150
  }
@@ -166,24 +153,32 @@ export class PlaceDetailsTool extends MapboxApiBasedTool {
166
153
  }
167
154
  const response = await this.httpRequest(url.toString());
168
155
  if (!response.ok) {
169
- const errorMessage = await this.getErrorMessage(response);
170
- return {
171
- content: [
172
- {
173
- type: 'text',
174
- text: `Place Details API error: ${errorMessage}`
175
- }
176
- ],
177
- isError: true
178
- };
156
+ return { ok: false, errorMessage: await this.getErrorMessage(response) };
179
157
  }
180
- const rawData = await response.json();
181
- const data = this.validateOutput(rawData);
182
- return {
183
- content: [{ type: 'text', text: this.formatDetailsToText(data) }],
184
- structuredContent: data,
185
- isError: false
186
- };
158
+ const rawFeature = LegacyPlaceDetailsFeatureSchema.parse(await response.json());
159
+ return { ok: true, data: this.normalizeLegacyFeature(rawFeature) };
160
+ }
161
+ async execute(input, accessToken,
162
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
163
+ _context) {
164
+ const url = new URL(`${MapboxApiBasedTool.mapboxApiEndpoint}places/v1/details/retrieve/${encodeURIComponent(input.mapbox_id)}`);
165
+ url.searchParams.append('access_token', accessToken);
166
+ const response = await this.httpRequest(url.toString());
167
+ if (response.ok) {
168
+ const data = this.validateOutput(await response.json());
169
+ return this.successResult(data);
170
+ }
171
+ // The Places API rejects non-POI mapbox_ids (boundaries/neighborhoods/
172
+ // cities/regions) with 422 "Invalid mapbox_id format" — fall back to the
173
+ // legacy Details API, which still resolves those, instead of erroring.
174
+ if (response.status === 422) {
175
+ const legacyResult = await this.fetchLegacyDetails(input, accessToken);
176
+ if (legacyResult.ok) {
177
+ return this.successResult(legacyResult.data);
178
+ }
179
+ return this.errorResult(legacyResult.errorMessage);
180
+ }
181
+ return this.errorResult(await this.getErrorMessage(response));
187
182
  }
188
183
  }
189
184
  //# sourceMappingURL=PlaceDetailsTool.js.map
@@ -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"}