@mapbox/mcp-docs-server 0.1.2 → 0.2.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 (47) hide show
  1. package/README.md +8 -0
  2. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts.map +1 -1
  3. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.js +2 -7
  4. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.js.map +1 -1
  5. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.d.ts.map +1 -1
  6. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.js +2 -15
  7. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.js.map +1 -1
  8. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.d.ts +21 -0
  9. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.d.ts.map +1 -0
  10. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.input.schema.d.ts +7 -0
  11. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.input.schema.d.ts.map +1 -0
  12. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.input.schema.js +20 -0
  13. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.input.schema.js.map +1 -0
  14. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.js +103 -0
  15. package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.js.map +1 -0
  16. package/dist/commonjs/tools/toolRegistry.d.ts.map +1 -1
  17. package/dist/commonjs/tools/toolRegistry.js +3 -1
  18. package/dist/commonjs/tools/toolRegistry.js.map +1 -1
  19. package/dist/commonjs/utils/docFetcher.d.ts +24 -0
  20. package/dist/commonjs/utils/docFetcher.d.ts.map +1 -0
  21. package/dist/commonjs/utils/docFetcher.js +85 -0
  22. package/dist/commonjs/utils/docFetcher.js.map +1 -0
  23. package/dist/commonjs/version.json +3 -3
  24. package/dist/esm/index.js +0 -0
  25. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts.map +1 -1
  26. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.js +3 -8
  27. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.js.map +1 -1
  28. package/dist/esm/tools/get-document-tool/GetDocumentTool.d.ts.map +1 -1
  29. package/dist/esm/tools/get-document-tool/GetDocumentTool.js +3 -16
  30. package/dist/esm/tools/get-document-tool/GetDocumentTool.js.map +1 -1
  31. package/dist/esm/tools/search-docs-tool/SearchDocsTool.d.ts +21 -0
  32. package/dist/esm/tools/search-docs-tool/SearchDocsTool.d.ts.map +1 -0
  33. package/dist/esm/tools/search-docs-tool/SearchDocsTool.input.schema.d.ts +7 -0
  34. package/dist/esm/tools/search-docs-tool/SearchDocsTool.input.schema.d.ts.map +1 -0
  35. package/dist/esm/tools/search-docs-tool/SearchDocsTool.input.schema.js +17 -0
  36. package/dist/esm/tools/search-docs-tool/SearchDocsTool.input.schema.js.map +1 -0
  37. package/dist/esm/tools/search-docs-tool/SearchDocsTool.js +99 -0
  38. package/dist/esm/tools/search-docs-tool/SearchDocsTool.js.map +1 -0
  39. package/dist/esm/tools/toolRegistry.d.ts.map +1 -1
  40. package/dist/esm/tools/toolRegistry.js +3 -1
  41. package/dist/esm/tools/toolRegistry.js.map +1 -1
  42. package/dist/esm/utils/docFetcher.d.ts +24 -0
  43. package/dist/esm/utils/docFetcher.d.ts.map +1 -0
  44. package/dist/esm/utils/docFetcher.js +81 -0
  45. package/dist/esm/utils/docFetcher.js.map +1 -0
  46. package/dist/esm/version.json +3 -3
  47. package/package.json +1 -1
package/README.md CHANGED
@@ -110,6 +110,14 @@ Example prompts:
110
110
 
111
111
  **`batch_get_documents_tool`** — Fetches multiple Mapbox documentation pages in a single call (max 20). More efficient than calling `get_document_tool` multiple times. Failed pages include an error message rather than failing the whole batch.
112
112
 
113
+ **`search_mapbox_docs_tool`** — Searches Mapbox documentation using Algolia full-text search and returns matching page URLs and excerpts. Use this to find relevant documentation before fetching full pages with `get_document_tool` or `batch_get_documents_tool`.
114
+
115
+ Example prompts:
116
+
117
+ - "Find docs about camera animation"
118
+ - "Search for geocoding API examples"
119
+ - "What documentation exists for custom layers?"
120
+
113
121
  ## Resources
114
122
 
115
123
  MCP resources expose reference data that AI assistants can read on demand:
@@ -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;AAOpE,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;AAejD,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;CAsE3B"}
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;AAejD,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;CA8D3B"}
@@ -4,6 +4,7 @@
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.BatchGetDocumentsTool = void 0;
6
6
  const docCache_js_1 = require("../../utils/docCache.js");
7
+ const docFetcher_js_1 = require("../../utils/docFetcher.js");
7
8
  const BaseTool_js_1 = require("../BaseTool.js");
8
9
  const BatchGetDocumentsTool_input_schema_js_1 = require("./BatchGetDocumentsTool.input.schema.js");
