@mapbox/mcp-server 0.17.0-dev.1 → 0.17.0-dev.3
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/dist/commonjs/resources/BaseResource.d.ts +7 -0
- package/dist/commonjs/resources/BaseResource.d.ts.map +1 -1
- package/dist/commonjs/resources/BaseResource.js +13 -2
- package/dist/commonjs/resources/BaseResource.js.map +1 -1
- package/dist/commonjs/resources/category-list/CategoryListResource.d.ts +7 -2
- package/dist/commonjs/resources/category-list/CategoryListResource.d.ts.map +1 -1
- package/dist/commonjs/resources/category-list/CategoryListResource.js +14 -4
- package/dist/commonjs/resources/category-list/CategoryListResource.js.map +1 -1
- package/dist/commonjs/resources/place-photo/PlacePhotoResource.d.ts +1 -1
- package/dist/commonjs/resources/place-photo/PlacePhotoResource.js +2 -2
- package/dist/commonjs/resources/place-photo/PlacePhotoResource.js.map +1 -1
- package/dist/commonjs/resources/resourceRegistry.d.ts +2 -1
- package/dist/commonjs/resources/resourceRegistry.d.ts.map +1 -1
- package/dist/commonjs/resources/resourceRegistry.js +10 -5
- package/dist/commonjs/resources/resourceRegistry.js.map +1 -1
- package/dist/commonjs/resources/tool-response/ToolResponseResource.d.ts +6 -5
- package/dist/commonjs/resources/tool-response/ToolResponseResource.d.ts.map +1 -1
- package/dist/commonjs/resources/tool-response/ToolResponseResource.js +29 -5
- package/dist/commonjs/resources/tool-response/ToolResponseResource.js.map +1 -1
- package/dist/commonjs/resources/ui-apps/StaticMapViewerUIResource.d.ts +28 -0
- package/dist/commonjs/resources/ui-apps/StaticMapViewerUIResource.d.ts.map +1 -0
- package/dist/commonjs/resources/ui-apps/StaticMapViewerUIResource.js +64 -0
- package/dist/commonjs/resources/ui-apps/StaticMapViewerUIResource.js.map +1 -0
- package/dist/commonjs/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
- package/dist/commonjs/resources/ui-apps/mapAppHtml.js +977 -252
- package/dist/commonjs/resources/ui-apps/mapAppHtml.js.map +1 -1
- package/dist/commonjs/resources/ui-apps/staticMapViewerHtml.d.ts +17 -0
- package/dist/commonjs/resources/ui-apps/staticMapViewerHtml.d.ts.map +1 -0
- package/dist/commonjs/resources/ui-apps/staticMapViewerHtml.js +180 -0
- package/dist/commonjs/resources/ui-apps/staticMapViewerHtml.js.map +1 -0
- package/dist/commonjs/tools/MapboxApiBasedTool.d.ts.map +1 -1
- package/dist/commonjs/tools/MapboxApiBasedTool.js +6 -2
- package/dist/commonjs/tools/MapboxApiBasedTool.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.js +1 -1
- package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js.map +1 -1
- package/dist/commonjs/tools/list-public-tokens-tool/ListPublicTokensTool.d.ts.map +1 -1
- package/dist/commonjs/tools/list-public-tokens-tool/ListPublicTokensTool.js +2 -0
- package/dist/commonjs/tools/list-public-tokens-tool/ListPublicTokensTool.js.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts +1 -0
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js +10 -6
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.js +26 -12
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.js.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts +1 -0
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
- package/dist/commonjs/tools/resource-reader-tool/ResourceReaderTool.d.ts.map +1 -1
- package/dist/commonjs/tools/resource-reader-tool/ResourceReaderTool.js +43 -9
- package/dist/commonjs/tools/resource-reader-tool/ResourceReaderTool.js.map +1 -1
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +1 -1
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts +8 -1
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js +113 -90
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
- package/dist/commonjs/tools/static-map-image-tool/buildStaticMapRequestUrl.d.ts +23 -0
- package/dist/commonjs/tools/static-map-image-tool/buildStaticMapRequestUrl.d.ts.map +1 -0
- package/dist/commonjs/tools/static-map-image-tool/buildStaticMapRequestUrl.js +84 -0
- package/dist/commonjs/tools/static-map-image-tool/buildStaticMapRequestUrl.js.map +1 -0
- package/dist/commonjs/utils/mapAppPayload.d.ts +15 -6
- package/dist/commonjs/utils/mapAppPayload.d.ts.map +1 -1
- package/dist/commonjs/utils/mapAppPayload.js +2 -1
- package/dist/commonjs/utils/mapAppPayload.js.map +1 -1
- package/dist/commonjs/utils/mapboxPublicToken.d.ts +5 -1
- package/dist/commonjs/utils/mapboxPublicToken.d.ts.map +1 -1
- package/dist/commonjs/utils/mapboxPublicToken.js +6 -1
- package/dist/commonjs/utils/mapboxPublicToken.js.map +1 -1
- package/dist/commonjs/utils/responseRef.d.ts +1 -1
- package/dist/commonjs/utils/responseRef.d.ts.map +1 -1
- package/dist/commonjs/utils/responseRef.js +1 -1
- package/dist/commonjs/utils/responseRef.js.map +1 -1
- package/dist/commonjs/utils/selfFetchRef.d.ts +24 -0
- package/dist/commonjs/utils/selfFetchRef.d.ts.map +1 -1
- package/dist/commonjs/utils/selfFetchRef.js +68 -0
- package/dist/commonjs/utils/selfFetchRef.js.map +1 -1
- package/dist/commonjs/utils/serverInstructions.js +1 -1
- package/dist/commonjs/utils/serverInstructions.js.map +1 -1
- package/dist/commonjs/version.json +3 -3
- package/dist/esm/resources/BaseResource.d.ts +7 -0
- package/dist/esm/resources/BaseResource.d.ts.map +1 -1
- package/dist/esm/resources/BaseResource.js +13 -2
- package/dist/esm/resources/BaseResource.js.map +1 -1
- package/dist/esm/resources/category-list/CategoryListResource.d.ts +7 -2
- package/dist/esm/resources/category-list/CategoryListResource.d.ts.map +1 -1
- package/dist/esm/resources/category-list/CategoryListResource.js +14 -4
- package/dist/esm/resources/category-list/CategoryListResource.js.map +1 -1
- package/dist/esm/resources/place-photo/PlacePhotoResource.d.ts +1 -1
- package/dist/esm/resources/place-photo/PlacePhotoResource.js +2 -2
- package/dist/esm/resources/place-photo/PlacePhotoResource.js.map +1 -1
- package/dist/esm/resources/resourceRegistry.d.ts +2 -1
- package/dist/esm/resources/resourceRegistry.d.ts.map +1 -1
- package/dist/esm/resources/resourceRegistry.js +10 -5
- package/dist/esm/resources/resourceRegistry.js.map +1 -1
- package/dist/esm/resources/tool-response/ToolResponseResource.d.ts +6 -5
- package/dist/esm/resources/tool-response/ToolResponseResource.d.ts.map +1 -1
- package/dist/esm/resources/tool-response/ToolResponseResource.js +29 -5
- package/dist/esm/resources/tool-response/ToolResponseResource.js.map +1 -1
- package/dist/esm/resources/ui-apps/StaticMapViewerUIResource.d.ts +28 -0
- package/dist/esm/resources/ui-apps/StaticMapViewerUIResource.d.ts.map +1 -0
- package/dist/esm/resources/ui-apps/StaticMapViewerUIResource.js +59 -0
- package/dist/esm/resources/ui-apps/StaticMapViewerUIResource.js.map +1 -0
- package/dist/esm/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
- package/dist/esm/resources/ui-apps/mapAppHtml.js +977 -252
- package/dist/esm/resources/ui-apps/mapAppHtml.js.map +1 -1
- package/dist/esm/resources/ui-apps/staticMapViewerHtml.d.ts +17 -0
- package/dist/esm/resources/ui-apps/staticMapViewerHtml.d.ts.map +1 -0
- package/dist/esm/resources/ui-apps/staticMapViewerHtml.js +177 -0
- package/dist/esm/resources/ui-apps/staticMapViewerHtml.js.map +1 -0
- package/dist/esm/tools/MapboxApiBasedTool.d.ts.map +1 -1
- package/dist/esm/tools/MapboxApiBasedTool.js +6 -2
- package/dist/esm/tools/MapboxApiBasedTool.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.js +2 -2
- package/dist/esm/tools/category-search-tool/CategorySearchTool.js.map +1 -1
- package/dist/esm/tools/list-public-tokens-tool/ListPublicTokensTool.d.ts.map +1 -1
- package/dist/esm/tools/list-public-tokens-tool/ListPublicTokensTool.js +2 -0
- package/dist/esm/tools/list-public-tokens-tool/ListPublicTokensTool.js.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts +1 -0
- package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js +10 -6
- package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.js +26 -12
- package/dist/esm/tools/render-map-tool/RenderMapTool.js.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts +1 -0
- package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
- package/dist/esm/tools/resource-reader-tool/ResourceReaderTool.d.ts.map +1 -1
- package/dist/esm/tools/resource-reader-tool/ResourceReaderTool.js +43 -9
- package/dist/esm/tools/resource-reader-tool/ResourceReaderTool.js.map +1 -1
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +2 -2
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts +8 -1
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js +114 -91
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
- package/dist/esm/tools/static-map-image-tool/buildStaticMapRequestUrl.d.ts +23 -0
- package/dist/esm/tools/static-map-image-tool/buildStaticMapRequestUrl.d.ts.map +1 -0
- package/dist/esm/tools/static-map-image-tool/buildStaticMapRequestUrl.js +78 -0
- package/dist/esm/tools/static-map-image-tool/buildStaticMapRequestUrl.js.map +1 -0
- package/dist/esm/utils/mapAppPayload.d.ts +15 -6
- package/dist/esm/utils/mapAppPayload.d.ts.map +1 -1
- package/dist/esm/utils/mapAppPayload.js +2 -1
- package/dist/esm/utils/mapAppPayload.js.map +1 -1
- package/dist/esm/utils/mapboxPublicToken.d.ts +5 -1
- package/dist/esm/utils/mapboxPublicToken.d.ts.map +1 -1
- package/dist/esm/utils/mapboxPublicToken.js +6 -1
- package/dist/esm/utils/mapboxPublicToken.js.map +1 -1
- package/dist/esm/utils/responseRef.d.ts +1 -1
- package/dist/esm/utils/responseRef.d.ts.map +1 -1
- package/dist/esm/utils/responseRef.js +1 -1
- package/dist/esm/utils/responseRef.js.map +1 -1
- package/dist/esm/utils/selfFetchRef.d.ts +24 -0
- package/dist/esm/utils/selfFetchRef.d.ts.map +1 -1
- package/dist/esm/utils/selfFetchRef.js +67 -0
- package/dist/esm/utils/selfFetchRef.js.map +1 -1
- package/dist/esm/utils/serverInstructions.js +1 -1
- package/dist/esm/utils/serverInstructions.js.map +1 -1
- package/dist/esm/version.json +3 -3
- package/package.json +1 -1
|
@@ -4,13 +4,17 @@ import { BaseTool } from '../BaseTool.js';
|
|
|
4
4
|
import { ResourceReaderToolInputSchema } from './ResourceReaderTool.input.schema.js';
|
|
5
5
|
import { ResourceReaderToolOutputSchema } from './ResourceReaderTool.output.schema.js';
|
|
6
6
|
import { getResourceByUri } from '../../resources/resourceRegistry.js';
|
|
7
|
+
import { isSelfFetchRef } from '../../utils/selfFetchRef.js';
|
|
8
|
+
// Base64 grows a blob by about a third, so this keeps an image result under
|
|
9
|
+
// Claude Desktop's 1 MB tool-result cap (same limit as static_map_image_tool).
|
|
10
|
+
const BLOB_INLINE_LIMIT = 700 * 1024;
|
|
7
11
|
/**
|
|
8
12
|
* Tool for reading MCP resources via the tool interface.
|
|
9
13
|
* This provides a fallback mechanism for clients that don't support the MCP resource API.
|
|
10
14
|
*/
|
|
11
15
|
export class ResourceReaderTool extends BaseTool {
|
|
12
16
|
name = 'resource_reader_tool';
|
|
13
|
-
description = 'Reads an MCP resource by URI. This tool is a fallback for clients that do not support the native MCP resource API. Supports reading category lists and other
|
|
17
|
+
description = 'Reads an MCP resource by URI. This tool is a fallback for clients that do not support the native MCP resource API. Supports reading category lists and the mapbox:// refs other tools return (mapbox://temp/..., mapbox://response/..., mapbox://inline/..., mapbox://compute/...); pass a ref exactly as returned. mapbox://selffetch/... refs are not readable: pass them to render_map_tool in payload_refs, which fetches the data itself. Use "mapbox://categories" for default categories or "mapbox://categories/{language}" for localized versions (e.g., "mapbox://categories/ja" for Japanese).';
|
|
14
18
|
annotations = {
|
|
15
19
|
title: 'Resource Reader Tool',
|
|
16
20
|
readOnlyHint: true,
|
|
@@ -49,6 +53,17 @@ export class ResourceReaderTool extends BaseTool {
|
|
|
49
53
|
}
|
|
50
54
|
}
|
|
51
55
|
async execute(input, extra) {
|
|
56
|
+
if (isSelfFetchRef(input.uri)) {
|
|
57
|
+
return {
|
|
58
|
+
content: [
|
|
59
|
+
{
|
|
60
|
+
type: 'text',
|
|
61
|
+
text: `${input.uri} is not a readable resource. Pass it unchanged to render_map_tool in payload_refs; the map fetches its data itself.`
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
isError: true
|
|
65
|
+
};
|
|
66
|
+
}
|
|
52
67
|
// Find the resource by URI
|
|
53
68
|
const resource = getResourceByUri(input.uri);
|
|
54
69
|
if (!resource) {
|
|
@@ -86,17 +101,36 @@ export class ResourceReaderTool extends BaseTool {
|
|
|
86
101
|
catch (validationError) {
|
|
87
102
|
this.log('warning', `Output schema validation failed: ${validationError instanceof Error ? validationError.message : 'Unknown validation error'}`);
|
|
88
103
|
}
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
104
|
+
// A blob goes back once, not as base64 text plus a copy in
|
|
105
|
+
// structuredContent: an image the host can show, or a short note when
|
|
106
|
+
// it's too big to send (or isn't an image).
|
|
107
|
+
if ('blob' in content && typeof content.blob === 'string') {
|
|
108
|
+
const mimeType = content.mimeType ?? 'application/octet-stream';
|
|
109
|
+
const bytes = Math.floor((content.blob.length * 3) / 4);
|
|
110
|
+
const structuredContent = { uri: content.uri, mimeType };
|
|
111
|
+
if ((mimeType === 'image/png' || mimeType === 'image/jpeg') &&
|
|
112
|
+
bytes <= BLOB_INLINE_LIMIT) {
|
|
113
|
+
return {
|
|
114
|
+
content: [{ type: 'image', data: content.blob, mimeType }],
|
|
115
|
+
structuredContent,
|
|
116
|
+
isError: false
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
content: [
|
|
121
|
+
{
|
|
122
|
+
type: 'text',
|
|
123
|
+
text: `${input.uri} holds ${mimeType} data (${Math.round(bytes / 1024)} KB), too large to return through this tool. For a static map, give the user the image link from static_map_image_tool's result, or call it again with a smaller size.`
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
structuredContent,
|
|
127
|
+
isError: false
|
|
128
|
+
};
|
|
96
129
|
}
|
|
97
|
-
|
|
130
|
+
if (!('text' in content) || typeof content.text !== 'string') {
|
|
98
131
|
throw new Error('Resource content must contain either text or blob');
|
|
99
132
|
}
|
|
133
|
+
const textContent = content.text;
|
|
100
134
|
return {
|
|
101
135
|
content: [
|
|
102
136
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceReaderTool.js","sourceRoot":"","sources":["../../../../src/tools/resource-reader-tool/ResourceReaderTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM1C,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"ResourceReaderTool.js","sourceRoot":"","sources":["../../../../src/tools/resource-reader-tool/ResourceReaderTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchAndGeocodeTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/search-and-geocode-tool/SearchAndGeocodeTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EACL,uBAAuB,EAExB,MAAM,yCAAyC,CAAC;AAKjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchAndGeocodeTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/search-and-geocode-tool/SearchAndGeocodeTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EACL,uBAAuB,EAExB,MAAM,yCAAyC,CAAC;AAKjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAUnE,qBAAa,oBAAqB,SAAQ,kBAAkB,CAC1D,OAAO,2BAA2B,EAClC,OAAO,uBAAuB,CAC/B;IACC,IAAI,SAA6B;IACjC,WAAW,SACsvB;IACjwB,WAAW;;;;;;MAMT;gBACU,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;IAQhD,OAAO,CAAC,mBAAmB;cA6DX,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,EAClD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC;IAuJ1B;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;CA0CvB"}
|
|
@@ -6,7 +6,7 @@ import { SearchAndGeocodeInputSchema } from './SearchAndGeocodeTool.input.schema
|
|
|
6
6
|
import { SearchBoxResponseSchema } from './SearchAndGeocodeTool.output.schema.js';
|
|
7
7
|
import { buildSearchAndGeocodeRequestUrl } from './buildSearchAndGeocodeRequestUrl.js';
|
|
8
8
|
import { renderHint } from '../../utils/storeMapPayload.js';
|
|
9
|
-
import { buildSelfFetchRef } from '../../utils/selfFetchRef.js';
|
|
9
|
+
import { buildSelfFetchRef, searchSelfFetchProximity } from '../../utils/selfFetchRef.js';
|
|
10
10
|
// API Documentation: https://docs.mapbox.com/api/search/search-box/#search-request
|
|
11
11
|
export class SearchAndGeocodeTool extends MapboxApiBasedTool {
|
|
12
12
|
name = 'search_and_geocode_tool';
|
|
@@ -206,7 +206,7 @@ export class SearchAndGeocodeTool extends MapboxApiBasedTool {
|
|
|
206
206
|
const ref = buildSelfFetchRef('search', {
|
|
207
207
|
q: input.q,
|
|
208
208
|
language: input.language,
|
|
209
|
-
|
|
209
|
+
...searchSelfFetchProximity(input, data),
|
|
210
210
|
bbox: input.bbox,
|
|
211
211
|
country: input.country,
|
|
212
212
|
types: input.types,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchAndGeocodeTool.js","sourceRoot":"","sources":["../../../../src/tools/search-and-geocode-tool/SearchAndGeocodeTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EACL,uBAAuB,EAExB,MAAM,yCAAyC,CAAC;AAMjD,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"SearchAndGeocodeTool.js","sourceRoot":"","sources":["../../../../src/tools/search-and-geocode-tool/SearchAndGeocodeTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,10 +13,17 @@ export declare class StaticMapImageTool extends MapboxApiBasedTool<typeof Static
|
|
|
13
13
|
idempotentHint: boolean;
|
|
14
14
|
openWorldHint: boolean;
|
|
15
15
|
};
|
|
16
|
+
readonly meta: {
|
|
17
|
+
ui: {
|
|
18
|
+
resourceUri: string;
|
|
19
|
+
csp: {
|
|
20
|
+
resourceDomains: string[];
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
};
|
|
16
24
|
constructor(params: {
|
|
17
25
|
httpRequest: HttpRequest;
|
|
18
26
|
});
|
|
19
|
-
private encodeOverlay;
|
|
20
27
|
protected execute(input: z.infer<typeof StaticMapImageInputSchema>, accessToken: string): Promise<CallToolResult>;
|
|
21
28
|
}
|
|
22
29
|
//# sourceMappingURL=StaticMapImageTool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticMapImageTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/static-map-image-tool/StaticMapImageTool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"StaticMapImageTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/static-map-image-tool/StaticMapImageTool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAqBnE,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,OAAO,yBAAyB,CACjC;IACC,IAAI,SAA2B;IAC/B,WAAW,SAC6Y;IACxZ,WAAW;;;;;;MAMT;IAKF,QAAQ,CAAC,IAAI;;;;;;;MAKX;gBAEU,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;cAOhC,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,EAChD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC;CAwI3B"}
|
|
@@ -1,26 +1,17 @@
|
|
|
1
1
|
// Copyright (c) Mapbox, Inc.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import { randomUUID
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
4
|
import { MapboxApiBasedTool } from '../MapboxApiBasedTool.js';
|
|
5
5
|
import { StaticMapImageInputSchema } from './StaticMapImageTool.input.schema.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
6
|
+
import { buildResponseRef } from '../../utils/responseRef.js';
|
|
7
|
+
import { buildStaticMapRequestUrl, getStaticMapMimeType } from './buildStaticMapRequestUrl.js';
|
|
8
|
+
import { resolveMapboxPublicToken } from '../../utils/mapboxPublicToken.js';
|
|
9
|
+
import { getUiCapability, RESOURCE_MIME_TYPE } from '@modelcontextprotocol/ext-apps/server';
|
|
10
|
+
import { STATIC_MAP_VIEWER_URI, staticMapViewerCsp } from '../../resources/ui-apps/StaticMapViewerUIResource.js';
|
|
11
|
+
// Images larger than this threshold get a `mapbox://response/` ref instead
|
|
9
12
|
// of being inlined as base64, to avoid exceeding Claude Desktop's 1MB tool
|
|
10
13
|
// result limit. base64 adds ~33% overhead, so 700KB raw ≈ 933KB encoded.
|
|
11
14
|
const IMAGE_INLINE_THRESHOLD = 700 * 1024; // 700KB
|
|
12
|
-
// encodeURIComponent leaves (, ), !, ', and * unescaped (they're valid in a
|
|
13
|
-
// URI component per RFC 3986's "unreserved" carve-out from the older
|
|
14
|
-
// escape() behaviour). Every overlay value below is embedded inside a
|
|
15
|
-
// path segment delimited by literal parentheses (e.g. `url-<value>(lon,lat)`,
|
|
16
|
-
// `geojson(<value>)`), so a raw `)` in the value can terminate that segment
|
|
17
|
-
// early from the Static Images API's own overlay-syntax parser's point of
|
|
18
|
-
// view, even though this value already passed URL/JSON validation on our
|
|
19
|
-
// side. Escape those characters explicitly so both parsers agree on where
|
|
20
|
-
// the value actually ends.
|
|
21
|
-
function encodeOverlayComponent(value) {
|
|
22
|
-
return encodeURIComponent(value).replace(/[()!'*]/g, (c) => '%' + c.charCodeAt(0).toString(16).toUpperCase());
|
|
23
|
-
}
|
|
24
15
|
export class StaticMapImageTool extends MapboxApiBasedTool {
|
|
25
16
|
name = 'static_map_image_tool';
|
|
26
17
|
description = 'Generates a static map image from Mapbox Static Images API. Supports center coordinates, zoom level (0-22), image size (up to 1280x1280), various Mapbox styles, and overlays (markers, paths, GeoJSON). Returns PNG for vector styles, JPEG for raster-only styles. Use only when the user explicitly asks for a static image file — to show a map, use render_map_tool instead, which renders an interactive map.';
|
|
@@ -31,72 +22,35 @@ export class StaticMapImageTool extends MapboxApiBasedTool {
|
|
|
31
22
|
idempotentHint: true,
|
|
32
23
|
openWorldHint: true
|
|
33
24
|
};
|
|
25
|
+
// MCP Apps hosts show the image at full width in this viewer instead of as
|
|
26
|
+
// a thumbnail. The result is the same either way, so hosts without MCP
|
|
27
|
+
// Apps still get the image item and the link.
|
|
28
|
+
meta = {
|
|
29
|
+
ui: {
|
|
30
|
+
resourceUri: STATIC_MAP_VIEWER_URI,
|
|
31
|
+
csp: staticMapViewerCsp(MapboxApiBasedTool.mapboxApiEndpoint)
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
34
|
constructor(params) {
|
|
35
35
|
super({
|
|
36
36
|
inputSchema: StaticMapImageInputSchema,
|
|
37
37
|
httpRequest: params.httpRequest
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
encodeOverlay(overlay) {
|
|
41
|
-
switch (overlay.type) {
|
|
42
|
-
case 'marker': {
|
|
43
|
-
const size = overlay.size === 'large' ? 'pin-l' : 'pin-s';
|
|
44
|
-
let marker = size;
|
|
45
|
-
if (overlay.label) {
|
|
46
|
-
marker += `-${overlay.label}`;
|
|
47
|
-
}
|
|
48
|
-
if (overlay.color) {
|
|
49
|
-
marker += `+${overlay.color}`;
|
|
50
|
-
}
|
|
51
|
-
return `${marker}(${overlay.longitude},${overlay.latitude})`;
|
|
52
|
-
}
|
|
53
|
-
case 'custom-marker': {
|
|
54
|
-
const encodedUrl = encodeOverlayComponent(overlay.url);
|
|
55
|
-
return `url-${encodedUrl}(${overlay.longitude},${overlay.latitude})`;
|
|
56
|
-
}
|
|
57
|
-
case 'path': {
|
|
58
|
-
let path = `path-${overlay.strokeWidth}`;
|
|
59
|
-
if (overlay.strokeColor) {
|
|
60
|
-
path += `+${overlay.strokeColor}`;
|
|
61
|
-
if (overlay.strokeOpacity !== undefined) {
|
|
62
|
-
path += `-${overlay.strokeOpacity}`;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (overlay.fillColor) {
|
|
66
|
-
path += `+${overlay.fillColor}`;
|
|
67
|
-
if (overlay.fillOpacity !== undefined) {
|
|
68
|
-
path += `-${overlay.fillOpacity}`;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
// URL encode the polyline to handle special characters
|
|
72
|
-
return `${path}(${encodeOverlayComponent(overlay.encodedPolyline)})`;
|
|
73
|
-
}
|
|
74
|
-
case 'geojson': {
|
|
75
|
-
const geojsonString = JSON.stringify(overlay.data);
|
|
76
|
-
return `geojson(${encodeOverlayComponent(geojsonString)})`;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
40
|
async execute(input, accessToken) {
|
|
81
|
-
const { longitude: lng, latitude: lat } = input.center;
|
|
82
41
|
const { width, height } = input.size;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
.split('/')
|
|
94
|
-
.map(encodeURIComponent)
|
|
95
|
-
.join('/');
|
|
96
|
-
const publicUrl = `${MapboxApiBasedTool.mapboxApiEndpoint}styles/v1/${encodedStyle}/static/${overlayString}${lng},${lat},${input.zoom}/${width}x${height}${density}`;
|
|
97
|
-
const url = `${publicUrl}?access_token=${accessToken}`;
|
|
42
|
+
const apiEndpoint = MapboxApiBasedTool.mapboxApiEndpoint;
|
|
43
|
+
// The input the returned image was rendered from: the 1x fallback below
|
|
44
|
+
// swaps it, so a mapbox://response/ ref renders the same image again.
|
|
45
|
+
let rendered = input;
|
|
46
|
+
const requested = buildStaticMapRequestUrl({
|
|
47
|
+
input,
|
|
48
|
+
accessToken,
|
|
49
|
+
apiEndpoint
|
|
50
|
+
});
|
|
51
|
+
let publicUrl = requested.publicUrl;
|
|
98
52
|
// Fetch image
|
|
99
|
-
const response = await this.httpRequest(url);
|
|
53
|
+
const response = await this.httpRequest(requested.url);
|
|
100
54
|
if (!response.ok) {
|
|
101
55
|
const errorMessage = await this.getErrorMessage(response);
|
|
102
56
|
return {
|
|
@@ -104,29 +58,98 @@ export class StaticMapImageTool extends MapboxApiBasedTool {
|
|
|
104
58
|
isError: true
|
|
105
59
|
};
|
|
106
60
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
//
|
|
61
|
+
let buffer = await response.arrayBuffer();
|
|
62
|
+
// A 2x image is about three times the bytes of the same map at 1x (a
|
|
63
|
+
// 1000x800 streets map: 877KB vs 295KB). Rather than hand back a
|
|
64
|
+
// resource ref the host can't show (Codex showed no image at all),
|
|
65
|
+
// try the 1x image, which usually fits inline.
|
|
66
|
+
if (input.highDensity && buffer.byteLength > IMAGE_INLINE_THRESHOLD) {
|
|
67
|
+
const oneX = { ...input, highDensity: false };
|
|
68
|
+
const fallbackUrls = buildStaticMapRequestUrl({
|
|
69
|
+
input: oneX,
|
|
70
|
+
accessToken,
|
|
71
|
+
apiEndpoint
|
|
72
|
+
});
|
|
73
|
+
const fallback = await this.httpRequest(fallbackUrls.url);
|
|
74
|
+
if (fallback.ok) {
|
|
75
|
+
const fallbackBuffer = await fallback.arrayBuffer();
|
|
76
|
+
if (fallbackBuffer.byteLength < buffer.byteLength) {
|
|
77
|
+
buffer = fallbackBuffer;
|
|
78
|
+
rendered = oneX;
|
|
79
|
+
publicUrl = fallbackUrls.publicUrl;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const mimeType = getStaticMapMimeType(input.style);
|
|
84
|
+
// Hosts show the image from this result, but a model can't put it in its
|
|
85
|
+
// own reply, so it hands the user a URL instead or says "the map above"
|
|
86
|
+
// over nothing (Codex did both). Give it a link that works: the request
|
|
87
|
+
// URL with a public (pk.) token, never the
|
|
88
|
+
// access token used for the fetch (#201). The server's own
|
|
89
|
+
// MAPBOX_PUBLIC_TOKEN is only used when the caller runs on the server's
|
|
90
|
+
// own access token (a local install), so a hosted caller never gets it
|
|
91
|
+
// in their chat history. With no public token, say not to link the URL.
|
|
92
|
+
const inline = buffer.byteLength <= IMAGE_INLINE_THRESHOLD;
|
|
93
|
+
const publicToken = await resolveMapboxPublicToken({
|
|
94
|
+
accessToken,
|
|
95
|
+
apiEndpoint: MapboxApiBasedTool.mapboxApiEndpoint,
|
|
96
|
+
httpRequest: this.httpRequest,
|
|
97
|
+
allowEnvFallback: accessToken === MapboxApiBasedTool.mapboxAccessToken
|
|
98
|
+
});
|
|
99
|
+
const describedSize = `${width}x${height}${publicUrl.endsWith('@2x') ? ' @2x' : ''}`;
|
|
100
|
+
const attached = `Static map image (${describedSize}, ${input.style}) is attached to this result, which is where the host shows it to the user. `;
|
|
101
|
+
// A client that supports MCP Apps shows the image at full size in the
|
|
102
|
+
// viewer (see StaticMapViewerUIResource), so a link in the reply would
|
|
103
|
+
// show it twice. Clients that don't say so (or a stateless server that
|
|
104
|
+
// never saw their initialize) get the link text.
|
|
105
|
+
const imageUrl = publicToken
|
|
106
|
+
? `${publicUrl}?access_token=${publicToken}`
|
|
107
|
+
: undefined;
|
|
108
|
+
const showsViewer = (inline || imageUrl !== undefined) &&
|
|
109
|
+
getUiCapability(this.activeServer?.server.getClientCapabilities())?.mimeTypes?.includes(RESOURCE_MIME_TYPE) === true;
|
|
110
|
+
const urlNote = showsViewer
|
|
111
|
+
? `Static map image (${describedSize}, ${input.style}) is shown to the user at full size in this tool's map viewer, so don't embed or link it again in your reply.` +
|
|
112
|
+
(imageUrl
|
|
113
|
+
? `\nIf the user asks for a link to the image, use this URL; it carries the account's public token: ${imageUrl}`
|
|
114
|
+
: '')
|
|
115
|
+
: imageUrl
|
|
116
|
+
? (inline
|
|
117
|
+
? attached + "Your reply can't include that attachment, and "
|
|
118
|
+
: 'The image is not attached, and ') +
|
|
119
|
+
// Neither Claude's UI nor Codex renders images from other domains
|
|
120
|
+
// in a reply (both left a broken image), so ask for a link.
|
|
121
|
+
"chat interfaces generally don't show images from external URLs, so don't embed this URL as a Markdown image. " +
|
|
122
|
+
"Give it as a link instead; it carries the account's public token, so it opens in a browser.\n" +
|
|
123
|
+
`Image URL: ${imageUrl}`
|
|
124
|
+
: inline
|
|
125
|
+
? attached +
|
|
126
|
+
"Don't link or embed the request URL below: it has no access token, so it won't load for the user. " +
|
|
127
|
+
'If they ask to see the map again, point them to this result or call this tool again.\n' +
|
|
128
|
+
`Request URL: ${publicUrl}`
|
|
129
|
+
: `Request URL (it has no access token, so don't link or embed it): ${publicUrl}`;
|
|
111
130
|
const content = [
|
|
112
|
-
{ type: 'text', text:
|
|
131
|
+
{ type: 'text', text: urlNote }
|
|
113
132
|
];
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
133
|
+
// Say so when the 1x fallback replaced the @2x image the caller asked
|
|
134
|
+
// for, so the model can tell the user. Its own item, so the first one
|
|
135
|
+
// still starts with the size (the viewer's alt text).
|
|
136
|
+
if (rendered !== input) {
|
|
137
|
+
content.push({
|
|
138
|
+
type: 'text',
|
|
139
|
+
text: 'The @2x image was too large to send, so this is the 1x image. For @2x, call this tool again with a smaller size.'
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
if (!inline) {
|
|
143
|
+
// Image is too large to inline safely. The ref carries the request's
|
|
144
|
+
// inputs, not the image, so any server process can answer a later
|
|
145
|
+
// read by rendering it again (see responseRef.ts).
|
|
146
|
+
const resourceUri = buildResponseRef({
|
|
147
|
+
tool: 'static-map',
|
|
148
|
+
input: rendered
|
|
126
149
|
});
|
|
127
150
|
content.push({
|
|
128
151
|
type: 'text',
|
|
129
|
-
text: `⚠️ Image (${Math.round(buffer.byteLength / 1024)}KB)
|
|
152
|
+
text: `⚠️ Image (${Math.round(buffer.byteLength / 1024)}KB) is too large to return inline.\nRead ${resourceUri} with the MCP resource API to get it. Reading it renders the same image again.`
|
|
130
153
|
});
|
|
131
154
|
}
|
|
132
155
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticMapImageTool.js","sourceRoot":"","sources":["../../../../src/tools/static-map-image-tool/StaticMapImageTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"StaticMapImageTool.js","sourceRoot":"","sources":["../../../../src/tools/static-map-image-tool/StaticMapImageTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,kBAAkB,EACnB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,sDAAsD,CAAC;AAE9D,2EAA2E;AAC3E,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,sBAAsB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAEnD,MAAM,OAAO,kBAAmB,SAAQ,kBAEvC;IACC,IAAI,GAAG,uBAAuB,CAAC;IAC/B,WAAW,GACT,qZAAqZ,CAAC;IACxZ,WAAW,GAAG;QACZ,KAAK,EAAE,uBAAuB;QAC9B,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;KACpB,CAAC;IAEF,2EAA2E;IAC3E,uEAAuE;IACvE,8CAA8C;IACrC,IAAI,GAAG;QACd,EAAE,EAAE;YACF,WAAW,EAAE,qBAAqB;YAClC,GAAG,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;SAC9D;KACF,CAAC;IAEF,YAAY,MAAoC;QAC9C,KAAK,CAAC;YACJ,WAAW,EAAE,yBAAyB;YACtC,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,OAAO,CACrB,KAAgD,EAChD,WAAmB;QAEnB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;QACrC,MAAM,WAAW,GAAG,kBAAkB,CAAC,iBAAiB,CAAC;QACzD,wEAAwE;QACxE,sEAAsE;QACtE,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,SAAS,GAAG,wBAAwB,CAAC;YACzC,KAAK;YACL,WAAW;YACX,WAAW;SACZ,CAAC,CAAC;QACH,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QAEpC,cAAc;QACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC1D,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC/C,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE1C,qEAAqE;QACrE,iEAAiE;QACjE,mEAAmE;QACnE,+CAA+C;QAC/C,IAAI,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,GAAG,sBAAsB,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,wBAAwB,CAAC;gBAC5C,KAAK,EAAE,IAAI;gBACX,WAAW;gBACX,WAAW;aACZ,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC1D,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACpD,IAAI,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;oBAClD,MAAM,GAAG,cAAc,CAAC;oBACxB,QAAQ,GAAG,IAAI,CAAC;oBAChB,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEnD,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,2CAA2C;QAC3C,2DAA2D;QAC3D,wEAAwE;QACxE,uEAAuE;QACvE,wEAAwE;QACxE,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,IAAI,sBAAsB,CAAC;QAC3D,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAAC;YACjD,WAAW;YACX,WAAW,EAAE,kBAAkB,CAAC,iBAAiB;YACjD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,gBAAgB,EAAE,WAAW,KAAK,kBAAkB,CAAC,iBAAiB;SACvE,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,GAAG,KAAK,IAAI,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACrF,MAAM,QAAQ,GAAG,qBAAqB,aAAa,KAAK,KAAK,CAAC,KAAK,8EAA8E,CAAC;QAClJ,sEAAsE;QACtE,uEAAuE;QACvE,uEAAuE;QACvE,iDAAiD;QACjD,MAAM,QAAQ,GAAG,WAAW;YAC1B,CAAC,CAAC,GAAG,SAAS,iBAAiB,WAAW,EAAE;YAC5C,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,WAAW,GACf,CAAC,MAAM,IAAI,QAAQ,KAAK,SAAS,CAAC;YAClC,eAAe,CACb,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,qBAAqB,EAAE,CAClD,EAAE,SAAS,EAAE,QAAQ,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;QACtD,MAAM,OAAO,GAAG,WAAW;YACzB,CAAC,CAAC,qBAAqB,aAAa,KAAK,KAAK,CAAC,KAAK,+GAA+G;gBACjK,CAAC,QAAQ;oBACP,CAAC,CAAC,oGAAoG,QAAQ,EAAE;oBAChH,CAAC,CAAC,EAAE,CAAC;YACT,CAAC,CAAC,QAAQ;gBACR,CAAC,CAAC,CAAC,MAAM;oBACL,CAAC,CAAC,QAAQ,GAAG,gDAAgD;oBAC7D,CAAC,CAAC,iCAAiC,CAAC;oBACtC,kEAAkE;oBAClE,4DAA4D;oBAC5D,+GAA+G;oBAC/G,+FAA+F;oBAC/F,cAAc,QAAQ,EAAE;gBAC1B,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,QAAQ;wBACR,oGAAoG;wBACpG,wFAAwF;wBACxF,gBAAgB,SAAS,EAAE;oBAC7B,CAAC,CAAC,oEAAoE,SAAS,EAAE,CAAC;QACxF,MAAM,OAAO,GAA8B;YACzC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;SAChC,CAAC;QACF,sEAAsE;QACtE,sEAAsE;QACtE,sDAAsD;QACtD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,kHAAkH;aACzH,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,qEAAqE;YACrE,kEAAkE;YAClE,mDAAmD;YACnD,MAAM,WAAW,GAAG,gBAAgB,CAAC;gBACnC,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,4CAA4C,WAAW,gFAAgF;aAC/L,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO;YACL,OAAO;YACP,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU,EAAE;aACvB;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { StaticMapImageInputSchema, OverlaySchema } from './StaticMapImageTool.input.schema.js';
|
|
3
|
+
export declare function encodeOverlayComponent(value: string): string;
|
|
4
|
+
export declare function encodeOverlay(overlay: z.infer<typeof OverlaySchema>): string;
|
|
5
|
+
export declare function getStaticMapMimeType(style: string): 'image/jpeg' | 'image/png';
|
|
6
|
+
export interface StaticMapRequestUrls {
|
|
7
|
+
/** The request URL without the access token, safe to show the model. */
|
|
8
|
+
publicUrl: string;
|
|
9
|
+
/** The same URL with the access token, for the request itself. */
|
|
10
|
+
url: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Builds the Static Images API request for a given input. Shared by
|
|
14
|
+
* StaticMapImageTool and ToolResponseResource, which fetches a large image
|
|
15
|
+
* again from its `mapbox://response/` ref. The API renders the same image
|
|
16
|
+
* for the same parameters, so the two requests return the same bytes.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildStaticMapRequestUrl(params: {
|
|
19
|
+
input: z.infer<typeof StaticMapImageInputSchema>;
|
|
20
|
+
accessToken: string;
|
|
21
|
+
apiEndpoint: string;
|
|
22
|
+
}): StaticMapRequestUrls;
|
|
23
|
+
//# sourceMappingURL=buildStaticMapRequestUrl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildStaticMapRequestUrl.d.ts","sourceRoot":"","sources":["../../../../src/tools/static-map-image-tool/buildStaticMapRequestUrl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,yBAAyB,EACzB,aAAa,EACd,MAAM,sCAAsC,CAAC;AAW9C,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,MAAM,CAgD5E;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,GACZ,YAAY,GAAG,WAAW,CAE5B;AAED,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,oBAAoB,CAgBvB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Copyright (c) Mapbox, Inc.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
// encodeURIComponent leaves (, ), !, ', and * unescaped (they're valid in a
|
|
4
|
+
// URI component per RFC 3986's "unreserved" carve-out from the older
|
|
5
|
+
// escape() behaviour). Every overlay value below is embedded inside a
|
|
6
|
+
// path segment delimited by literal parentheses (e.g. `url-<value>(lon,lat)`,
|
|
7
|
+
// `geojson(<value>)`), so a raw `)` in the value can terminate that segment
|
|
8
|
+
// early from the Static Images API's own overlay-syntax parser's point of
|
|
9
|
+
// view, even though this value already passed URL/JSON validation on our
|
|
10
|
+
// side. Escape those characters explicitly so both parsers agree on where
|
|
11
|
+
// the value actually ends.
|
|
12
|
+
export function encodeOverlayComponent(value) {
|
|
13
|
+
return encodeURIComponent(value).replace(/[()!'*]/g, (c) => '%' + c.charCodeAt(0).toString(16).toUpperCase());
|
|
14
|
+
}
|
|
15
|
+
export function encodeOverlay(overlay) {
|
|
16
|
+
switch (overlay.type) {
|
|
17
|
+
case 'marker': {
|
|
18
|
+
const size = overlay.size === 'large' ? 'pin-l' : 'pin-s';
|
|
19
|
+
let marker = size;
|
|
20
|
+
if (overlay.label) {
|
|
21
|
+
marker += `-${overlay.label}`;
|
|
22
|
+
}
|
|
23
|
+
if (overlay.color) {
|
|
24
|
+
marker += `+${overlay.color}`;
|
|
25
|
+
}
|
|
26
|
+
return `${marker}(${overlay.longitude},${overlay.latitude})`;
|
|
27
|
+
}
|
|
28
|
+
case 'custom-marker': {
|
|
29
|
+
const encodedUrl = encodeOverlayComponent(overlay.url);
|
|
30
|
+
return `url-${encodedUrl}(${overlay.longitude},${overlay.latitude})`;
|
|
31
|
+
}
|
|
32
|
+
case 'path': {
|
|
33
|
+
let path = `path-${overlay.strokeWidth}`;
|
|
34
|
+
if (overlay.strokeColor) {
|
|
35
|
+
path += `+${overlay.strokeColor}`;
|
|
36
|
+
if (overlay.strokeOpacity !== undefined) {
|
|
37
|
+
path += `-${overlay.strokeOpacity}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (overlay.fillColor) {
|
|
41
|
+
path += `+${overlay.fillColor}`;
|
|
42
|
+
if (overlay.fillOpacity !== undefined) {
|
|
43
|
+
path += `-${overlay.fillOpacity}`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// URL encode the polyline to handle special characters
|
|
47
|
+
return `${path}(${encodeOverlayComponent(overlay.encodedPolyline)})`;
|
|
48
|
+
}
|
|
49
|
+
case 'geojson': {
|
|
50
|
+
const geojsonString = JSON.stringify(overlay.data);
|
|
51
|
+
return `geojson(${encodeOverlayComponent(geojsonString)})`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function getStaticMapMimeType(style) {
|
|
56
|
+
return style.includes('satellite') ? 'image/jpeg' : 'image/png';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Builds the Static Images API request for a given input. Shared by
|
|
60
|
+
* StaticMapImageTool and ToolResponseResource, which fetches a large image
|
|
61
|
+
* again from its `mapbox://response/` ref. The API renders the same image
|
|
62
|
+
* for the same parameters, so the two requests return the same bytes.
|
|
63
|
+
*/
|
|
64
|
+
export function buildStaticMapRequestUrl(params) {
|
|
65
|
+
const { input, accessToken, apiEndpoint } = params;
|
|
66
|
+
const { longitude: lng, latitude: lat } = input.center;
|
|
67
|
+
const { width, height } = input.size;
|
|
68
|
+
let overlayString = '';
|
|
69
|
+
if (input.overlays && input.overlays.length > 0) {
|
|
70
|
+
overlayString = input.overlays.map(encodeOverlay).join(',') + '/';
|
|
71
|
+
}
|
|
72
|
+
const density = input.highDensity ? '@2x' : '';
|
|
73
|
+
const encodedStyle = input.style.split('/').map(encodeURIComponent).join('/');
|
|
74
|
+
const publicUrl = `${apiEndpoint}styles/v1/${encodedStyle}/static/${overlayString}${lng},${lat},${input.zoom}/${width}x${height}${density}`;
|
|
75
|
+
const url = `${publicUrl}?access_token=${accessToken}`;
|
|
76
|
+
return { publicUrl, url };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=buildStaticMapRequestUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildStaticMapRequestUrl.js","sourceRoot":"","sources":["../../../../src/tools/static-map-image-tool/buildStaticMapRequestUrl.ts"],"names":[],"mappings":"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"}
|