@llmindset/hf-mcp 0.2.32 → 0.2.33
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/docs-search/docs-semantic-search.d.ts +2 -2
- package/dist/docs-search/docs-semantic-search.d.ts.map +1 -1
- package/dist/docs-search/docs-semantic-search.js +56 -21
- package/dist/docs-search/docs-semantic-search.js.map +1 -1
- package/dist/use-space.d.ts +0 -1
- package/dist/use-space.d.ts.map +1 -1
- package/dist/use-space.js +0 -1
- package/dist/use-space.js.map +1 -1
- package/package.json +2 -2
- package/src/docs-search/docs-semantic-search.ts +71 -20
- package/src/use-space.ts +0 -1
- package/dist/types/mcp-ui-server-shim.d.ts +0 -37
- package/dist/types/mcp-ui-server-shim.d.ts.map +0 -1
- package/dist/types/mcp-ui-server-shim.js +0 -2
- package/dist/types/mcp-ui-server-shim.js.map +0 -1
- package/src/types/mcp-ui-server-shim.ts +0 -35
|
@@ -5,7 +5,7 @@ export declare const DOCS_SEMANTIC_SEARCH_CONFIG: {
|
|
|
5
5
|
readonly name: "hf_doc_search";
|
|
6
6
|
readonly description: string;
|
|
7
7
|
readonly schema: z.ZodObject<{
|
|
8
|
-
query: z.ZodString
|
|
8
|
+
query: z.ZodEffects<z.ZodString, string, string>;
|
|
9
9
|
product: z.ZodOptional<z.ZodString>;
|
|
10
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
11
|
query: string;
|
|
@@ -15,7 +15,7 @@ export declare const DOCS_SEMANTIC_SEARCH_CONFIG: {
|
|
|
15
15
|
product?: string | undefined;
|
|
16
16
|
}>;
|
|
17
17
|
readonly annotations: {
|
|
18
|
-
readonly title: "Hugging Face Documentation
|
|
18
|
+
readonly title: "Hugging Face Documentation Search";
|
|
19
19
|
readonly destructiveHint: false;
|
|
20
20
|
readonly readOnlyHint: true;
|
|
21
21
|
readonly openWorldHint: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-semantic-search.d.ts","sourceRoot":"","sources":["../../src/docs-search/docs-semantic-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAK1D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"docs-semantic-search.d.ts","sourceRoot":"","sources":["../../src/docs-search/docs-semantic-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAK1D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;CAmC9B,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAEjF,UAAU,eAAe;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAgBD,qBAAa,aAAc,SAAQ,SAAS,CAAC,kBAAkB,EAAE,eAAe,EAAE,CAAC;IAClF,OAAO,CAAC,WAAW,CAAS;gBAOhB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,SAAkC,EAAE,WAAW,SAAuB;IASpG,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;CAiC1D"}
|
|
@@ -4,21 +4,32 @@ import { escapeMarkdown, estimateTokens } from '../utilities.js';
|
|
|
4
4
|
import { DOC_FETCH_CONFIG } from './doc-fetch.js';
|
|
5
5
|
export const DOCS_SEMANTIC_SEARCH_CONFIG = {
|
|
6
6
|
name: 'hf_doc_search',
|
|
7
|
-
description: 'Search
|
|
8
|
-
'
|
|
7
|
+
description: 'Search and Discover Hugging Face Product and Library documentation. Use an empty query to discover structure and navigation hints and tips. ' +
|
|
8
|
+
'You MUST consult this tool for the most up-to-date information when using Hugging Face libraries. Combine with the Product filter to focus results.',
|
|
9
9
|
schema: z.object({
|
|
10
10
|
query: z
|
|
11
11
|
.string()
|
|
12
|
-
.min(3, 'Supply at least one search term')
|
|
13
12
|
.max(200, 'Query too long')
|
|
14
|
-
.
|
|
15
|
-
|
|
16
|
-
.
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
.superRefine((value, ctx) => {
|
|
14
|
+
const trimmed = value.trim();
|
|
15
|
+
if (trimmed.length === 0) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (trimmed.length < 3) {
|
|
19
|
+
ctx.addIssue({
|
|
20
|
+
code: z.ZodIssueCode.too_small,
|
|
21
|
+
type: 'string',
|
|
22
|
+
minimum: 3,
|
|
23
|
+
inclusive: true,
|
|
24
|
+
message: 'Supply at least one search term',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
.describe('Start with an empty query for structure, endpoint discovery and navigation tips. Use semantic queries for targetted searches.'),
|
|
29
|
+
product: z.string().optional().describe('Filter by Product. Supply when known for focused results'),
|
|
19
30
|
}),
|
|
20
31
|
annotations: {
|
|
21
|
-
title: 'Hugging Face Documentation
|
|
32
|
+
title: 'Hugging Face Documentation Search',
|
|
22
33
|
destructiveHint: false,
|
|
23
34
|
readOnlyHint: true,
|
|
24
35
|
openWorldHint: true,
|
|
@@ -26,6 +37,7 @@ export const DOCS_SEMANTIC_SEARCH_CONFIG = {
|
|
|
26
37
|
};
|
|
27
38
|
const DEFAULT_TOKEN_BUDGET = 12500;
|
|
28
39
|
const TRUNCATE_EXCERPT_LENGTH = 400;
|
|
40
|
+
const DOCS_INDEX_URL = 'https://huggingface.co/api/docs';
|
|
29
41
|
export class DocSearchTool extends HfApiCall {
|
|
30
42
|
tokenBudget;
|
|
31
43
|
constructor(hfToken, apiUrl = 'https://hf.co/api/docs/search', tokenBudget = DEFAULT_TOKEN_BUDGET) {
|
|
@@ -34,13 +46,12 @@ export class DocSearchTool extends HfApiCall {
|
|
|
34
46
|
}
|
|
35
47
|
async search(params) {
|
|
36
48
|
try {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const apiParams = { q: params.query.toLowerCase() };
|
|
49
|
+
const query = params.query?.trim() ?? '';
|
|
50
|
+
if (query.length === 0) {
|
|
51
|
+
const docsIndex = await this.fetchFromApi(DOCS_INDEX_URL);
|
|
52
|
+
return formatDocsIndex(docsIndex);
|
|
53
|
+
}
|
|
54
|
+
const apiParams = { q: query.toLowerCase() };
|
|
44
55
|
if (params.product) {
|
|
45
56
|
apiParams.product = params.product;
|
|
46
57
|
}
|
|
@@ -48,13 +59,13 @@ export class DocSearchTool extends HfApiCall {
|
|
|
48
59
|
if (results.length === 0) {
|
|
49
60
|
return {
|
|
50
61
|
formatted: params.product
|
|
51
|
-
? `No documentation found for query '${
|
|
52
|
-
: `No documentation found for query '${
|
|
62
|
+
? `No documentation found for query '${query}' in product '${params.product}'`
|
|
63
|
+
: `No documentation found for query '${query}'`,
|
|
53
64
|
totalResults: 0,
|
|
54
|
-
resultsShared: 0
|
|
65
|
+
resultsShared: 0,
|
|
55
66
|
};
|
|
56
67
|
}
|
|
57
|
-
return formatSearchResults(
|
|
68
|
+
return formatSearchResults(query, results, params.product, this.tokenBudget);
|
|
58
69
|
}
|
|
59
70
|
catch (error) {
|
|
60
71
|
if (error instanceof Error) {
|
|
@@ -84,6 +95,30 @@ function groupResults(results) {
|
|
|
84
95
|
}
|
|
85
96
|
return grouped;
|
|
86
97
|
}
|
|
98
|
+
function formatDocsIndex(docsIndex) {
|
|
99
|
+
if (!docsIndex.length) {
|
|
100
|
+
return {
|
|
101
|
+
formatted: 'No documentation categories are currently available. Try running the search again with specific terms.',
|
|
102
|
+
totalResults: 0,
|
|
103
|
+
resultsShared: 0,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const header = '### Hugging Face Documentation Products\n';
|
|
107
|
+
const tableHeader = '| Product | Category | Documentation |\n| --- | --- | --- |\n';
|
|
108
|
+
const rows = docsIndex
|
|
109
|
+
.map((entry) => {
|
|
110
|
+
const docsUrl = `https://huggingface.co${entry.url}`;
|
|
111
|
+
return `| \`${entry.id}\` | ${escapeMarkdown(entry.category)} | ${docsUrl} |`;
|
|
112
|
+
})
|
|
113
|
+
.join('\n');
|
|
114
|
+
const llmsNote = '\n\nEach documentation root exposes an `llms.txt` endpoint (e.g. add `/llms.txt` to the documentation URL). ' +
|
|
115
|
+
'Use semantic search when you have a specific question for faster, more targeted results.';
|
|
116
|
+
return {
|
|
117
|
+
formatted: `${header}${tableHeader}${rows}${llmsNote}`,
|
|
118
|
+
totalResults: docsIndex.length,
|
|
119
|
+
resultsShared: docsIndex.length,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
87
122
|
function groupBySection(pageResults) {
|
|
88
123
|
const sectionGroups = new Map();
|
|
89
124
|
for (const result of pageResults) {
|
|
@@ -214,7 +249,7 @@ function formatSearchResults(query, results, productFilter, tokenBudget = DEFAUL
|
|
|
214
249
|
return {
|
|
215
250
|
formatted: lines.join('\n'),
|
|
216
251
|
totalResults: results.length,
|
|
217
|
-
resultsShared: results.length
|
|
252
|
+
resultsShared: results.length,
|
|
218
253
|
};
|
|
219
254
|
}
|
|
220
255
|
//# sourceMappingURL=docs-semantic-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-semantic-search.js","sourceRoot":"","sources":["../../src/docs-search/docs-semantic-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAMlD,MAAM,CAAC,MAAM,2BAA2B,GAAG;IAC1C,IAAI,EAAE,eAAe;IACrB,WAAW,EACV,
|
|
1
|
+
{"version":3,"file":"docs-semantic-search.js","sourceRoot":"","sources":["../../src/docs-search/docs-semantic-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAMlD,MAAM,CAAC,MAAM,2BAA2B,GAAG;IAC1C,IAAI,EAAE,eAAe;IACrB,WAAW,EACV,8IAA8I;QAC9I,qJAAqJ;IACtJ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,KAAK,EAAE,CAAC;aACN,MAAM,EAAE;aACR,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;aAC1B,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;YACR,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,GAAG,CAAC,QAAQ,CAAC;oBACZ,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS;oBAC9B,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,SAAS,EAAE,IAAI;oBACf,OAAO,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC;aACD,QAAQ,CACR,+HAA+H,CAC/H;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;KACnG,CAAC;IACF,WAAW,EAAE;QACZ,KAAK,EAAE,mCAAmC;QAC1C,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;KACnB;CACQ,CAAC;AAyBX,MAAM,oBAAoB,GAAG,KAAK,CAAC;AACnC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,cAAc,GAAG,iCAAiC,CAAC;AAKzD,MAAM,OAAO,aAAc,SAAQ,SAAgD;IAC1E,WAAW,CAAS;IAO5B,YAAY,OAAgB,EAAE,MAAM,GAAG,+BAA+B,EAAE,WAAW,GAAG,oBAAoB;QACzG,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,CAAC;IAMD,KAAK,CAAC,MAAM,CAAC,MAAuB;QACnC,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAmB,cAAc,CAAC,CAAC;gBAC5E,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,SAAS,GAAuB,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACjE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YACpC,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAoB,SAAS,CAAC,CAAC;YAEjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACN,SAAS,EAAE,MAAM,CAAC,OAAO;wBACxB,CAAC,CAAC,qCAAqC,KAAK,iBAAiB,MAAM,CAAC,OAAO,GAAG;wBAC9E,CAAC,CAAC,qCAAqC,KAAK,GAAG;oBAChD,YAAY,EAAE,CAAC;oBACf,aAAa,EAAE,CAAC;iBAChB,CAAC;YACH,CAAC;YAED,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;CACD;AAKD,SAAS,YAAY,CAAC,OAA0B;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0C,CAAC;IAElE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY;YAAE,SAAS;QAG5B,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC;QAE/E,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,WAAW,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAKD,SAAS,eAAe,CAAC,SAA2B;IACnD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO;YACN,SAAS,EACR,wGAAwG;YACzG,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,CAAC;SAChB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,2CAA2C,CAAC;IAC3D,MAAM,WAAW,GAAG,+DAA+D,CAAC;IACpF,MAAM,IAAI,GAAG,SAAS;SACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACd,MAAM,OAAO,GAAG,yBAAyB,KAAK,CAAC,GAAG,EAAE,CAAC;QACrD,OAAO,OAAO,KAAK,CAAC,EAAE,QAAQ,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,OAAO,IAAI,CAAC;IAC/E,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,QAAQ,GACb,8GAA8G;QAC9G,0FAA0F,CAAC;IAE5F,OAAO;QACN,SAAS,EAAE,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,QAAQ,EAAE;QACtD,YAAY,EAAE,SAAS,CAAC,MAAM;QAC9B,aAAa,EAAE,SAAS,CAAC,MAAM;KAC/B,CAAC;AACH,CAAC;AAKD,SAAS,cAAc,CAAC,WAA8B;IACrD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEvE,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,cAAc,EAAE,CAAC;YACpB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,OAAO,aAAa,CAAC;AACtB,CAAC;AAKD,SAAS,qBAAqB,CAC7B,OAA2B,EAC3B,OAA0B,EAC1B,gBAAyB,EACzB,yBAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAGhC,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,OAAO,GACZ,OAAO,CAAC,MAAM,GAAG,CAAC;YACjB,CAAC,CAAC,6BAA6B,cAAc,CAAC,OAAO,CAAC,WAAW;YACjE,CAAC,CAAC,4BAA4B,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC;QAEnE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACxB,UAAU,IAAI,cAAc,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI;aACzB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;aACvB,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;aACzB,IAAI,EAAE,CAAC;QAGT,IAAI,gBAAgB,IAAI,SAAS,CAAC,MAAM,GAAG,uBAAuB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAClG,SAAS;gBACR,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC;oBAC/C,oCAAoC,gBAAgB,CAAC,IAAI,yCAAyC,CAAC;YACpG,mBAAmB,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1B,UAAU,IAAI,cAAc,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAClD,CAAC;IAGD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACxD,KAAK,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC;AACpE,CAAC;AAKD,SAAS,mBAAmB,CAC3B,KAAa,EACb,OAA0B,EAC1B,aAAsB,EACtB,WAAW,GAAG,oBAAoB;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,yBAAyB,GAAG,KAAK,CAAC;IAGtC,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,0BAA0B,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,+CAA+C,cAAc,CAAC,KAAK,CAAC,IAAI,UAAU,aAAa,OAAO,CAAC,MAAM,UAAU,CAAC;IACvI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAGnB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5F,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAA0E,EAAE,CAAC;IAElG,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY;YAAE,SAAS;QAG5B,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,cAAc,CAAC,WAAW,CAAC,GAAG,WAAW,EAAE,CAAC;YAE/C,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC1C,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBAAE,SAAS;gBAChC,eAAe,CAAC,IAAI,CAAC;oBACpB,OAAO;oBACP,GAAG;oBACH,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB;oBAClE,KAAK,EAAE,WAAW,CAAC,MAAM;iBACzB,CAAC,CAAC;YACJ,CAAC;YACD,SAAS;QACV,CAAC;QAGD,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrG,MAAM,aAAa,GAAG,2BAA2B,cAAc,CAAC,OAAO,CAAC,KAAK,gBAAgB,aAAa,CAAC;QAC3G,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAG1B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAChE,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY;gBAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAAE,SAAS;YAEhC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAG9E,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,cAAc,CAAC,WAAW,CAAC,GAAG,WAAW,EAAE,CAAC;gBAC/C,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpF,SAAS;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,MAAM,UAAU,GAAG,uBAAuB,cAAc,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,QAAQ,IAAI,CAAC;YAC5F,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAGvB,MAAM,aAAa,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;YAClD,KAAK,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,aAAa,EAAE,CAAC;gBACvD,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvD,MAAM,gBAAgB,GAAG,aAAa,GAAG,WAAW,GAAG,GAAG,CAAC;gBAE3D,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,yBAAyB,CAAC,CAAC;gBAE3G,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACxB,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;wBAChC,yBAAyB,GAAG,IAAI,CAAC;oBAClC,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAGD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACpD,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,KAAK,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,GAAG,IAAI,OAAO,MAAM,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;QAC9G,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,YAAY,gBAAgB,CAAC,IAAI,8CAA8C,CAAC,CAAC;IAE5F,OAAO;QACN,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,aAAa,EAAE,OAAO,CAAC,MAAM;KAC7B,CAAC;AACH,CAAC"}
|
package/dist/use-space.d.ts
CHANGED
package/dist/use-space.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-space.d.ts","sourceRoot":"","sources":["../src/use-space.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-space.d.ts","sourceRoot":"","sources":["../src/use-space.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,UAAU,cAAc;IACvB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAErB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACrF,QAAQ,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;CAaxB,CAAC;AAEX,qBAAa,YAAa,SAAQ,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;gBAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAK7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IAE3B,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CA4D9D;AAED,eAAO,MAAM,oBAAoB,GAAU,MAAM,YAAY,EAAE,QAAQ,cAAc,KAAG,OAAO,CAAC,cAAc,CAE7G,CAAC"}
|
package/dist/use-space.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { HfApiCall } from './hf-api-call.js';
|
|
3
3
|
import { spaceInfo } from '@huggingface/hub';
|
|
4
|
-
import './types/mcp-ui-server-shim.js';
|
|
5
4
|
import { createUIResource } from '@mcp-ui/server';
|
|
6
5
|
export const USE_SPACE_TOOL_CONFIG = {
|
|
7
6
|
name: 'use_space',
|
package/dist/use-space.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-space.js","sourceRoot":"","sources":["../src/use-space.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAE9D,OAAO
|
|
1
|
+
{"version":3,"file":"use-space.js","sourceRoot":"","sources":["../src/use-space.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llmindset/hf-mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.33",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@huggingface/hub": "^2.1.0",
|
|
27
|
-
"@mcp-ui/server": "^5.
|
|
27
|
+
"@mcp-ui/server": "^5.12.0",
|
|
28
28
|
"turndown": "^7.2.0",
|
|
29
29
|
"zod": "^3.24.4"
|
|
30
30
|
},
|
|
@@ -10,23 +10,34 @@ import type { ToolResult } from '../types/tool-result.js';
|
|
|
10
10
|
export const DOCS_SEMANTIC_SEARCH_CONFIG = {
|
|
11
11
|
name: 'hf_doc_search',
|
|
12
12
|
description:
|
|
13
|
-
'Search
|
|
14
|
-
'
|
|
13
|
+
'Search and Discover Hugging Face Product and Library documentation. Use an empty query to discover structure and navigation hints and tips. ' +
|
|
14
|
+
'You MUST consult this tool for the most up-to-date information when using Hugging Face libraries. Combine with the Product filter to focus results.',
|
|
15
15
|
schema: z.object({
|
|
16
16
|
query: z
|
|
17
17
|
.string()
|
|
18
|
-
.min(3, 'Supply at least one search term')
|
|
19
18
|
.max(200, 'Query too long')
|
|
20
|
-
.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
.superRefine((value, ctx) => {
|
|
20
|
+
const trimmed = value.trim();
|
|
21
|
+
if (trimmed.length === 0) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (trimmed.length < 3) {
|
|
25
|
+
ctx.addIssue({
|
|
26
|
+
code: z.ZodIssueCode.too_small,
|
|
27
|
+
type: 'string',
|
|
28
|
+
minimum: 3,
|
|
29
|
+
inclusive: true,
|
|
30
|
+
message: 'Supply at least one search term',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
})
|
|
24
34
|
.describe(
|
|
25
|
-
'
|
|
35
|
+
'Start with an empty query for structure, endpoint discovery and navigation tips. Use semantic queries for targetted searches.'
|
|
26
36
|
),
|
|
37
|
+
product: z.string().optional().describe('Filter by Product. Supply when known for focused results'),
|
|
27
38
|
}),
|
|
28
39
|
annotations: {
|
|
29
|
-
title: 'Hugging Face Documentation
|
|
40
|
+
title: 'Hugging Face Documentation Search',
|
|
30
41
|
destructiveHint: false,
|
|
31
42
|
readOnlyHint: true,
|
|
32
43
|
openWorldHint: true,
|
|
@@ -49,9 +60,16 @@ interface DocSearchApiParams {
|
|
|
49
60
|
product?: string;
|
|
50
61
|
}
|
|
51
62
|
|
|
63
|
+
interface DocsIndexEntry {
|
|
64
|
+
id: string;
|
|
65
|
+
url: string;
|
|
66
|
+
category: string;
|
|
67
|
+
}
|
|
68
|
+
|
|
52
69
|
// Token budget defaults
|
|
53
70
|
const DEFAULT_TOKEN_BUDGET = 12500;
|
|
54
71
|
const TRUNCATE_EXCERPT_LENGTH = 400; // chars for truncated excerpts
|
|
72
|
+
const DOCS_INDEX_URL = 'https://huggingface.co/api/docs';
|
|
55
73
|
|
|
56
74
|
/**
|
|
57
75
|
* Use the Hugging Face Semantic Document Search API
|
|
@@ -75,13 +93,13 @@ export class DocSearchTool extends HfApiCall<DocSearchApiParams, DocSearchResult
|
|
|
75
93
|
*/
|
|
76
94
|
async search(params: DocSearchParams): Promise<ToolResult> {
|
|
77
95
|
try {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
96
|
+
const query = params.query?.trim() ?? '';
|
|
97
|
+
if (query.length === 0) {
|
|
98
|
+
const docsIndex = await this.fetchFromApi<DocsIndexEntry[]>(DOCS_INDEX_URL);
|
|
99
|
+
return formatDocsIndex(docsIndex);
|
|
100
|
+
}
|
|
83
101
|
|
|
84
|
-
const apiParams: DocSearchApiParams = { q:
|
|
102
|
+
const apiParams: DocSearchApiParams = { q: query.toLowerCase() };
|
|
85
103
|
if (params.product) {
|
|
86
104
|
apiParams.product = params.product;
|
|
87
105
|
}
|
|
@@ -91,14 +109,14 @@ export class DocSearchTool extends HfApiCall<DocSearchApiParams, DocSearchResult
|
|
|
91
109
|
if (results.length === 0) {
|
|
92
110
|
return {
|
|
93
111
|
formatted: params.product
|
|
94
|
-
? `No documentation found for query '${
|
|
95
|
-
: `No documentation found for query '${
|
|
112
|
+
? `No documentation found for query '${query}' in product '${params.product}'`
|
|
113
|
+
: `No documentation found for query '${query}'`,
|
|
96
114
|
totalResults: 0,
|
|
97
|
-
resultsShared: 0
|
|
115
|
+
resultsShared: 0,
|
|
98
116
|
};
|
|
99
117
|
}
|
|
100
118
|
|
|
101
|
-
return formatSearchResults(
|
|
119
|
+
return formatSearchResults(query, results, params.product, this.tokenBudget);
|
|
102
120
|
} catch (error) {
|
|
103
121
|
if (error instanceof Error) {
|
|
104
122
|
throw new Error(`Failed to search documentation: ${error.message}`);
|
|
@@ -138,6 +156,39 @@ function groupResults(results: DocSearchResult[]): Map<string, Map<string, DocSe
|
|
|
138
156
|
return grouped;
|
|
139
157
|
}
|
|
140
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Format the documentation root index response for empty queries
|
|
161
|
+
*/
|
|
162
|
+
function formatDocsIndex(docsIndex: DocsIndexEntry[]): ToolResult {
|
|
163
|
+
if (!docsIndex.length) {
|
|
164
|
+
return {
|
|
165
|
+
formatted:
|
|
166
|
+
'No documentation categories are currently available. Try running the search again with specific terms.',
|
|
167
|
+
totalResults: 0,
|
|
168
|
+
resultsShared: 0,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const header = '### Hugging Face Documentation Products\n';
|
|
173
|
+
const tableHeader = '| Product | Category | Documentation |\n| --- | --- | --- |\n';
|
|
174
|
+
const rows = docsIndex
|
|
175
|
+
.map((entry) => {
|
|
176
|
+
const docsUrl = `https://huggingface.co${entry.url}`;
|
|
177
|
+
return `| \`${entry.id}\` | ${escapeMarkdown(entry.category)} | ${docsUrl} |`;
|
|
178
|
+
})
|
|
179
|
+
.join('\n');
|
|
180
|
+
|
|
181
|
+
const llmsNote =
|
|
182
|
+
'\n\nEach documentation root exposes an `llms.txt` endpoint (e.g. add `/llms.txt` to the documentation URL). ' +
|
|
183
|
+
'Use semantic search when you have a specific question for faster, more targeted results.';
|
|
184
|
+
|
|
185
|
+
return {
|
|
186
|
+
formatted: `${header}${tableHeader}${rows}${llmsNote}`,
|
|
187
|
+
totalResults: docsIndex.length,
|
|
188
|
+
resultsShared: docsIndex.length,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
|
|
141
192
|
/**
|
|
142
193
|
* Group page results by section (heading2)
|
|
143
194
|
*/
|
|
@@ -323,6 +374,6 @@ function formatSearchResults(
|
|
|
323
374
|
return {
|
|
324
375
|
formatted: lines.join('\n'),
|
|
325
376
|
totalResults: results.length,
|
|
326
|
-
resultsShared: results.length
|
|
377
|
+
resultsShared: results.length,
|
|
327
378
|
};
|
|
328
379
|
}
|
package/src/use-space.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { z } from 'zod';
|
|
|
2
2
|
import { HfApiCall } from './hf-api-call.js';
|
|
3
3
|
import { spaceInfo, type SpaceEntry } from '@huggingface/hub';
|
|
4
4
|
import type { ToolResult } from './types/tool-result.js';
|
|
5
|
-
import './types/mcp-ui-server-shim.js';
|
|
6
5
|
import { createUIResource } from '@mcp-ui/server';
|
|
7
6
|
// Define the return type that matches MCP server expectations
|
|
8
7
|
interface UseSpaceResult {
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
declare module '@mcp-ui/server' {
|
|
2
|
-
interface HTMLTextContent {
|
|
3
|
-
uri: string;
|
|
4
|
-
mimeType: string;
|
|
5
|
-
text: string;
|
|
6
|
-
}
|
|
7
|
-
interface Base64BlobContent {
|
|
8
|
-
uri: string;
|
|
9
|
-
mimeType: string;
|
|
10
|
-
blob: string;
|
|
11
|
-
}
|
|
12
|
-
interface UIResource {
|
|
13
|
-
type: 'resource';
|
|
14
|
-
resource: HTMLTextContent | Base64BlobContent;
|
|
15
|
-
}
|
|
16
|
-
interface CreateUIResourceOptions {
|
|
17
|
-
uri: string;
|
|
18
|
-
encoding: 'text' | 'blob';
|
|
19
|
-
content: {
|
|
20
|
-
type: 'rawHtml';
|
|
21
|
-
htmlString: string;
|
|
22
|
-
} | {
|
|
23
|
-
type: 'externalUrl';
|
|
24
|
-
iframeUrl: string;
|
|
25
|
-
} | {
|
|
26
|
-
type: 'remoteDom';
|
|
27
|
-
script: string;
|
|
28
|
-
framework?: string;
|
|
29
|
-
};
|
|
30
|
-
uiMetadata?: {
|
|
31
|
-
'preferred-frame-size'?: [string, string];
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
function createUIResource(options: CreateUIResourceOptions): UIResource;
|
|
35
|
-
}
|
|
36
|
-
export {};
|
|
37
|
-
//# sourceMappingURL=mcp-ui-server-shim.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-ui-server-shim.d.ts","sourceRoot":"","sources":["../../src/types/mcp-ui-server-shim.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,gBAAgB,CAAC;IAC/B,UAAiB,eAAe;QAC/B,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACb;IAED,UAAiB,iBAAiB;QACjC,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACb;IAED,UAAiB,UAAU;QAC1B,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE,eAAe,GAAG,iBAAiB,CAAC;KAC9C;IAED,UAAiB,uBAAuB;QACvC,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;QAC1B,OAAO,EACJ;YAAE,IAAI,EAAE,SAAS,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,GACvC;YAAE,IAAI,EAAE,aAAa,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,GAC1C;YAAE,IAAI,EAAE,WAAW,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7D,UAAU,CAAC,EAAE;YACZ,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC1C,CAAC;KACF;IAED,SAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,UAAU,CAAC;CAC/E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-ui-server-shim.js","sourceRoot":"","sources":["../../src/types/mcp-ui-server-shim.ts"],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// Ambient module shim for @mcp-ui/server under NodeNext resolution
|
|
2
|
-
// The upstream package's d.ts re-export fails to resolve with NodeNext.
|
|
3
|
-
// This keeps our build unblocked until the package fixes its types.
|
|
4
|
-
declare module '@mcp-ui/server' {
|
|
5
|
-
export interface HTMLTextContent {
|
|
6
|
-
uri: string;
|
|
7
|
-
mimeType: string;
|
|
8
|
-
text: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface Base64BlobContent {
|
|
12
|
-
uri: string;
|
|
13
|
-
mimeType: string;
|
|
14
|
-
blob: string; // base64-encoded
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface UIResource {
|
|
18
|
-
type: 'resource';
|
|
19
|
-
resource: HTMLTextContent | Base64BlobContent;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface CreateUIResourceOptions {
|
|
23
|
-
uri: string; // must start with 'ui://'
|
|
24
|
-
encoding: 'text' | 'blob';
|
|
25
|
-
content:
|
|
26
|
-
| { type: 'rawHtml'; htmlString: string }
|
|
27
|
-
| { type: 'externalUrl'; iframeUrl: string }
|
|
28
|
-
| { type: 'remoteDom'; script: string; framework?: string };
|
|
29
|
-
uiMetadata?: {
|
|
30
|
-
'preferred-frame-size'?: [string, string]; // [width, height]
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function createUIResource(options: CreateUIResourceOptions): UIResource;
|
|
35
|
-
}
|