9
10
  function isMapboxUrl(url) {
@@ -56,13 +57,7 @@ class BatchGetDocumentsTool extends BaseTool_js_1.BaseTool {
56
57
  if (existing)
57
58
  return existing;
58
59
  const promise = (async () => {
59
- const response = await this.httpRequest(url, {
60
- headers: { Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8' }
61
- });
62
- if (!response.ok) {
63
- throw new Error(`${response.status} ${response.statusText}`);
64
- }
65
- const content = await (0, docCache_js_1.readBodyWithLimit)(response, docCache_js_1.MAX_ENTRY_BYTES);
60
+ const content = await (0, docFetcher_js_1.fetchDocContent)(url, this.httpRequest);
66
61
  docCache_js_1.docCache.set(url, content);
67
62
  return content;
68
63
  })();
@@ -1 +1 @@
1
- {"version":3,"file":"BatchGetDocumentsTool.js","sourceRoot":"","sources":["../../../../src/tools/batch-get-documents-tool/BatchGetDocumentsTool.ts"],"names":[],"mappings":"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"}
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;AAMpE,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;AAW3C,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;CAkD1E"}
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;AAW3C,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;CAkC1E"}
@@ -4,6 +4,7 @@
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.GetDocumentTool = void 0;
6
6
  const docCache_js_1 = require("../../utils/docCache.js");
7
+ const docFetcher_js_1 = require("../../utils/docFetcher.js");
7
8
  const BaseTool_js_1 = require("../BaseTool.js");
8
9
  const GetDocumentTool_input_schema_js_1 = require("./GetDocumentTool.input.schema.js");
9
10
  function isMapboxUrl(url) {
@@ -47,21 +48,7 @@ class GetDocumentTool extends BaseTool_js_1.BaseTool {
47
48
  return { content: [{ type: 'text', text: cached }], isError: false };
48
49
  }
49
50
  try {
50
- const response = await this.httpRequest(input.url, {
51
- headers: { Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8' }
52
- });
53
- if (!response.ok) {
54
- return {
55
- content: [
56
- {
57
- type: 'text',
58
- text: `Failed to fetch document: ${response.status} ${response.statusText}`
59
- }
60
- ],
61
- isError: true
62
- };
63
- }
64
- const content = await (0, docCache_js_1.readBodyWithLimit)(response, docCache_js_1.MAX_ENTRY_BYTES);
51
+ const content = await (0, docFetcher_js_1.fetchDocContent)(input.url, this.httpRequest);
65
52
  docCache_js_1.docCache.set(input.url, content);
66
53
  return { content: [{ type: 'text', text: content }], isError: false };
67
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GetDocumentTool.js","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GetDocumentTool.js","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAGlC,yDAAmD;AACnD,6DAA4D;AAE5D,gDAA0C;AAC1C,uFAG2C;AAE3C,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,QAAQ,KAAK,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAa,eAAgB,SAAQ,sBAAkC;IACrE,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GACT,sQAAsQ,CAAC;IAChQ,WAAW,GAAG;QACrB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,0BAA0B;KAClC,CAAC;IAEM,WAAW,CAAc;IAEjC,YAAY,MAAoC;QAC9C,KAAK,CAAC,EAAE,WAAW,EAAE,mDAAiB,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,KAAuB;QAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,8DAA8D,KAAK,CAAC,GAAG,EAAE;qBAChF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,sBAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,+BAAe,EAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACnE,sBAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAEjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACxE,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,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,YAAY,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AArDD,0CAqDC"}
@@ -0,0 +1,21 @@
1
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { HttpRequest } from '../../utils/types.js';
3
+ import { BaseTool } from '../BaseTool.js';
4
+ import { SearchDocsSchema, SearchDocsInput } from './SearchDocsTool.input.schema.js';
5
+ export declare class SearchDocsTool extends BaseTool<typeof SearchDocsSchema> {
6
+ name: string;
7
+ description: string;
8
+ readonly annotations: {
9
+ readOnlyHint: boolean;
10
+ destructiveHint: boolean;
11
+ idempotentHint: boolean;
12
+ openWorldHint: boolean;
13
+ title: string;
14
+ };
15
+ private httpRequest;
16
+ constructor(params: {
17
+ httpRequest: HttpRequest;
18
+ });
19
+ protected execute(input: SearchDocsInput): Promise<CallToolResult>;
20
+ }
21
+ //# sourceMappingURL=SearchDocsTool.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare const SearchDocsSchema: z.ZodObject<{
3
+ query: z.ZodString;
4
+ limit: z.ZodDefault<z.ZodNumber>;
5
+ }, z.core.$strip>;
6
+ export type SearchDocsInput = z.infer<typeof SearchDocsSchema>;
7
+ //# sourceMappingURL=SearchDocsTool.input.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchDocsTool.input.schema.d.ts","sourceRoot":"","sources":["../../../../src/tools/search-docs-tool/SearchDocsTool.input.schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB;;;iBAc3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ // Copyright (c) Mapbox, Inc.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.SearchDocsSchema = void 0;
6
+ const zod_1 = require("zod");
7
+ exports.SearchDocsSchema = zod_1.z.object({
8
+ query: zod_1.z
9
+ .string()
10
+ .min(1)
11
+ .describe('Search query for Mapbox documentation (e.g. "add a marker", "camera animation", "geocoding API").'),
12
+ limit: zod_1.z
13
+ .number()
14
+ .int()
15
+ .min(1)
16
+ .max(20)
17
+ .default(5)
18
+ .describe('Maximum number of results to return (1–20, default 5).')
19
+ });
20
+ //# sourceMappingURL=SearchDocsTool.input.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchDocsTool.input.schema.js","sourceRoot":"","sources":["../../../../src/tools/search-docs-tool/SearchDocsTool.input.schema.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAElC,6BAAwB;AAEX,QAAA,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,OAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,mGAAmG,CACpG;IACH,KAAK,EAAE,OAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,wDAAwD,CAAC;CACtE,CAAC,CAAC"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ // Copyright (c) Mapbox, Inc.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.SearchDocsTool = void 0;
6
+ const BaseTool_js_1 = require("../BaseTool.js");
7
+ const SearchDocsTool_input_schema_js_1 = require("./SearchDocsTool.input.schema.js");
8
+ // These are public search-only credentials embedded in every docs.mapbox.com
9
+ // browser session — safe to include in source.
10
+ const ALGOLIA_APP_ID = 'Z7QUXRWJ7L';
11
+ const ALGOLIA_SEARCH_KEY = '332b77ce8ccfba082ac50ad2d882c80a';
12
+ const ALGOLIA_INDEX = 'mapbox';
13
+ const ALGOLIA_URL = `https://${ALGOLIA_APP_ID}-dsn.algolia.net/1/indexes/${ALGOLIA_INDEX}/query`;
14
+ function stripHtml(text) {
15
+ return text.replace(/<[^>]+>/g, '');
16
+ }
17
+ function buildTitle(hierarchy) {
18
+ const levels = [
19
+ hierarchy.lvl0,
20
+ hierarchy.lvl1,
21
+ hierarchy.lvl2,
22
+ hierarchy.lvl3,
23
+ hierarchy.lvl4,
24
+ hierarchy.lvl5,
25
+ hierarchy.lvl6
26
+ ].filter((lvl) => lvl !== null);
27
+ return levels.map(stripHtml).join(' > ');
28
+ }
29
+ function formatResults(hits) {
30
+ if (hits.length === 0) {
31
+ return 'No results found.';
32
+ }
33
+ return hits
34
+ .map((hit, i) => {
35
+ const title = buildTitle(hit.hierarchy);
36
+ const excerpt = hit.content ? stripHtml(hit.content).trim() : '';
37
+ const lines = [`${i + 1}. **${title}**`, ` URL: ${hit.url}`];
38
+ if (excerpt) {
39
+ lines.push(` > ${excerpt}`);
40
+ }
41
+ return lines.join('\n');
42
+ })
43
+ .join('\n\n');
44
+ }
45
+ class SearchDocsTool extends BaseTool_js_1.BaseTool {
46
+ name = 'search_mapbox_docs_tool';
47
+ 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.';
48
+ annotations = {
49
+ readOnlyHint: true,
50
+ destructiveHint: false,
51
+ idempotentHint: true,
52
+ openWorldHint: true,
53
+ title: 'Search Mapbox Docs Tool'
54
+ };
55
+ httpRequest;
56
+ constructor(params) {
57
+ super({ inputSchema: SearchDocsTool_input_schema_js_1.SearchDocsSchema });
58
+ this.httpRequest = params.httpRequest;
59
+ }
60
+ async execute(input) {
61
+ const body = JSON.stringify({
62
+ query: input.query,
63
+ hitsPerPage: input.limit
64
+ });
65
+ let data;
66
+ try {
67
+ const response = await this.httpRequest(ALGOLIA_URL, {
68
+ method: 'POST',
69
+ headers: {
70
+ 'X-Algolia-Application-Id': ALGOLIA_APP_ID,
71
+ 'X-Algolia-API-Key': ALGOLIA_SEARCH_KEY,
72
+ 'Content-Type': 'application/json'
73
+ },
74
+ body
75
+ });
76
+ if (!response.ok) {
77
+ return {
78
+ content: [
79
+ {
80
+ type: 'text',
81
+ text: `Search request failed: ${response.status} ${response.statusText}`
82
+ }
83
+ ],
84
+ isError: true
85
+ };
86
+ }
87
+ data = (await response.json());
88
+ }
89
+ catch (error) {
90
+ const message = error instanceof Error ? error.message : 'Unknown error occurred';
91
+ return {
92
+ content: [{ type: 'text', text: `Search request failed: ${message}` }],
93
+ isError: true
94
+ };
95
+ }
96
+ return {
97
+ content: [{ type: 'text', text: formatResults(data.hits) }],
98
+ isError: false
99
+ };
100
+ }
101
+ }
102
+ exports.SearchDocsTool = SearchDocsTool;
103
+ //# sourceMappingURL=SearchDocsTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchDocsTool.js","sourceRoot":"","sources":["../../../../src/tools/search-docs-tool/SearchDocsTool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKzC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,YAAY,EAGpC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,EAAoB,CAAC;AAEzD,wBAAgB,YAAY,IAAI,SAAS,YAAY,EAAE,CAEtD;AAED,wBAAgB,WAAW,IAAI,SAAS,YAAY,EAAE,CAErD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE"}
1
+ {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,YAAY,EAIpC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,EAAoB,CAAC;AAEzD,wBAAgB,YAAY,IAAI,SAAS,YAAY,EAAE,CAEtD;AAED,wBAAgB,WAAW,IAAI,SAAS,YAAY,EAAE,CAErD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE"}
@@ -8,13 +8,15 @@ exports.getAllTools = getAllTools;
8
8
  exports.getToolByName = getToolByName;
9
9
  const BatchGetDocumentsTool_js_1 = require("./batch-get-documents-tool/BatchGetDocumentsTool.js");
10
10
  const GetDocumentTool_js_1 = require("./get-document-tool/GetDocumentTool.js");
11
+ const SearchDocsTool_js_1 = require("./search-docs-tool/SearchDocsTool.js");
11
12
  const httpPipeline_js_1 = require("../utils/httpPipeline.js");
12
13
  /**
13
14
  * Core tools registered for all MCP clients
14
15
  */
15
16
  exports.CORE_TOOLS = [
16
17
  new GetDocumentTool_js_1.GetDocumentTool({ httpRequest: httpPipeline_js_1.httpRequest }),
17
- new BatchGetDocumentsTool_js_1.BatchGetDocumentsTool({ httpRequest: httpPipeline_js_1.httpRequest })
18
+ new BatchGetDocumentsTool_js_1.BatchGetDocumentsTool({ httpRequest: httpPipeline_js_1.httpRequest }),
19
+ new SearchDocsTool_js_1.SearchDocsTool({ httpRequest: httpPipeline_js_1.httpRequest })
18
20
  ];
19
21
  exports.ALL_TOOLS = [...exports.CORE_TOOLS];
20
22
  function getCoreTools() {
@@ -1 +1 @@
1
- {"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAoBlC,oCAEC;AAED,kCAEC;AAED,sCAEC;AA1BD,kGAA4F;AAC5F,+EAAyE;AACzE,8DAAuD;AAIvD;;GAEG;AACU,QAAA,UAAU,GAAmB;IACxC,IAAI,oCAAe,CAAC,EAAE,WAAW,EAAX,6BAAW,EAAE,CAAC;IACpC,IAAI,gDAAqB,CAAC,EAAE,WAAW,EAAX,6BAAW,EAAE,CAAC;CAC3C,CAAC;AAEW,QAAA,SAAS,GAAmB,CAAC,GAAG,kBAAU,CAAC,CAAC;AAEzD,SAAgB,YAAY;IAC1B,OAAO,kBAAU,CAAC;AACpB,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,iBAAS,CAAC;AACnB,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,iBAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAsBlC,oCAEC;AAED,kCAEC;AAED,sCAEC;AA5BD,kGAA4F;AAC5F,+EAAyE;AACzE,4EAAsE;AACtE,8DAAuD;AAIvD;;GAEG;AACU,QAAA,UAAU,GAAmB;IACxC,IAAI,oCAAe,CAAC,EAAE,WAAW,EAAX,6BAAW,EAAE,CAAC;IACpC,IAAI,gDAAqB,CAAC,EAAE,WAAW,EAAX,6BAAW,EAAE,CAAC;IAC1C,IAAI,kCAAc,CAAC,EAAE,WAAW,EAAX,6BAAW,EAAE,CAAC;CACpC,CAAC;AAEW,QAAA,SAAS,GAAmB,CAAC,GAAG,kBAAU,CAAC,CAAC;AAEzD,SAAgB,YAAY;IAC1B,OAAO,kBAAU,CAAC;AACpB,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,iBAAS,CAAC;AACnB,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,iBAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { HttpRequest } from './types.js';
2
+ /**
3
+ * Rewrite a docs.mapbox.com URL to its .md variant, substituting the
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.
6
+ *
7
+ * Example (no override):
8
+ * https://docs.mapbox.com/accounts/guides → https://docs.mapbox.com/accounts/guides.md
9
+ * https://docs.mapbox.com/accounts/guides/ → https://docs.mapbox.com/accounts/guides.md
10
+ *
11
+ * Example (MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net):
12
+ * https://docs.mapbox.com/accounts/guides → https://docs.tilestream.net/accounts/guides.md
13
+ */
14
+ export declare function toMarkdownUrl(url: string): string | null;
15
+ /**
16
+ * Fetch a Mapbox documentation page, preferring the .md variant for
17
+ * docs.mapbox.com URLs when available. Falls back to the original URL
18
+ * if the .md endpoint returns a non-2xx response.
19
+ *
20
+ * Set MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net to redirect all
21
+ * docs.mapbox.com fetches to the staging environment.
22
+ */
23
+ export declare function fetchDocContent(url: string, httpRequest: HttpRequest): Promise<string>;
24
+ //# sourceMappingURL=docFetcher.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ // Copyright (c) Mapbox, Inc.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.toMarkdownUrl = toMarkdownUrl;
6
+ exports.fetchDocContent = fetchDocContent;
7
+ const docCache_js_1 = require("./docCache.js");
8
+ const DOCS_HOSTNAME = 'docs.mapbox.com';
9
+ /**
10
+ * Returns the effective docs hostname, allowing MAPBOX_DOCS_HOST_OVERRIDE
11
+ * to redirect requests to a staging environment (e.g. docs.tilestream.net).
12
+ */
13
+ function getDocsHostname() {
14
+ return process.env.MAPBOX_DOCS_HOST_OVERRIDE ?? DOCS_HOSTNAME;
15
+ }
16
+ /**
17
+ * Rewrite a docs.mapbox.com URL to its .md variant, substituting the
18
+ * effective hostname (which may be overridden via MAPBOX_DOCS_HOST_OVERRIDE).
19
+ * Returns null if the URL is not a docs.mapbox.com URL.
20
+ *
21
+ * Example (no override):
22
+ * https://docs.mapbox.com/accounts/guides → https://docs.mapbox.com/accounts/guides.md
23
+ * https://docs.mapbox.com/accounts/guides/ → https://docs.mapbox.com/accounts/guides.md
24
+ *
25
+ * Example (MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net):
26
+ * https://docs.mapbox.com/accounts/guides → https://docs.tilestream.net/accounts/guides.md
27
+ */
28
+ function toMarkdownUrl(url) {
29
+ try {
30
+ const parsed = new URL(url);
31
+ if (parsed.hostname !== DOCS_HOSTNAME)
32
+ return null;
33
+ parsed.hostname = getDocsHostname();
34
+ parsed.pathname = parsed.pathname.replace(/\/$/, '') + '.md';
35
+ return parsed.toString();
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ /**
42
+ * Rewrite a docs.mapbox.com URL to use the effective hostname, for use
43
+ * in the fallback fetch path when the .md variant is unavailable.
44
+ */
45
+ function applyHostOverride(url) {
46
+ const override = process.env.MAPBOX_DOCS_HOST_OVERRIDE;
47
+ if (!override)
48
+ return url;
49
+ try {
50
+ const parsed = new URL(url);
51
+ if (parsed.hostname === DOCS_HOSTNAME) {
52
+ parsed.hostname = override;
53
+ }
54
+ return parsed.toString();
55
+ }
56
+ catch {
57
+ return url;
58
+ }
59
+ }
60
+ /**
61
+ * Fetch a Mapbox documentation page, preferring the .md variant for
62
+ * docs.mapbox.com URLs when available. Falls back to the original URL
63
+ * if the .md endpoint returns a non-2xx response.
64
+ *
65
+ * Set MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net to redirect all
66
+ * docs.mapbox.com fetches to the staging environment.
67
+ */
68
+ async function fetchDocContent(url, httpRequest) {
69
+ const mdUrl = toMarkdownUrl(url);
70
+ if (mdUrl) {
71
+ const mdResponse = await httpRequest(mdUrl, {});
72
+ if (mdResponse.ok) {
73
+ return (0, docCache_js_1.readBodyWithLimit)(mdResponse, docCache_js_1.MAX_ENTRY_BYTES);
74
+ }
75
+ }
76
+ const fetchUrl = applyHostOverride(url);
77
+ const response = await httpRequest(fetchUrl, {
78
+ headers: { Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8' }
79
+ });
80
+ if (!response.ok) {
81
+ throw new Error(`${response.status} ${response.statusText}`);
82
+ }
83
+ return (0, docCache_js_1.readBodyWithLimit)(response, docCache_js_1.MAX_ENTRY_BYTES);
84
+ }
85
+ //# sourceMappingURL=docFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docFetcher.js","sourceRoot":"","sources":["../../../src/utils/docFetcher.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;AA2BlC,sCAUC;AA4BD,0CAuBC;AAtFD,+CAAmE;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,SAAgB,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;AACI,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,IAAA,+BAAiB,EAAC,UAAU,EAAE,6BAAe,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,IAAA,+BAAiB,EAAC,QAAQ,EAAE,6BAAe,CAAC,CAAC;AACtD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
- "sha": "981df76a313b85dc4cde3074a07620247eea4d52",
3
- "tag": "v0.1.2",
2
+ "sha": "1994f5f9674da47430306f8dc23fed00ff3c84d2",
3
+ "tag": "v0.1.2-10-g1994f5f",
4
4
  "branch": "HEAD",
5
- "version": "0.1.2"
5
+ "version": "0.2.0"
6
6
  }
package/dist/esm/index.js CHANGED
File without changes
@@ -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;AAOpE,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;AAejD,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;CAsE3B"}
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;AAejD,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;CA8D3B"}
@@ -1,6 +1,7 @@
1
1
  // Copyright (c) Mapbox, Inc.
2
2
  // Licensed under the MIT License.
3
- import { docCache, normalizeCacheKey, MAX_ENTRY_BYTES, readBodyWithLimit } from '../../utils/docCache.js';
3
+ import { docCache, normalizeCacheKey } from '../../utils/docCache.js';
4
+ import { fetchDocContent } from '../../utils/docFetcher.js';
4
5
  import { BaseTool } from '../BaseTool.js';
5
6
  import { BatchGetDocumentsSchema } from './BatchGetDocumentsTool.input.schema.js';
6
7
  function isMapboxUrl(url) {
@@ -53,13 +54,7 @@ export class BatchGetDocumentsTool extends BaseTool {
53
54
  if (existing)
54
55
  return existing;
55
56
  const promise = (async () => {
56
- const response = await this.httpRequest(url, {
57
- headers: { Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8' }
58
- });
59
- if (!response.ok) {
60
- throw new Error(`${response.status} ${response.statusText}`);
61
- }
62
- const content = await readBodyWithLimit(response, MAX_ENTRY_BYTES);
57
+ const content = await fetchDocContent(url, this.httpRequest);
63
58
  docCache.set(url, content);
64
59
  return content;
65
60
  })();
@@ -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,EACL,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAEjC,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,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAMD,MAAM,OAAO,qBAAsB,SAAQ,QAE1C;IACC,IAAI,GAAG,0BAA0B,CAAC;IAClC,WAAW,GACT,iQAAiQ,CAAC;IAC3P,WAAW,GAAG;QACrB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,iCAAiC;KACzC,CAAC;IAEM,WAAW,CAAc;IAEjC,YAAY,MAAoC;QAC9C,KAAK,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAES,KAAK,CAAC,OAAO,CACrB,KAA6B;QAE7B,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,8DAA8D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC7F;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,sEAAsE;QACtE,kDAAkD;QAClD,MAAM,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;QAEzD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAmB,EAAE;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEpD,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAE9B,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;oBAC3C,OAAO,EAAE,EAAE,MAAM,EAAE,4CAA4C,EAAE;iBAClE,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBACnE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAC3B,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC,EAAE,CAAC;YAEL,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAA2B,EAAE;YACpD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,MAAM,GAAqB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,CAAC;YACD,OAAO;gBACL,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClB,KAAK,EACH,MAAM,CAAC,MAAM,YAAY,KAAK;oBAC5B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;oBACvB,CAAC,CAAC,eAAe;aACtB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;CACF"}
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;AAMpE,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;AAW3C,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;CAkD1E"}
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;AAW3C,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;CAkC1E"}
@@ -1,6 +1,7 @@
1
1
  // Copyright (c) Mapbox, Inc.
2
2
  // Licensed under the MIT License.
3
- import { docCache, MAX_ENTRY_BYTES, readBodyWithLimit } from '../../utils/docCache.js';
3
+ import { docCache } from '../../utils/docCache.js';
4
+ import { fetchDocContent } from '../../utils/docFetcher.js';
4
5
  import { BaseTool } from '../BaseTool.js';
5
6
  import { GetDocumentSchema } from './GetDocumentTool.input.schema.js';
6
7
  function isMapboxUrl(url) {
@@ -44,21 +45,7 @@ export class GetDocumentTool extends BaseTool {
44
45
  return { content: [{ type: 'text', text: cached }], isError: false };
45
46
  }
46
47
  try {
47
- const response = await this.httpRequest(input.url, {
48
- headers: { Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8' }
49
- });
50
- if (!response.ok) {
51
- return {
52
- content: [
53
- {
54
- type: 'text',
55
- text: `Failed to fetch document: ${response.status} ${response.statusText}`
56
- }
57
- ],
58
- isError: true
59
- };
60
- }
61
- const content = await readBodyWithLimit(response, MAX_ENTRY_BYTES);
48
+ const content = await fetchDocContent(input.url, this.httpRequest);
62
49
  docCache.set(input.url, content);
63
50
  return { content: [{ type: 'text', text: content }], isError: false };
64
51
  }
@@ -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,EACL,QAAQ,EACR,eAAe,EACf,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAEjC,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,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAkC;IACrE,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GACT,sQAAsQ,CAAC;IAChQ,WAAW,GAAG;QACrB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,0BAA0B;KAClC,CAAC;IAEM,WAAW,CAAc;IAEjC,YAAY,MAAoC;QAC9C,KAAK,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,KAAuB;QAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,8DAA8D,KAAK,CAAC,GAAG,EAAE;qBAChF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE;gBACjD,OAAO,EAAE,EAAE,MAAM,EAAE,4CAA4C,EAAE;aAClE,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,6BAA6B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE;yBAC5E;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YACnE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAEjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACxE,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,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,YAAY,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
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,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAkC;IACrE,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GACT,sQAAsQ,CAAC;IAChQ,WAAW,GAAG;QACrB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,0BAA0B;KAClC,CAAC;IAEM,WAAW,CAAc;IAEjC,YAAY,MAAoC;QAC9C,KAAK,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,KAAuB;QAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,8DAA8D,KAAK,CAAC,GAAG,EAAE;qBAChF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACnE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAEjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACxE,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,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,YAAY,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { HttpRequest } from '../../utils/types.js';
3
+ import { BaseTool } from '../BaseTool.js';
4
+ import { SearchDocsSchema, SearchDocsInput } from './SearchDocsTool.input.schema.js';
5
+ export declare class SearchDocsTool extends BaseTool<typeof SearchDocsSchema> {
6
+ name: string;
7
+ description: string;
8
+ readonly annotations: {
9
+ readOnlyHint: boolean;
10
+ destructiveHint: boolean;
11
+ idempotentHint: boolean;
12
+ openWorldHint: boolean;
13
+ title: string;
14
+ };
15
+ private httpRequest;
16
+ constructor(params: {
17
+ httpRequest: HttpRequest;
18
+ });
19
+ protected execute(input: SearchDocsInput): Promise<CallToolResult>;
20
+ }
21
+ //# sourceMappingURL=SearchDocsTool.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare const SearchDocsSchema: z.ZodObject<{
3
+ query: z.ZodString;
4
+ limit: z.ZodDefault<z.ZodNumber>;
5
+ }, z.core.$strip>;
6
+ export type SearchDocsInput = z.infer<typeof SearchDocsSchema>;
7
+ //# sourceMappingURL=SearchDocsTool.input.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchDocsTool.input.schema.d.ts","sourceRoot":"","sources":["../../../../src/tools/search-docs-tool/SearchDocsTool.input.schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB;;;iBAc3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ import { z } from 'zod';
4
+ export const SearchDocsSchema = z.object({
5
+ query: z
6
+ .string()
7
+ .min(1)
8
+ .describe('Search query for Mapbox documentation (e.g. "add a marker", "camera animation", "geocoding API").'),
9
+ limit: z
10
+ .number()
11
+ .int()
12
+ .min(1)
13
+ .max(20)
14
+ .default(5)
15
+ .describe('Maximum number of results to return (1–20, default 5).')
16
+ });
17
+ //# sourceMappingURL=SearchDocsTool.input.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchDocsTool.input.schema.js","sourceRoot":"","sources":["../../../../src/tools/search-docs-tool/SearchDocsTool.input.schema.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,mGAAmG,CACpG;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,wDAAwD,CAAC;CACtE,CAAC,CAAC"}
@@ -0,0 +1,99 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ import { BaseTool } from '../BaseTool.js';
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) {
28
+ return 'No results found.';
29
+ }
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}`);
37
+ }
38
+ return lines.join('\n');
39
+ })
40
+ .join('\n\n');
41
+ }
42
+ export class SearchDocsTool extends BaseTool {
43
+ 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.';
45
+ annotations = {
46
+ readOnlyHint: true,
47
+ destructiveHint: false,
48
+ idempotentHint: true,
49
+ openWorldHint: true,
50
+ title: 'Search Mapbox Docs Tool'
51
+ };
52
+ httpRequest;
53
+ constructor(params) {
54
+ super({ inputSchema: SearchDocsSchema });
55
+ this.httpRequest = params.httpRequest;
56
+ }
57
+ async execute(input) {
58
+ const body = JSON.stringify({
59
+ query: input.query,
60
+ hitsPerPage: input.limit
61
+ });
62
+ let data;
63
+ 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());
85
+ }
86
+ catch (error) {
87
+ const message = error instanceof Error ? error.message : 'Unknown error occurred';
88
+ return {
89
+ content: [{ type: 'text', text: `Search request failed: ${message}` }],
90
+ isError: true
91
+ };
92
+ }
93
+ return {
94
+ content: [{ type: 'text', text: formatResults(data.hits) }],
95
+ isError: false
96
+ };
97
+ }
98
+ }
99
+ //# sourceMappingURL=SearchDocsTool.js.map
@@ -0,0 +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;AAE1C,6EAA6E;AAC7E,+CAA+C;AAC/C,MAAM,cAAc,GAAG,YAAY,CAAC;AACpC,MAAM,kBAAkB,GAAG,kCAAkC,CAAC;AAC9D,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,WAAW,GAAG,WAAW,cAAc,8BAA8B,aAAa,QAAQ,CAAC;AAsBjG,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,SAA2B;IAC7C,MAAM,MAAM,GAAG;QACb,SAAS,CAAC,IAAI;QACd,SAAS,CAAC,IAAI;QACd,SAAS,CAAC,IAAI;QACd,SAAS,CAAC,IAAI;QACd,SAAS,CAAC,IAAI;QACd,SAAS,CAAC,IAAI;QACd,SAAS,CAAC,IAAI;KACf,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,IAAkB;IACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACd,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;QAChC,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,qMAAqM,CAAC;IAC/L,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,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,KAAK;SACzB,CAAC,CAAC;QAEH,IAAI,IAAqB,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,0BAA0B,EAAE,cAAc;oBAC1C,mBAAmB,EAAE,kBAAkB;oBACvC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE;yBACzE;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAoB,CAAC;QACpD,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,0BAA0B,OAAO,EAAE,EAAE,CAAC;gBACtE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKzC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,YAAY,EAGpC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,EAAoB,CAAC;AAEzD,wBAAgB,YAAY,IAAI,SAAS,YAAY,EAAE,CAEtD;AAED,wBAAgB,WAAW,IAAI,SAAS,YAAY,EAAE,CAErD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE"}
1
+ {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,YAAY,EAIpC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,EAAoB,CAAC;AAEzD,wBAAgB,YAAY,IAAI,SAAS,YAAY,EAAE,CAEtD;AAED,wBAAgB,WAAW,IAAI,SAAS,YAAY,EAAE,CAErD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE"}
@@ -2,13 +2,15 @@
2
2
  // Licensed under the MIT License.
3
3
  import { BatchGetDocumentsTool } from './batch-get-documents-tool/BatchGetDocumentsTool.js';
4
4
  import { GetDocumentTool } from './get-document-tool/GetDocumentTool.js';
5
+ import { SearchDocsTool } from './search-docs-tool/SearchDocsTool.js';
5
6
  import { httpRequest } from '../utils/httpPipeline.js';
6
7
  /**
7
8
  * Core tools registered for all MCP clients
8
9
  */
9
10
  export const CORE_TOOLS = [
10
11
  new GetDocumentTool({ httpRequest }),
11
- new BatchGetDocumentsTool({ httpRequest })
12
+ new BatchGetDocumentsTool({ httpRequest }),
13
+ new SearchDocsTool({ httpRequest })
12
14
  ];
13
15
  export const ALL_TOOLS = [...CORE_TOOLS];
14
16
  export function getCoreTools() {
@@ -1 +1 @@
1
- {"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAIlC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;IACpC,IAAI,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAmB,CAAC,GAAG,UAAU,CAAC,CAAC;AAEzD,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAIlC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;IACpC,IAAI,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1C,IAAI,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAmB,CAAC,GAAG,UAAU,CAAC,CAAC;AAEzD,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { HttpRequest } from './types.js';
2
+ /**
3
+ * Rewrite a docs.mapbox.com URL to its .md variant, substituting the
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.
6
+ *
7
+ * Example (no override):
8
+ * https://docs.mapbox.com/accounts/guides → https://docs.mapbox.com/accounts/guides.md
9
+ * https://docs.mapbox.com/accounts/guides/ → https://docs.mapbox.com/accounts/guides.md
10
+ *
11
+ * Example (MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net):
12
+ * https://docs.mapbox.com/accounts/guides → https://docs.tilestream.net/accounts/guides.md
13
+ */
14
+ export declare function toMarkdownUrl(url: string): string | null;
15
+ /**
16
+ * Fetch a Mapbox documentation page, preferring the .md variant for
17
+ * docs.mapbox.com URLs when available. Falls back to the original URL
18
+ * if the .md endpoint returns a non-2xx response.
19
+ *
20
+ * Set MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net to redirect all
21
+ * docs.mapbox.com fetches to the staging environment.
22
+ */
23
+ export declare function fetchDocContent(url: string, httpRequest: HttpRequest): Promise<string>;
24
+ //# sourceMappingURL=docFetcher.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,81 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ import { MAX_ENTRY_BYTES, readBodyWithLimit } from './docCache.js';
4
+ const DOCS_HOSTNAME = 'docs.mapbox.com';
5
+ /**
6
+ * Returns the effective docs hostname, allowing MAPBOX_DOCS_HOST_OVERRIDE
7
+ * to redirect requests to a staging environment (e.g. docs.tilestream.net).
8
+ */
9
+ function getDocsHostname() {
10
+ return process.env.MAPBOX_DOCS_HOST_OVERRIDE ?? DOCS_HOSTNAME;
11
+ }
12
+ /**
13
+ * Rewrite a docs.mapbox.com URL to its .md variant, substituting the
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.
16
+ *
17
+ * Example (no override):
18
+ * https://docs.mapbox.com/accounts/guides → https://docs.mapbox.com/accounts/guides.md
19
+ * https://docs.mapbox.com/accounts/guides/ → https://docs.mapbox.com/accounts/guides.md
20
+ *
21
+ * Example (MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net):
22
+ * https://docs.mapbox.com/accounts/guides → https://docs.tilestream.net/accounts/guides.md
23
+ */
24
+ export function toMarkdownUrl(url) {
25
+ try {
26
+ const parsed = new URL(url);
27
+ if (parsed.hostname !== DOCS_HOSTNAME)
28
+ return null;
29
+ parsed.hostname = getDocsHostname();
30
+ parsed.pathname = parsed.pathname.replace(/\/$/, '') + '.md';
31
+ return parsed.toString();
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ /**
38
+ * Rewrite a docs.mapbox.com URL to use the effective hostname, for use
39
+ * in the fallback fetch path when the .md variant is unavailable.
40
+ */
41
+ function applyHostOverride(url) {
42
+ const override = process.env.MAPBOX_DOCS_HOST_OVERRIDE;
43
+ if (!override)
44
+ return url;
45
+ try {
46
+ const parsed = new URL(url);
47
+ if (parsed.hostname === DOCS_HOSTNAME) {
48
+ parsed.hostname = override;
49
+ }
50
+ return parsed.toString();
51
+ }
52
+ catch {
53
+ return url;
54
+ }
55
+ }
56
+ /**
57
+ * Fetch a Mapbox documentation page, preferring the .md variant for
58
+ * docs.mapbox.com URLs when available. Falls back to the original URL
59
+ * if the .md endpoint returns a non-2xx response.
60
+ *
61
+ * Set MAPBOX_DOCS_HOST_OVERRIDE=docs.tilestream.net to redirect all
62
+ * docs.mapbox.com fetches to the staging environment.
63
+ */
64
+ export async function fetchDocContent(url, httpRequest) {
65
+ const mdUrl = toMarkdownUrl(url);
66
+ if (mdUrl) {
67
+ const mdResponse = await httpRequest(mdUrl, {});
68
+ if (mdResponse.ok) {
69
+ return readBodyWithLimit(mdResponse, MAX_ENTRY_BYTES);
70
+ }
71
+ }
72
+ const fetchUrl = applyHostOverride(url);
73
+ const response = await httpRequest(fetchUrl, {
74
+ headers: { Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8' }
75
+ });
76
+ if (!response.ok) {
77
+ throw new Error(`${response.status} ${response.statusText}`);
78
+ }
79
+ return readBodyWithLimit(response, MAX_ENTRY_BYTES);
80
+ }
81
+ //# sourceMappingURL=docFetcher.js.map
@@ -0,0 +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,6 +1,6 @@
1
1
  {
2
- "sha": "981df76a313b85dc4cde3074a07620247eea4d52",
3
- "tag": "v0.1.2",
2
+ "sha": "1994f5f9674da47430306f8dc23fed00ff3c84d2",
3
+ "tag": "v0.1.2-10-g1994f5f",
4
4
  "branch": "HEAD",
5
- "version": "0.1.2"
5
+ "version": "0.2.0"
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapbox/mcp-docs-server",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Mapbox MCP documentation server",
5
5
  "mcpName": "io.github.mapbox/mcp-docs-server",
6
6
  "main": "./dist/commonjs/index.js",