@mapbox/mcp-docs-server 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/commonjs/index.js +3 -0
  2. package/dist/commonjs/index.js.map +1 -1
  3. package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts +6 -2
  4. package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts.map +1 -1
  5. package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js +12 -23
  6. package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js.map +1 -1
  7. package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts +4 -2
  8. package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts.map +1 -1
  9. package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.js +9 -18
  10. package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.js.map +1 -1
  11. package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts +5 -2
  12. package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts.map +1 -1
  13. package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.js +10 -23
  14. package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.js.map +1 -1
  15. package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts +6 -2
  16. package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts.map +1 -1
  17. package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.js +13 -23
  18. package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.js.map +1 -1
  19. package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts +6 -2
  20. package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts.map +1 -1
  21. package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js +13 -23
  22. package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js.map +1 -1
  23. package/dist/commonjs/tools/BaseTool.d.ts.map +1 -1
  24. package/dist/commonjs/tools/BaseTool.js +18 -10
  25. package/dist/commonjs/tools/BaseTool.js.map +1 -1
  26. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.d.ts.map +1 -1
  27. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.js +22 -62
  28. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.js.map +1 -1
  29. package/dist/commonjs/utils/docCache.d.ts.map +1 -1
  30. package/dist/commonjs/utils/docCache.js +7 -2
  31. package/dist/commonjs/utils/docCache.js.map +1 -1
  32. package/dist/commonjs/utils/docFetcher.d.ts +10 -1
  33. package/dist/commonjs/utils/docFetcher.d.ts.map +1 -1
  34. package/dist/commonjs/utils/docFetcher.js +29 -4
  35. package/dist/commonjs/utils/docFetcher.js.map +1 -1
  36. package/dist/commonjs/utils/docsSearchIndex.d.ts +25 -0
  37. package/dist/commonjs/utils/docsSearchIndex.d.ts.map +1 -0
  38. package/dist/commonjs/utils/docsSearchIndex.js +146 -0
  39. package/dist/commonjs/utils/docsSearchIndex.js.map +1 -0
  40. package/dist/commonjs/utils/index.d.ts +1 -0
  41. package/dist/commonjs/utils/index.d.ts.map +1 -1
  42. package/dist/commonjs/utils/index.js +7 -1
  43. package/dist/commonjs/utils/index.js.map +1 -1
  44. package/dist/commonjs/utils/tracing.d.ts +18 -0
  45. package/dist/commonjs/utils/tracing.d.ts.map +1 -0
  46. package/dist/commonjs/utils/tracing.js +142 -0
  47. package/dist/commonjs/utils/tracing.js.map +1 -0
  48. package/dist/commonjs/version.json +3 -3
  49. package/dist/esm/index.js +3 -0
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts +6 -2
  52. package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts.map +1 -1
  53. package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js +12 -23
  54. package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js.map +1 -1
  55. package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts +4 -2
  56. package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts.map +1 -1
  57. package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.js +9 -18
  58. package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.js.map +1 -1
  59. package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts +5 -2
  60. package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts.map +1 -1
  61. package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.js +10 -23
  62. package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.js.map +1 -1
  63. package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts +6 -2
  64. package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts.map +1 -1
  65. package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.js +13 -23
  66. package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.js.map +1 -1
  67. package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts +6 -2
  68. package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts.map +1 -1
  69. package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js +13 -23
  70. package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js.map +1 -1
  71. package/dist/esm/tools/BaseTool.d.ts.map +1 -1
  72. package/dist/esm/tools/BaseTool.js +18 -10
  73. package/dist/esm/tools/BaseTool.js.map +1 -1
  74. package/dist/esm/tools/search-docs-tool/SearchDocsTool.d.ts.map +1 -1
  75. package/dist/esm/tools/search-docs-tool/SearchDocsTool.js +22 -62
  76. package/dist/esm/tools/search-docs-tool/SearchDocsTool.js.map +1 -1
  77. package/dist/esm/utils/docCache.d.ts.map +1 -1
  78. package/dist/esm/utils/docCache.js +7 -2
  79. package/dist/esm/utils/docCache.js.map +1 -1
  80. package/dist/esm/utils/docFetcher.d.ts +10 -1
  81. package/dist/esm/utils/docFetcher.d.ts.map +1 -1
  82. package/dist/esm/utils/docFetcher.js +29 -5
  83. package/dist/esm/utils/docFetcher.js.map +1 -1
  84. package/dist/esm/utils/docsSearchIndex.d.ts +25 -0
  85. package/dist/esm/utils/docsSearchIndex.d.ts.map +1 -0
  86. package/dist/esm/utils/docsSearchIndex.js +142 -0
  87. package/dist/esm/utils/docsSearchIndex.js.map +1 -0
  88. package/dist/esm/utils/index.d.ts +1 -0
  89. package/dist/esm/utils/index.d.ts.map +1 -1
  90. package/dist/esm/utils/index.js +1 -0
  91. package/dist/esm/utils/index.js.map +1 -1
  92. package/dist/esm/utils/tracing.d.ts +18 -0
  93. package/dist/esm/utils/tracing.d.ts.map +1 -0
  94. package/dist/esm/utils/tracing.js +135 -0
  95. package/dist/esm/utils/tracing.js.map +1 -0
  96. package/dist/esm/version.json +3 -3
  97. package/package.json +16 -8
