@mapbox/mcp-server 0.8.3 → 0.9.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.
- package/README.md +39 -12
- package/dist/commonjs/index.js +19 -2
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/prompts/SearchAlongRoutePrompt.js +6 -6
- package/dist/commonjs/prompts/index.d.ts +41 -0
- package/dist/commonjs/prompts/index.d.ts.map +1 -0
- package/dist/commonjs/prompts/index.js +56 -0
- package/dist/commonjs/prompts/index.js.map +1 -0
- package/dist/commonjs/resources/index.d.ts +6 -0
- package/dist/commonjs/resources/index.d.ts.map +1 -0
- package/dist/commonjs/resources/index.js +43 -0
- package/dist/commonjs/resources/index.js.map +1 -0
- package/dist/commonjs/resources/resourceRegistry.d.ts +3 -1
- package/dist/commonjs/resources/resourceRegistry.d.ts.map +1 -1
- package/dist/commonjs/resources/resourceRegistry.js +5 -1
- package/dist/commonjs/resources/resourceRegistry.js.map +1 -1
- package/dist/commonjs/resources/temporary/TemporaryDataResource.d.ts +13 -0
- package/dist/commonjs/resources/temporary/TemporaryDataResource.d.ts.map +1 -0
- package/dist/commonjs/resources/temporary/TemporaryDataResource.js +41 -0
- package/dist/commonjs/resources/temporary/TemporaryDataResource.js.map +1 -0
- package/dist/commonjs/resources/ui-apps/StaticMapUIResource.d.ts +15 -0
- package/dist/commonjs/resources/ui-apps/StaticMapUIResource.d.ts.map +1 -0
- package/dist/commonjs/resources/ui-apps/StaticMapUIResource.js +262 -0
- package/dist/commonjs/resources/ui-apps/StaticMapUIResource.js.map +1 -0
- package/dist/commonjs/tools/BaseTool.d.ts +10 -0
- package/dist/commonjs/tools/BaseTool.d.ts.map +1 -1
- package/dist/commonjs/tools/BaseTool.js +9 -4
- package/dist/commonjs/tools/BaseTool.js.map +1 -1
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -1
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.input.schema.d.ts +2 -2
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js +4 -0
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js.map +1 -1
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.d.ts +17846 -2030
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.d.ts.map +1 -1
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.js +73 -38
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.js.map +1 -1
- package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
- package/dist/commonjs/tools/directions-tool/DirectionsTool.js +59 -2
- package/dist/commonjs/tools/directions-tool/DirectionsTool.js.map +1 -1
- package/dist/commonjs/tools/directions-tool/DirectionsTool.output.schema.d.ts +32 -32
- package/dist/commonjs/tools/index.d.ts +86 -0
- package/dist/commonjs/tools/index.d.ts.map +1 -0
- package/dist/commonjs/tools/index.js +146 -0
- package/dist/commonjs/tools/index.js.map +1 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts +25 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.d.ts +25 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.d.ts.map +1 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js +30 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js +193 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js.map +1 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +296 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js +55 -0
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -0
- package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.input.schema.d.ts +4 -4
- package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.output.schema.d.ts +350 -350
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts +4 -4
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +4 -0
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.d.ts +186 -186
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts +9 -0
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts +12 -12
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js +18 -30
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
- package/dist/commonjs/tools/toolRegistry.d.ts +3 -2
- package/dist/commonjs/tools/toolRegistry.d.ts.map +1 -1
- package/dist/commonjs/tools/toolRegistry.js +2 -0
- package/dist/commonjs/tools/toolRegistry.js.map +1 -1
- package/dist/commonjs/utils/index.d.ts +33 -0
- package/dist/commonjs/utils/index.d.ts.map +1 -0
- package/dist/commonjs/utils/index.js +45 -0
- package/dist/commonjs/utils/index.js.map +1 -0
- package/dist/commonjs/utils/temporaryResourceManager.d.ts +51 -0
- package/dist/commonjs/utils/temporaryResourceManager.d.ts.map +1 -0
- package/dist/commonjs/utils/temporaryResourceManager.js +92 -0
- package/dist/commonjs/utils/temporaryResourceManager.js.map +1 -0
- package/dist/commonjs/version.json +3 -3
- package/dist/esm/index.js +19 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/prompts/SearchAlongRoutePrompt.js +6 -6
- package/dist/esm/prompts/index.d.ts +41 -0
- package/dist/esm/prompts/index.d.ts.map +1 -0
- package/dist/esm/prompts/index.js +47 -0
- package/dist/esm/prompts/index.js.map +1 -0
- package/dist/esm/resources/index.d.ts +6 -0
- package/dist/esm/resources/index.d.ts.map +1 -0
- package/dist/esm/resources/index.js +37 -0
- package/dist/esm/resources/index.js.map +1 -0
- package/dist/esm/resources/resourceRegistry.d.ts +3 -1
- package/dist/esm/resources/resourceRegistry.d.ts.map +1 -1
- package/dist/esm/resources/resourceRegistry.js +5 -1
- package/dist/esm/resources/resourceRegistry.js.map +1 -1
- package/dist/esm/resources/temporary/TemporaryDataResource.d.ts +13 -0
- package/dist/esm/resources/temporary/TemporaryDataResource.d.ts.map +1 -0
- package/dist/esm/resources/temporary/TemporaryDataResource.js +37 -0
- package/dist/esm/resources/temporary/TemporaryDataResource.js.map +1 -0
- package/dist/esm/resources/ui-apps/StaticMapUIResource.d.ts +15 -0
- package/dist/esm/resources/ui-apps/StaticMapUIResource.d.ts.map +1 -0
- package/dist/esm/resources/ui-apps/StaticMapUIResource.js +258 -0
- package/dist/esm/resources/ui-apps/StaticMapUIResource.js.map +1 -0
- package/dist/esm/tools/BaseTool.d.ts +10 -0
- package/dist/esm/tools/BaseTool.d.ts.map +1 -1
- package/dist/esm/tools/BaseTool.js +9 -4
- package/dist/esm/tools/BaseTool.js.map +1 -1
- package/dist/esm/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -1
- package/dist/esm/tools/category-search-tool/CategorySearchTool.input.schema.d.ts +2 -2
- package/dist/esm/tools/category-search-tool/CategorySearchTool.js +4 -0
- package/dist/esm/tools/category-search-tool/CategorySearchTool.js.map +1 -1
- package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.d.ts +17846 -2030
- package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.d.ts.map +1 -1
- package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.js +73 -38
- package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.js.map +1 -1
- package/dist/esm/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
- package/dist/esm/tools/directions-tool/DirectionsTool.js +59 -2
- package/dist/esm/tools/directions-tool/DirectionsTool.js.map +1 -1
- package/dist/esm/tools/directions-tool/DirectionsTool.output.schema.d.ts +32 -32
- package/dist/esm/tools/index.d.ts +86 -0
- package/dist/esm/tools/index.d.ts.map +1 -0
- package/dist/esm/tools/index.js +118 -0
- package/dist/esm/tools/index.js.map +1 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts +25 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.d.ts +25 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.d.ts.map +1 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js +24 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js +189 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js.map +1 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +296 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js +52 -0
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -0
- package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.input.schema.d.ts +4 -4
- package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.output.schema.d.ts +350 -350
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts +4 -4
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +4 -0
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.d.ts +186 -186
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts +9 -0
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts +12 -12
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js +18 -30
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
- package/dist/esm/tools/toolRegistry.d.ts +3 -2
- package/dist/esm/tools/toolRegistry.d.ts.map +1 -1
- package/dist/esm/tools/toolRegistry.js +2 -0
- package/dist/esm/tools/toolRegistry.js.map +1 -1
- package/dist/esm/utils/index.d.ts +33 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +36 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/temporaryResourceManager.d.ts +51 -0
- package/dist/esm/utils/temporaryResourceManager.d.ts.map +1 -0
- package/dist/esm/utils/temporaryResourceManager.js +88 -0
- package/dist/esm/utils/temporaryResourceManager.js.map +1 -0
- package/dist/esm/version.json +3 -3
- package/package.json +54 -8
- /package/patches/{@modelcontextprotocol+sdk+1.25.3.patch → @modelcontextprotocol+sdk+1.26.0.patch} +0 -0
|
@@ -67,19 +67,19 @@ Please follow these steps:
|
|
|
67
67
|
- Use search_and_geocode_tool to convert ${from} and ${to} to coordinates if they're not already in coordinate format
|
|
68
68
|
|
|
69
69
|
2. **Get the route**:
|
|
70
|
-
- Use directions_tool with profile=${mode} to get
|
|
71
|
-
-
|
|
72
|
-
- Note the total route distance
|
|
70
|
+
- Use directions_tool with profile=${mode} and geometries="none" to get route metadata (distance, duration)
|
|
71
|
+
- This returns a compact response with route summary WITHOUT large geometry data
|
|
72
|
+
- Note the total route distance to determine sampling strategy
|
|
73
73
|
|
|
74
74
|
3. **Search along the route using point sampling** (works for all route lengths):
|
|
75
75
|
|
|
76
76
|
**Determine sample strategy based on route length:**
|
|
77
|
-
- SHORT routes (< 50km): Sample
|
|
78
|
-
- MEDIUM routes (50-150km): Sample
|
|
77
|
+
- SHORT routes (< 50km): Sample 5-7 evenly spaced points between start and end
|
|
78
|
+
- MEDIUM routes (50-150km): Sample 5-7 evenly spaced points between start and end
|
|
79
79
|
- VERY LONG routes (> 150km): Sample 5-7 evenly spaced points (start, end, and middle points)
|
|
80
80
|
|
|
81
81
|
**For each sample point:**
|
|
82
|
-
-
|
|
82
|
+
- Calculate coordinates by interpolating linearly between start and end coordinates
|
|
83
83
|
- Choose the appropriate search tool:
|
|
84
84
|
* If "${search_for}" is a specific place/brand (e.g., "Starbucks", "McDonald's", "Whole Foods"):
|
|
85
85
|
Use search_and_geocode_tool with proximity="lon,lat" and q="${search_for}"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module prompts
|
|
3
|
+
*
|
|
4
|
+
* Public API for Mapbox MCP prompts. This module exports:
|
|
5
|
+
* - Prompt classes for custom instantiation
|
|
6
|
+
* - Pre-configured prompt instances ready to use
|
|
7
|
+
* - Registry functions for batch access
|
|
8
|
+
*
|
|
9
|
+
* @example Simple usage with pre-configured instances
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { getDirections } from '@mapbox/mcp-server/prompts';
|
|
12
|
+
*
|
|
13
|
+
* // Use directly
|
|
14
|
+
* const result = await getDirections.execute({ ... });
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @example Advanced usage with custom instantiation
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { GetDirectionsPrompt } from '@mapbox/mcp-server/prompts';
|
|
20
|
+
*
|
|
21
|
+
* const customPrompt = new GetDirectionsPrompt();
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export { FindPlacesNearbyPrompt } from './FindPlacesNearbyPrompt.js';
|
|
25
|
+
export { GetDirectionsPrompt } from './GetDirectionsPrompt.js';
|
|
26
|
+
export { SearchAlongRoutePrompt } from './SearchAlongRoutePrompt.js';
|
|
27
|
+
export { ShowReachableAreasPrompt } from './ShowReachableAreasPrompt.js';
|
|
28
|
+
import { FindPlacesNearbyPrompt } from './FindPlacesNearbyPrompt.js';
|
|
29
|
+
import { GetDirectionsPrompt } from './GetDirectionsPrompt.js';
|
|
30
|
+
import { SearchAlongRoutePrompt } from './SearchAlongRoutePrompt.js';
|
|
31
|
+
import { ShowReachableAreasPrompt } from './ShowReachableAreasPrompt.js';
|
|
32
|
+
/** Find places near a location */
|
|
33
|
+
export declare const findPlacesNearby: FindPlacesNearbyPrompt;
|
|
34
|
+
/** Get directions between locations */
|
|
35
|
+
export declare const getDirections: GetDirectionsPrompt;
|
|
36
|
+
/** Search for points of interest along a route */
|
|
37
|
+
export declare const searchAlongRoute: SearchAlongRoutePrompt;
|
|
38
|
+
/** Show areas reachable within a time limit */
|
|
39
|
+
export declare const showReachableAreas: ShowReachableAreasPrompt;
|
|
40
|
+
export { getAllPrompts, getPromptByName, type PromptInstance } from './promptRegistry.js';
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/prompts/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,kCAAkC;AAClC,eAAO,MAAM,gBAAgB,wBAA+B,CAAC;AAE7D,uCAAuC;AACvC,eAAO,MAAM,aAAa,qBAA4B,CAAC;AAEvD,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,wBAA+B,CAAC;AAE7D,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,0BAAiC,CAAC;AAGjE,OAAO,EACL,aAAa,EACb,eAAe,EACf,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Copyright (c) Mapbox, Inc.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
/**
|
|
4
|
+
* @module prompts
|
|
5
|
+
*
|
|
6
|
+
* Public API for Mapbox MCP prompts. This module exports:
|
|
7
|
+
* - Prompt classes for custom instantiation
|
|
8
|
+
* - Pre-configured prompt instances ready to use
|
|
9
|
+
* - Registry functions for batch access
|
|
10
|
+
*
|
|
11
|
+
* @example Simple usage with pre-configured instances
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { getDirections } from '@mapbox/mcp-server/prompts';
|
|
14
|
+
*
|
|
15
|
+
* // Use directly
|
|
16
|
+
* const result = await getDirections.execute({ ... });
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @example Advanced usage with custom instantiation
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { GetDirectionsPrompt } from '@mapbox/mcp-server/prompts';
|
|
22
|
+
*
|
|
23
|
+
* const customPrompt = new GetDirectionsPrompt();
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
// Export all prompt classes
|
|
27
|
+
export { FindPlacesNearbyPrompt } from './FindPlacesNearbyPrompt.js';
|
|
28
|
+
export { GetDirectionsPrompt } from './GetDirectionsPrompt.js';
|
|
29
|
+
export { SearchAlongRoutePrompt } from './SearchAlongRoutePrompt.js';
|
|
30
|
+
export { ShowReachableAreasPrompt } from './ShowReachableAreasPrompt.js';
|
|
31
|
+
// Import prompt classes for instantiation
|
|
32
|
+
import { FindPlacesNearbyPrompt } from './FindPlacesNearbyPrompt.js';
|
|
33
|
+
import { GetDirectionsPrompt } from './GetDirectionsPrompt.js';
|
|
34
|
+
import { SearchAlongRoutePrompt } from './SearchAlongRoutePrompt.js';
|
|
35
|
+
import { ShowReachableAreasPrompt } from './ShowReachableAreasPrompt.js';
|
|
36
|
+
// Export pre-configured prompt instances with short, clean names
|
|
37
|
+
/** Find places near a location */
|
|
38
|
+
export const findPlacesNearby = new FindPlacesNearbyPrompt();
|
|
39
|
+
/** Get directions between locations */
|
|
40
|
+
export const getDirections = new GetDirectionsPrompt();
|
|
41
|
+
/** Search for points of interest along a route */
|
|
42
|
+
export const searchAlongRoute = new SearchAlongRoutePrompt();
|
|
43
|
+
/** Show areas reachable within a time limit */
|
|
44
|
+
export const showReachableAreas = new ShowReachableAreasPrompt();
|
|
45
|
+
// Export registry functions for batch access
|
|
46
|
+
export { getAllPrompts, getPromptByName } from './promptRegistry.js';
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,0CAA0C;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,iEAAiE;AACjE,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAE7D,uCAAuC;AACvC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,mBAAmB,EAAE,CAAC;AAEvD,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAE7D,+CAA+C;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,wBAAwB,EAAE,CAAC;AAEjE,6CAA6C;AAC7C,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { CategoryListResource } from './category-list/CategoryListResource.js';
|
|
2
|
+
import { CategoryListResource } from './category-list/CategoryListResource.js';
|
|
3
|
+
/** Category list for place search (mapbox://categories) */
|
|
4
|
+
export declare const categoryList: CategoryListResource;
|
|
5
|
+
export { getAllResources, getResourceByUri, type ResourceInstance } from './resourceRegistry.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resources/index.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAG/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAG/E,2DAA2D;AAC3D,eAAO,MAAM,YAAY,sBAA4C,CAAC;AAGtE,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Copyright (c) Mapbox, Inc.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
/**
|
|
4
|
+
* @module resources
|
|
5
|
+
*
|
|
6
|
+
* Public API for Mapbox MCP resources. This module exports:
|
|
7
|
+
* - Resource classes for custom instantiation
|
|
8
|
+
* - Pre-configured resource instances ready to use
|
|
9
|
+
* - Registry functions for batch access
|
|
10
|
+
*
|
|
11
|
+
* @example Simple usage with pre-configured instances
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { categoryList } from '@mapbox/mcp-server/resources';
|
|
14
|
+
*
|
|
15
|
+
* // Use directly - httpRequest already configured
|
|
16
|
+
* const result = await categoryList.read();
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @example Advanced usage with custom pipeline
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { CategoryListResource } from '@mapbox/mcp-server/resources';
|
|
22
|
+
* import { httpRequest } from '@mapbox/mcp-server/utils';
|
|
23
|
+
*
|
|
24
|
+
* const customResource = new CategoryListResource({ httpRequest });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import { httpRequest } from '../utils/httpPipeline.js';
|
|
28
|
+
// Export all resource classes
|
|
29
|
+
export { CategoryListResource } from './category-list/CategoryListResource.js';
|
|
30
|
+
// Import resource classes for instantiation
|
|
31
|
+
import { CategoryListResource } from './category-list/CategoryListResource.js';
|
|
32
|
+
// Export pre-configured resource instances with short, clean names
|
|
33
|
+
/** Category list for place search (mapbox://categories) */
|
|
34
|
+
export const categoryList = new CategoryListResource({ httpRequest });
|
|
35
|
+
// Export registry functions for batch access
|
|
36
|
+
export { getAllResources, getResourceByUri } from './resourceRegistry.js';
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/resources/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,8BAA8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAE/E,4CAA4C;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAE/E,mEAAmE;AACnE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAEtE,6CAA6C;AAC7C,OAAO,EACL,eAAe,EACf,gBAAgB,EAEjB,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { CategoryListResource } from './category-list/CategoryListResource.js';
|
|
2
|
-
|
|
2
|
+
import { TemporaryDataResource } from './temporary/TemporaryDataResource.js';
|
|
3
|
+
import { StaticMapUIResource } from './ui-apps/StaticMapUIResource.js';
|
|
4
|
+
export declare const ALL_RESOURCES: readonly [CategoryListResource, TemporaryDataResource, StaticMapUIResource];
|
|
3
5
|
export type ResourceInstance = (typeof ALL_RESOURCES)[number];
|
|
4
6
|
export declare function getAllResources(): readonly ResourceInstance[];
|
|
5
7
|
export declare function getResourceByUri(uri: string): ResourceInstance | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceRegistry.d.ts","sourceRoot":"","sources":["../../../src/resources/resourceRegistry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"resourceRegistry.d.ts","sourceRoot":"","sources":["../../../src/resources/resourceRegistry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAIvE,eAAO,MAAM,aAAa,6EAKhB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wBAAgB,eAAe,IAAI,SAAS,gBAAgB,EAAE,CAE7D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAY1E"}
|
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
// INSERT NEW RESOURCE IMPORT HERE
|
|
4
4
|
import { CategoryListResource } from './category-list/CategoryListResource.js';
|
|
5
|
+
import { TemporaryDataResource } from './temporary/TemporaryDataResource.js';
|
|
6
|
+
import { StaticMapUIResource } from './ui-apps/StaticMapUIResource.js';
|
|
5
7
|
import { httpRequest } from '../utils/httpPipeline.js';
|
|
6
8
|
// Central registry of all resources
|
|
7
9
|
export const ALL_RESOURCES = [
|
|
8
10
|
// INSERT NEW RESOURCE INSTANCE HERE
|
|
9
|
-
new CategoryListResource({ httpRequest })
|
|
11
|
+
new CategoryListResource({ httpRequest }),
|
|
12
|
+
new TemporaryDataResource(),
|
|
13
|
+
new StaticMapUIResource()
|
|
10
14
|
];
|
|
11
15
|
export function getAllResources() {
|
|
12
16
|
return ALL_RESOURCES;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceRegistry.js","sourceRoot":"","sources":["../../../src/resources/resourceRegistry.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,kCAAkC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,oCAAoC;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,oCAAoC;IACpC,IAAI,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"resourceRegistry.js","sourceRoot":"","sources":["../../../src/resources/resourceRegistry.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,kCAAkC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,oCAAoC;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,oCAAoC;IACpC,IAAI,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC;IACzC,IAAI,qBAAqB,EAAE;IAC3B,IAAI,mBAAmB,EAAE;CACjB,CAAC;AAIX,MAAM,UAAU,eAAe;IAC7B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,yBAAyB;IACzB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAC1E,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,gFAAgF;IAChF,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QACrC,uDAAuD;QACvD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseResource } from '../BaseResource.js';
|
|
2
|
+
import type { ReadResourceResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resource for temporary data storage (large tool responses)
|
|
5
|
+
*/
|
|
6
|
+
export declare class TemporaryDataResource extends BaseResource {
|
|
7
|
+
readonly name = "Temporary Data";
|
|
8
|
+
readonly uri = "mapbox://temp/{id}";
|
|
9
|
+
readonly description = "Temporary storage for large tool responses. Data expires after TTL.";
|
|
10
|
+
readonly mimeType = "application/json";
|
|
11
|
+
read(uri: string): Promise<ReadResourceResult>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=TemporaryDataResource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemporaryDataResource.d.ts","sourceRoot":"","sources":["../../../../src/resources/temporary/TemporaryDataResource.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAG7E;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,GAAG,wBAAwB;IACpC,QAAQ,CAAC,WAAW,yEACoD;IACxE,QAAQ,CAAC,QAAQ,sBAAsB;IAEjC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAyBrD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Copyright (c) Mapbox, Inc.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { BaseResource } from '../BaseResource.js';
|
|
4
|
+
import { temporaryResourceManager } from '../../utils/temporaryResourceManager.js';
|
|
5
|
+
/**
|
|
6
|
+
* Resource for temporary data storage (large tool responses)
|
|
7
|
+
*/
|
|
8
|
+
export class TemporaryDataResource extends BaseResource {
|
|
9
|
+
name = 'Temporary Data';
|
|
10
|
+
uri = 'mapbox://temp/{id}';
|
|
11
|
+
description = 'Temporary storage for large tool responses. Data expires after TTL.';
|
|
12
|
+
mimeType = 'application/json';
|
|
13
|
+
async read(uri) {
|
|
14
|
+
const resource = temporaryResourceManager.get(uri);
|
|
15
|
+
if (!resource) {
|
|
16
|
+
return {
|
|
17
|
+
contents: [
|
|
18
|
+
{
|
|
19
|
+
uri: uri,
|
|
20
|
+
mimeType: 'text/plain',
|
|
21
|
+
text: 'Resource not found or expired. Temporary resources have a 30-minute TTL.'
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
contents: [
|
|
28
|
+
{
|
|
29
|
+
uri: uri,
|
|
30
|
+
mimeType: this.mimeType,
|
|
31
|
+
text: JSON.stringify(resource.data, null, 2)
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=TemporaryDataResource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemporaryDataResource.js","sourceRoot":"","sources":["../../../../src/resources/temporary/TemporaryDataResource.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAEnF;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAC5C,IAAI,GAAG,gBAAgB,CAAC;IACxB,GAAG,GAAG,oBAAoB,CAAC;IAC3B,WAAW,GAClB,qEAAqE,CAAC;IAC/D,QAAQ,GAAG,kBAAkB,CAAC;IAEvC,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,GAAG;wBACR,QAAQ,EAAE,YAAY;wBACtB,IAAI,EAAE,0EAA0E;qBACjF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,GAAG;oBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC7C;aACF;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
|
|
2
|
+
import type { ReadResourceResult, ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { BaseResource } from '../BaseResource.js';
|
|
4
|
+
/**
|
|
5
|
+
* Serves UI App HTML for Static Map Preview
|
|
6
|
+
* Implements MCP Apps pattern with ui:// scheme
|
|
7
|
+
*/
|
|
8
|
+
export declare class StaticMapUIResource extends BaseResource {
|
|
9
|
+
readonly name = "Static Map Preview UI";
|
|
10
|
+
readonly uri = "ui://mapbox/static-map/index.html";
|
|
11
|
+
readonly description = "Interactive UI for previewing static map images (MCP Apps)";
|
|
12
|
+
readonly mimeType = "text/html;profile=mcp-app";
|
|
13
|
+
read(_uri: string, _extra?: RequestHandlerExtra<ServerRequest, ServerNotification>): Promise<ReadResourceResult>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=StaticMapUIResource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaticMapUIResource.d.ts","sourceRoot":"","sources":["../../../../src/resources/ui-apps/StaticMapUIResource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,GAAG,uCAAuC;IACnD,QAAQ,CAAC,WAAW,gEAC2C;IAC/D,QAAQ,CAAC,QAAQ,+BAAsB;IAEjC,IAAI,CAER,IAAI,EAAE,MAAM,EAEZ,MAAM,CAAC,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAC9D,OAAO,CAAC,kBAAkB,CAAC;CAgP/B"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
// Copyright (c) Mapbox, Inc.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { RESOURCE_MIME_TYPE } from '@modelcontextprotocol/ext-apps/server';
|
|
4
|
+
import { BaseResource } from '../BaseResource.js';
|
|
5
|
+
/**
|
|
6
|
+
* Serves UI App HTML for Static Map Preview
|
|
7
|
+
* Implements MCP Apps pattern with ui:// scheme
|
|
8
|
+
*/
|
|
9
|
+
export class StaticMapUIResource extends BaseResource {
|
|
10
|
+
name = 'Static Map Preview UI';
|
|
11
|
+
uri = 'ui://mapbox/static-map/index.html';
|
|
12
|
+
description = 'Interactive UI for previewing static map images (MCP Apps)';
|
|
13
|
+
mimeType = RESOURCE_MIME_TYPE;
|
|
14
|
+
async read(
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
16
|
+
_uri,
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
18
|
+
_extra) {
|
|
19
|
+
// Generate HTML for static map visualization with MCP Apps protocol support
|
|
20
|
+
const html = `<!DOCTYPE html>
|
|
21
|
+
<html>
|
|
22
|
+
<head>
|
|
23
|
+
<meta charset="UTF-8">
|
|
24
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
25
|
+
<title>Static Map Preview</title>
|
|
26
|
+
<style>
|
|
27
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
28
|
+
body {
|
|
29
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
30
|
+
background: #000;
|
|
31
|
+
}
|
|
32
|
+
#toolbar {
|
|
33
|
+
display: none;
|
|
34
|
+
align-items: center;
|
|
35
|
+
justify-content: flex-end;
|
|
36
|
+
padding: 6px 10px;
|
|
37
|
+
background: rgba(0, 0, 0, 0.7);
|
|
38
|
+
gap: 8px;
|
|
39
|
+
}
|
|
40
|
+
#toolbar.visible { display: flex; }
|
|
41
|
+
#fullscreen-btn {
|
|
42
|
+
background: rgba(255, 255, 255, 0.15);
|
|
43
|
+
border: 1px solid rgba(255, 255, 255, 0.3);
|
|
44
|
+
color: #fff;
|
|
45
|
+
padding: 4px 12px;
|
|
46
|
+
border-radius: 4px;
|
|
47
|
+
cursor: pointer;
|
|
48
|
+
font-size: 12px;
|
|
49
|
+
}
|
|
50
|
+
#fullscreen-btn:hover { background: rgba(255, 255, 255, 0.25); }
|
|
51
|
+
#image-container {
|
|
52
|
+
position: relative;
|
|
53
|
+
}
|
|
54
|
+
#preview-image {
|
|
55
|
+
display: none;
|
|
56
|
+
max-width: 100%;
|
|
57
|
+
width: 100%;
|
|
58
|
+
cursor: zoom-in;
|
|
59
|
+
}
|
|
60
|
+
#preview-image.zoomed {
|
|
61
|
+
cursor: zoom-out;
|
|
62
|
+
max-width: none;
|
|
63
|
+
width: auto;
|
|
64
|
+
}
|
|
65
|
+
#loading {
|
|
66
|
+
padding: 20px;
|
|
67
|
+
color: #fff;
|
|
68
|
+
font-size: 16px;
|
|
69
|
+
}
|
|
70
|
+
#error {
|
|
71
|
+
padding: 20px;
|
|
72
|
+
color: #ff6b6b;
|
|
73
|
+
text-align: center;
|
|
74
|
+
}
|
|
75
|
+
</style>
|
|
76
|
+
</head>
|
|
77
|
+
<body>
|
|
78
|
+
<div id="toolbar">
|
|
79
|
+
<button id="fullscreen-btn">⛶ Fullscreen</button>
|
|
80
|
+
</div>
|
|
81
|
+
<div id="image-container">
|
|
82
|
+
<div id="loading">Loading static map preview...</div>
|
|
83
|
+
<img id="preview-image" alt="Static Map Preview">
|
|
84
|
+
<div id="error" style="display:none"></div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<script type="module">
|
|
88
|
+
const image = document.getElementById('preview-image');
|
|
89
|
+
const loading = document.getElementById('loading');
|
|
90
|
+
const errorDiv = document.getElementById('error');
|
|
91
|
+
const toolbar = document.getElementById('toolbar');
|
|
92
|
+
const fullscreenBtn = document.getElementById('fullscreen-btn');
|
|
93
|
+
|
|
94
|
+
let isZoomed = false;
|
|
95
|
+
let currentDisplayMode = 'inline';
|
|
96
|
+
let canFullscreen = false;
|
|
97
|
+
|
|
98
|
+
image.addEventListener('click', () => {
|
|
99
|
+
isZoomed = !isZoomed;
|
|
100
|
+
image.classList.toggle('zoomed', isZoomed);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
let messageId = 0;
|
|
104
|
+
const pendingRequests = new Map();
|
|
105
|
+
|
|
106
|
+
function sendRequest(method, params = {}) {
|
|
107
|
+
const id = ++messageId;
|
|
108
|
+
window.parent.postMessage({ jsonrpc: '2.0', id, method, params }, '*');
|
|
109
|
+
return new Promise((resolve, reject) => {
|
|
110
|
+
pendingRequests.set(id, { resolve, reject });
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function sendNotification(method, params = {}) {
|
|
115
|
+
window.parent.postMessage({ jsonrpc: '2.0', method, params }, '*');
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function requestSizeToFit() {
|
|
119
|
+
if (currentDisplayMode !== 'inline') return;
|
|
120
|
+
// Use requestAnimationFrame to measure after layout so we get the
|
|
121
|
+
// actual rendered height (constrained by max-width:100%), not natural px
|
|
122
|
+
requestAnimationFrame(() => {
|
|
123
|
+
const toolbarHeight = canFullscreen ? toolbar.offsetHeight : 0;
|
|
124
|
+
sendNotification('ui/notifications/size-changed', {
|
|
125
|
+
height: Math.round(image.getBoundingClientRect().height) + toolbarHeight
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function updateFullscreenButton() {
|
|
131
|
+
fullscreenBtn.textContent =
|
|
132
|
+
currentDisplayMode === 'fullscreen' ? '⊟ Exit Fullscreen' : '⛶ Fullscreen';
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async function toggleFullscreen() {
|
|
136
|
+
const newMode = currentDisplayMode === 'fullscreen' ? 'inline' : 'fullscreen';
|
|
137
|
+
try {
|
|
138
|
+
const result = await sendRequest('ui/request-display-mode', { mode: newMode });
|
|
139
|
+
currentDisplayMode = result?.mode ?? newMode;
|
|
140
|
+
updateFullscreenButton();
|
|
141
|
+
if (currentDisplayMode === 'inline') requestSizeToFit();
|
|
142
|
+
} catch (e) {
|
|
143
|
+
console.error('Failed to change display mode:', e);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
fullscreenBtn.addEventListener('click', toggleFullscreen);
|
|
148
|
+
|
|
149
|
+
window.addEventListener('message', (event) => {
|
|
150
|
+
const message = event.data;
|
|
151
|
+
if (!message || typeof message !== 'object') return;
|
|
152
|
+
|
|
153
|
+
if (message.id !== undefined && pendingRequests.has(message.id)) {
|
|
154
|
+
const { resolve, reject } = pendingRequests.get(message.id);
|
|
155
|
+
pendingRequests.delete(message.id);
|
|
156
|
+
if (message.error) reject(new Error(message.error.message));
|
|
157
|
+
else resolve(message.result);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (message.method === 'ui/notifications/tool-result') {
|
|
162
|
+
if (message.params) handleToolResult(message.params);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (message.method === 'ui/notifications/host-context-changed') {
|
|
166
|
+
const ctx = message.params;
|
|
167
|
+
if (ctx?.displayMode) {
|
|
168
|
+
currentDisplayMode = ctx.displayMode;
|
|
169
|
+
updateFullscreenButton();
|
|
170
|
+
if (currentDisplayMode === 'inline' && image.style.display !== 'none') {
|
|
171
|
+
requestSizeToFit();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
async function handleToolResult(result) {
|
|
178
|
+
const textContent = result.content?.find(c => c.type === 'text');
|
|
179
|
+
if (!textContent?.text) {
|
|
180
|
+
loading.style.display = 'none';
|
|
181
|
+
errorDiv.textContent = 'No URL found in tool result';
|
|
182
|
+
errorDiv.style.display = 'block';
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const url = textContent.text;
|
|
187
|
+
if (!url.includes('api.mapbox.com/styles/') || !url.includes('/static/')) {
|
|
188
|
+
loading.style.display = 'none';
|
|
189
|
+
errorDiv.textContent = 'Unsupported URL format';
|
|
190
|
+
errorDiv.style.display = 'block';
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
loading.textContent = 'Fetching map from Mapbox...';
|
|
195
|
+
try {
|
|
196
|
+
const response = await fetch(url);
|
|
197
|
+
if (!response.ok) throw new Error('HTTP ' + response.status);
|
|
198
|
+
const blob = await response.blob();
|
|
199
|
+
const blobUrl = URL.createObjectURL(blob);
|
|
200
|
+
|
|
201
|
+
image.onload = () => {
|
|
202
|
+
loading.style.display = 'none';
|
|
203
|
+
image.style.display = 'block';
|
|
204
|
+
if (canFullscreen) toolbar.classList.add('visible');
|
|
205
|
+
requestSizeToFit();
|
|
206
|
+
};
|
|
207
|
+
image.src = blobUrl;
|
|
208
|
+
} catch (error) {
|
|
209
|
+
loading.style.display = 'none';
|
|
210
|
+
errorDiv.textContent = 'Failed to load image: ' + error.message;
|
|
211
|
+
errorDiv.style.display = 'block';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async function init() {
|
|
216
|
+
try {
|
|
217
|
+
const result = await sendRequest('ui/initialize', {
|
|
218
|
+
protocolVersion: '2026-01-26',
|
|
219
|
+
appCapabilities: {},
|
|
220
|
+
appInfo: { name: 'Static Map Preview', version: '1.0.0' }
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
sendNotification('ui/notifications/initialized', {});
|
|
224
|
+
|
|
225
|
+
const hostContext = result?.hostContext;
|
|
226
|
+
currentDisplayMode = hostContext?.displayMode ?? 'inline';
|
|
227
|
+
canFullscreen = hostContext?.availableDisplayModes?.includes('fullscreen') ?? false;
|
|
228
|
+
} catch (error) {
|
|
229
|
+
console.error('Failed to connect to MCP host:', error);
|
|
230
|
+
loading.textContent = 'Failed to connect: ' + error.message;
|
|
231
|
+
loading.style.color = '#cc0000';
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
init();
|
|
236
|
+
</script>
|
|
237
|
+
</body>
|
|
238
|
+
</html>`;
|
|
239
|
+
return {
|
|
240
|
+
contents: [
|
|
241
|
+
{
|
|
242
|
+
uri: this.uri,
|
|
243
|
+
mimeType: RESOURCE_MIME_TYPE,
|
|
244
|
+
text: html,
|
|
245
|
+
_meta: {
|
|
246
|
+
ui: {
|
|
247
|
+
csp: {
|
|
248
|
+
connectDomains: ['https://api.mapbox.com'],
|
|
249
|
+
resourceDomains: ['https://api.mapbox.com']
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
]
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=StaticMapUIResource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaticMapUIResource.js","sourceRoot":"","sources":["../../../../src/resources/ui-apps/StaticMapUIResource.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAC1C,IAAI,GAAG,uBAAuB,CAAC;IAC/B,GAAG,GAAG,mCAAmC,CAAC;IAC1C,WAAW,GAClB,4DAA4D,CAAC;IACtD,QAAQ,GAAG,kBAAkB,CAAC;IAEvC,KAAK,CAAC,IAAI;IACR,6DAA6D;IAC7D,IAAY;IACZ,6DAA6D;IAC7D,MAA+D;QAE/D,4EAA4E;QAC5E,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0NT,CAAC;QAEL,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE;wBACL,EAAE,EAAE;4BACF,GAAG,EAAE;gCACH,cAAc,EAAE,CAAC,wBAAwB,CAAC;gCAC1C,eAAe,EAAE,CAAC,wBAAwB,CAAC;6BAC5C;yBACF;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -8,6 +8,16 @@ export declare abstract class BaseTool<InputSchema extends ZodTypeAny, OutputSch
|
|
|
8
8
|
abstract readonly annotations: ToolAnnotations;
|
|
9
9
|
readonly inputSchema: InputSchema;
|
|
10
10
|
readonly outputSchema?: OutputSchema;
|
|
11
|
+
readonly meta?: {
|
|
12
|
+
ui?: {
|
|
13
|
+
resourceUri?: string;
|
|
14
|
+
csp?: {
|
|
15
|
+
connectDomains?: string[];
|
|
16
|
+
resourceDomains?: string[];
|
|
17
|
+
frameDomains?: string[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
};
|
|
11
21
|
protected server: McpServer | null;
|
|
12
22
|
constructor(params: {
|
|
13
23
|
inputSchema: InputSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTool.d.ts","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACf,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAGtC,8BAAsB,QAAQ,CAC5B,WAAW,SAAS,UAAU,EAC9B,YAAY,SAAS,UAAU,GAAG,UAAU;IAE5C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IAE/C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;gBAE9B,MAAM,EAAE;QAClB,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,CAAC,EAAE,YAAY,CAAC;KAC7B;IAKD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc;
|
|
1
|
+
{"version":3,"file":"BaseTool.d.ts","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACf,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAGtC,8BAAsB,QAAQ,CAC5B,WAAW,SAAS,UAAU,EAC9B,YAAY,SAAS,UAAU,GAAG,UAAU;IAE5C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IAE/C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,EAAE,CAAC,EAAE;YACH,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,GAAG,CAAC,EAAE;gBACJ,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;aACzB,CAAC;SACH,CAAC;KACH,CAAC;IACF,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;gBAE9B,MAAM,EAAE;QAClB,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,CAAC,EAAE,YAAY,CAAC;KAC7B;IAKD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc;IAiD5C;;OAEG;IACH,QAAQ,CAAC,GAAG,CACV,QAAQ,EAAE,OAAO,EAEjB,KAAK,CAAC,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,GACpC,OAAO,CAAC,cAAc,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,GAAG,CACX,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,EAC7C,IAAI,EAAE,OAAO,GACZ,IAAI;IAMP;;;;;OAKG;IACH,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC;CAgBjD"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
export class BaseTool {
|
|
4
4
|
inputSchema;
|
|
5
5
|
outputSchema;
|
|
6
|
+
meta;
|
|
6
7
|
server = null;
|
|
7
8
|
constructor(params) {
|
|
8
9
|
this.inputSchema = params.inputSchema;
|
|
@@ -20,11 +21,15 @@ export class BaseTool {
|
|
|
20
21
|
inputSchema: this.inputSchema.shape,
|
|
21
22
|
annotations: this.annotations
|
|
22
23
|
};
|
|
23
|
-
// Add outputSchema if provided
|
|
24
|
+
// Add outputSchema if provided — pass the full Zod schema (not just .shape)
|
|
25
|
+
// so that .passthrough() and other schema-level settings are preserved when
|
|
26
|
+
// the MCP SDK converts it for structured-content validation.
|
|
24
27
|
if (this.outputSchema) {
|
|
25
|
-
config.outputSchema =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
config.outputSchema = this.outputSchema;
|
|
29
|
+
}
|
|
30
|
+
// Add _meta for MCP Apps support if provided (includes CSP configuration)
|
|
31
|
+
if (this.meta) {
|
|
32
|
+
config._meta = this.meta;
|
|
28
33
|
}
|
|
29
34
|
return server.registerTool(this.name, config,
|
|
30
35
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTool.js","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAclC,MAAM,OAAgB,QAAQ;IAQnB,WAAW,CAAc;IACzB,YAAY,CAAgB;
|
|
1
|
+
{"version":3,"file":"BaseTool.js","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAclC,MAAM,OAAgB,QAAQ;IAQnB,WAAW,CAAc;IACzB,YAAY,CAAgB;IAC5B,IAAI,CASX;IACQ,MAAM,GAAqB,IAAI,CAAC;IAE1C,YAAY,MAGX;QACC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAiB;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,MAAM,GAkBR;YACF,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,8DAA8D;YAC9D,WAAW,EAAG,IAAI,CAAC,WAA2C,CAAC,KAAK;YACpE,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;QAEF,4EAA4E;QAC5E,4EAA4E;QAC5E,6DAA6D;QAC7D,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAC1C,CAAC;QAED,0EAA0E;QAC1E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,CAAC;QAED,OAAO,MAAM,CAAC,YAAY,CACxB,IAAI,CAAC,IAAI,EACT,MAAM;QACN,8DAA8D;QAC9D,CAAC,IAAS,EAAE,KAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CACjD,CAAC;IACJ,CAAC;IAWD;;OAEG;IACO,GAAG,CACX,KAA6C,EAC7C,IAAa;QAEb,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACO,cAAc,CAAI,OAAgB;QAC1C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,OAAY,CAAC;QACtB,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;QAC/C,CAAC;QAAC,OAAO,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CACN,SAAS,EACT,GAAG,IAAI,CAAC,IAAI,sCAAsC,eAAe,YAAY,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAC5I,CAAC;YACF,gCAAgC;YAChC,OAAO,OAAY,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategorySearchTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/category-search-tool/CategorySearchTool.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,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAQrF,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,OAAO,yBAAyB,EAChC,OAAO,4BAA4B,CACpC;IACC,IAAI,SAA0B;IAC9B,WAAW,SACoX;IAC/X,WAAW;;;;;;MAMT;gBAEU,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;IAQhD,OAAO,CAAC,mBAAmB;
|
|
1
|
+
{"version":3,"file":"CategorySearchTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/category-search-tool/CategorySearchTool.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,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAQrF,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,OAAO,yBAAyB,EAChC,OAAO,4BAA4B,CACpC;IACC,IAAI,SAA0B;IAC9B,WAAW,SACoX;IAC/X,WAAW;;;;;;MAMT;gBAEU,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;IAQhD,OAAO,CAAC,mBAAmB;cA6DX,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,EAChD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC;CA8F3B"}
|