@mapbox/mcp-docs-server 0.2.1 → 0.3.1
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/index.js +3 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts +6 -2
- package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts.map +1 -1
- package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js +12 -23
- package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js.map +1 -1
- package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts +4 -2
- package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts.map +1 -1
- package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.js +9 -18
- package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.js.map +1 -1
- package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts +5 -2
- package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts.map +1 -1
- package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.js +10 -23
- package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.js.map +1 -1
- package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts +6 -2
- package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts.map +1 -1
- package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.js +13 -23
- package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.js.map +1 -1
- package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts +6 -2
- package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts.map +1 -1
- package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js +13 -23
- package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js.map +1 -1
- package/dist/commonjs/tools/BaseTool.d.ts.map +1 -1
- package/dist/commonjs/tools/BaseTool.js +18 -10
- package/dist/commonjs/tools/BaseTool.js.map +1 -1
- package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts.map +1 -1
- package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.js +31 -2
- package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.js.map +1 -1
- package/dist/commonjs/tools/get-document-tool/GetDocumentTool.d.ts.map +1 -1
- package/dist/commonjs/tools/get-document-tool/GetDocumentTool.js +30 -2
- package/dist/commonjs/tools/get-document-tool/GetDocumentTool.js.map +1 -1
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.d.ts.map +1 -1
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.js +22 -62
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.js.map +1 -1
- package/dist/commonjs/utils/docCache.d.ts.map +1 -1
- package/dist/commonjs/utils/docCache.js +7 -2
- package/dist/commonjs/utils/docCache.js.map +1 -1
- package/dist/commonjs/utils/docFetcher.d.ts +10 -1
- package/dist/commonjs/utils/docFetcher.d.ts.map +1 -1
- package/dist/commonjs/utils/docFetcher.js +29 -4
- package/dist/commonjs/utils/docFetcher.js.map +1 -1
- package/dist/commonjs/utils/docsSearchIndex.d.ts +25 -0
- package/dist/commonjs/utils/docsSearchIndex.d.ts.map +1 -0
- package/dist/commonjs/utils/docsSearchIndex.js +146 -0
- package/dist/commonjs/utils/docsSearchIndex.js.map +1 -0
- package/dist/commonjs/utils/index.d.ts +1 -0
- package/dist/commonjs/utils/index.d.ts.map +1 -1
- package/dist/commonjs/utils/index.js +7 -1
- package/dist/commonjs/utils/index.js.map +1 -1
- package/dist/commonjs/utils/tracing.d.ts +18 -0
- package/dist/commonjs/utils/tracing.d.ts.map +1 -0
- package/dist/commonjs/utils/tracing.js +142 -0
- package/dist/commonjs/utils/tracing.js.map +1 -0
- package/dist/commonjs/version.json +3 -3
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts +6 -2
- package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts.map +1 -1
- package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js +12 -23
- package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js.map +1 -1
- package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts +4 -2
- package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts.map +1 -1
- package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.js +9 -18
- package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.js.map +1 -1
- package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts +5 -2
- package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts.map +1 -1
- package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.js +10 -23
- package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.js.map +1 -1
- package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts +6 -2
- package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts.map +1 -1
- package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.js +13 -23
- package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.js.map +1 -1
- package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts +6 -2
- package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts.map +1 -1
- package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js +13 -23
- package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js.map +1 -1
- package/dist/esm/tools/BaseTool.d.ts.map +1 -1
- package/dist/esm/tools/BaseTool.js +18 -10
- package/dist/esm/tools/BaseTool.js.map +1 -1
- package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts.map +1 -1
- package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.js +31 -2
- package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.js.map +1 -1
- package/dist/esm/tools/get-document-tool/GetDocumentTool.d.ts.map +1 -1
- package/dist/esm/tools/get-document-tool/GetDocumentTool.js +30 -2
- package/dist/esm/tools/get-document-tool/GetDocumentTool.js.map +1 -1
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.d.ts.map +1 -1
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.js +22 -62
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.js.map +1 -1
- package/dist/esm/utils/docCache.d.ts.map +1 -1
- package/dist/esm/utils/docCache.js +7 -2
- package/dist/esm/utils/docCache.js.map +1 -1
- package/dist/esm/utils/docFetcher.d.ts +10 -1
- package/dist/esm/utils/docFetcher.d.ts.map +1 -1
- package/dist/esm/utils/docFetcher.js +29 -5
- package/dist/esm/utils/docFetcher.js.map +1 -1
- package/dist/esm/utils/docsSearchIndex.d.ts +25 -0
- package/dist/esm/utils/docsSearchIndex.d.ts.map +1 -0
- package/dist/esm/utils/docsSearchIndex.js +142 -0
- package/dist/esm/utils/docsSearchIndex.js.map +1 -0
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/tracing.d.ts +18 -0
- package/dist/esm/utils/tracing.d.ts.map +1 -0
- package/dist/esm/utils/tracing.js +135 -0
- package/dist/esm/utils/tracing.js.map +1 -0
- package/dist/esm/version.json +3 -3
- package/package.json +16 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapboxReferenceResource.js","sourceRoot":"","sources":["../../../../src/resources/mapbox-reference-resource/MapboxReferenceResource.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AASlC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MapboxReferenceResource.js","sourceRoot":"","sources":["../../../../src/resources/mapbox-reference-resource/MapboxReferenceResource.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AASlC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,OAAO,uBAAwB,SAAQ,YAAY;IAC9C,IAAI,GAAG,kBAAkB,CAAC;IAC1B,GAAG,GAAG,6BAA6B,CAAC;IACpC,WAAW,GAClB,6DAA6D;QAC7D,wEAAwE;QACxE,gFAAgF;QAChF,wEAAwE;QACxE,uEAAuE,CAAC;IACjE,QAAQ,GAAG,eAAe,CAAC;IAE5B,WAAW,CAAc;IAEjC,YAAY,MAAoC;QAC9C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,GAAQ,EACR,MAA8D;QAE9D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,kCAAkC,EAClC,IAAI,CAAC,WAAW,CACjB,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI,EAAE,OAAO;qBACd;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,qCAAqC,YAAY,EAAE,EAAE;gBACnE,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -3,12 +3,16 @@ import type { ReadResourceResult, ServerNotification, ServerRequest } from '@mod
|
|
|
3
3
|
import type { HttpRequest } from '../../utils/types.js';
|
|
4
4
|
import { BaseResource } from '../BaseResource.js';
|
|
5
5
|
/**
|
|
6
|
-
* Resource providing Mapbox SDK documentation
|
|
6
|
+
* Resource providing Mapbox GL JS SDK documentation.
|
|
7
|
+
* Fetches the Mapbox GL JS llms.txt index which lists all GL JS guides,
|
|
8
|
+
* API reference pages, and examples with direct links to each page.
|
|
9
|
+
* GL JS is the primary web mapping SDK; use get_document_tool to fetch
|
|
10
|
+
* full content of any listed page.
|
|
7
11
|
*/
|
|
8
12
|
export declare class MapboxSdkDocsResource extends BaseResource {
|
|
9
13
|
readonly name = "Mapbox SDK Documentation";
|
|
10
14
|
readonly uri = "resource://mapbox-sdk-docs";
|
|
11
|
-
readonly description
|
|
15
|
+
readonly description: string;
|
|
12
16
|
readonly mimeType = "text/markdown";
|
|
13
17
|
private httpRequest;
|
|
14
18
|
constructor(params: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapboxSdkDocsResource.d.ts","sourceRoot":"","sources":["../../../../src/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.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;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"MapboxSdkDocsResource.d.ts","sourceRoot":"","sources":["../../../../src/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.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;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,QAAQ,CAAC,IAAI,8BAA8B;IAC3C,QAAQ,CAAC,GAAG,gCAAgC;IAC5C,QAAQ,CAAC,WAAW,SAKsB;IAC1C,QAAQ,CAAC,QAAQ,mBAAmB;IAEpC,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;IAKnC,YAAY,CACvB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAC7D,OAAO,CAAC,kBAAkB,CAAC;CAwB/B"}
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
// Copyright (c) Mapbox, Inc.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import { docCache } from '../../utils/docCache.js';
|
|
4
3
|
import { BaseResource } from '../BaseResource.js';
|
|
5
|
-
import {
|
|
4
|
+
import { fetchCachedText } from '../../utils/docFetcher.js';
|
|
6
5
|
/**
|
|
7
|
-
* Resource providing Mapbox SDK documentation
|
|
6
|
+
* Resource providing Mapbox GL JS SDK documentation.
|
|
7
|
+
* Fetches the Mapbox GL JS llms.txt index which lists all GL JS guides,
|
|
8
|
+
* API reference pages, and examples with direct links to each page.
|
|
9
|
+
* GL JS is the primary web mapping SDK; use get_document_tool to fetch
|
|
10
|
+
* full content of any listed page.
|
|
8
11
|
*/
|
|
9
12
|
export class MapboxSdkDocsResource extends BaseResource {
|
|
10
13
|
name = 'Mapbox SDK Documentation';
|
|
11
14
|
uri = 'resource://mapbox-sdk-docs';
|
|
12
|
-
description = 'Mapbox
|
|
15
|
+
description = 'Mapbox GL JS documentation index: guides for getting started, adding data, ' +
|
|
16
|
+
'globe/projections, indoor mapping, gestures, styling layers, and migration. ' +
|
|
17
|
+
'Also includes links to API reference and code examples. ' +
|
|
18
|
+
'For mobile/native SDKs (iOS, Android, Flutter), use resource://mapbox-reference ' +
|
|
19
|
+
'to discover their documentation URLs.';
|
|
13
20
|
mimeType = 'text/markdown';
|
|
14
21
|
httpRequest;
|
|
15
22
|
constructor(params) {
|
|
@@ -18,30 +25,13 @@ export class MapboxSdkDocsResource extends BaseResource {
|
|
|
18
25
|
}
|
|
19
26
|
async readCallback(uri, _extra) {
|
|
20
27
|
try {
|
|
21
|
-
const
|
|
22
|
-
let content = docCache.get(LLMS_TXT_URL);
|
|
23
|
-
if (!content) {
|
|
24
|
-
const response = await this.httpRequest(LLMS_TXT_URL, {
|
|
25
|
-
headers: {
|
|
26
|
-
Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8'
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
if (!response.ok) {
|
|
30
|
-
throw new Error(`Failed to fetch Mapbox documentation: ${response.statusText}`);
|
|
31
|
-
}
|
|
32
|
-
content = await response.text();
|
|
33
|
-
docCache.set(LLMS_TXT_URL, content);
|
|
34
|
-
}
|
|
35
|
-
// Parse and filter for SDK sections only
|
|
36
|
-
const allSections = parseDocSections(content);
|
|
37
|
-
const sdkSections = filterSectionsByCategory(allSections, 'sdks');
|
|
38
|
-
const sdkContent = sectionsToMarkdown(sdkSections);
|
|
28
|
+
const content = await fetchCachedText('https://docs.mapbox.com/mapbox-gl-js/llms.txt', this.httpRequest);
|
|
39
29
|
return {
|
|
40
30
|
contents: [
|
|
41
31
|
{
|
|
42
32
|
uri: uri.href,
|
|
43
33
|
mimeType: this.mimeType,
|
|
44
|
-
text:
|
|
34
|
+
text: content
|
|
45
35
|
}
|
|
46
36
|
]
|
|
47
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapboxSdkDocsResource.js","sourceRoot":"","sources":["../../../../src/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AASlC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MapboxSdkDocsResource.js","sourceRoot":"","sources":["../../../../src/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AASlC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAC5C,IAAI,GAAG,0BAA0B,CAAC;IAClC,GAAG,GAAG,4BAA4B,CAAC;IACnC,WAAW,GAClB,6EAA6E;QAC7E,8EAA8E;QAC9E,0DAA0D;QAC1D,kFAAkF;QAClF,uCAAuC,CAAC;IACjC,QAAQ,GAAG,eAAe,CAAC;IAE5B,WAAW,CAAc;IAEjC,YAAY,MAAoC;QAC9C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,GAAQ,EACR,MAA8D;QAE9D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,+CAA+C,EAC/C,IAAI,CAAC,WAAW,CACjB,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI,EAAE,OAAO;qBACd;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,oCAAoC,YAAY,EAAE,EAAE;gBAClE,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTool.d.ts","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,cAAc,EACf,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EACL,cAAc,EACd,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseTool.d.ts","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,cAAc,EACf,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EACL,cAAc,EACd,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAGpC,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;IACG,GAAG,CACP,QAAQ,EAAE,OAAO,EAEjB,MAAM,CAAC,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,GACrC,OAAO,CAAC,cAAc,CAAC;IAmB1B,SAAS,CAAC,QAAQ,CAAC,OAAO,CACxB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAChC,OAAO,CAAC,cAAc,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc;IAkC5C;;OAEG;IACH,SAAS,CAAC,GAAG,CACX,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,EAC7C,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,IAAI;CAKR"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Mapbox, Inc.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
+
import { withToolSpan } from '../utils/tracing.js';
|
|
3
4
|
export class BaseTool {
|
|
4
5
|
inputSchema;
|
|
5
6
|
outputSchema;
|
|
@@ -14,16 +15,23 @@ export class BaseTool {
|
|
|
14
15
|
async run(rawInput,
|
|
15
16
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
17
|
_extra) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
18
|
+
return withToolSpan(this.name, async (span) => {
|
|
19
|
+
try {
|
|
20
|
+
const input = this.inputSchema.parse(rawInput);
|
|
21
|
+
const result = await this.execute(input);
|
|
22
|
+
if (result.isError) {
|
|
23
|
+
span.setAttribute('tool.error', true);
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
span.setAttribute('tool.error', true);
|
|
29
|
+
return {
|
|
30
|
+
isError: true,
|
|
31
|
+
content: [{ type: 'text', text: error.message }]
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
});
|
|
27
35
|
}
|
|
28
36
|
/**
|
|
29
37
|
* Installs the tool to the given MCP server.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTool.js","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;
|
|
1
|
+
{"version":3,"file":"BaseTool.js","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAYlC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAgB,QAAQ;IAQnB,WAAW,CAAc;IACzB,YAAY,CAAgB;IAC3B,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,KAAK,CAAC,GAAG,CACP,QAAiB;IACjB,8DAA8D;IAC9D,MAAsC;QAEtC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBACtC,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;iBAC5D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAMD;;OAEG;IACH,SAAS,CAAC,MAAiB;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,MAAM,GAQR;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,+BAA+B;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY;gBACjB,8DAA8D;gBAC7D,IAAI,CAAC,YAA4C,CAAC,KAAK,CAAC;QAC7D,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;IAED;;OAEG;IACO,GAAG,CACX,KAA6C,EAC7C,IAAsC;QAEtC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchGetDocumentsTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/batch-get-documents-tool/BatchGetDocumentsTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"BatchGetDocumentsTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/batch-get-documents-tool/BatchGetDocumentsTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,yCAAyC,CAAC;AAiCjD,qBAAa,qBAAsB,SAAQ,QAAQ,CACjD,OAAO,uBAAuB,CAC/B;IACC,IAAI,SAA8B;IAClC,WAAW,SACyP;IACpQ,QAAQ,CAAC,WAAW;;;;;;MAMlB;IAEF,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;cAKhC,OAAO,CACrB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,cAAc,CAAC;CA2E3B"}
|
|
@@ -4,10 +4,27 @@ import { docCache, normalizeCacheKey } from '../../utils/docCache.js';
|
|
|
4
4
|
import { fetchDocContent } from '../../utils/docFetcher.js';
|
|
5
5
|
import { BaseTool } from '../BaseTool.js';
|
|
6
6
|
import { BatchGetDocumentsSchema } from './BatchGetDocumentsTool.input.schema.js';
|
|
7
|
+
// Explicit allowlist of hostnames this docs tool is permitted to fetch.
|
|
8
|
+
// api.mapbox.com is intentionally excluded — it is a live API that requires
|
|
9
|
+
// auth tokens, not a documentation host. Allowing it would let callers poison
|
|
10
|
+
// the shared cache with token-authorized private responses under no-token keys.
|
|
11
|
+
const ALLOWED_DOC_HOSTNAMES = new Set([
|
|
12
|
+
'docs.mapbox.com',
|
|
13
|
+
'mapbox.com',
|
|
14
|
+
'docs.tilestream.net'
|
|
15
|
+
]);
|
|
7
16
|
function isMapboxUrl(url) {
|
|
8
17
|
try {
|
|
9
18
|
const { hostname } = new URL(url);
|
|
10
|
-
return
|
|
19
|
+
return ALLOWED_DOC_HOSTNAMES.has(hostname);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function hasAccessToken(url) {
|
|
26
|
+
try {
|
|
27
|
+
return new URL(url).searchParams.has('access_token');
|
|
11
28
|
}
|
|
12
29
|
catch {
|
|
13
30
|
return false;
|
|
@@ -35,7 +52,19 @@ export class BatchGetDocumentsTool extends BaseTool {
|
|
|
35
52
|
content: [
|
|
36
53
|
{
|
|
37
54
|
type: 'text',
|
|
38
|
-
text: `Invalid URLs: only mapbox.com URLs are supported. Invalid: ${invalidUrls.join(', ')}`
|
|
55
|
+
text: `Invalid URLs: only mapbox.com documentation URLs are supported. Invalid: ${invalidUrls.join(', ')}`
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
isError: true
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const tokenUrls = input.urls.filter(hasAccessToken);
|
|
62
|
+
if (tokenUrls.length > 0) {
|
|
63
|
+
return {
|
|
64
|
+
content: [
|
|
65
|
+
{
|
|
66
|
+
type: 'text',
|
|
67
|
+
text: `Invalid URLs: URLs must not contain access_token. Invalid: ${tokenUrls.join(', ')}`
|
|
39
68
|
}
|
|
40
69
|
],
|
|
41
70
|
isError: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchGetDocumentsTool.js","sourceRoot":"","sources":["../../../../src/tools/batch-get-documents-tool/BatchGetDocumentsTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAGlC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,uBAAuB,EAExB,MAAM,yCAAyC,CAAC;AAEjD,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"BatchGetDocumentsTool.js","sourceRoot":"","sources":["../../../../src/tools/batch-get-documents-tool/BatchGetDocumentsTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GetDocumentTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"GetDocumentTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AA6B3C,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,OAAO,iBAAiB,CAAC;IACrE,IAAI,SAAuB;IAC3B,WAAW,SAC8P;IACzQ,QAAQ,CAAC,WAAW;;;;;;MAMlB;IAEF,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;cAKhC,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;CA8C1E"}
|
|
@@ -4,10 +4,27 @@ import { docCache } from '../../utils/docCache.js';
|
|
|
4
4
|
import { fetchDocContent } from '../../utils/docFetcher.js';
|
|
5
5
|
import { BaseTool } from '../BaseTool.js';
|
|
6
6
|
import { GetDocumentSchema } from './GetDocumentTool.input.schema.js';
|
|
7
|
+
// Explicit allowlist of hostnames this docs tool is permitted to fetch.
|
|
8
|
+
// api.mapbox.com is intentionally excluded — it is a live API that requires
|
|
9
|
+
// auth tokens, not a documentation host. Allowing it would let callers poison
|
|
10
|
+
// the shared cache with token-authorized private responses under no-token keys.
|
|
11
|
+
const ALLOWED_DOC_HOSTNAMES = new Set([
|
|
12
|
+
'docs.mapbox.com',
|
|
13
|
+
'mapbox.com',
|
|
14
|
+
'docs.tilestream.net'
|
|
15
|
+
]);
|
|
7
16
|
function isMapboxUrl(url) {
|
|
8
17
|
try {
|
|
9
18
|
const { hostname } = new URL(url);
|
|
10
|
-
return
|
|
19
|
+
return ALLOWED_DOC_HOSTNAMES.has(hostname);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function hasAccessToken(url) {
|
|
26
|
+
try {
|
|
27
|
+
return new URL(url).searchParams.has('access_token');
|
|
11
28
|
}
|
|
12
29
|
catch {
|
|
13
30
|
return false;
|
|
@@ -34,7 +51,18 @@ export class GetDocumentTool extends BaseTool {
|
|
|
34
51
|
content: [
|
|
35
52
|
{
|
|
36
53
|
type: 'text',
|
|
37
|
-
text: `Invalid URL: only mapbox.com URLs are supported. Received: ${input.url}`
|
|
54
|
+
text: `Invalid URL: only mapbox.com documentation URLs are supported. Received: ${input.url}`
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
isError: true
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (hasAccessToken(input.url)) {
|
|
61
|
+
return {
|
|
62
|
+
content: [
|
|
63
|
+
{
|
|
64
|
+
type: 'text',
|
|
65
|
+
text: `Invalid URL: URLs must not contain access_token. Received: ${input.url}`
|
|
38
66
|
}
|
|
39
67
|
],
|
|
40
68
|
isError: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GetDocumentTool.js","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAGlC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,iBAAiB,EAElB,MAAM,mCAAmC,CAAC;AAE3C,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"GetDocumentTool.js","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchDocsTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/search-docs-tool/SearchDocsTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchDocsTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/search-docs-tool/SearchDocsTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAsB1C,qBAAa,cAAe,SAAQ,QAAQ,CAAC,OAAO,gBAAgB,CAAC;IACnE,IAAI,SAA6B;IACjC,WAAW,SAK2D;IACtE,QAAQ,CAAC,WAAW;;;;;;MAMlB;IAEF,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;cAKhC,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CAoBzE"}
|
|
@@ -2,38 +2,19 @@
|
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
import { BaseTool } from '../BaseTool.js';
|
|
4
4
|
import { SearchDocsSchema } from './SearchDocsTool.input.schema.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const ALGOLIA_SEARCH_KEY = '332b77ce8ccfba082ac50ad2d882c80a';
|
|
9
|
-
const ALGOLIA_INDEX = 'mapbox';
|
|
10
|
-
const ALGOLIA_URL = `https://${ALGOLIA_APP_ID}-dsn.algolia.net/1/indexes/${ALGOLIA_INDEX}/query`;
|
|
11
|
-
function stripHtml(text) {
|
|
12
|
-
return text.replace(/<[^>]+>/g, '');
|
|
13
|
-
}
|
|
14
|
-
function buildTitle(hierarchy) {
|
|
15
|
-
const levels = [
|
|
16
|
-
hierarchy.lvl0,
|
|
17
|
-
hierarchy.lvl1,
|
|
18
|
-
hierarchy.lvl2,
|
|
19
|
-
hierarchy.lvl3,
|
|
20
|
-
hierarchy.lvl4,
|
|
21
|
-
hierarchy.lvl5,
|
|
22
|
-
hierarchy.lvl6
|
|
23
|
-
].filter((lvl) => lvl !== null);
|
|
24
|
-
return levels.map(stripHtml).join(' > ');
|
|
25
|
-
}
|
|
26
|
-
function formatResults(hits) {
|
|
27
|
-
if (hits.length === 0) {
|
|
5
|
+
import { searchDocs } from '../../utils/docsSearchIndex.js';
|
|
6
|
+
function formatResults(entries) {
|
|
7
|
+
if (entries.length === 0) {
|
|
28
8
|
return 'No results found.';
|
|
29
9
|
}
|
|
30
|
-
return
|
|
31
|
-
.map((
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
10
|
+
return entries
|
|
11
|
+
.map((entry, i) => {
|
|
12
|
+
const lines = [
|
|
13
|
+
`${i + 1}. **${entry.title}** (${entry.product})`,
|
|
14
|
+
` URL: ${entry.url}`
|
|
15
|
+
];
|
|
16
|
+
if (entry.description) {
|
|
17
|
+
lines.push(` > ${entry.description}`);
|
|
37
18
|
}
|
|
38
19
|
return lines.join('\n');
|
|
39
20
|
})
|
|
@@ -41,7 +22,11 @@ function formatResults(hits) {
|
|
|
41
22
|
}
|
|
42
23
|
export class SearchDocsTool extends BaseTool {
|
|
43
24
|
name = 'search_mapbox_docs_tool';
|
|
44
|
-
description = 'Search Mapbox documentation by keyword or natural language query.
|
|
25
|
+
description = 'Search Mapbox documentation by keyword or natural language query. ' +
|
|
26
|
+
'Searches across API reference, GL JS, Help Center, Style Spec, Studio, ' +
|
|
27
|
+
'Search JS, iOS/Android Maps and Navigation SDKs, and Tilesets. ' +
|
|
28
|
+
'Returns ranked results with titles, URLs, and descriptions. ' +
|
|
29
|
+
'Use get_document_tool to fetch the full content of a result page.';
|
|
45
30
|
annotations = {
|
|
46
31
|
readOnlyHint: true,
|
|
47
32
|
destructiveHint: false,
|
|
@@ -55,45 +40,20 @@ export class SearchDocsTool extends BaseTool {
|
|
|
55
40
|
this.httpRequest = params.httpRequest;
|
|
56
41
|
}
|
|
57
42
|
async execute(input) {
|
|
58
|
-
const body = JSON.stringify({
|
|
59
|
-
query: input.query,
|
|
60
|
-
hitsPerPage: input.limit
|
|
61
|
-
});
|
|
62
|
-
let data;
|
|
63
43
|
try {
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
'Content-Type': 'application/json'
|
|
70
|
-
},
|
|
71
|
-
body
|
|
72
|
-
});
|
|
73
|
-
if (!response.ok) {
|
|
74
|
-
return {
|
|
75
|
-
content: [
|
|
76
|
-
{
|
|
77
|
-
type: 'text',
|
|
78
|
-
text: `Search request failed: ${response.status} ${response.statusText}`
|
|
79
|
-
}
|
|
80
|
-
],
|
|
81
|
-
isError: true
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
data = (await response.json());
|
|
44
|
+
const results = await searchDocs(input.query, input.limit, this.httpRequest);
|
|
45
|
+
return {
|
|
46
|
+
content: [{ type: 'text', text: formatResults(results) }],
|
|
47
|
+
isError: false
|
|
48
|
+
};
|
|
85
49
|
}
|
|
86
50
|
catch (error) {
|
|
87
51
|
const message = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
88
52
|
return {
|
|
89
|
-
content: [{ type: 'text', text: `Search
|
|
53
|
+
content: [{ type: 'text', text: `Search failed: ${message}` }],
|
|
90
54
|
isError: true
|
|
91
55
|
};
|
|
92
56
|
}
|
|
93
|
-
return {
|
|
94
|
-
content: [{ type: 'text', text: formatResults(data.hits) }],
|
|
95
|
-
isError: false
|
|
96
|
-
};
|
|
97
57
|
}
|
|
98
58
|
}
|
|
99
59
|
//# sourceMappingURL=SearchDocsTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchDocsTool.js","sourceRoot":"","sources":["../../../../src/tools/search-docs-tool/SearchDocsTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAIlC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAEjB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchDocsTool.js","sourceRoot":"","sources":["../../../../src/tools/search-docs-tool/SearchDocsTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAIlC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAEjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAiB,MAAM,gCAAgC,CAAC;AAE3E,SAAS,aAAa,CAAC,OAAmB;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG;YACZ,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG;YACjD,WAAW,KAAK,CAAC,GAAG,EAAE;SACvB,CAAC;QACF,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,QAAiC;IACnE,IAAI,GAAG,yBAAyB,CAAC;IACjC,WAAW,GACT,oEAAoE;QACpE,yEAAyE;QACzE,iEAAiE;QACjE,8DAA8D;QAC9D,mEAAmE,CAAC;IAC7D,WAAW,GAAG;QACrB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,yBAAyB;KACjC,CAAC;IAEM,WAAW,CAAc;IAEjC,YAAY,MAAoC;QAC9C,KAAK,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,KAAsB;QAC5C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAC9B,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,EACX,IAAI,CAAC,WAAW,CACjB,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;YACpE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,OAAO,EAAE,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docCache.d.ts","sourceRoot":"","sources":["../../../src/utils/docCache.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,eAAe,QAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"docCache.d.ts","sourceRoot":"","sources":["../../../src/utils/docCache.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,eAAe,QAAkB,CAAC;AAU/C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASrD;AAED,cAAM,QAAQ;IACZ,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,UAAU,CAAK;IAEvB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAe/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAuB,GAAG,IAAI;IAuCvE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,KAAK,IAAI,IAAI;IAKb,gCAAgC;IAChC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,gCAAgC;IAChC,IAAI,iBAAiB,IAAI,MAAM,CAE9B;CACF;AAED,eAAO,MAAM,QAAQ,UAAiB,CAAC;AAEvC;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
const DEFAULT_TTL_MS = parseInt(process.env.MAPBOX_DOCS_CACHE_TTL_MS ?? '3600000', 10);
|
|
4
4
|
// Cache limits
|
|
5
5
|
const MAX_ENTRIES = 512;
|
|
6
|
-
export const MAX_ENTRY_BYTES =
|
|
6
|
+
export const MAX_ENTRY_BYTES = 5 * 1024 * 1024; // 5 MB hard cap per entry
|
|
7
|
+
const LARGE_ENTRY_WARNING_BYTES = 1 * 1024 * 1024; // warn at 1 MB
|
|
7
8
|
const MAX_TOTAL_BYTES = 50 * 1024 * 1024; // 50 MB total
|
|
8
9
|
/**
|
|
9
10
|
* Normalize a URL for use as a cache key by stripping query parameters
|
|
@@ -42,7 +43,11 @@ class DocCache {
|
|
|
42
43
|
set(url, content, ttlMs = DEFAULT_TTL_MS) {
|
|
43
44
|
const bytes = Buffer.byteLength(content, 'utf8');
|
|
44
45
|
if (bytes > MAX_ENTRY_BYTES) {
|
|
45
|
-
|
|
46
|
+
console.warn(`[docCache] Entry too large to cache (${(bytes / 1024 / 1024).toFixed(1)} MB, limit ${MAX_ENTRY_BYTES / 1024 / 1024} MB): ${url}`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (bytes > LARGE_ENTRY_WARNING_BYTES) {
|
|
50
|
+
console.warn(`[docCache] Caching large entry (${(bytes / 1024 / 1024).toFixed(1)} MB): ${url}`);
|
|
46
51
|
}
|
|
47
52
|
const key = normalizeCacheKey(url);
|
|
48
53
|
// Remove existing entry for this key if present
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docCache.js","sourceRoot":"","sources":["../../../src/utils/docCache.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,MAAM,cAAc,GAAG,QAAQ,CAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,SAAS,EACjD,EAAE,CACH,CAAC;AAEF,eAAe;AACf,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"docCache.js","sourceRoot":"","sources":["../../../src/utils/docCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,16 +2,25 @@ import type { HttpRequest } from './types.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Rewrite a docs.mapbox.com URL to its .md variant, substituting the
|
|
4
4
|
* effective hostname (which may be overridden via MAPBOX_DOCS_HOST_OVERRIDE).
|
|
5
|
-
* Returns null if the URL is not a docs.mapbox.com URL
|
|
5
|
+
* Returns null if the URL is not a docs.mapbox.com URL, or if the URL
|
|
6
|
+
* already ends in a text extension (.md, .txt, .json) — those should be
|
|
7
|
+
* fetched as-is without rewriting.
|
|
6
8
|
*
|
|
7
9
|
* Example (no override):
|
|
8
10
|
* https://docs.mapbox.com/accounts/guides → https://docs.mapbox.com/accounts/guides.md
|
|
9
11
|
* https://docs.mapbox.com/accounts/guides/ → https://docs.mapbox.com/accounts/guides.md
|
|
12
|
+
* https://docs.mapbox.com/mapbox-gl-js/llms.txt → null (already a text file)
|
|
10
13
|
*
|
|
11
14
|
* Example (MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net):
|
|
12
15
|
* https://docs.mapbox.com/accounts/guides → https://docs.tilestream.net/accounts/guides.md
|
|
13
16
|
*/
|
|
14
17
|
export declare function toMarkdownUrl(url: string): string | null;
|
|
18
|
+
/**
|
|
19
|
+
* Fetch a URL and cache the result. Intended for fetching llms.txt index
|
|
20
|
+
* files which are small, change infrequently, and are shared across multiple
|
|
21
|
+
* resources and tool calls.
|
|
22
|
+
*/
|
|
23
|
+
export declare function fetchCachedText(url: string, httpRequest: HttpRequest): Promise<string>;
|
|
15
24
|
/**
|
|
16
25
|
* Fetch a Mapbox documentation page, preferring the .md variant for
|
|
17
26
|
* docs.mapbox.com URLs when available. Falls back to the original URL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/docFetcher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAY9C
|
|
1
|
+
{"version":3,"file":"docFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/docFetcher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAY9C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYxD;AAoBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Mapbox, Inc.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import { MAX_ENTRY_BYTES, readBodyWithLimit } from './docCache.js';
|
|
3
|
+
import { docCache, MAX_ENTRY_BYTES, readBodyWithLimit } from './docCache.js';
|
|
4
4
|
const DOCS_HOSTNAME = 'docs.mapbox.com';
|
|
5
5
|
/**
|
|
6
6
|
* Returns the effective docs hostname, allowing MAPBOX_DOCS_HOST_OVERRIDE
|
|
@@ -12,11 +12,14 @@ function getDocsHostname() {
|
|
|
12
12
|
/**
|
|
13
13
|
* Rewrite a docs.mapbox.com URL to its .md variant, substituting the
|
|
14
14
|
* effective hostname (which may be overridden via MAPBOX_DOCS_HOST_OVERRIDE).
|
|
15
|
-
* Returns null if the URL is not a docs.mapbox.com URL
|
|
15
|
+
* Returns null if the URL is not a docs.mapbox.com URL, or if the URL
|
|
16
|
+
* already ends in a text extension (.md, .txt, .json) — those should be
|
|
17
|
+
* fetched as-is without rewriting.
|
|
16
18
|
*
|
|
17
19
|
* Example (no override):
|
|
18
20
|
* https://docs.mapbox.com/accounts/guides → https://docs.mapbox.com/accounts/guides.md
|
|
19
21
|
* https://docs.mapbox.com/accounts/guides/ → https://docs.mapbox.com/accounts/guides.md
|
|
22
|
+
* https://docs.mapbox.com/mapbox-gl-js/llms.txt → null (already a text file)
|
|
20
23
|
*
|
|
21
24
|
* Example (MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net):
|
|
22
25
|
* https://docs.mapbox.com/accounts/guides → https://docs.tilestream.net/accounts/guides.md
|
|
@@ -26,6 +29,9 @@ export function toMarkdownUrl(url) {
|
|
|
26
29
|
const parsed = new URL(url);
|
|
27
30
|
if (parsed.hostname !== DOCS_HOSTNAME)
|
|
28
31
|
return null;
|
|
32
|
+
// Don't double-extend URLs that are already text/data files
|
|
33
|
+
if (/\.(txt|md|json)$/i.test(parsed.pathname))
|
|
34
|
+
return null;
|
|
29
35
|
parsed.hostname = getDocsHostname();
|
|
30
36
|
parsed.pathname = parsed.pathname.replace(/\/$/, '') + '.md';
|
|
31
37
|
return parsed.toString();
|
|
@@ -53,6 +59,26 @@ function applyHostOverride(url) {
|
|
|
53
59
|
return url;
|
|
54
60
|
}
|
|
55
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Fetch a URL and cache the result. Intended for fetching llms.txt index
|
|
64
|
+
* files which are small, change infrequently, and are shared across multiple
|
|
65
|
+
* resources and tool calls.
|
|
66
|
+
*/
|
|
67
|
+
export async function fetchCachedText(url, httpRequest) {
|
|
68
|
+
const cached = docCache.get(url);
|
|
69
|
+
if (cached !== null)
|
|
70
|
+
return cached;
|
|
71
|
+
const response = await httpRequest(url, {});
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
|
|
74
|
+
}
|
|
75
|
+
const content = await response.text();
|
|
76
|
+
if (Buffer.byteLength(content, 'utf8') > MAX_ENTRY_BYTES) {
|
|
77
|
+
throw new Error(`Response too large for ${url}`);
|
|
78
|
+
}
|
|
79
|
+
docCache.set(url, content);
|
|
80
|
+
return content;
|
|
81
|
+
}
|
|
56
82
|
/**
|
|
57
83
|
* Fetch a Mapbox documentation page, preferring the .md variant for
|
|
58
84
|
* docs.mapbox.com URLs when available. Falls back to the original URL
|
|
@@ -70,9 +96,7 @@ export async function fetchDocContent(url, httpRequest) {
|
|
|
70
96
|
}
|
|
71
97
|
}
|
|
72
98
|
const fetchUrl = applyHostOverride(url);
|
|
73
|
-
const response = await httpRequest(fetchUrl, {
|
|
74
|
-
headers: { Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8' }
|
|
75
|
-
});
|
|
99
|
+
const response = await httpRequest(fetchUrl, {});
|
|
76
100
|
if (!response.ok) {
|
|
77
101
|
throw new Error(`${response.status} ${response.statusText}`);
|
|
78
102
|
}
|