@mapbox/mcp-server 0.0.2 → 0.1.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 (88) hide show
  1. package/dist/cjs/package.json +3 -0
  2. package/dist/esm/package.json +3 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +38 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/tools/MapboxApiBasedTool.d.ts +75 -0
  8. package/dist/tools/MapboxApiBasedTool.d.ts.map +1 -0
  9. package/dist/tools/MapboxApiBasedTool.js +78 -0
  10. package/dist/tools/MapboxApiBasedTool.js.map +1 -0
  11. package/dist/tools/category-search-tool/CategorySearchTool.d.ts +39 -0
  12. package/dist/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -0
  13. package/dist/tools/category-search-tool/CategorySearchTool.js +638 -0
  14. package/dist/tools/category-search-tool/CategorySearchTool.js.map +1 -0
  15. package/dist/tools/category-search-tool/CategorySearchTool.test.d.ts +2 -0
  16. package/dist/tools/category-search-tool/CategorySearchTool.test.d.ts.map +1 -0
  17. package/dist/tools/category-search-tool/CategorySearchTool.test.js +289 -0
  18. package/dist/tools/category-search-tool/CategorySearchTool.test.js.map +1 -0
  19. package/dist/tools/directions-tool/DirectionsTool.d.ts +53 -0
  20. package/dist/tools/directions-tool/DirectionsTool.d.ts.map +1 -0
  21. package/dist/tools/directions-tool/DirectionsTool.js +405 -0
  22. package/dist/tools/directions-tool/DirectionsTool.js.map +1 -0
  23. package/dist/tools/directions-tool/DirectionsTool.test.d.ts +2 -0
  24. package/dist/tools/directions-tool/DirectionsTool.test.d.ts.map +1 -0
  25. package/dist/tools/directions-tool/DirectionsTool.test.js +867 -0
  26. package/dist/tools/directions-tool/DirectionsTool.test.js.map +1 -0
  27. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts +51 -0
  28. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts.map +1 -0
  29. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.js +182 -0
  30. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.js.map +1 -0
  31. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.d.ts +2 -0
  32. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.d.ts.map +1 -0
  33. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.js +335 -0
  34. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.js.map +1 -0
  35. package/dist/tools/isochrone-tool/IsochroneTool.d.ts +44 -0
  36. package/dist/tools/isochrone-tool/IsochroneTool.d.ts.map +1 -0
  37. package/dist/tools/isochrone-tool/IsochroneTool.js +108 -0
  38. package/dist/tools/isochrone-tool/IsochroneTool.js.map +1 -0
  39. package/dist/tools/isochrone-tool/IsochroneTool.test.d.ts +2 -0
  40. package/dist/tools/isochrone-tool/IsochroneTool.test.d.ts.map +1 -0
  41. package/dist/tools/isochrone-tool/IsochroneTool.test.js +110 -0
  42. package/dist/tools/isochrone-tool/IsochroneTool.test.js.map +1 -0
  43. package/dist/tools/matrix-tool/MatrixTool.d.ts +35 -0
  44. package/dist/tools/matrix-tool/MatrixTool.d.ts.map +1 -0
  45. package/dist/tools/matrix-tool/MatrixTool.js +195 -0
  46. package/dist/tools/matrix-tool/MatrixTool.js.map +1 -0
  47. package/dist/tools/matrix-tool/MatrixTool.test.d.ts +2 -0
  48. package/dist/tools/matrix-tool/MatrixTool.test.d.ts.map +1 -0
  49. package/dist/tools/matrix-tool/MatrixTool.test.js +803 -0
  50. package/dist/tools/matrix-tool/MatrixTool.test.js.map +1 -0
  51. package/dist/tools/poi-search-tool/PoiSearchTool.d.ts +54 -0
  52. package/dist/tools/poi-search-tool/PoiSearchTool.d.ts.map +1 -0
  53. package/dist/tools/poi-search-tool/PoiSearchTool.js +193 -0
  54. package/dist/tools/poi-search-tool/PoiSearchTool.js.map +1 -0
  55. package/dist/tools/poi-search-tool/PoiSearchTool.test.d.ts +2 -0
  56. package/dist/tools/poi-search-tool/PoiSearchTool.test.d.ts.map +1 -0
  57. package/dist/tools/poi-search-tool/PoiSearchTool.test.js +338 -0
  58. package/dist/tools/poi-search-tool/PoiSearchTool.test.js.map +1 -0
  59. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts +42 -0
  60. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts.map +1 -0
  61. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.js +131 -0
  62. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.js.map +1 -0
  63. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.d.ts +2 -0
  64. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.d.ts.map +1 -0
  65. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.js +340 -0
  66. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.js.map +1 -0
  67. package/dist/tools/static-map-image-tool/StaticMapImageTool.d.ts +148 -0
  68. package/dist/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -0
  69. package/dist/tools/static-map-image-tool/StaticMapImageTool.js +406 -0
  70. package/dist/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -0
  71. package/dist/tools/static-map-image-tool/StaticMapImageTool.test.d.ts +2 -0
  72. package/dist/tools/static-map-image-tool/StaticMapImageTool.test.d.ts.map +1 -0
  73. package/dist/tools/static-map-image-tool/StaticMapImageTool.test.js +440 -0
  74. package/dist/tools/static-map-image-tool/StaticMapImageTool.test.js.map +1 -0
  75. package/dist/utils/requestUtils.d.ts +6 -0
  76. package/dist/utils/requestUtils.d.ts.map +1 -0
  77. package/dist/utils/requestUtils.js +29 -0
  78. package/dist/utils/requestUtils.js.map +1 -0
  79. package/dist/utils/requestUtils.test-helpers.d.ts +3 -0
  80. package/dist/utils/requestUtils.test-helpers.d.ts.map +1 -0
  81. package/dist/utils/requestUtils.test-helpers.js +28 -0
  82. package/dist/utils/requestUtils.test-helpers.js.map +1 -0
  83. package/dist/utils/versionUtils.d.ts +9 -0
  84. package/dist/utils/versionUtils.d.ts.map +1 -0
  85. package/dist/utils/versionUtils.js +25 -0
  86. package/dist/utils/versionUtils.js.map +1 -0
  87. package/dist/version.json +6 -0
  88. package/package.json +2 -2
