@mapbox/mcp-docs-server 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts.map +1 -1
- package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.js +2 -7
- package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.js.map +1 -1
- package/dist/commonjs/tools/get-document-tool/GetDocumentTool.d.ts.map +1 -1
- package/dist/commonjs/tools/get-document-tool/GetDocumentTool.js +2 -15
- package/dist/commonjs/tools/get-document-tool/GetDocumentTool.js.map +1 -1
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.d.ts +21 -0
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.d.ts.map +1 -0
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.input.schema.d.ts +7 -0
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.input.schema.d.ts.map +1 -0
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.input.schema.js +20 -0
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.input.schema.js.map +1 -0
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.js +103 -0
- package/dist/commonjs/tools/search-docs-tool/SearchDocsTool.js.map +1 -0
- package/dist/commonjs/tools/toolRegistry.d.ts.map +1 -1
- package/dist/commonjs/tools/toolRegistry.js +3 -1
- package/dist/commonjs/tools/toolRegistry.js.map +1 -1
- package/dist/commonjs/utils/docFetcher.d.ts +24 -0
- package/dist/commonjs/utils/docFetcher.d.ts.map +1 -0
- package/dist/commonjs/utils/docFetcher.js +85 -0
- package/dist/commonjs/utils/docFetcher.js.map +1 -0
- package/dist/commonjs/version.json +3 -3
- package/dist/esm/index.js +0 -0
- package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts.map +1 -1
- package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.js +3 -8
- package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.js.map +1 -1
- package/dist/esm/tools/get-document-tool/GetDocumentTool.d.ts.map +1 -1
- package/dist/esm/tools/get-document-tool/GetDocumentTool.js +3 -16
- package/dist/esm/tools/get-document-tool/GetDocumentTool.js.map +1 -1
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.d.ts +21 -0
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.d.ts.map +1 -0
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.input.schema.d.ts +7 -0
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.input.schema.d.ts.map +1 -0
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.input.schema.js +17 -0
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.input.schema.js.map +1 -0
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.js +99 -0
- package/dist/esm/tools/search-docs-tool/SearchDocsTool.js.map +1 -0
- package/dist/esm/tools/toolRegistry.d.ts.map +1 -1
- package/dist/esm/tools/toolRegistry.js +3 -1
- package/dist/esm/tools/toolRegistry.js.map +1 -1
- package/dist/esm/utils/docFetcher.d.ts +24 -0
- package/dist/esm/utils/docFetcher.d.ts.map +1 -0
- package/dist/esm/utils/docFetcher.js +81 -0
- package/dist/esm/utils/docFetcher.js.map +1 -0
- package/dist/esm/version.json +3 -3
- package/package.json +2 -2
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;
|
|
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
|
|
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":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAGlC,
|
|
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;
|
|
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
|
|
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":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAGlC,
|
|
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;
|
|
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;;;
|
|
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"}
|
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;
|
|
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
|
|
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
|
|
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,
|
|
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;
|
|
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
|
|
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
|
|
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,
|
|
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":"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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;
|
|
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;
|
|
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"}
|
package/dist/esm/version.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mapbox/mcp-docs-server",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Mapbox MCP documentation server",
|
|
5
5
|
"mcpName": "io.github.mapbox/mcp-docs-server",
|
|
6
6
|
"main": "./dist/commonjs/index.js",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"documentation"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
49
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
50
50
|
"zod": "^4.3.6"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|