@contiva/sapbtp-docs-mcp 1.0.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/LICENSE +395 -0
- package/README.md +386 -0
- package/build/cache/embedding-cache.d.ts +39 -0
- package/build/cache/embedding-cache.d.ts.map +1 -0
- package/build/cache/embedding-cache.js +105 -0
- package/build/cache/embedding-cache.js.map +1 -0
- package/build/cache/file-cache.d.ts +40 -0
- package/build/cache/file-cache.d.ts.map +1 -0
- package/build/cache/file-cache.js +124 -0
- package/build/cache/file-cache.js.map +1 -0
- package/build/cache/search-cache.d.ts +39 -0
- package/build/cache/search-cache.d.ts.map +1 -0
- package/build/cache/search-cache.js +97 -0
- package/build/cache/search-cache.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +17 -0
- package/build/index.js.map +1 -0
- package/build/indexing/file-registry.d.ts +47 -0
- package/build/indexing/file-registry.d.ts.map +1 -0
- package/build/indexing/file-registry.js +130 -0
- package/build/indexing/file-registry.js.map +1 -0
- package/build/indexing/topic-index.d.ts +57 -0
- package/build/indexing/topic-index.d.ts.map +1 -0
- package/build/indexing/topic-index.js +181 -0
- package/build/indexing/topic-index.js.map +1 -0
- package/build/parsers/links.d.ts +14 -0
- package/build/parsers/links.d.ts.map +1 -0
- package/build/parsers/links.js +80 -0
- package/build/parsers/links.js.map +1 -0
- package/build/parsers/markdown.d.ts +10 -0
- package/build/parsers/markdown.d.ts.map +1 -0
- package/build/parsers/markdown.js +120 -0
- package/build/parsers/markdown.js.map +1 -0
- package/build/parsers/metadata.d.ts +19 -0
- package/build/parsers/metadata.d.ts.map +1 -0
- package/build/parsers/metadata.js +63 -0
- package/build/parsers/metadata.js.map +1 -0
- package/build/search/fulltext.d.ts +20 -0
- package/build/search/fulltext.d.ts.map +1 -0
- package/build/search/fulltext.js +117 -0
- package/build/search/fulltext.js.map +1 -0
- package/build/search/ranking.d.ts +27 -0
- package/build/search/ranking.d.ts.map +1 -0
- package/build/search/ranking.js +119 -0
- package/build/search/ranking.js.map +1 -0
- package/build/search/semantic.d.ts +53 -0
- package/build/search/semantic.d.ts.map +1 -0
- package/build/search/semantic.js +260 -0
- package/build/search/semantic.js.map +1 -0
- package/build/search/title.d.ts +18 -0
- package/build/search/title.d.ts.map +1 -0
- package/build/search/title.js +95 -0
- package/build/search/title.js.map +1 -0
- package/build/server.d.ts +32 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +183 -0
- package/build/server.js.map +1 -0
- package/build/tools/get-related.d.ts +64 -0
- package/build/tools/get-related.d.ts.map +1 -0
- package/build/tools/get-related.js +203 -0
- package/build/tools/get-related.js.map +1 -0
- package/build/tools/list-topics.d.ts +43 -0
- package/build/tools/list-topics.d.ts.map +1 -0
- package/build/tools/list-topics.js +63 -0
- package/build/tools/list-topics.js.map +1 -0
- package/build/tools/read-article.d.ts +42 -0
- package/build/tools/read-article.d.ts.map +1 -0
- package/build/tools/read-article.js +89 -0
- package/build/tools/read-article.js.map +1 -0
- package/build/tools/search.d.ts +57 -0
- package/build/tools/search.d.ts.map +1 -0
- package/build/tools/search.js +109 -0
- package/build/tools/search.js.map +1 -0
- package/build/types/index.d.ts +179 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/index.js +2 -0
- package/build/types/index.js.map +1 -0
- package/build/utils/docs-downloader.d.ts +9 -0
- package/build/utils/docs-downloader.d.ts.map +1 -0
- package/build/utils/docs-downloader.js +82 -0
- package/build/utils/docs-downloader.js.map +1 -0
- package/build/utils/paths.d.ts +67 -0
- package/build/utils/paths.d.ts.map +1 -0
- package/build/utils/paths.js +132 -0
- package/build/utils/paths.js.map +1 -0
- package/build/utils/text-processing.d.ts +62 -0
- package/build/utils/text-processing.d.ts.map +1 -0
- package/build/utils/text-processing.js +214 -0
- package/build/utils/text-processing.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List topics tool handler
|
|
3
|
+
*/
|
|
4
|
+
export class ListTopicsTool {
|
|
5
|
+
topicIndex;
|
|
6
|
+
constructor(topicIndex) {
|
|
7
|
+
this.topicIndex = topicIndex;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Lists documentation topics in hierarchical structure
|
|
11
|
+
*/
|
|
12
|
+
async execute(input) {
|
|
13
|
+
const { area, depth = 2, parentPath } = input;
|
|
14
|
+
if (parentPath) {
|
|
15
|
+
// Get topics under specific parent
|
|
16
|
+
const topics = this.topicIndex.getTopicsUnderPath(area, parentPath);
|
|
17
|
+
return {
|
|
18
|
+
area,
|
|
19
|
+
topics,
|
|
20
|
+
totalTopics: topics.length,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Get topics with depth limit
|
|
24
|
+
const topics = this.topicIndex.getTopicsWithDepth(area, depth);
|
|
25
|
+
return {
|
|
26
|
+
area,
|
|
27
|
+
topics,
|
|
28
|
+
totalTopics: this.topicIndex.getHierarchy(area)?.totalTopics || 0,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Gets the tool schema for MCP
|
|
33
|
+
*/
|
|
34
|
+
static getSchema() {
|
|
35
|
+
return {
|
|
36
|
+
name: 'list_topics',
|
|
37
|
+
description: 'List documentation topics in a hierarchical structure. Can show the entire TOC or a specific section.',
|
|
38
|
+
inputSchema: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: {
|
|
41
|
+
area: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
enum: ['ISuite', 'apim'],
|
|
44
|
+
description: 'Documentation area to list topics for (ci area does not have an index)'
|
|
45
|
+
},
|
|
46
|
+
depth: {
|
|
47
|
+
type: 'number',
|
|
48
|
+
description: 'How many levels deep to show (1-5)',
|
|
49
|
+
default: 2,
|
|
50
|
+
minimum: 1,
|
|
51
|
+
maximum: 5
|
|
52
|
+
},
|
|
53
|
+
parentPath: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
description: 'Show topics under this parent path only (optional)'
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
required: ['area']
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=list-topics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-topics.js","sourceRoot":"","sources":["../../src/tools/list-topics.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAE9C;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAsB;QAClC,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QAE9C,IAAI,UAAU,EAAE,CAAC;YACf,mCAAmC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEpE,OAAO;gBACL,IAAI;gBACJ,MAAM;gBACN,WAAW,EAAE,MAAM,CAAC,MAAM;aAC3B,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE/D,OAAO;YACL,IAAI;YACJ,MAAM;YACN,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,WAAW,IAAI,CAAC;SAClE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,uGAAuG;YACpH,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;wBACxB,WAAW,EAAE,wEAAwE;qBACtF;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oCAAoC;wBACjD,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC;qBACX;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oDAAoD;qBAClE;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;aACnB;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ReadArticleInput, ReadArticleOutput } from '../types/index.js';
|
|
2
|
+
import { FileRegistry } from '../indexing/file-registry.js';
|
|
3
|
+
import { FileCache } from '../cache/file-cache.js';
|
|
4
|
+
/**
|
|
5
|
+
* Read article tool handler
|
|
6
|
+
*/
|
|
7
|
+
export declare class ReadArticleTool {
|
|
8
|
+
private registry;
|
|
9
|
+
private fileCache;
|
|
10
|
+
constructor(registry: FileRegistry, fileCache: FileCache);
|
|
11
|
+
/**
|
|
12
|
+
* Reads an article by file path or LOIO ID
|
|
13
|
+
*/
|
|
14
|
+
execute(input: ReadArticleInput): Promise<ReadArticleOutput>;
|
|
15
|
+
/**
|
|
16
|
+
* Resolves identifier (path or LOIO ID) to file path
|
|
17
|
+
*/
|
|
18
|
+
private resolveIdentifier;
|
|
19
|
+
/**
|
|
20
|
+
* Gets the tool schema for MCP
|
|
21
|
+
*/
|
|
22
|
+
static getSchema(): {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: string;
|
|
27
|
+
properties: {
|
|
28
|
+
identifier: {
|
|
29
|
+
type: string;
|
|
30
|
+
description: string;
|
|
31
|
+
};
|
|
32
|
+
resolveLinks: {
|
|
33
|
+
type: string;
|
|
34
|
+
description: string;
|
|
35
|
+
default: boolean;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
required: string[];
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=read-article.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-article.d.ts","sourceRoot":"","sources":["../../src/tools/read-article.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAInD;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;gBADT,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,SAAS;IAG9B;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwClE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;;CAqBjB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { resolveLinksInContent, extractRelatedLinks } from '../parsers/links.js';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
/**
|
|
4
|
+
* Read article tool handler
|
|
5
|
+
*/
|
|
6
|
+
export class ReadArticleTool {
|
|
7
|
+
registry;
|
|
8
|
+
fileCache;
|
|
9
|
+
constructor(registry, fileCache) {
|
|
10
|
+
this.registry = registry;
|
|
11
|
+
this.fileCache = fileCache;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Reads an article by file path or LOIO ID
|
|
15
|
+
*/
|
|
16
|
+
async execute(input) {
|
|
17
|
+
const { identifier, resolveLinks = true } = input;
|
|
18
|
+
// Determine if identifier is a path or LOIO ID
|
|
19
|
+
const filePath = this.resolveIdentifier(identifier);
|
|
20
|
+
if (!filePath) {
|
|
21
|
+
throw new Error(`Article not found: ${identifier}`);
|
|
22
|
+
}
|
|
23
|
+
if (!existsSync(filePath)) {
|
|
24
|
+
throw new Error(`Article file does not exist: ${filePath}`);
|
|
25
|
+
}
|
|
26
|
+
// Get parsed document
|
|
27
|
+
const doc = await this.fileCache.get(filePath);
|
|
28
|
+
// Process content
|
|
29
|
+
let content = doc.content;
|
|
30
|
+
if (resolveLinks) {
|
|
31
|
+
content = resolveLinksInContent(content, filePath);
|
|
32
|
+
}
|
|
33
|
+
// Extract related links
|
|
34
|
+
const relatedLinksParsed = extractRelatedLinks(doc.content, filePath);
|
|
35
|
+
const relatedLinks = relatedLinksParsed.map(link => link.absolutePath);
|
|
36
|
+
return {
|
|
37
|
+
title: doc.title,
|
|
38
|
+
filePath: doc.metadata.filePath,
|
|
39
|
+
loioId: doc.loioId,
|
|
40
|
+
content,
|
|
41
|
+
metadata: {
|
|
42
|
+
area: doc.metadata.area,
|
|
43
|
+
relatedLinks,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Resolves identifier (path or LOIO ID) to file path
|
|
49
|
+
*/
|
|
50
|
+
resolveIdentifier(identifier) {
|
|
51
|
+
// Check if it's a LOIO ID
|
|
52
|
+
if (identifier.startsWith('loio')) {
|
|
53
|
+
const entry = this.registry.getByLoioId(identifier);
|
|
54
|
+
return entry ? entry.filePath : null;
|
|
55
|
+
}
|
|
56
|
+
// Check if it's a direct file path
|
|
57
|
+
if (existsSync(identifier)) {
|
|
58
|
+
return identifier;
|
|
59
|
+
}
|
|
60
|
+
// Try to find in registry
|
|
61
|
+
const entry = this.registry.getByPath(identifier);
|
|
62
|
+
return entry ? entry.filePath : null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Gets the tool schema for MCP
|
|
66
|
+
*/
|
|
67
|
+
static getSchema() {
|
|
68
|
+
return {
|
|
69
|
+
name: 'read_article',
|
|
70
|
+
description: 'Read the full content of a documentation article by file path or LOIO ID. Returns formatted markdown content with resolved links.',
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
identifier: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
description: 'Either the file path (e.g., "docs/ISuite/what-is-sap-integration-suite-5cc6987.md") or LOIO ID (e.g., "loio5cc6987511104c418b7cb4c25f3d9cb0")'
|
|
77
|
+
},
|
|
78
|
+
resolveLinks: {
|
|
79
|
+
type: 'boolean',
|
|
80
|
+
description: 'Convert relative links to absolute paths',
|
|
81
|
+
default: true
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
required: ['identifier']
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=read-article.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-article.js","sourceRoot":"","sources":["../../src/tools/read-article.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { SearchToolInput, CombinedSearchResults } from '../types/index.js';
|
|
2
|
+
import { FullTextSearch } from '../search/fulltext.js';
|
|
3
|
+
import { TitleSearch } from '../search/title.js';
|
|
4
|
+
import { SemanticSearch } from '../search/semantic.js';
|
|
5
|
+
import { SearchCache } from '../cache/search-cache.js';
|
|
6
|
+
/**
|
|
7
|
+
* Search documentation tool handler
|
|
8
|
+
*/
|
|
9
|
+
export declare class SearchTool {
|
|
10
|
+
private fulltextSearch;
|
|
11
|
+
private titleSearch;
|
|
12
|
+
private semanticSearch;
|
|
13
|
+
private searchCache;
|
|
14
|
+
private ranking;
|
|
15
|
+
constructor(fulltextSearch: FullTextSearch, titleSearch: TitleSearch, semanticSearch: SemanticSearch, searchCache: SearchCache);
|
|
16
|
+
/**
|
|
17
|
+
* Executes search based on input parameters
|
|
18
|
+
*/
|
|
19
|
+
execute(input: SearchToolInput): Promise<CombinedSearchResults>;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the tool schema for MCP
|
|
22
|
+
*/
|
|
23
|
+
static getSchema(): {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
inputSchema: {
|
|
27
|
+
type: string;
|
|
28
|
+
properties: {
|
|
29
|
+
query: {
|
|
30
|
+
type: string;
|
|
31
|
+
description: string;
|
|
32
|
+
};
|
|
33
|
+
searchType: {
|
|
34
|
+
type: string;
|
|
35
|
+
enum: string[];
|
|
36
|
+
description: string;
|
|
37
|
+
default: string;
|
|
38
|
+
};
|
|
39
|
+
area: {
|
|
40
|
+
type: string;
|
|
41
|
+
enum: string[];
|
|
42
|
+
description: string;
|
|
43
|
+
default: string;
|
|
44
|
+
};
|
|
45
|
+
limit: {
|
|
46
|
+
type: string;
|
|
47
|
+
description: string;
|
|
48
|
+
default: number;
|
|
49
|
+
minimum: number;
|
|
50
|
+
maximum: number;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
required: string[];
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,qBAAa,UAAU;IAInB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IANrB,OAAO,CAAC,OAAO,CAAgB;gBAGrB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW;IAKlC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiErE;;OAEG;IACH,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCjB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { SearchRanking } from '../search/ranking.js';
|
|
2
|
+
/**
|
|
3
|
+
* Search documentation tool handler
|
|
4
|
+
*/
|
|
5
|
+
export class SearchTool {
|
|
6
|
+
fulltextSearch;
|
|
7
|
+
titleSearch;
|
|
8
|
+
semanticSearch;
|
|
9
|
+
searchCache;
|
|
10
|
+
ranking;
|
|
11
|
+
constructor(fulltextSearch, titleSearch, semanticSearch, searchCache) {
|
|
12
|
+
this.fulltextSearch = fulltextSearch;
|
|
13
|
+
this.titleSearch = titleSearch;
|
|
14
|
+
this.semanticSearch = semanticSearch;
|
|
15
|
+
this.searchCache = searchCache;
|
|
16
|
+
this.ranking = new SearchRanking();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Executes search based on input parameters
|
|
20
|
+
*/
|
|
21
|
+
async execute(input) {
|
|
22
|
+
const { query, searchType = 'all', area = 'all', limit = 20 } = input;
|
|
23
|
+
const startTime = Date.now();
|
|
24
|
+
// Check cache first
|
|
25
|
+
const cached = this.searchCache.get(query, searchType, area);
|
|
26
|
+
if (cached) {
|
|
27
|
+
return {
|
|
28
|
+
results: cached.slice(0, limit),
|
|
29
|
+
totalResults: cached.length,
|
|
30
|
+
searchType,
|
|
31
|
+
queryTime: Date.now() - startTime,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Perform search based on type
|
|
35
|
+
let results;
|
|
36
|
+
if (searchType === 'fulltext') {
|
|
37
|
+
results = await this.fulltextSearch.search({ query, area, limit });
|
|
38
|
+
}
|
|
39
|
+
else if (searchType === 'title') {
|
|
40
|
+
results = await this.titleSearch.search({ query, area, limit });
|
|
41
|
+
}
|
|
42
|
+
else if (searchType === 'semantic') {
|
|
43
|
+
results = await this.semanticSearch.search({ query, area, limit });
|
|
44
|
+
}
|
|
45
|
+
else if (searchType === 'all') {
|
|
46
|
+
// Run all three searches in parallel
|
|
47
|
+
const [fulltextResults, titleResults, semanticResults] = await Promise.all([
|
|
48
|
+
this.fulltextSearch.search({ query, area, limit: limit * 2 }),
|
|
49
|
+
this.titleSearch.search({ query, area, limit: limit * 2 }),
|
|
50
|
+
this.semanticSearch.search({ query, area, limit: limit * 2 }).catch(() => []), // Fallback if semantic search not initialized
|
|
51
|
+
]);
|
|
52
|
+
// Combine results
|
|
53
|
+
results = this.ranking.combineResults(fulltextResults, titleResults, semanticResults);
|
|
54
|
+
// Limit final results
|
|
55
|
+
results = results.slice(0, limit);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
throw new Error(`Invalid search type: ${searchType}`);
|
|
59
|
+
}
|
|
60
|
+
// Cache results
|
|
61
|
+
this.searchCache.set(query, searchType, area, results);
|
|
62
|
+
const queryTime = Date.now() - startTime;
|
|
63
|
+
return {
|
|
64
|
+
results,
|
|
65
|
+
totalResults: results.length,
|
|
66
|
+
searchType,
|
|
67
|
+
queryTime,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Gets the tool schema for MCP
|
|
72
|
+
*/
|
|
73
|
+
static getSchema() {
|
|
74
|
+
return {
|
|
75
|
+
name: 'search_documentation',
|
|
76
|
+
description: 'Search SAP Business Technology Platform documentation using full-text, title-based, or semantic search. Returns relevant documentation articles with snippets.',
|
|
77
|
+
inputSchema: {
|
|
78
|
+
type: 'object',
|
|
79
|
+
properties: {
|
|
80
|
+
query: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
description: 'Search query string'
|
|
83
|
+
},
|
|
84
|
+
searchType: {
|
|
85
|
+
type: 'string',
|
|
86
|
+
enum: ['fulltext', 'title', 'semantic', 'all'],
|
|
87
|
+
description: 'Type of search: fulltext (content search), title (title matching), semantic (AI-based), all (combined)',
|
|
88
|
+
default: 'all'
|
|
89
|
+
},
|
|
90
|
+
area: {
|
|
91
|
+
type: 'string',
|
|
92
|
+
enum: ['ISuite', 'ci', 'apim', 'all'],
|
|
93
|
+
description: 'Limit search to specific documentation area. ISuite = main Integration Suite, ci = Cloud Integration, apim = API Management',
|
|
94
|
+
default: 'all'
|
|
95
|
+
},
|
|
96
|
+
limit: {
|
|
97
|
+
type: 'number',
|
|
98
|
+
description: 'Maximum number of results to return (1-50)',
|
|
99
|
+
default: 20,
|
|
100
|
+
minimum: 1,
|
|
101
|
+
maximum: 50
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
required: ['query']
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
export type DocumentArea = 'ISuite' | 'ci' | 'apim';
|
|
2
|
+
export type SearchType = 'fulltext' | 'title' | 'semantic' | 'all';
|
|
3
|
+
export type MatchType = 'fulltext' | 'title' | 'semantic' | 'combined';
|
|
4
|
+
export type RelationshipType = 'explicit_link' | 'semantic' | 'combined';
|
|
5
|
+
export type EmbeddingProvider = 'local' | 'voyage' | 'openai';
|
|
6
|
+
export interface DocumentMetadata {
|
|
7
|
+
loioId: string;
|
|
8
|
+
title: string;
|
|
9
|
+
area: DocumentArea;
|
|
10
|
+
filePath: string;
|
|
11
|
+
relativePath: string;
|
|
12
|
+
lastModified: Date;
|
|
13
|
+
size: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ParsedDocument {
|
|
16
|
+
title: string;
|
|
17
|
+
loioId: string;
|
|
18
|
+
content: string;
|
|
19
|
+
cleanText: string;
|
|
20
|
+
links: ParsedLink[];
|
|
21
|
+
headings: Heading[];
|
|
22
|
+
images: string[];
|
|
23
|
+
metadata: DocumentMetadata;
|
|
24
|
+
}
|
|
25
|
+
export interface ParsedLink {
|
|
26
|
+
text: string;
|
|
27
|
+
href: string;
|
|
28
|
+
absolutePath: string;
|
|
29
|
+
isExternal: boolean;
|
|
30
|
+
anchor?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface Heading {
|
|
33
|
+
level: number;
|
|
34
|
+
text: string;
|
|
35
|
+
anchor: string;
|
|
36
|
+
}
|
|
37
|
+
export interface SearchOptions {
|
|
38
|
+
query: string;
|
|
39
|
+
searchType?: SearchType;
|
|
40
|
+
area?: DocumentArea | 'all';
|
|
41
|
+
limit?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface FullTextSearchOptions {
|
|
44
|
+
query: string;
|
|
45
|
+
area?: DocumentArea | 'all';
|
|
46
|
+
limit?: number;
|
|
47
|
+
}
|
|
48
|
+
export interface TitleSearchOptions {
|
|
49
|
+
query: string;
|
|
50
|
+
area?: DocumentArea | 'all';
|
|
51
|
+
limit?: number;
|
|
52
|
+
}
|
|
53
|
+
export interface SemanticSearchOptions {
|
|
54
|
+
query: string;
|
|
55
|
+
area?: DocumentArea | 'all';
|
|
56
|
+
limit?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface SearchResult {
|
|
59
|
+
filePath: string;
|
|
60
|
+
relativePath: string;
|
|
61
|
+
title: string;
|
|
62
|
+
loioId: string;
|
|
63
|
+
snippet: string;
|
|
64
|
+
score: number;
|
|
65
|
+
matchType: MatchType;
|
|
66
|
+
area: DocumentArea;
|
|
67
|
+
}
|
|
68
|
+
export interface CombinedSearchResults {
|
|
69
|
+
results: SearchResult[];
|
|
70
|
+
totalResults: number;
|
|
71
|
+
searchType: SearchType;
|
|
72
|
+
queryTime: number;
|
|
73
|
+
}
|
|
74
|
+
export interface Topic {
|
|
75
|
+
title: string;
|
|
76
|
+
path: string;
|
|
77
|
+
level: number;
|
|
78
|
+
children: Topic[];
|
|
79
|
+
loioId?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface TopicHierarchy {
|
|
82
|
+
area: DocumentArea;
|
|
83
|
+
topics: Topic[];
|
|
84
|
+
totalTopics: number;
|
|
85
|
+
}
|
|
86
|
+
export interface FileRegistryEntry {
|
|
87
|
+
filePath: string;
|
|
88
|
+
relativePath: string;
|
|
89
|
+
title: string;
|
|
90
|
+
loioId: string;
|
|
91
|
+
area: DocumentArea;
|
|
92
|
+
}
|
|
93
|
+
export interface CacheEntry<T> {
|
|
94
|
+
data: T;
|
|
95
|
+
timestamp: number;
|
|
96
|
+
mtime?: number;
|
|
97
|
+
}
|
|
98
|
+
export interface CacheStats {
|
|
99
|
+
hits: number;
|
|
100
|
+
misses: number;
|
|
101
|
+
size: number;
|
|
102
|
+
maxSize: number;
|
|
103
|
+
}
|
|
104
|
+
export interface EmbeddingCacheData {
|
|
105
|
+
version: string;
|
|
106
|
+
model: string;
|
|
107
|
+
provider: EmbeddingProvider;
|
|
108
|
+
createdAt: string;
|
|
109
|
+
embeddings: EmbeddingEntry[];
|
|
110
|
+
}
|
|
111
|
+
export interface EmbeddingEntry {
|
|
112
|
+
filePath: string;
|
|
113
|
+
title: string;
|
|
114
|
+
loioId: string;
|
|
115
|
+
chunkIndex: number;
|
|
116
|
+
text: string;
|
|
117
|
+
embedding: number[];
|
|
118
|
+
}
|
|
119
|
+
export interface TextChunk {
|
|
120
|
+
text: string;
|
|
121
|
+
chunkIndex: number;
|
|
122
|
+
startOffset: number;
|
|
123
|
+
endOffset: number;
|
|
124
|
+
}
|
|
125
|
+
export interface SearchToolInput {
|
|
126
|
+
query: string;
|
|
127
|
+
searchType?: SearchType;
|
|
128
|
+
area?: DocumentArea | 'all';
|
|
129
|
+
limit?: number;
|
|
130
|
+
}
|
|
131
|
+
export interface ReadArticleInput {
|
|
132
|
+
identifier: string;
|
|
133
|
+
resolveLinks?: boolean;
|
|
134
|
+
}
|
|
135
|
+
export interface ReadArticleOutput {
|
|
136
|
+
title: string;
|
|
137
|
+
filePath: string;
|
|
138
|
+
loioId: string;
|
|
139
|
+
content: string;
|
|
140
|
+
metadata: {
|
|
141
|
+
area: DocumentArea;
|
|
142
|
+
relatedLinks: string[];
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export interface ListTopicsInput {
|
|
146
|
+
area: DocumentArea;
|
|
147
|
+
depth?: number;
|
|
148
|
+
parentPath?: string;
|
|
149
|
+
}
|
|
150
|
+
export interface GetRelatedArticlesInput {
|
|
151
|
+
identifier: string;
|
|
152
|
+
method?: 'links' | 'semantic' | 'both';
|
|
153
|
+
limit?: number;
|
|
154
|
+
}
|
|
155
|
+
export interface RelatedArticle {
|
|
156
|
+
title: string;
|
|
157
|
+
filePath: string;
|
|
158
|
+
relationshipType: RelationshipType;
|
|
159
|
+
score: number;
|
|
160
|
+
loioId?: string;
|
|
161
|
+
}
|
|
162
|
+
export interface GetRelatedArticlesOutput {
|
|
163
|
+
sourceArticle: {
|
|
164
|
+
title: string;
|
|
165
|
+
filePath: string;
|
|
166
|
+
loioId: string;
|
|
167
|
+
};
|
|
168
|
+
relatedArticles: RelatedArticle[];
|
|
169
|
+
}
|
|
170
|
+
export interface ServerConfig {
|
|
171
|
+
docsPath: string;
|
|
172
|
+
cacheDir: string;
|
|
173
|
+
fileCacheSize: number;
|
|
174
|
+
searchCacheTTL: number;
|
|
175
|
+
embeddingProvider: EmbeddingProvider;
|
|
176
|
+
voyageApiKey?: string;
|
|
177
|
+
openaiApiKey?: string;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if documentation exists and downloads it if necessary
|
|
3
|
+
*/
|
|
4
|
+
export declare function ensureDocsAvailable(docsPath: string): Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Gets the size of the docs directory in MB
|
|
7
|
+
*/
|
|
8
|
+
export declare function getDocsSize(docsPath: string): Promise<number>;
|
|
9
|
+
//# sourceMappingURL=docs-downloader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-downloader.d.ts","sourceRoot":"","sources":["../../src/utils/docs-downloader.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6B5E;AAmCD;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWnE"}
|