@@ -0,0 +1,338 @@
1
+ // Set the token before importing the tool
2
+ process.env.MAPBOX_ACCESS_TOKEN = 'test-token';
3
+ import { setupFetch, assertHeadersSent } from '../../utils/requestUtils.test-helpers.js';
4
+ import { PoiSearchTool } from '../poi-search-tool/PoiSearchTool.js';
5
+ describe('PoiSearchTool', () => {
6
+ afterEach(() => {
7
+ jest.restoreAllMocks();
8
+ });
9
+ it('sends custom header', async () => {
10
+ const mockFetch = setupFetch();
11
+ await new PoiSearchTool().run({
12
+ q: 'coffee shop'
13
+ });
14
+ assertHeadersSent(mockFetch);
15
+ });
16
+ it('constructs correct URL with required parameters', async () => {
17
+ const mockFetch = setupFetch();
18
+ await new PoiSearchTool().run({
19
+ q: 'starbucks'
20
+ });
21
+ const calledUrl = mockFetch.mock.calls[0][0];
22
+ expect(calledUrl).toContain('search/searchbox/v1/forward');
23
+ expect(calledUrl).toContain('q=starbucks');
24
+ expect(calledUrl).toContain('access_token=');
25
+ });
26
+ it('includes all optional parameters in URL', async () => {
27
+ const mockFetch = setupFetch();
28
+ await new PoiSearchTool().run({
29
+ q: 'restaurant',
30
+ language: 'es',
31
+ limit: 5,
32
+ proximity: [-74.006, 40.7128],
33
+ bbox: [-74.1, 40.6, -73.9, 40.8],
34
+ country: ['US', 'CA'],
35
+ types: ['poi', 'address'],
36
+ poi_category: ['restaurant', 'cafe'],
37
+ auto_complete: true,
38
+ eta_type: 'navigation',
39
+ navigation_profile: 'driving',
40
+ origin: [-74.0, 40.7]
41
+ });
42
+ const calledUrl = mockFetch.mock.calls[0][0];
43
+ expect(calledUrl).toContain('q=restaurant');
44
+ expect(calledUrl).toContain('language=es');
45
+ expect(calledUrl).toContain('limit=5');
46
+ expect(calledUrl).toContain('proximity=-74.006%2C40.7128');
47
+ expect(calledUrl).toContain('bbox=-74.1%2C40.6%2C-73.9%2C40.8');
48
+ expect(calledUrl).toContain('country=US%2CCA');
49
+ expect(calledUrl).toContain('types=poi%2Caddress');
50
+ expect(calledUrl).toContain('poi_category=restaurant%2Ccafe');
51
+ expect(calledUrl).toContain('auto_complete=true');
52
+ expect(calledUrl).toContain('eta_type=navigation');
53
+ expect(calledUrl).toContain('navigation_profile=driving');
54
+ expect(calledUrl).toContain('origin=-74%2C40.7');
55
+ });
56
+ it('handles IP-based proximity', async () => {
57
+ const mockFetch = setupFetch();
58
+ await new PoiSearchTool().run({
59
+ q: 'pizza',
60
+ proximity: 'ip'
61
+ });
62
+ const calledUrl = mockFetch.mock.calls[0][0];
63
+ expect(calledUrl).toContain('proximity=ip');
64
+ });
65
+ it('handles string format proximity coordinates', async () => {
66
+ const mockFetch = setupFetch();
67
+ await new PoiSearchTool().run({
68
+ q: 'museum',
69
+ proximity: '-82.451668,27.942976'
70
+ });
71
+ const calledUrl = mockFetch.mock.calls[0][0];
72
+ expect(calledUrl).toContain('proximity=-82.451668%2C27.942976');
73
+ });
74
+ it('handles array-like string format proximity', async () => {
75
+ const mockFetch = setupFetch();
76
+ await new PoiSearchTool().run({
77
+ q: 'bank',
78
+ proximity: '[-82.451668, 27.942964]'
79
+ });
80
+ const calledUrl = mockFetch.mock.calls[0][0];
81
+ expect(calledUrl).toContain('proximity=-82.451668%2C27.942964');
82
+ });
83
+ it('uses default limit when not specified', async () => {
84
+ const mockFetch = setupFetch();
85
+ await new PoiSearchTool().run({
86
+ q: 'pharmacy'
87
+ });
88
+ const calledUrl = mockFetch.mock.calls[0][0];
89
+ expect(calledUrl).toContain('limit=10');
90
+ });
91
+ it('handles fetch errors gracefully', async () => {
92
+ const mockFetch = setupFetch({
93
+ ok: false,
94
+ status: 404,
95
+ statusText: 'Not Found'
96
+ });
97
+ const result = await new PoiSearchTool().run({
98
+ q: 'test query'
99
+ });
100
+ expect(result.is_error).toBe(true);
101
+ expect(result.content[0]).toMatchObject({
102
+ type: 'text',
103
+ text: 'Internal error has occurred.'
104
+ });
105
+ });
106
+ it('validates query length constraint', async () => {
107
+ const tool = new PoiSearchTool();
108
+ const longQuery = 'a'.repeat(257); // 257 characters, exceeds limit
109
+ await expect(tool.run({
110
+ q: longQuery
111
+ })).resolves.toMatchObject({
112
+ is_error: true
113
+ });
114
+ });
115
+ it('validates limit constraints', async () => {
116
+ const tool = new PoiSearchTool();
117
+ // Test limit too high
118
+ await expect(tool.run({
119
+ q: 'test',
120
+ limit: 11
121
+ })).resolves.toMatchObject({
122
+ is_error: true
123
+ });
124
+ // Test limit too low
125
+ await expect(tool.run({
126
+ q: 'test',
127
+ limit: 0
128
+ })).resolves.toMatchObject({
129
+ is_error: true
130
+ });
131
+ });
132
+ it('validates coordinate constraints', async () => {
133
+ const tool = new PoiSearchTool();
134
+ // Test invalid longitude in proximity
135
+ await expect(tool.run({
136
+ q: 'test',
137
+ proximity: [-181, 40]
138
+ })).resolves.toMatchObject({
139
+ is_error: true
140
+ });
141
+ // Test invalid latitude in bbox
142
+ await expect(tool.run({
143
+ q: 'test',
144
+ bbox: [-74, -91, -73, 40]
145
+ })).resolves.toMatchObject({
146
+ is_error: true
147
+ });
148
+ });
149
+ it('encodes special characters in query', async () => {
150
+ const mockFetch = setupFetch();
151
+ await new PoiSearchTool().run({
152
+ q: 'coffee & tea shop'
153
+ });
154
+ const calledUrl = mockFetch.mock.calls[0][0];
155
+ expect(calledUrl).toContain('q=coffee+%26+tea+shop');
156
+ });
157
+ it('validates navigation profile requires eta_type', async () => {
158
+ const mockFetch = setupFetch();
159
+ // navigation_profile should work when eta_type is set
160
+ await new PoiSearchTool().run({
161
+ q: 'test',
162
+ eta_type: 'navigation',
163
+ navigation_profile: 'driving'
164
+ });
165
+ const calledUrl = mockFetch.mock.calls[0][0];
166
+ expect(calledUrl).toContain('eta_type=navigation');
167
+ expect(calledUrl).toContain('navigation_profile=driving');
168
+ });
169
+ it('supports proximity=ip for IP-based location', async () => {
170
+ const mockFetch = setupFetch({
171
+ type: 'FeatureCollection',
172
+ features: [
173
+ {
174
+ type: 'Feature',
175
+ properties: { name: 'Local Coffee Shop' }
176
+ }
177
+ ]
178
+ });
179
+ await new PoiSearchTool().run({
180
+ q: 'Starbucks',
181
+ proximity: 'ip'
182
+ });
183
+ const calledUrl = mockFetch.mock.calls[0][0];
184
+ expect(calledUrl).toContain('proximity=ip');
185
+ });
186
+ it('formats GeoJSON response to text with basic information', async () => {
187
+ const mockResponse = {
188
+ type: 'FeatureCollection',
189
+ features: [
190
+ {
191
+ type: 'Feature',
192
+ properties: {
193
+ name: 'Starbucks Coffee',
194
+ full_address: '123 Main St, New York, NY 10001',
195
+ feature_type: 'poi',
196
+ poi_category: ['coffee', 'restaurant']
197
+ },
198
+ geometry: {
199
+ type: 'Point',
200
+ coordinates: [-74.006, 40.7128]
201
+ }
202
+ }
203
+ ]
204
+ };
205
+ const mockFetch = setupFetch({
206
+ json: async () => mockResponse
207
+ });
208
+ const result = await new PoiSearchTool().run({
209
+ q: 'Starbucks'
210
+ });
211
+ expect(result.is_error).toBe(false);
212
+ expect(result.content[0].type).toBe('text');
213
+ const textContent = result.content[0].text;
214
+ expect(textContent).toContain('1. Starbucks Coffee');
215
+ expect(textContent).toContain('Address: 123 Main St, New York, NY 10001');
216
+ expect(textContent).toContain('Coordinates: 40.7128, -74.006');
217
+ expect(textContent).toContain('Type: poi');
218
+ expect(textContent).toContain('Category: coffee, restaurant');
219
+ });
220
+ it('formats GeoJSON response with name_preferred', async () => {
221
+ const mockResponse = {
222
+ type: 'FeatureCollection',
223
+ features: [
224
+ {
225
+ type: 'Feature',
226
+ properties: {
227
+ name: 'Central Park',
228
+ name_preferred: 'The Central Park',
229
+ place_formatted: 'Central Park, New York, NY'
230
+ },
231
+ geometry: {
232
+ type: 'Point',
233
+ coordinates: [-73.965, 40.782]
234
+ }
235
+ }
236
+ ]
237
+ };
238
+ const mockFetch = setupFetch({
239
+ json: async () => mockResponse
240
+ });
241
+ const result = await new PoiSearchTool().run({
242
+ q: 'Central Park'
243
+ });
244
+ expect(result.is_error).toBe(false);
245
+ const textContent = result.content[0].text;
246
+ expect(textContent).toContain('1. Central Park (The Central Park)');
247
+ expect(textContent).toContain('Address: Central Park, New York, NY');
248
+ expect(textContent).toContain('Coordinates: 40.782, -73.965');
249
+ });
250
+ it('handles multiple results in formatted text', async () => {
251
+ const mockResponse = {
252
+ type: 'FeatureCollection',
253
+ features: [
254
+ {
255
+ type: 'Feature',
256
+ properties: {
257
+ name: 'Starbucks #1',
258
+ full_address: '123 Main St, New York, NY 10001',
259
+ feature_type: 'poi'
260
+ },
261
+ geometry: {
262
+ type: 'Point',
263
+ coordinates: [-74.006, 40.7128]
264
+ }
265
+ },
266
+ {
267
+ type: 'Feature',
268
+ properties: {
269
+ name: 'Starbucks #2',
270
+ full_address: '456 Broadway, New York, NY 10013',
271
+ feature_type: 'poi'
272
+ },
273
+ geometry: {
274
+ type: 'Point',
275
+ coordinates: [-74.012, 40.72]
276
+ }
277
+ }
278
+ ]
279
+ };
280
+ const mockFetch = setupFetch({
281
+ json: async () => mockResponse
282
+ });
283
+ const result = await new PoiSearchTool().run({
284
+ q: 'Starbucks',
285
+ limit: 2
286
+ });
287
+ expect(result.is_error).toBe(false);
288
+ const textContent = result.content[0].text;
289
+ expect(textContent).toContain('1. Starbucks #1');
290
+ expect(textContent).toContain('2. Starbucks #2');
291
+ expect(textContent).toContain('123 Main St, New York, NY 10001');
292
+ expect(textContent).toContain('456 Broadway, New York, NY 10013');
293
+ });
294
+ it('handles empty results gracefully', async () => {
295
+ const mockResponse = {
296
+ type: 'FeatureCollection',
297
+ features: []
298
+ };
299
+ const mockFetch = setupFetch({
300
+ json: async () => mockResponse
301
+ });
302
+ const result = await new PoiSearchTool().run({
303
+ q: 'NonexistentPlace'
304
+ });
305
+ expect(result.is_error).toBe(false);
306
+ expect(result.content[0].type).toBe('text');
307
+ expect(result.content[0].text).toBe('No results found.');
308
+ });
309
+ it('handles results with minimal properties', async () => {
310
+ const mockResponse = {
311
+ type: 'FeatureCollection',
312
+ features: [
313
+ {
314
+ type: 'Feature',
315
+ properties: {
316
+ name: 'Some Location'
317
+ },
318
+ geometry: {
319
+ type: 'Point',
320
+ coordinates: [-74.006, 40.7128]
321
+ }
322
+ }
323
+ ]
324
+ };
325
+ const mockFetch = setupFetch({
326
+ json: async () => mockResponse
327
+ });
328
+ const result = await new PoiSearchTool().run({
329
+ q: 'location'
330
+ });
331
+ expect(result.is_error).toBe(false);
332
+ const textContent = result.content[0].text;
333
+ expect(textContent).toContain('1. Some Location');
334
+ expect(textContent).toContain('Coordinates: 40.7128, -74.006');
335
+ expect(textContent).not.toContain('Address:');
336
+ });
337
+ });
338
+ //# sourceMappingURL=PoiSearchTool.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PoiSearchTool.test.js","sourceRoot":"","sources":["../../../src/tools/poi-search-tool/PoiSearchTool.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+ import { MapboxApiBasedTool } from '../MapboxApiBasedTool.js';
3
+ declare const ReverseGeocodeInputSchema: z.ZodObject<{
4
+ longitude: z.ZodNumber;
5
+ latitude: z.ZodNumber;
6
+ permanent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
7
+ country: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
8
+ language: z.ZodOptional<z.ZodString>;
9
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
+ types: z.ZodOptional<z.ZodArray<z.ZodEnum<["country", "region", "postcode", "district", "place", "locality", "neighborhood", "address"]>, "many">>;
11
+ worldview: z.ZodDefault<z.ZodOptional<z.ZodEnum<["us", "cn", "jp", "in"]>>>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ limit: number;
14
+ permanent: boolean;
15
+ worldview: "us" | "cn" | "jp" | "in";
16
+ longitude: number;
17
+ latitude: number;
18
+ country?: string[] | undefined;
19
+ language?: string | undefined;
20
+ types?: ("country" | "region" | "postcode" | "district" | "place" | "locality" | "neighborhood" | "address")[] | undefined;
21
+ }, {
22
+ longitude: number;
23
+ latitude: number;
24
+ country?: string[] | undefined;
25
+ language?: string | undefined;
26
+ limit?: number | undefined;
27
+ permanent?: boolean | undefined;
28
+ types?: ("country" | "region" | "postcode" | "district" | "place" | "locality" | "neighborhood" | "address")[] | undefined;
29
+ worldview?: "us" | "cn" | "jp" | "in" | undefined;
30
+ }>;
31
+ export declare class ReverseGeocodeTool extends MapboxApiBasedTool<typeof ReverseGeocodeInputSchema> {
32
+ name: string;
33
+ description: string;
34
+ constructor();
35
+ private formatGeoJsonToText;
36
+ protected execute(input: z.infer<typeof ReverseGeocodeInputSchema>): Promise<{
37
+ type: 'text';
38
+ text: string;
39
+ }>;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=ReverseGeocodeTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReverseGeocodeTool.d.ts","sourceRoot":"","sources":["../../../src/tools/reverse-geocode-tool/ReverseGeocodeTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuD7B,CAAC;AAEH,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,OAAO,yBAAyB,CACjC;IACC,IAAI,SAAwB;IAC5B,WAAW,SAC+Y;;IAM1Z,OAAO,CAAC,mBAAmB;cA+CX,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,GAC/C,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CA0D3C"}
@@ -0,0 +1,131 @@
1
+ import { z } from 'zod';
2
+ import { MapboxApiBasedTool } from '../MapboxApiBasedTool.js';
3
+ const ReverseGeocodeInputSchema = z.object({
4
+ longitude: z
5
+ .number()
6
+ .min(-180)
7
+ .max(180)
8
+ .describe('Longitude coordinate to reverse geocode'),
9
+ latitude: z
10
+ .number()
11
+ .min(-90)
12
+ .max(90)
13
+ .describe('Latitude coordinate to reverse geocode'),
14
+ permanent: z
15
+ .boolean()
16
+ .optional()
17
+ .default(false)
18
+ .describe('Whether results can be stored permanently'),
19
+ country: z
20
+ .array(z.string().length(2))
21
+ .optional()
22
+ .describe('Array of ISO 3166 alpha 2 country codes to limit results'),
23
+ language: z
24
+ .string()
25
+ .optional()
26
+ .describe('IETF language tag for the response (e.g., "en", "es", "fr", "de", "ja")'),
27
+ limit: z
28
+ .number()
29
+ .min(1)
30
+ .max(5)
31
+ .optional()
32
+ .default(1)
33
+ .describe('Maximum number of results (1-5). Use 1 for best results. If you need more than 1 result, you must specify exactly one type in the types parameter.'),
34
+ types: z
35
+ .array(z.enum([
36
+ 'country',
37
+ 'region',
38
+ 'postcode',
39
+ 'district',
40
+ 'place',
41
+ 'locality',
42
+ 'neighborhood',
43
+ 'address'
44
+ ]))
45
+ .optional()
46
+ .describe('Array of feature types to filter results'),
47
+ worldview: z
48
+ .enum(['us', 'cn', 'jp', 'in'])
49
+ .optional()
50
+ .default('us')
51
+ .describe('Returns features from a specific regional perspective')
52
+ });
53
+ export class ReverseGeocodeTool extends MapboxApiBasedTool {
54
+ name = 'ReverseGeocodeTool';
55
+ description = 'Find addresses, cities, towns, neighborhoods, postcodes, districts, regions, and countries around a specified geographic coordinate pair. Converts geographic coordinates (longitude, latitude) into human-readable addresses or place names. Use limit=1 for best results. This tool cannot reverse geocode businesses, landmarks, historic sites, and other points of interest that are not of the types mentioned.';
56
+ constructor() {
57
+ super({ inputSchema: ReverseGeocodeInputSchema });
58
+ }
59
+ formatGeoJsonToText(geoJsonResponse) {
60
+ if (!geoJsonResponse ||
61
+ !geoJsonResponse.features ||
62
+ geoJsonResponse.features.length === 0) {
63
+ return 'No results found.';
64
+ }
65
+ const results = geoJsonResponse.features.map((feature, index) => {
66
+ const props = feature.properties || {};
67
+ const geom = feature.geometry || {};
68
+ let result = `${index + 1}. `;
69
+ // Place name
70
+ result += `${props.name}`;
71
+ if (props.name_preferred) {
72
+ result += ` (${props.name_preferred})`;
73
+ }
74
+ // Full address
75
+ if (props.full_address) {
76
+ result += `\n Address: ${props.full_address}`;
77
+ }
78
+ else if (props.place_formatted) {
79
+ result += `\n Address: ${props.place_formatted}`;
80
+ }
81
+ // Geographic coordinates
82
+ if (geom.coordinates && Array.isArray(geom.coordinates)) {
83
+ const [lng, lat] = geom.coordinates;
84
+ result += `\n Coordinates: ${lat}, ${lng}`;
85
+ }
86
+ // Feature type
87
+ if (props.feature_type) {
88
+ result += `\n Type: ${props.feature_type}`;
89
+ }
90
+ return result;
91
+ });
92
+ return results.join('\n\n');
93
+ }
94
+ async execute(input) {
95
+ // When limit > 1, must specify exactly one type
96
+ if (input.limit &&
97
+ input.limit > 1 &&
98
+ (!input.types || input.types.length !== 1)) {
99
+ throw new Error('When limit > 1 for reverse geocoding, you must specify exactly one type in the types parameter (e.g., types: ["address"]). Consider using limit: 1 instead for best results.');
100
+ }
101
+ const url = new URL(`${MapboxApiBasedTool.MAPBOX_API_ENDPOINT}search/geocode/v6/reverse`);
102
+ // Required parameters
103
+ url.searchParams.append('longitude', input.longitude.toString());
104
+ url.searchParams.append('latitude', input.latitude.toString());
105
+ url.searchParams.append('access_token', MapboxApiBasedTool.MAPBOX_ACCESS_TOKEN);
106
+ // Optional parameters
107
+ url.searchParams.append('permanent', input.permanent.toString());
108
+ url.searchParams.append('limit', input.limit.toString());
109
+ url.searchParams.append('worldview', input.worldview);
110
+ if (input.country && input.country.length > 0) {
111
+ url.searchParams.append('country', input.country.join(','));
112
+ }
113
+ if (input.language) {
114
+ url.searchParams.append('language', input.language);
115
+ }
116
+ if (input.types && input.types.length > 0) {
117
+ url.searchParams.append('types', input.types.join(','));
118
+ }
119
+ const response = await fetch(url.toString());
120
+ if (!response.ok) {
121
+ throw new Error(`Failed to reverse geocode: ${response.status} ${response.statusText}`);
122
+ }
123
+ const data = (await response.json());
124
+ // Check if the response has features
125
+ if (!data || !data.features || data.features.length === 0) {
126
+ return { type: 'text', text: 'No results found.' };
127
+ }
128
+ return { type: 'text', text: this.formatGeoJsonToText(data) };
129
+ }
130
+ }
131
+ //# sourceMappingURL=ReverseGeocodeTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReverseGeocodeTool.js","sourceRoot":"","sources":["../../../src/tools/reverse-geocode-tool/ReverseGeocodeTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ReverseGeocodeTool.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReverseGeocodeTool.test.d.ts","sourceRoot":"","sources":["../../../src/tools/reverse-geocode-tool/ReverseGeocodeTool.test.ts"],"names":[],"mappings":""}