@taiga-ui/mcp 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/doc-types.js +2 -0
- package/dist/schemas/doc-types.js.map +1 -0
- package/dist/server/fetch.js +33 -0
- package/dist/server/fetch.js.map +1 -0
- package/dist/server/server.js +55 -0
- package/dist/server/server.js.map +1 -0
- package/dist/tools/get-component-example.js +37 -0
- package/dist/tools/get-component-example.js.map +1 -0
- package/dist/tools/get-list-components.js +32 -0
- package/dist/tools/get-list-components.js.map +1 -0
- package/dist/tools/get-migration-guide.js +76 -0
- package/dist/tools/get-migration-guide.js.map +1 -0
- package/dist/tools/get-overview.js +102 -0
- package/dist/tools/get-overview.js.map +1 -0
- package/dist/tools/index.js +11 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/utils/extract-header.js +405 -0
- package/dist/utils/extract-header.js.map +1 -0
- package/dist/utils/extract-migration-guide.js +187 -0
- package/dist/utils/extract-migration-guide.js.map +1 -0
- package/dist/utils/find-section.js +97 -0
- package/dist/utils/find-section.js.map +1 -0
- package/dist/utils/list-components.js +19 -0
- package/dist/utils/list-components.js.map +1 -0
- package/dist/utils/logger.js +10 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/parse-content.js +60 -0
- package/dist/utils/parse-content.js.map +1 -0
- package/dist/utils/query-results.js +42 -0
- package/dist/utils/query-results.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { state } from '../server/server.js';
|
|
2
|
+
const GENERIC_SUFFIXES = new Set([
|
|
3
|
+
'component',
|
|
4
|
+
'context',
|
|
5
|
+
'directive',
|
|
6
|
+
'guard',
|
|
7
|
+
'interceptor',
|
|
8
|
+
'module',
|
|
9
|
+
'options',
|
|
10
|
+
'pipe',
|
|
11
|
+
'service',
|
|
12
|
+
]);
|
|
13
|
+
function normalizeToKebab(name) {
|
|
14
|
+
const stripped = name.replace(/^[Tt]ui[-_]?/, '');
|
|
15
|
+
return stripped.replaceAll(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
16
|
+
}
|
|
17
|
+
export function findSection(name) {
|
|
18
|
+
const stripped = name.replace(/^[Tt]ui[-_]?/, '');
|
|
19
|
+
const kebab = normalizeToKebab(name);
|
|
20
|
+
// Last word of kebab: "icon-button" → "button" (useful for compound names like TuiIconButton)
|
|
21
|
+
// Exclude generic Angular suffixes that match too broadly
|
|
22
|
+
const kebabParts = kebab.split('-').filter(Boolean);
|
|
23
|
+
const lastWordCandidate = kebabParts.length > 1 ? (kebabParts[kebabParts.length - 1] ?? '') : '';
|
|
24
|
+
const lastWord = GENERIC_SUFFIXES.has(lastWordCandidate) ? '' : lastWordCandidate;
|
|
25
|
+
const pascalCase = (stripped || name)
|
|
26
|
+
.toLowerCase()
|
|
27
|
+
.split(/[-_\s]+/)
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)
|
|
30
|
+
.join('');
|
|
31
|
+
const tuiVariant = pascalCase.startsWith('Tui') ? pascalCase : `Tui${pascalCase}`;
|
|
32
|
+
// All variants pre-lowercased to avoid repeated .toLowerCase() in loops
|
|
33
|
+
const variants = [
|
|
34
|
+
name.toLowerCase(),
|
|
35
|
+
stripped.toLowerCase(),
|
|
36
|
+
kebab,
|
|
37
|
+
lastWord,
|
|
38
|
+
pascalCase.toLowerCase(),
|
|
39
|
+
tuiVariant.toLowerCase(),
|
|
40
|
+
].filter(Boolean);
|
|
41
|
+
// Pre-compute per-section data once per call
|
|
42
|
+
const sections = state.sections.map((section) => ({
|
|
43
|
+
section,
|
|
44
|
+
id: section.id.toLowerCase(),
|
|
45
|
+
segment: section.id.split('/').pop()?.toLowerCase() ?? '',
|
|
46
|
+
}));
|
|
47
|
+
// Exact match
|
|
48
|
+
for (const variant of variants) {
|
|
49
|
+
const match = sections.find((s) => s.id === variant);
|
|
50
|
+
if (match) {
|
|
51
|
+
return match.section;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Last path segment match
|
|
55
|
+
for (const variant of variants) {
|
|
56
|
+
const match = sections.find((s) => s.segment === variant);
|
|
57
|
+
if (match) {
|
|
58
|
+
return match.section;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Ends-with match
|
|
62
|
+
for (const variant of variants) {
|
|
63
|
+
const match = sections.find((s) => s.id.endsWith(`/${variant}`));
|
|
64
|
+
if (match) {
|
|
65
|
+
return match.section;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Substring fallback — check all variants including stripped/kebab
|
|
69
|
+
for (const variant of variants) {
|
|
70
|
+
const match = sections.find((s) => s.id.includes(variant));
|
|
71
|
+
if (match) {
|
|
72
|
+
return match.section;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
export function suggestSections(query) {
|
|
78
|
+
const kebab = normalizeToKebab(query);
|
|
79
|
+
const parts = kebab
|
|
80
|
+
.split('-')
|
|
81
|
+
.filter((p) => !GENERIC_SUFFIXES.has(p) && p.length > 1);
|
|
82
|
+
// Try full kebab first, then without generic suffixes
|
|
83
|
+
const normalizedQuery = (parts.join('-') || kebab || query).toLowerCase();
|
|
84
|
+
const results = [];
|
|
85
|
+
for (const section of state.sections) {
|
|
86
|
+
const idLower = section.id.toLowerCase();
|
|
87
|
+
const matchIndex = idLower.indexOf(normalizedQuery);
|
|
88
|
+
if (matchIndex !== -1) {
|
|
89
|
+
results.push({
|
|
90
|
+
id: section.id,
|
|
91
|
+
score: matchIndex * 10 + Math.abs(idLower.length - normalizedQuery.length),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return results.sort((a, b) => a.score - b.score).map((r) => r.id);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=find-section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-section.js","sourceRoot":"","sources":["../../src/utils/find-section.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { state } from '../server/server.js';
|
|
2
|
+
export function constructComponentsList(query = '') {
|
|
3
|
+
const normalizedQuery = query.toLowerCase().replace(/^tui/, '');
|
|
4
|
+
return state.sections
|
|
5
|
+
.filter((section) => !normalizedQuery || section.id.toLowerCase().includes(normalizedQuery))
|
|
6
|
+
.map((section) => {
|
|
7
|
+
const idParts = section.id.split('/');
|
|
8
|
+
const name = idParts[idParts.length - 1] ?? section.id;
|
|
9
|
+
const category = idParts[0] ?? '';
|
|
10
|
+
return {
|
|
11
|
+
id: section.id,
|
|
12
|
+
name,
|
|
13
|
+
category,
|
|
14
|
+
package: section.package ?? null,
|
|
15
|
+
type: section.kind ?? null,
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=list-components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-components.js","sourceRoot":"","sources":["../../src/utils/list-components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAU1C,MAAM,UAAU,uBAAuB,CAAC,KAAK,GAAG,EAAE;IAC9C,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEhE,OAAO,KAAK,CAAC,QAAQ;SAChB,MAAM,CACH,CAAC,OAAO,EAAE,EAAE,CACR,CAAC,eAAe,IAAI,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC7E;SACA,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,OAAO;YACH,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI;YACJ,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;SAC7B,CAAC;IACN,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// In STDIO-based MCP servers can use only stderr for logging
|
|
2
|
+
// https://modelcontextprotocol.io/docs/develop/build-server#logging-in-mcp-servers
|
|
3
|
+
export function logError(message, err) {
|
|
4
|
+
const stack = err instanceof Error ? (err.stack ?? err.message) : String(err);
|
|
5
|
+
console.error(`[ERROR] ${message}: ${stack}`);
|
|
6
|
+
}
|
|
7
|
+
export function logInfo(message) {
|
|
8
|
+
console.warn(`[INFO] ${message}`);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,mFAAmF;AAEnF,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,GAAY;IAClD,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE9E,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACnC,OAAO,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { state } from '../server/server.js';
|
|
2
|
+
import { extractHeaderContent, findComponentsSectionStart } from './extract-header.js';
|
|
3
|
+
import { extractMigrationGuideContent } from './extract-migration-guide.js';
|
|
4
|
+
function extractMeta(text) {
|
|
5
|
+
let pkg;
|
|
6
|
+
let kind;
|
|
7
|
+
const pkgMatch = /\*\*Package\*\*:\s*`([^`]+)`/i.exec(text);
|
|
8
|
+
if (pkgMatch?.[1]) {
|
|
9
|
+
pkg = pkgMatch[1];
|
|
10
|
+
}
|
|
11
|
+
const typeMatch = /\*\*Type\*\*:\s*([^\n]+)/i.exec(text);
|
|
12
|
+
if (typeMatch?.[1]) {
|
|
13
|
+
kind = typeMatch[1].trim();
|
|
14
|
+
}
|
|
15
|
+
return { package: pkg, kind };
|
|
16
|
+
}
|
|
17
|
+
export function parseContent(rawContent, sourceUrl) {
|
|
18
|
+
if (!rawContent.trim()) {
|
|
19
|
+
throw new Error('parseContent: rawContent is empty');
|
|
20
|
+
}
|
|
21
|
+
state.sourceUrl = sourceUrl;
|
|
22
|
+
const headerContent = extractHeaderContent(rawContent);
|
|
23
|
+
state.overview = headerContent;
|
|
24
|
+
const migrationGuideContent = extractMigrationGuideContent(rawContent);
|
|
25
|
+
state.migrationGuide = migrationGuideContent;
|
|
26
|
+
const lines = rawContent.split(/\r?\n/);
|
|
27
|
+
const componentsStartLine = findComponentsSectionStart(rawContent);
|
|
28
|
+
const headerIndices = [];
|
|
29
|
+
for (let lineIndex = componentsStartLine; lineIndex < lines.length; lineIndex++) {
|
|
30
|
+
const line = lines[lineIndex];
|
|
31
|
+
if (line === undefined) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const isH1 = /^#\s+/.test(line);
|
|
35
|
+
const headerMatch = /^#\s+(components\/\S.*)$/.exec(line);
|
|
36
|
+
if (lineIndex > componentsStartLine && isH1 && !headerMatch) {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
if (headerMatch?.[1]) {
|
|
40
|
+
headerIndices.push({
|
|
41
|
+
line: lineIndex,
|
|
42
|
+
title: headerMatch[1].trim(),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
state.sections = headerIndices.map((header, headerIndex) => {
|
|
47
|
+
const start = header.line;
|
|
48
|
+
const end = headerIndices[headerIndex + 1]?.line ?? lines.length;
|
|
49
|
+
const content = lines.slice(start, end).join('\n');
|
|
50
|
+
const meta = extractMeta(content);
|
|
51
|
+
return {
|
|
52
|
+
id: header.title,
|
|
53
|
+
title: header.title,
|
|
54
|
+
content,
|
|
55
|
+
package: meta.package,
|
|
56
|
+
kind: meta.kind,
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=parse-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-content.js","sourceRoot":"","sources":["../../src/utils/parse-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { findSection, suggestSections } from './find-section.js';
|
|
2
|
+
export function extractContentSnippets(section) {
|
|
3
|
+
const text = section.content || '';
|
|
4
|
+
const trimmed = text.trim();
|
|
5
|
+
if (!trimmed) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
const cleaned = trimmed
|
|
9
|
+
.split(/\r?\n/)
|
|
10
|
+
.map((line) => line.replace(/^#{1,6}\s*/, ''))
|
|
11
|
+
.join('\n')
|
|
12
|
+
.trim();
|
|
13
|
+
return cleaned ? [cleaned] : [];
|
|
14
|
+
}
|
|
15
|
+
export function buildQueryResults(names) {
|
|
16
|
+
const results = [];
|
|
17
|
+
for (const queryName of names) {
|
|
18
|
+
const section = findSection(queryName);
|
|
19
|
+
if (!section) {
|
|
20
|
+
const notFound = {
|
|
21
|
+
query: queryName,
|
|
22
|
+
suggestions: suggestSections(queryName),
|
|
23
|
+
};
|
|
24
|
+
results.push(notFound);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const snippets = extractContentSnippets(section);
|
|
28
|
+
const foundResult = {
|
|
29
|
+
query: queryName,
|
|
30
|
+
id: section.id,
|
|
31
|
+
package: section.package ?? null,
|
|
32
|
+
type: section.kind ?? null,
|
|
33
|
+
};
|
|
34
|
+
if (snippets.length) {
|
|
35
|
+
foundResult.content = snippets;
|
|
36
|
+
}
|
|
37
|
+
results.push(foundResult);
|
|
38
|
+
}
|
|
39
|
+
const matches = results.filter((result) => !!result.id).length;
|
|
40
|
+
return { results, matches };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=query-results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-results.js","sourceRoot":"","sources":["../../src/utils/query-results.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAE/D,MAAM,UAAU,sBAAsB,CAAC,OAAmB;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO;SAClB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;SAC7C,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;IAEZ,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAI7C,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,QAAQ,GAAgB;gBAC1B,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,eAAe,CAAC,SAAS,CAAC;aAC1C,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEvB,SAAS;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEjD,MAAM,WAAW,GAAgB;YAC7B,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;SAC7B,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;QACnC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAE/D,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC;AAC9B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taiga-ui/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Model Context Protocol server providing Taiga UI documentation search and scaffolding tools.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"type": "module",
|
|
36
36
|
"main": "./dist/index.js",
|
|
37
37
|
"bin": {
|
|
38
|
-
"taiga-ui-mcp": "
|
|
38
|
+
"taiga-ui-mcp": "dist/index.js"
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
41
|
"dist/"
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"prepare": "husky",
|
|
49
49
|
"prepublishOnly": "npm run build",
|
|
50
50
|
"prettier": "prettier !package-lock.json . --ignore-path .gitignore",
|
|
51
|
-
"release": "npm publish --access public --tag latest",
|
|
51
|
+
"release": "npm run build && npm publish --access public --tag latest",
|
|
52
52
|
"start": "node dist/index.js",
|
|
53
53
|
"typecheck": "tsc --noEmit --incremental false"
|
|
54
54
|
},
|