@@ -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 { parseDocSections, filterSectionsByCategory, sectionsToMarkdown } from '../utils/docParser.js';
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 SDK and client library documentation for mobile (iOS, Android, Flutter) and web (Mapbox GL JS, Search JS) platforms';
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 LLMS_TXT_URL = 'https://docs.mapbox.com/llms.txt';
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: `# Mapbox SDK Documentation\n\n${sdkContent}`
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,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAC5C,IAAI,GAAG,0BAA0B,CAAC;IAClC,GAAG,GAAG,4BAA4B,CAAC;IACnC,WAAW,GAClB,4HAA4H,CAAC;IACtH,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,YAAY,GAAG,kCAAkC,CAAC;YACxD,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;oBACpD,OAAO,EAAE;wBACP,MAAM,EAAE,4CAA4C;qBACrD;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CACb,yCAAyC,QAAQ,CAAC,UAAU,EAAE,CAC/D,CAAC;gBACJ,CAAC;gBAED,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACtC,CAAC;YAED,yCAAyC;YACzC,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAEnD,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI,EAAE,iCAAiC,UAAU,EAAE;qBACpD;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
+ {"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;AAEpC,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;IAY1B,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
+ {"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
- try {
18
- const input = this.inputSchema.parse(rawInput);
19
- return this.execute(input);
20
- }
21
- catch (error) {
22
- return {
23
- isError: true,
24
- content: [{ type: 'text', text: error.message }]
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;AAalC,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,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;IACH,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
+ {"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":"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;AAgE1C,qBAAa,cAAe,SAAQ,QAAQ,CAAC,OAAO,gBAAgB,CAAC;IACnE,IAAI,SAA6B;IACjC,WAAW,SAC6L;IACxM,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;CA8CzE"}
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
- // These are public search-only credentials embedded in every docs.mapbox.com
6
- // browser session — safe to include in source.
7
- const ALGOLIA_APP_ID = 'Z7QUXRWJ7L';
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 hits
31
- .map((hit, i) => {
32
- const title = buildTitle(hit.hierarchy);
33
- const excerpt = hit.content ? stripHtml(hit.content).trim() : '';
34
- const lines = [`${i + 1}. **${title}**`, ` URL: ${hit.url}`];
35
- if (excerpt) {
36
- lines.push(` > ${excerpt}`);
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. Returns ranked results with titles, URLs, and content excerpts. Use get_document_tool to fetch the full content of a result page.';
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 response = await this.httpRequest(ALGOLIA_URL, {
65
- method: 'POST',
66
- headers: {
67
- 'X-Algolia-Application-Id': ALGOLIA_APP_ID,
68
- 'X-Algolia-API-Key': ALGOLIA_SEARCH_KEY,
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 request failed: ${message}` }],
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":"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"}
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;AAS/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;IA+BvE,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"}
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 = 2 * 1024 * 1024; // 2 MB per entry
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
- return; // Silently reject oversized entries
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":"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"}
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;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUxD;AAoBD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"docFetcher.js","sourceRoot":"","sources":["../../../src/utils/docFetcher.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGnE,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC;;;GAGG;AACH,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,aAAa,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,aAAa;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,CAAC,QAAQ,GAAG,eAAe,EAAE,CAAC;QACpC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;QAC7D,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACvD,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YACtC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,WAAwB;IAExB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;YAClB,OAAO,iBAAiB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE;QAC3C,OAAO,EAAE,EAAE,MAAM,EAAE,4CAA4C,EAAE;KAClE,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,iBAAiB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"docFetcher.js","sourceRoot":"","sources":["../../../src/utils/docFetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { HttpRequest } from './types.js';
2
+ export interface DocEntry {
3
+ title: string;
4
+ url: string;
5
+ description: string;
6
+ product: string;
7
+ }
8
+ /**
9
+ * Parse a product-level llms.txt file into searchable entries.
10
+ * Each `- [Title](URL): description` line becomes one entry.
11
+ * Lines that don't match (headers, blanks, root index links) are skipped.
12
+ */
13
+ export declare function parseLlmsTxtEntries(content: string, product: string): DocEntry[];
14
+ /**
15
+ * Search across all indexed llms.txt files.
16
+ *
17
+ * All source files are fetched in parallel and cached via docCache.
18
+ * First call may take ~500ms while files are fetched; subsequent calls
19
+ * are instant since all content is in-memory.
20
+ *
21
+ * Failed sources are skipped gracefully so a single unavailable file
22
+ * doesn't break the entire search.
23
+ */
24
+ export declare function searchDocs(query: string, limit: number, httpRequest: HttpRequest): Promise<DocEntry[]>;
25
+ //# sourceMappingURL=docsSearchIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docsSearchIndex.d.ts","sourceRoot":"","sources":["../../../src/utils/docsSearchIndex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AA8DD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,QAAQ,EAAE,CAYZ;AAoBD;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoCrB"}
@@ -0,0 +1,142 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ import { fetchCachedText } from './docFetcher.js';
4
+ /**
5
+ * Curated set of product llms.txt files to include in the search index.
6
+ * Each file is fetched once and cached for the duration of the TTL.
7
+ * Files are fetched in parallel on first search then served from cache.
8
+ */
9
+ const INDEX_SOURCES = [
10
+ {
11
+ url: 'https://docs.mapbox.com/api/llms.txt',
12
+ product: 'API Reference'
13
+ },
14
+ {
15
+ url: 'https://docs.mapbox.com/mapbox-gl-js/llms.txt',
16
+ product: 'Mapbox GL JS'
17
+ },
18
+ {
19
+ url: 'https://docs.mapbox.com/help/llms.txt',
20
+ product: 'Help Center'
21
+ },
22
+ {
23
+ url: 'https://docs.mapbox.com/style-spec/llms.txt',
24
+ product: 'Style Specification'
25
+ },
26
+ {
27
+ url: 'https://docs.mapbox.com/studio-manual/llms.txt',
28
+ product: 'Studio Manual'
29
+ },
30
+ {
31
+ url: 'https://docs.mapbox.com/mapbox-search-js/llms.txt',
32
+ product: 'Mapbox Search JS'
33
+ },
34
+ {
35
+ url: 'https://docs.mapbox.com/ios/maps/llms.txt',
36
+ product: 'Maps SDK for iOS'
37
+ },
38
+ {
39
+ url: 'https://docs.mapbox.com/android/maps/llms.txt',
40
+ product: 'Maps SDK for Android'
41
+ },
42
+ {
43
+ url: 'https://docs.mapbox.com/ios/navigation/llms.txt',
44
+ product: 'Navigation SDK for iOS'
45
+ },
46
+ {
47
+ url: 'https://docs.mapbox.com/android/navigation/llms.txt',
48
+ product: 'Navigation SDK for Android'
49
+ },
50
+ {
51
+ url: 'https://docs.mapbox.com/mapbox-tiling-service/llms.txt',
52
+ product: 'Mapbox Tiling Service'
53
+ },
54
+ {
55
+ url: 'https://docs.mapbox.com/data/tilesets/llms.txt',
56
+ product: 'Tilesets'
57
+ }
58
+ ];
59
+ // Matches: - [Title](URL): optional description
60
+ // or: - [Title](URL)
61
+ const ENTRY_RE = /^-\s+\[([^\]]+)\]\(([^)]+)\)(?::\s*(.+))?$/;
62
+ /**
63
+ * Parse a product-level llms.txt file into searchable entries.
64
+ * Each `- [Title](URL): description` line becomes one entry.
65
+ * Lines that don't match (headers, blanks, root index links) are skipped.
66
+ */
67
+ export function parseLlmsTxtEntries(content, product) {
68
+ const entries = [];
69
+ for (const rawLine of content.split('\n')) {
70
+ const line = rawLine.trim();
71
+ const match = ENTRY_RE.exec(line);
72
+ if (!match)
73
+ continue;
74
+ const [, title, url, description = ''] = match;
75
+ // Skip links to other llms.txt files (those are index links, not doc pages)
76
+ if (url.endsWith('/llms.txt') || url.endsWith('/llms-full.txt'))
77
+ continue;
78
+ entries.push({ title, url, description, product });
79
+ }
80
+ return entries;
81
+ }
82
+ /**
83
+ * Score an entry against the query words.
84
+ * Title matches are weighted 3x, description and URL path matches 1x each.
85
+ */
86
+ function scoreEntry(entry, queryWords) {
87
+ const titleLower = entry.title.toLowerCase();
88
+ const descLower = entry.description.toLowerCase();
89
+ const urlLower = entry.url.toLowerCase();
90
+ let score = 0;
91
+ for (const word of queryWords) {
92
+ if (titleLower.includes(word))
93
+ score += 3;
94
+ if (descLower.includes(word))
95
+ score += 1;
96
+ if (urlLower.includes(word))
97
+ score += 1;
98
+ }
99
+ return score;
100
+ }
101
+ /**
102
+ * Search across all indexed llms.txt files.
103
+ *
104
+ * All source files are fetched in parallel and cached via docCache.
105
+ * First call may take ~500ms while files are fetched; subsequent calls
106
+ * are instant since all content is in-memory.
107
+ *
108
+ * Failed sources are skipped gracefully so a single unavailable file
109
+ * doesn't break the entire search.
110
+ */
111
+ export async function searchDocs(query, limit, httpRequest) {
112
+ const allEntries = (await Promise.all(INDEX_SOURCES.map(async ({ url, product }) => {
113
+ try {
114
+ const content = await fetchCachedText(url, httpRequest);
115
+ return parseLlmsTxtEntries(content, product);
116
+ }
117
+ catch {
118
+ return [];
119
+ }
120
+ }))).flat();
121
+ const queryWords = query
122
+ .toLowerCase()
123
+ .split(/\s+/)
124
+ .filter((w) => w.length > 1); // skip single-char words
125
+ const scored = allEntries
126
+ .map((entry) => ({ entry, score: scoreEntry(entry, queryWords) }))
127
+ .filter(({ score }) => score > 0)
128
+ .sort((a, b) => b.score - a.score);
129
+ // Deduplicate by URL (same page can appear across multiple sources)
130
+ const seen = new Set();
131
+ const results = [];
132
+ for (const { entry } of scored) {
133
+ if (!seen.has(entry.url)) {
134
+ seen.add(entry.url);
135
+ results.push(entry);
136
+ if (results.length >= limit)
137
+ break;
138
+ }
139
+ }
140
+ return results;
141
+ }
142
+ //# sourceMappingURL=docsSearchIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docsSearchIndex.js","sourceRoot":"","sources":["../../../src/utils/docsSearchIndex.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export { systemHttpPipeline, httpRequest, UserAgentPolicy } from './httpPipeline.js';
2
2
  export { getVersionInfo } from './versionUtils.js';
3
3
  export type { VersionInfo } from './versionUtils.js';
4
+ export { initializeTracing, shutdownTracing, isTracingInitialized, getTracer, withToolSpan } from './tracing.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,YAAY,EACb,MAAM,cAAc,CAAC"}