@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,440 @@
1
+ process.env.MAPBOX_ACCESS_TOKEN = 'test-token';
2
+ import { setupFetch, assertHeadersSent } from '../../utils/requestUtils.test-helpers.js';
3
+ import { StaticMapImageTool } from '../static-map-image-tool/StaticMapImageTool.js';
4
+ describe('StaticMapImageTool', () => {
5
+ afterEach(() => {
6
+ jest.restoreAllMocks();
7
+ });
8
+ it('sends custom header', async () => {
9
+ const mockFetch = setupFetch();
10
+ await new StaticMapImageTool().run({
11
+ center: [-74.006, 40.7128],
12
+ zoom: 12,
13
+ size: [600, 400],
14
+ style: 'mapbox/streets-v12'
15
+ });
16
+ assertHeadersSent(mockFetch);
17
+ });
18
+ it('returns image content with base64 data', async () => {
19
+ // Mock image buffer
20
+ const mockImageBuffer = Buffer.from('fake-image-data');
21
+ const mockArrayBuffer = mockImageBuffer.buffer.slice(mockImageBuffer.byteOffset, mockImageBuffer.byteOffset + mockImageBuffer.byteLength);
22
+ const mockFetch = setupFetch({
23
+ arrayBuffer: jest.fn().mockResolvedValue(mockArrayBuffer)
24
+ });
25
+ const result = await new StaticMapImageTool().run({
26
+ center: [-74.006, 40.7128],
27
+ zoom: 10,
28
+ size: [800, 600],
29
+ style: 'mapbox/satellite-v9'
30
+ });
31
+ expect(result.is_error).toBe(false);
32
+ expect(result.content).toHaveLength(1);
33
+ expect(result.content[0]).toMatchObject({
34
+ type: 'image',
35
+ data: mockImageBuffer.toString('base64'),
36
+ mimeType: 'image/jpeg' // satellite is a raster style
37
+ });
38
+ });
39
+ it('constructs correct Mapbox Static API URL', async () => {
40
+ const mockFetch = setupFetch();
41
+ await new StaticMapImageTool().run({
42
+ center: [-122.4194, 37.7749],
43
+ zoom: 15,
44
+ size: [1024, 768],
45
+ style: 'mapbox/dark-v10'
46
+ });
47
+ const calledUrl = mockFetch.mock.calls[0][0];
48
+ expect(calledUrl).toContain('styles/v1/mapbox/dark-v10/static/');
49
+ expect(calledUrl).toContain('-122.4194,37.7749,15');
50
+ expect(calledUrl).toContain('1024x768');
51
+ expect(calledUrl).toContain('access_token=');
52
+ });
53
+ it('uses default style when not specified', async () => {
54
+ const mockFetch = setupFetch();
55
+ await new StaticMapImageTool().run({
56
+ center: [0, 0],
57
+ zoom: 1,
58
+ size: [300, 200]
59
+ });
60
+ const calledUrl = mockFetch.mock.calls[0][0];
61
+ expect(calledUrl).toContain('styles/v1/mapbox/streets-v12/static/');
62
+ });
63
+ it('handles fetch errors gracefully', async () => {
64
+ const mockFetch = setupFetch({
65
+ ok: false,
66
+ status: 404,
67
+ statusText: 'Not Found'
68
+ });
69
+ const result = await new StaticMapImageTool().run({
70
+ center: [-74.006, 40.7128],
71
+ zoom: 12,
72
+ size: [600, 400]
73
+ });
74
+ expect(result.is_error).toBe(true);
75
+ expect(result.content[0]).toMatchObject({
76
+ type: 'text',
77
+ text: 'Internal error has occurred.'
78
+ });
79
+ });
80
+ it('validates coordinate constraints', async () => {
81
+ const tool = new StaticMapImageTool();
82
+ // Test invalid longitude
83
+ await expect(tool.run({
84
+ center: [-181, 40],
85
+ zoom: 10,
86
+ size: [600, 400]
87
+ })).resolves.toMatchObject({
88
+ is_error: true
89
+ });
90
+ // Test invalid latitude
91
+ await expect(tool.run({
92
+ center: [-74, 90],
93
+ zoom: 10,
94
+ size: [600, 400]
95
+ })).resolves.toMatchObject({
96
+ is_error: true
97
+ });
98
+ });
99
+ it('validates size constraints', async () => {
100
+ const tool = new StaticMapImageTool();
101
+ // Test size too large
102
+ await expect(tool.run({
103
+ center: [-74.006, 40.7128],
104
+ zoom: 10,
105
+ size: [1281, 600]
106
+ })).resolves.toMatchObject({
107
+ is_error: true
108
+ });
109
+ // Test size too small
110
+ await expect(tool.run({
111
+ center: [-74.006, 40.7128],
112
+ zoom: 10,
113
+ size: [0, 600]
114
+ })).resolves.toMatchObject({
115
+ is_error: true
116
+ });
117
+ });
118
+ it('supports high density parameter', async () => {
119
+ const mockFetch = setupFetch();
120
+ await new StaticMapImageTool().run({
121
+ center: [-74.006, 40.7128],
122
+ zoom: 12,
123
+ size: [600, 400],
124
+ highDensity: true
125
+ });
126
+ const calledUrl = mockFetch.mock.calls[0][0];
127
+ expect(calledUrl).toContain('600x400@2x');
128
+ });
129
+ describe('overlay support', () => {
130
+ it('adds marker overlay to URL', async () => {
131
+ const mockFetch = setupFetch();
132
+ await new StaticMapImageTool().run({
133
+ center: [-74.006, 40.7128],
134
+ zoom: 12,
135
+ size: [600, 400],
136
+ overlays: [
137
+ {
138
+ type: 'marker',
139
+ longitude: -74.006,
140
+ latitude: 40.7128,
141
+ size: 'large',
142
+ label: 'a',
143
+ color: 'ff0000'
144
+ }
145
+ ]
146
+ });
147
+ const calledUrl = mockFetch.mock.calls[0][0];
148
+ expect(calledUrl).toContain('pin-l-a+ff0000(-74.006,40.7128)/');
149
+ });
150
+ it('adds custom marker overlay to URL', async () => {
151
+ const mockFetch = setupFetch();
152
+ await new StaticMapImageTool().run({
153
+ center: [-74.006, 40.7128],
154
+ zoom: 12,
155
+ size: [600, 400],
156
+ overlays: [
157
+ {
158
+ type: 'custom-marker',
159
+ longitude: -74.006,
160
+ latitude: 40.7128,
161
+ url: 'https://example.com/marker.png'
162
+ }
163
+ ]
164
+ });
165
+ const calledUrl = mockFetch.mock.calls[0][0];
166
+ expect(calledUrl).toContain(`url-${encodeURIComponent('https://example.com/marker.png')}(-74.006,40.7128)/`);
167
+ });
168
+ it('adds path overlay to URL', async () => {
169
+ const mockFetch = setupFetch();
170
+ await new StaticMapImageTool().run({
171
+ center: [-74.006, 40.7128],
172
+ zoom: 12,
173
+ size: [600, 400],
174
+ overlays: [
175
+ {
176
+ type: 'path',
177
+ encodedPolyline: 'u{~vFvyys@fS]',
178
+ strokeWidth: 3,
179
+ strokeColor: '0000ff',
180
+ strokeOpacity: 0.8,
181
+ fillColor: 'ff0000',
182
+ fillOpacity: 0.5
183
+ }
184
+ ]
185
+ });
186
+ const calledUrl = mockFetch.mock.calls[0][0];
187
+ expect(calledUrl).toContain(`path-3+0000ff-0.8+ff0000-0.5(${encodeURIComponent('u{~vFvyys@fS]')})/`);
188
+ });
189
+ it('adds GeoJSON overlay to URL', async () => {
190
+ const mockFetch = setupFetch();
191
+ const geoJsonData = {
192
+ type: 'Point',
193
+ coordinates: [-74.006, 40.7128]
194
+ };
195
+ await new StaticMapImageTool().run({
196
+ center: [-74.006, 40.7128],
197
+ zoom: 12,
198
+ size: [600, 400],
199
+ overlays: [
200
+ {
201
+ type: 'geojson',
202
+ data: geoJsonData
203
+ }
204
+ ]
205
+ });
206
+ const calledUrl = mockFetch.mock.calls[0][0];
207
+ expect(calledUrl).toContain(`geojson(${encodeURIComponent(JSON.stringify(geoJsonData))})/`);
208
+ });
209
+ it('supports multiple overlays in order', async () => {
210
+ const mockFetch = setupFetch();
211
+ await new StaticMapImageTool().run({
212
+ center: [-74.006, 40.7128],
213
+ zoom: 12,
214
+ size: [600, 400],
215
+ overlays: [
216
+ {
217
+ type: 'marker',
218
+ longitude: -74.01,
219
+ latitude: 40.71,
220
+ size: 'small',
221
+ color: '00ff00'
222
+ },
223
+ {
224
+ type: 'marker',
225
+ longitude: -74.002,
226
+ latitude: 40.715,
227
+ size: 'large',
228
+ label: 'b',
229
+ color: 'ff0000'
230
+ }
231
+ ]
232
+ });
233
+ const calledUrl = mockFetch.mock.calls[0][0];
234
+ expect(calledUrl).toContain('pin-s+00ff00(-74.01,40.71),pin-l-b+ff0000(-74.002,40.715)/');
235
+ });
236
+ it('works without overlays', async () => {
237
+ const mockFetch = setupFetch();
238
+ await new StaticMapImageTool().run({
239
+ center: [-74.006, 40.7128],
240
+ zoom: 12,
241
+ size: [600, 400]
242
+ });
243
+ const calledUrl = mockFetch.mock.calls[0][0];
244
+ // Should not have overlay string before coordinates
245
+ expect(calledUrl).toMatch(/static\/-74\.006,40\.7128,12/);
246
+ });
247
+ it('transforms uppercase labels to lowercase', async () => {
248
+ const mockFetch = setupFetch();
249
+ await new StaticMapImageTool().run({
250
+ center: [-74.006, 40.7128],
251
+ zoom: 12,
252
+ size: [600, 400],
253
+ overlays: [
254
+ {
255
+ type: 'marker',
256
+ longitude: -74.006,
257
+ latitude: 40.7128,
258
+ size: 'small',
259
+ label: 'Z',
260
+ color: '0000ff'
261
+ }
262
+ ]
263
+ });
264
+ const calledUrl = mockFetch.mock.calls[0][0];
265
+ // Should contain lowercase 'z' even though 'Z' was provided
266
+ expect(calledUrl).toContain('pin-s-z+0000ff(-74.006,40.7128)/');
267
+ });
268
+ it('supports Maki icon names as labels', async () => {
269
+ const mockFetch = setupFetch();
270
+ await new StaticMapImageTool().run({
271
+ center: [-74.006, 40.7128],
272
+ zoom: 12,
273
+ size: [600, 400],
274
+ overlays: [
275
+ {
276
+ type: 'marker',
277
+ longitude: -74.006,
278
+ latitude: 40.7128,
279
+ size: 'large',
280
+ label: 'embassy',
281
+ color: 'ff0000'
282
+ }
283
+ ]
284
+ });
285
+ const calledUrl = mockFetch.mock.calls[0][0];
286
+ expect(calledUrl).toContain('pin-l-embassy+ff0000(-74.006,40.7128)/');
287
+ });
288
+ it('transforms uppercase Maki icon names to lowercase', async () => {
289
+ const mockFetch = setupFetch();
290
+ await new StaticMapImageTool().run({
291
+ center: [-74.006, 40.7128],
292
+ zoom: 12,
293
+ size: [600, 400],
294
+ overlays: [
295
+ {
296
+ type: 'marker',
297
+ longitude: -74.01,
298
+ latitude: 40.71,
299
+ size: 'small',
300
+ label: 'AIRPORT',
301
+ color: '00ff00'
302
+ }
303
+ ]
304
+ });
305
+ const calledUrl = mockFetch.mock.calls[0][0];
306
+ // Should contain lowercase 'airport' even though 'AIRPORT' was provided
307
+ expect(calledUrl).toContain('pin-s-airport+00ff00(-74.01,40.71)/');
308
+ });
309
+ it('supports numeric labels', async () => {
310
+ const mockFetch = setupFetch();
311
+ await new StaticMapImageTool().run({
312
+ center: [-74.006, 40.7128],
313
+ zoom: 12,
314
+ size: [600, 400],
315
+ overlays: [
316
+ {
317
+ type: 'marker',
318
+ longitude: -74.006,
319
+ latitude: 40.7128,
320
+ size: 'large',
321
+ label: '42',
322
+ color: '0000ff'
323
+ }
324
+ ]
325
+ });
326
+ const calledUrl = mockFetch.mock.calls[0][0];
327
+ expect(calledUrl).toContain('pin-l-42+0000ff(-74.006,40.7128)/');
328
+ });
329
+ it('handles complex overlay combination with paths and markers', async () => {
330
+ const mockFetch = setupFetch();
331
+ await new StaticMapImageTool().run({
332
+ center: [-80.278, 25.796],
333
+ zoom: 15,
334
+ size: [800, 600],
335
+ style: 'mapbox/streets-v12',
336
+ overlays: [
337
+ {
338
+ type: 'marker',
339
+ longitude: -80.2793529,
340
+ latitude: 25.7950805,
341
+ size: 'large',
342
+ label: 'A',
343
+ color: 'ff0000'
344
+ },
345
+ {
346
+ type: 'marker',
347
+ longitude: -80.27899169921875,
348
+ latitude: 25.796667098999023,
349
+ size: 'large',
350
+ label: 'S',
351
+ color: '00cc00'
352
+ },
353
+ {
354
+ type: 'path',
355
+ encodedPolyline: 'mbm|C~k~hNzBCdAg@ZYnAoDWsR[yHgAmEc@mDeAiWGqIHyJYwKQgA_@@h@|JKlRVj^W|Co@hCyBzDi@f@c@NeAjAg@|AXhRzAbD',
356
+ strokeWidth: 4,
357
+ strokeColor: '0066ff'
358
+ }
359
+ ]
360
+ });
361
+ const calledUrl = mockFetch.mock.calls[0][0];
362
+ // Check that markers have lowercase labels
363
+ expect(calledUrl).toContain('pin-l-a+ff0000(-80.2793529,25.7950805)');
364
+ expect(calledUrl).toContain('pin-l-s+00cc00(-80.27899169921875,25.796667098999023)');
365
+ // Check path
366
+ const expectedPolyline = 'mbm|C~k~hNzBCdAg@ZYnAoDWsR[yHgAmEc@mDeAiWGqIHyJYwKQgA_@@h@|JKlRVj^W|Co@hCyBzDi@f@c@NeAjAg@|AXhRzAbD';
367
+ expect(calledUrl).toContain(`path-4+0066ff(${encodeURIComponent(expectedPolyline)})`);
368
+ });
369
+ it('truncates non-Maki multi-character labels to first character', async () => {
370
+ const mockFetch = setupFetch();
371
+ await new StaticMapImageTool().run({
372
+ center: [-74.006, 40.7128],
373
+ zoom: 12,
374
+ size: [600, 400],
375
+ overlays: [
376
+ {
377
+ type: 'marker',
378
+ longitude: -74.006,
379
+ latitude: 40.7128,
380
+ size: 'small',
381
+ label: 'Hello',
382
+ color: '0000ff'
383
+ },
384
+ {
385
+ type: 'marker',
386
+ longitude: -74.01,
387
+ latitude: 40.71,
388
+ size: 'large',
389
+ label: 'XYZ',
390
+ color: 'ff0000'
391
+ }
392
+ ]
393
+ });
394
+ const calledUrl = mockFetch.mock.calls[0][0];
395
+ // Should contain only the first character in lowercase
396
+ expect(calledUrl).toContain('pin-s-h+0000ff(-74.006,40.7128)');
397
+ expect(calledUrl).toContain('pin-l-x+ff0000(-74.01,40.71)');
398
+ });
399
+ it('preserves full Maki icon names that are in the supported list', async () => {
400
+ const mockFetch = setupFetch();
401
+ await new StaticMapImageTool().run({
402
+ center: [-74.006, 40.7128],
403
+ zoom: 12,
404
+ size: [600, 400],
405
+ overlays: [
406
+ {
407
+ type: 'marker',
408
+ longitude: -74.006,
409
+ latitude: 40.7128,
410
+ size: 'small',
411
+ label: 'restaurant',
412
+ color: '0000ff'
413
+ },
414
+ {
415
+ type: 'marker',
416
+ longitude: -74.01,
417
+ latitude: 40.71,
418
+ size: 'large',
419
+ label: 'hospital',
420
+ color: 'ff0000'
421
+ },
422
+ {
423
+ type: 'marker',
424
+ longitude: -74.005,
425
+ latitude: 40.715,
426
+ size: 'small',
427
+ label: 'BICYCLE', // uppercase should be converted to lowercase
428
+ color: '00ff00'
429
+ }
430
+ ]
431
+ });
432
+ const calledUrl = mockFetch.mock.calls[0][0];
433
+ // Should preserve the full Maki icon names
434
+ expect(calledUrl).toContain('pin-s-restaurant+0000ff(-74.006,40.7128)');
435
+ expect(calledUrl).toContain('pin-l-hospital+ff0000(-74.01,40.71)');
436
+ expect(calledUrl).toContain('pin-s-bicycle+00ff00(-74.005,40.715)');
437
+ });
438
+ });
439
+ });
440
+ //# sourceMappingURL=StaticMapImageTool.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticMapImageTool.test.js","sourceRoot":"","sources":["../../../src/tools/static-map-image-tool/StaticMapImageTool.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { VersionInfo } from './versionUtils.js';
2
+ export declare function patchGlobalFetch(versionInfo: VersionInfo): {
3
+ 'User-Agent': string;
4
+ };
5
+ export declare function cleanup(): void;
6
+ //# sourceMappingURL=requestUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestUtils.d.ts","sourceRoot":"","sources":["../../src/utils/requestUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB,CAuBA;AAED,wBAAgB,OAAO,SAKtB"}
@@ -0,0 +1,29 @@
1
+ let isPatched = false;
2
+ let originalFetch;
3
+ export function patchGlobalFetch(versionInfo) {
4
+ originalFetch = global.fetch;
5
+ const headers = {
6
+ 'User-Agent': `${versionInfo.name}/${versionInfo.version} (${versionInfo.branch}, ${versionInfo.tag}, ${versionInfo.sha})`
7
+ };
8
+ if (!isPatched) {
9
+ global.fetch = async function (input, init) {
10
+ const modifiedInit = {
11
+ ...init,
12
+ headers: {
13
+ ...(init?.headers || {}),
14
+ ...headers
15
+ }
16
+ };
17
+ return originalFetch(input, modifiedInit);
18
+ };
19
+ isPatched = true;
20
+ }
21
+ return headers;
22
+ }
23
+ export function cleanup() {
24
+ if (isPatched) {
25
+ global.fetch = originalFetch;
26
+ isPatched = false;
27
+ }
28
+ }
29
+ //# sourceMappingURL=requestUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestUtils.js","sourceRoot":"","sources":["../../src/utils/requestUtils.ts"],"names":[],"mappings":"AAEA,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,IAAI,aAGkB,CAAC;AAEvB,MAAM,UAAU,gBAAgB,CAAC,WAAwB;IAGvD,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7B,MAAM,OAAO,GAAG;QACd,YAAY,EAAE,GAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,KAAK,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,GAAG;KAC3H,CAAC;IACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,GAAG,KAAK,WAClB,KAA6B,EAC7B,IAAkB;YAElB,MAAM,YAAY,GAAgB;gBAChC,GAAG,IAAI;gBACP,OAAO,EAAE;oBACP,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;oBACxB,GAAG,OAAO;iBACX;aACF,CAAC;YACF,OAAO,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC,CAAC;QACF,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;QAC7B,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function setupFetch(overrides?: any): jest.Mock<any, any, any>;
2
+ export declare function assertHeadersSent(mockFetch: jest.Mock): void;
3
+ //# sourceMappingURL=requestUtils.test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestUtils.test-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/requestUtils.test-helpers.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,GAAG,4BAkBzC;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,QAKrD"}
@@ -0,0 +1,28 @@
1
+ import { patchGlobalFetch } from './requestUtils.js';
2
+ let defaultHeaders = {};
3
+ export function setupFetch(overrides) {
4
+ const mockFetch = (global.fetch = jest.fn());
5
+ defaultHeaders = patchGlobalFetch({
6
+ name: 'TestServer',
7
+ version: '1.0.0',
8
+ sha: 'abcdef',
9
+ tag: 'no-tag',
10
+ branch: 'default'
11
+ });
12
+ mockFetch.mockResolvedValue({
13
+ ok: true,
14
+ status: 200,
15
+ statusText: 'OK',
16
+ json: async () => ({ success: true }),
17
+ arrayBuffer: async () => new ArrayBuffer(0),
18
+ ...overrides
19
+ });
20
+ return mockFetch;
21
+ }
22
+ export function assertHeadersSent(mockFetch) {
23
+ expect(mockFetch).toHaveBeenCalledTimes(1);
24
+ const callArgs = mockFetch.mock.calls[0];
25
+ const requestInit = callArgs[1];
26
+ expect(requestInit?.headers).toMatchObject(defaultHeaders);
27
+ }
28
+ //# sourceMappingURL=requestUtils.test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestUtils.test-helpers.js","sourceRoot":"","sources":["../../src/utils/requestUtils.test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,IAAI,cAAc,GAA2B,EAAE,CAAC;AAEhD,MAAM,UAAU,UAAU,CAAC,SAAe;IACxC,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7C,cAAc,GAAG,gBAAgB,CAAC;QAChC,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,QAAQ;QACb,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IACH,SAAS,CAAC,iBAAiB,CAAC;QAC1B,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACrC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;QAC3C,GAAG,SAAS;KACb,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface VersionInfo {
2
+ name: string;
3
+ version: string;
4
+ sha: string;
5
+ tag: string;
6
+ branch: string;
7
+ }
8
+ export declare function getVersionInfo(): VersionInfo;
9
+ //# sourceMappingURL=versionUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/versionUtils.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,IAAI,WAAW,CAmB5C"}
@@ -0,0 +1,25 @@
1
+ import { readFileSync } from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ export function getVersionInfo() {
5
+ const name = 'Mapbox MCP server';
6
+ try {
7
+ const dirname = path.dirname(fileURLToPath(import.meta.url));
8
+ const filePath = path.resolve(dirname, '..', 'version.json');
9
+ const data = readFileSync(filePath, 'utf-8');
10
+ let info = JSON.parse(data);
11
+ info['name'] = name;
12
+ return info;
13
+ }
14
+ catch (error) {
15
+ console.warn(`Failed to read version info: ${error}`);
16
+ return {
17
+ name: name,
18
+ version: '0.0.0',
19
+ sha: 'unknown',
20
+ tag: 'unknown',
21
+ branch: 'unknown'
22
+ };
23
+ }
24
+ }
25
+ //# sourceMappingURL=versionUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionUtils.js","sourceRoot":"","sources":["../../src/utils/versionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAUpC,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAG,mBAAmB,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;QACtD,OAAO;YACL,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,OAAO;YAChB,GAAG,EAAE,SAAS;YACd,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "sha": "b53f8b91024fe68e6e49ce5aa025475781c83ff0",
3
+ "tag": "v0.0.2-1-gb53f8b9",
4
+ "branch": "prepare-npm-package",
5
+ "version": "0.0.2"
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapbox/mcp-server",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "description": "Mapbox MCP server.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index-esm.js",
@@ -16,7 +16,7 @@
16
16
  "format:fix": "prettier --write \"./src/**/*.{ts,tsx,js,json,md}\"",
17
17
  "prepare": "husky && node .husky/setup-hooks.js",
18
18
  "test": "jest",
19
- "build": "npm run prepare && npm run build:esm && npm run build:cjs && npm run generate-version",
19
+ "build": "npm run prepare && npm run build:esm && npm run build:cjs && npm run generate-version && node scripts/add-shebang.cjs",
20
20
  "build:esm": "node scripts/build-helpers.cjs esm-package && tsc -p tsconfig.json",
21
21
  "build:cjs": "node scripts/build-helpers.cjs cjs-package && tsc -p tsconfig.json",
22
22
  "generate-version": "node scripts/build-helpers.cjs generate-version"