@llmindset/hf-mcp 0.2.41 → 0.2.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/space/commands/invoke.d.ts +6 -0
  6. package/dist/space/commands/invoke.d.ts.map +1 -0
  7. package/dist/space/commands/invoke.js +236 -0
  8. package/dist/space/commands/invoke.js.map +1 -0
  9. package/dist/space/commands/view-parameters.d.ts +3 -0
  10. package/dist/space/commands/view-parameters.d.ts.map +1 -0
  11. package/dist/space/commands/view-parameters.js +144 -0
  12. package/dist/space/commands/view-parameters.js.map +1 -0
  13. package/dist/space/space-tool.d.ts +35 -0
  14. package/dist/space/space-tool.d.ts.map +1 -0
  15. package/dist/space/space-tool.js +198 -0
  16. package/dist/space/space-tool.js.map +1 -0
  17. package/dist/space/types.d.ts +74 -0
  18. package/dist/space/types.d.ts.map +1 -0
  19. package/dist/space/types.js +24 -0
  20. package/dist/space/types.js.map +1 -0
  21. package/dist/space/utils/parameter-formatter.d.ts +5 -0
  22. package/dist/space/utils/parameter-formatter.d.ts.map +1 -0
  23. package/dist/space/utils/parameter-formatter.js +132 -0
  24. package/dist/space/utils/parameter-formatter.js.map +1 -0
  25. package/dist/space/utils/result-formatter.d.ts +4 -0
  26. package/dist/space/utils/result-formatter.d.ts.map +1 -0
  27. package/dist/space/utils/result-formatter.js +146 -0
  28. package/dist/space/utils/result-formatter.js.map +1 -0
  29. package/dist/space/utils/schema-validator.d.ts +9 -0
  30. package/dist/space/utils/schema-validator.d.ts.map +1 -0
  31. package/dist/space/utils/schema-validator.js +145 -0
  32. package/dist/space/utils/schema-validator.js.map +1 -0
  33. package/dist/space-search.d.ts.map +1 -1
  34. package/dist/space-search.js +5 -4
  35. package/dist/space-search.js.map +1 -1
  36. package/dist/tool-ids.d.ts +4 -2
  37. package/dist/tool-ids.d.ts.map +1 -1
  38. package/dist/tool-ids.js +4 -1
  39. package/dist/tool-ids.js.map +1 -1
  40. package/package.json +2 -1
  41. package/src/index.ts +1 -0
  42. package/src/space/commands/invoke.ts +335 -0
  43. package/src/space/commands/view-parameters.ts +204 -0
  44. package/src/space/space-tool.ts +252 -0
  45. package/src/space/types.ts +127 -0
  46. package/src/space/utils/parameter-formatter.ts +200 -0
  47. package/src/space/utils/result-formatter.ts +226 -0
  48. package/src/space/utils/schema-validator.ts +232 -0
  49. package/src/space-search.ts +5 -4
  50. package/src/tool-ids.ts +4 -0
@@ -0,0 +1,145 @@
1
+ import { isFileDataProperty } from '../types.js';
2
+ export function analyzeSchemaComplexity(tool) {
3
+ const result = {
4
+ isSimple: true,
5
+ parameters: [],
6
+ toolName: tool.name,
7
+ toolDescription: tool.description,
8
+ };
9
+ const inputSchema = tool.inputSchema;
10
+ if (!inputSchema || !inputSchema.properties) {
11
+ return result;
12
+ }
13
+ const properties = inputSchema.properties;
14
+ const required = inputSchema.required || [];
15
+ for (const [paramName, prop] of Object.entries(properties)) {
16
+ const paramInfo = analyzeProperty(paramName, prop, required.includes(paramName));
17
+ if (paramInfo.complexType) {
18
+ result.isSimple = false;
19
+ result.reason = `Parameter "${paramName}" has complex type: ${paramInfo.complexType}`;
20
+ return result;
21
+ }
22
+ result.parameters.push(paramInfo);
23
+ }
24
+ return result;
25
+ }
26
+ function analyzeProperty(name, prop, isRequired) {
27
+ const paramInfo = {
28
+ name,
29
+ type: prop.type || 'unknown',
30
+ description: prop.description,
31
+ required: isRequired,
32
+ default: prop.default,
33
+ enum: prop.enum,
34
+ };
35
+ if (isFileDataProperty(prop)) {
36
+ paramInfo.type = 'string (file URL)';
37
+ paramInfo.isFileData = true;
38
+ return paramInfo;
39
+ }
40
+ if (prop.enum && Array.isArray(prop.enum) && prop.enum.length > 0) {
41
+ paramInfo.type = `enum (${prop.enum.length} values)`;
42
+ return paramInfo;
43
+ }
44
+ if (prop.type === 'object') {
45
+ if (prop.properties) {
46
+ const nestedProps = Object.values(prop.properties);
47
+ const hasComplexNested = nestedProps.some((nested) => nested.type === 'object' || nested.type === 'array');
48
+ if (hasComplexNested) {
49
+ paramInfo.complexType = 'deeply nested object (2+ levels)';
50
+ }
51
+ else {
52
+ paramInfo.type = 'object (shallow)';
53
+ }
54
+ }
55
+ else {
56
+ paramInfo.complexType = 'object without defined properties';
57
+ }
58
+ return paramInfo;
59
+ }
60
+ if (prop.type === 'array') {
61
+ if (prop.items) {
62
+ const itemType = prop.items.type;
63
+ if (itemType === 'object') {
64
+ paramInfo.complexType = 'array of objects';
65
+ }
66
+ else if (itemType === 'array') {
67
+ paramInfo.complexType = 'nested arrays';
68
+ }
69
+ else {
70
+ paramInfo.type = `array<${itemType || 'unknown'}>`;
71
+ }
72
+ }
73
+ else {
74
+ paramInfo.type = 'array<any>';
75
+ }
76
+ return paramInfo;
77
+ }
78
+ if (['string', 'number', 'integer', 'boolean'].includes(prop.type || '')) {
79
+ return paramInfo;
80
+ }
81
+ if (!prop.type) {
82
+ paramInfo.complexType = 'unknown type';
83
+ }
84
+ return paramInfo;
85
+ }
86
+ export function validateParameters(parameters, schemaResult) {
87
+ const errors = [];
88
+ const requiredParams = schemaResult.parameters.filter((p) => p.required);
89
+ for (const param of requiredParams) {
90
+ if (!(param.name in parameters) || parameters[param.name] === undefined) {
91
+ errors.push(`Missing required parameter: "${param.name}"`);
92
+ }
93
+ }
94
+ for (const [key, value] of Object.entries(parameters)) {
95
+ const paramInfo = schemaResult.parameters.find((p) => p.name === key);
96
+ if (!paramInfo) {
97
+ continue;
98
+ }
99
+ if (value !== null && value !== undefined) {
100
+ if (!validateType(value, paramInfo)) {
101
+ errors.push(`Parameter "${key}" should be type ${paramInfo.type}, got ${typeof value}`);
102
+ }
103
+ }
104
+ }
105
+ return {
106
+ valid: errors.length === 0,
107
+ errors,
108
+ };
109
+ }
110
+ function validateType(value, paramInfo) {
111
+ if (paramInfo.isFileData) {
112
+ return typeof value === 'string';
113
+ }
114
+ if (paramInfo.enum && Array.isArray(paramInfo.enum)) {
115
+ return paramInfo.enum.includes(value);
116
+ }
117
+ const baseType = paramInfo.type.split(' ')[0]?.split('<')[0];
118
+ switch (baseType) {
119
+ case 'string':
120
+ return typeof value === 'string';
121
+ case 'number':
122
+ case 'integer':
123
+ return typeof value === 'number';
124
+ case 'boolean':
125
+ return typeof value === 'boolean';
126
+ case 'array':
127
+ return Array.isArray(value);
128
+ case 'object':
129
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
130
+ case 'enum':
131
+ return true;
132
+ default:
133
+ return true;
134
+ }
135
+ }
136
+ export function applyDefaults(parameters, schemaResult) {
137
+ const result = { ...parameters };
138
+ for (const param of schemaResult.parameters) {
139
+ if (!param.required && !(param.name in result) && param.default !== undefined) {
140
+ result[param.name] = param.default;
141
+ }
142
+ }
143
+ return result;
144
+ }
145
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../../src/space/utils/schema-validator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"space-search.d.ts","sourceRoot":"","sources":["../src/space-search.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,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,IAAI,CAAC;CACpB;AAGD,UAAU,iBAAiB;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;CAe9B,CAAC;AAKX,qBAAa,eAAgB,SAAQ,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;gBAMzE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,SAAsD;IAUpF,MAAM,CACX,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAA0B,EACjC,GAAG,GAAE,OAAe,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B1D,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,EAAE,WAAW,GAAE,MAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CA4BxG;AAGD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAAqC,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAO9E,eAAO,MAAM,mBAAmB,GAC/B,OAAO,MAAM,EACb,SAAS,iBAAiB,EAAE,EAC5B,YAAY,MAAM,EAClB,cAAa,MAAU,KACrB,UA0CF,CAAC"}
1
+ {"version":3,"file":"space-search.d.ts","sourceRoot":"","sources":["../src/space-search.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,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,IAAI,CAAC;CACpB;AAGD,UAAU,iBAAiB;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;CAgB9B,CAAC;AAKX,qBAAa,eAAgB,SAAQ,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;gBAMzE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,SAAsD;IAUpF,MAAM,CACX,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAA0B,EACjC,GAAG,GAAE,OAAe,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B1D,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,EAAE,WAAW,GAAE,MAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CA4BxG;AAGD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAAqC,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAO9E,eAAO,MAAM,mBAAmB,GAC/B,OAAO,MAAM,EACb,SAAS,iBAAiB,EAAE,EAC5B,YAAY,MAAM,EAClB,cAAa,MAAU,KACrB,UA0CF,CAAC"}
@@ -4,7 +4,8 @@ import { escapeMarkdown } from './utilities.js';
4
4
  const RESULTS_TO_RETURN = 10;
5
5
  export const SEMANTIC_SEARCH_TOOL_CONFIG = {
6
6
  name: 'space_search',
7
- description: 'Find Hugging Face Spaces using semantic search. ' + 'Include links to the Space when presenting the results.',
7
+ description: 'Find Hugging Face Spaces using semantic search. IMPORTANT Only MCP Servers can be used with the dynamic_space tool' +
8
+ 'Include links to the Space when presenting the results.',
8
9
  schema: z.object({
9
10
  query: z.string().min(1, 'Query is required').max(100, 'Query too long').describe('Semantic Search Query'),
10
11
  limit: z.number().optional().default(RESULTS_TO_RETURN).describe('Number of results to return'),
@@ -52,7 +53,7 @@ export class SpaceSearchTool extends HfApiCall {
52
53
  return {
53
54
  formatted: `No matching Hugging Face Spaces found referencing ${filter}.`,
54
55
  totalResults: 0,
55
- resultsShared: 0
56
+ resultsShared: 0,
56
57
  };
57
58
  }
58
59
  return formatSearchResults(filter, results, results.length, headerLevel);
@@ -71,7 +72,7 @@ export const formatSearchResults = (query, results, totalCount, headerLevel = 1)
71
72
  return {
72
73
  formatted: `No matching Hugging Face Spaces found for the query '${query}'. Try a different query.`,
73
74
  totalResults: 0,
74
- resultsShared: 0
75
+ resultsShared: 0,
75
76
  };
76
77
  }
77
78
  const showingText = results.length < totalCount
@@ -101,7 +102,7 @@ export const formatSearchResults = (query, results, totalCount, headerLevel = 1)
101
102
  return {
102
103
  formatted: markdown,
103
104
  totalResults: totalCount,
104
- resultsShared: results.length
105
+ resultsShared: results.length,
105
106
  };
106
107
  };
107
108
  //# sourceMappingURL=space-search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"space-search.js","sourceRoot":"","sources":["../src/space-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"space-search.js","sourceRoot":"","sources":["../src/space-search.ts"],"names":[],"mappings":"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"}
@@ -16,14 +16,16 @@ export declare const PAPER_SUMMARY_PROMPT_ID: "Paper Summary";
16
16
  export declare const MODEL_DETAIL_PROMPT_ID: string;
17
17
  export declare const DATASET_DETAIL_PROMPT_ID: string;
18
18
  export declare const HF_JOBS_TOOL_ID: "hf_jobs";
19
- export declare const ALL_BUILTIN_TOOL_IDS: readonly ["space_search", "model_search", "model_details", "paper_search", "dataset_search", "dataset_details", "hub_repo_details", "duplicate_space", "space_info", "space_files", "hf_doc_search", "hf_doc_fetch", "use_space", "hf_jobs"];
19
+ export declare const DYNAMIC_SPACE_TOOL_ID: "dynamic_space";
20
+ export declare const ALL_BUILTIN_TOOL_IDS: readonly ["space_search", "model_search", "model_details", "paper_search", "dataset_search", "dataset_details", "hub_repo_details", "duplicate_space", "space_info", "space_files", "hf_doc_search", "hf_doc_fetch", "use_space", "hf_jobs", "dynamic_space"];
20
21
  export declare const TOOL_ID_GROUPS: {
21
22
  readonly search: readonly ["space_search", "model_search", "dataset_search", "paper_search", "hf_doc_search"];
22
23
  readonly spaces: readonly ["space_search", "duplicate_space", "space_info", "space_files", "use_space"];
23
24
  readonly detail: readonly ["model_details", "dataset_details", "hub_repo_details"];
24
25
  readonly docs: readonly ["hf_doc_search", "hf_doc_fetch"];
25
26
  readonly hf_api: readonly ["space_search", "model_search", "dataset_search", "paper_search", "hub_repo_details", "hf_doc_search"];
26
- readonly all: readonly ["space_search", "model_search", "model_details", "paper_search", "dataset_search", "dataset_details", "hub_repo_details", "duplicate_space", "space_info", "space_files", "hf_doc_search", "hf_doc_fetch", "use_space", "hf_jobs"];
27
+ readonly dynamic_space: readonly ["dynamic_space"];
28
+ readonly all: readonly ["space_search", "model_search", "model_details", "paper_search", "dataset_search", "dataset_details", "hub_repo_details", "duplicate_space", "space_info", "space_files", "hf_doc_search", "hf_doc_fetch", "use_space", "hf_jobs", "dynamic_space"];
27
29
  };
28
30
  export type BuiltinToolId = (typeof ALL_BUILTIN_TOOL_IDS)[number];
29
31
  export declare function isValidBuiltinToolId(toolId: string): toolId is BuiltinToolId;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-ids.d.ts","sourceRoot":"","sources":["../src/tool-ids.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,oBAAoB,gBAAmC,CAAC;AACrE,eAAO,MAAM,oBAAoB,gBAAgC,CAAC;AAClE,eAAO,MAAM,oBAAoB,iBAAgC,CAAC;AAClE,eAAO,MAAM,oBAAoB,gBAAgC,CAAC;AAClE,eAAO,MAAM,sBAAsB,kBAAkC,CAAC;AACtE,eAAO,MAAM,sBAAsB,mBAAkC,CAAC;AACtE,eAAO,MAAM,mBAAmB,oBAA+B,CAAC;AAChE,eAAO,MAAM,uBAAuB,mBAAmC,CAAC;AACxE,eAAO,MAAM,kBAAkB,cAA8B,CAAC;AAC9D,eAAO,MAAM,mBAAmB,eAA+B,CAAC;AAChE,eAAO,MAAM,iBAAiB,aAA6B,CAAC;AAC5D,eAAO,MAAM,4BAA4B,iBAAmC,CAAC;AAC7E,eAAO,MAAM,iBAAiB,gBAAwB,CAAC;AACvD,eAAO,MAAM,sBAAsB,gBAAkC,CAAC;AACtE,eAAO,MAAM,uBAAuB,iBAAmC,CAAC;AACxE,eAAO,MAAM,sBAAsB,QAAkC,CAAC;AACtE,eAAO,MAAM,wBAAwB,QAAoC,CAAC;AAC1E,eAAO,MAAM,eAAe,WAA2B,CAAC;AAGxD,eAAO,MAAM,oBAAoB,8OAevB,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;CA2BjB,CAAC;AAGX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGlE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,aAAa,CAE5E"}
1
+ {"version":3,"file":"tool-ids.d.ts","sourceRoot":"","sources":["../src/tool-ids.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,oBAAoB,gBAAmC,CAAC;AACrE,eAAO,MAAM,oBAAoB,gBAAgC,CAAC;AAClE,eAAO,MAAM,oBAAoB,iBAAgC,CAAC;AAClE,eAAO,MAAM,oBAAoB,gBAAgC,CAAC;AAClE,eAAO,MAAM,sBAAsB,kBAAkC,CAAC;AACtE,eAAO,MAAM,sBAAsB,mBAAkC,CAAC;AACtE,eAAO,MAAM,mBAAmB,oBAA+B,CAAC;AAChE,eAAO,MAAM,uBAAuB,mBAAmC,CAAC;AACxE,eAAO,MAAM,kBAAkB,cAA8B,CAAC;AAC9D,eAAO,MAAM,mBAAmB,eAA+B,CAAC;AAChE,eAAO,MAAM,iBAAiB,aAA6B,CAAC;AAC5D,eAAO,MAAM,4BAA4B,iBAAmC,CAAC;AAC7E,eAAO,MAAM,iBAAiB,gBAAwB,CAAC;AACvD,eAAO,MAAM,sBAAsB,gBAAkC,CAAC;AACtE,eAAO,MAAM,uBAAuB,iBAAmC,CAAC;AACxE,eAAO,MAAM,sBAAsB,QAAkC,CAAC;AACtE,eAAO,MAAM,wBAAwB,QAAoC,CAAC;AAC1E,eAAO,MAAM,eAAe,WAA2B,CAAC;AACxD,eAAO,MAAM,qBAAqB,iBAAiC,CAAC;AAGpE,eAAO,MAAM,oBAAoB,+PAgBvB,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;CA4BjB,CAAC;AAGX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGlE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,aAAa,CAE5E"}
package/dist/tool-ids.js CHANGED
@@ -1,4 +1,4 @@
1
- import { SEMANTIC_SEARCH_TOOL_CONFIG, MODEL_SEARCH_TOOL_CONFIG, MODEL_DETAIL_TOOL_CONFIG, MODEL_DETAIL_PROMPT_CONFIG, PAPER_SEARCH_TOOL_CONFIG, DATASET_SEARCH_TOOL_CONFIG, DATASET_DETAIL_TOOL_CONFIG, DATASET_DETAIL_PROMPT_CONFIG, HUB_INSPECT_TOOL_CONFIG, DUPLICATE_SPACE_TOOL_CONFIG, SPACE_INFO_TOOL_CONFIG, SPACE_FILES_TOOL_CONFIG, USER_SUMMARY_PROMPT_CONFIG, PAPER_SUMMARY_PROMPT_CONFIG, DOCS_SEMANTIC_SEARCH_CONFIG, DOC_FETCH_CONFIG, USE_SPACE_TOOL_CONFIG, HF_JOBS_TOOL_CONFIG, } from './index.js';
1
+ import { SEMANTIC_SEARCH_TOOL_CONFIG, MODEL_SEARCH_TOOL_CONFIG, MODEL_DETAIL_TOOL_CONFIG, MODEL_DETAIL_PROMPT_CONFIG, PAPER_SEARCH_TOOL_CONFIG, DATASET_SEARCH_TOOL_CONFIG, DATASET_DETAIL_TOOL_CONFIG, DATASET_DETAIL_PROMPT_CONFIG, HUB_INSPECT_TOOL_CONFIG, DUPLICATE_SPACE_TOOL_CONFIG, SPACE_INFO_TOOL_CONFIG, SPACE_FILES_TOOL_CONFIG, USER_SUMMARY_PROMPT_CONFIG, PAPER_SUMMARY_PROMPT_CONFIG, DOCS_SEMANTIC_SEARCH_CONFIG, DOC_FETCH_CONFIG, USE_SPACE_TOOL_CONFIG, HF_JOBS_TOOL_CONFIG, DYNAMIC_SPACE_TOOL_CONFIG, } from './index.js';
2
2
  export const SPACE_SEARCH_TOOL_ID = SEMANTIC_SEARCH_TOOL_CONFIG.name;
3
3
  export const MODEL_SEARCH_TOOL_ID = MODEL_SEARCH_TOOL_CONFIG.name;
4
4
  export const MODEL_DETAIL_TOOL_ID = MODEL_DETAIL_TOOL_CONFIG.name;
@@ -17,6 +17,7 @@ export const PAPER_SUMMARY_PROMPT_ID = PAPER_SUMMARY_PROMPT_CONFIG.name;
17
17
  export const MODEL_DETAIL_PROMPT_ID = MODEL_DETAIL_PROMPT_CONFIG.name;
18
18
  export const DATASET_DETAIL_PROMPT_ID = DATASET_DETAIL_PROMPT_CONFIG.name;
19
19
  export const HF_JOBS_TOOL_ID = HF_JOBS_TOOL_CONFIG.name;
20
+ export const DYNAMIC_SPACE_TOOL_ID = DYNAMIC_SPACE_TOOL_CONFIG.name;
20
21
  export const ALL_BUILTIN_TOOL_IDS = [
21
22
  SPACE_SEARCH_TOOL_ID,
22
23
  MODEL_SEARCH_TOOL_ID,
@@ -32,6 +33,7 @@ export const ALL_BUILTIN_TOOL_IDS = [
32
33
  DOC_FETCH_TOOL_ID,
33
34
  USE_SPACE_TOOL_ID,
34
35
  HF_JOBS_TOOL_ID,
36
+ DYNAMIC_SPACE_TOOL_ID,
35
37
  ];
36
38
  export const TOOL_ID_GROUPS = {
37
39
  search: [
@@ -58,6 +60,7 @@ export const TOOL_ID_GROUPS = {
58
60
  HUB_INSPECT_TOOL_ID,
59
61
  DOCS_SEMANTIC_SEARCH_TOOL_ID,
60
62
  ],
63
+ dynamic_space: [DYNAMIC_SPACE_TOOL_ID],
61
64
  all: [...ALL_BUILTIN_TOOL_IDS],
62
65
  };
63
66
  export function isValidBuiltinToolId(toolId) {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-ids.js","sourceRoot":"","sources":["../src/tool-ids.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-ids.js","sourceRoot":"","sources":["../src/tool-ids.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,GACzB,MAAM,YAAY,CAAC;AAGpB,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,IAAI,CAAC;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAC5D,MAAM,CAAC,MAAM,4BAA4B,GAAG,2BAA2B,CAAC,IAAI,CAAC;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,4BAA4B,CAAC,IAAI,CAAC;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC;AACxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC,IAAI,CAAC;AAGpE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IACnC,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,uBAAuB;IACvB,kBAAkB;IAClB,mBAAmB;IACnB,4BAA4B;IAC5B,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,qBAAqB;CACZ,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,MAAM,EAAE;QACP,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,oBAAoB;QACpB,4BAA4B;KACnB;IACV,MAAM,EAAE;QACP,oBAAoB;QACpB,uBAAuB;QACvB,kBAAkB;QAClB,mBAAmB;QACnB,iBAAiB;KACR;IACV,MAAM,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,mBAAmB,CAAU;IACpF,IAAI,EAAE,CAAC,4BAA4B,EAAE,iBAAiB,CAAU;IAChE,MAAM,EAAE;QACP,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,oBAAoB;QACpB,mBAAmB;QACnB,4BAA4B;KAEnB;IACV,aAAa,EAAE,CAAC,qBAAqB,CAAU;IAC/C,GAAG,EAAE,CAAC,GAAG,oBAAoB,CAAU;CAC9B,CAAC;AAMX,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAClD,OAAQ,oBAA0C,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llmindset/hf-mcp",
3
- "version": "0.2.41",
3
+ "version": "0.2.43",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -25,6 +25,7 @@
25
25
  "dependencies": {
26
26
  "@huggingface/hub": "^2.6.12",
27
27
  "@mcp-ui/server": "^5.12.0",
28
+ "@modelcontextprotocol/sdk": "^1.20.0",
28
29
  "shell-quote": "^1.8.3",
29
30
  "turndown": "^7.2.0",
30
31
  "zod": "^3.24.4"
package/src/index.ts CHANGED
@@ -20,6 +20,7 @@ export * from './docs-search/doc-fetch.js';
20
20
  export * from './readme-utils.js';
21
21
  export * from './use-space.js';
22
22
  export * from './jobs/jobs-tool.js';
23
+ export * from './space/space-tool.js';
23
24
 
24
25
  // Export shared types
25
26
  export * from './types/tool-result.js';
@@ -0,0 +1,335 @@
1
+ import type { ToolResult } from '../../types/tool-result.js';
2
+ import type { InvokeResult } from '../types.js';
3
+ import type { Tool, ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
4
+ import type { RequestHandlerExtra, RequestOptions } from '@modelcontextprotocol/sdk/shared/protocol.js';
5
+ import { CallToolResultSchema } from '@modelcontextprotocol/sdk/types.js';
6
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
7
+ import { SSEClientTransport, type SSEClientTransportOptions } from '@modelcontextprotocol/sdk/client/sse.js';
8
+ import { analyzeSchemaComplexity, validateParameters, applyDefaults } from '../utils/schema-validator.js';
9
+ import { formatComplexSchemaError, formatValidationError } from '../utils/parameter-formatter.js';
10
+
11
+ /**
12
+ * Invokes a Gradio space with provided parameters
13
+ * Returns raw MCP content blocks for compatibility with proxied gr_* tools
14
+ */
15
+ export async function invokeSpace(
16
+ spaceName: string,
17
+ parametersJson: string,
18
+ hfToken?: string,
19
+ extra?: RequestHandlerExtra<ServerRequest, ServerNotification>
20
+ ): Promise<InvokeResult | ToolResult> {
21
+ try {
22
+ // Step 1: Parse parameters JSON
23
+ let inputParameters: Record<string, unknown>;
24
+ try {
25
+ const parsed: unknown = JSON.parse(parametersJson);
26
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
27
+ throw new Error('Parameters must be a JSON object');
28
+ }
29
+ inputParameters = parsed as Record<string, unknown>;
30
+ } catch (error) {
31
+ return {
32
+ formatted: `Error: Invalid JSON in parameters.\n\nExpected format: {"param1": "value", "param2": 123}\nNote: Use double quotes, no trailing commas.\n\n${error instanceof Error ? error.message : String(error)}`,
33
+ totalResults: 0,
34
+ resultsShared: 0,
35
+ isError: true,
36
+ };
37
+ }
38
+
39
+ // Step 2: Fetch space metadata to get subdomain
40
+ const metadata = await fetchSpaceMetadata(spaceName, hfToken);
41
+
42
+ // Step 3: Fetch schema from Gradio endpoint
43
+ const tools = await fetchGradioSchema(metadata.subdomain, metadata.private, hfToken);
44
+
45
+ if (tools.length === 0) {
46
+ return {
47
+ formatted: `Error: No tools found for space '${spaceName}'.`,
48
+ totalResults: 0,
49
+ resultsShared: 0,
50
+ isError: true,
51
+ };
52
+ }
53
+
54
+ const tool = tools[0] as Tool;
55
+
56
+ // Step 4: Analyze schema complexity
57
+ const schemaResult = analyzeSchemaComplexity(tool);
58
+
59
+ if (!schemaResult.isSimple) {
60
+ return {
61
+ formatted: formatComplexSchemaError(spaceName, schemaResult.reason || 'Unknown reason'),
62
+ totalResults: 0,
63
+ resultsShared: 0,
64
+ isError: true,
65
+ };
66
+ }
67
+
68
+ // Step 5: Validate parameters
69
+ const validation = validateParameters(inputParameters, schemaResult);
70
+ if (!validation.valid) {
71
+ return {
72
+ formatted: formatValidationError(validation.errors, spaceName),
73
+ totalResults: 0,
74
+ resultsShared: 0,
75
+ isError: true,
76
+ };
77
+ }
78
+
79
+ // Step 6: Check for unknown parameters (warnings)
80
+ const warnings: string[] = [];
81
+ const knownParamNames = new Set(schemaResult.parameters.map((p) => p.name));
82
+ for (const key of Object.keys(inputParameters)) {
83
+ if (!knownParamNames.has(key)) {
84
+ warnings.push(`Unknown parameter: "${key}" (will be passed through)`);
85
+ }
86
+ }
87
+
88
+ // Step 7: Apply default values for missing optional parameters
89
+ const finalParameters = applyDefaults(inputParameters, schemaResult);
90
+
91
+ // Step 8: Create SSE connection and invoke tool
92
+ const sseUrl = `https://${metadata.subdomain}.hf.space/gradio_api/mcp/sse`;
93
+ const client = await createLazyConnection(sseUrl, hfToken);
94
+
95
+ try {
96
+ // Check if the client is requesting progress notifications
97
+ const progressToken = extra?._meta?.progressToken;
98
+ const requestOptions: RequestOptions = {};
99
+
100
+ if (progressToken !== undefined && extra) {
101
+ // Set up progress relay from remote tool to our client
102
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
103
+ requestOptions.onprogress = async (progress) => {
104
+ // Relay the progress notification to our client
105
+ await extra.sendNotification({
106
+ method: 'notifications/progress',
107
+ params: {
108
+ progressToken,
109
+ progress: progress.progress,
110
+ total: progress.total,
111
+ message: progress.message,
112
+ },
113
+ });
114
+ };
115
+ }
116
+
117
+ const result = await client.request(
118
+ {
119
+ method: 'tools/call',
120
+ params: {
121
+ name: tool.name,
122
+ arguments: finalParameters,
123
+ _meta: progressToken !== undefined ? { progressToken } : undefined,
124
+ },
125
+ },
126
+ CallToolResultSchema,
127
+ requestOptions
128
+ );
129
+
130
+ // Return raw MCP result with warnings if any
131
+ // This ensures the space tool behaves identically to proxied gr_* tools
132
+ return {
133
+ result,
134
+ warnings,
135
+ totalResults: 1,
136
+ resultsShared: 1,
137
+ isError: result.isError,
138
+ };
139
+ } finally {
140
+ // Clean up connection
141
+ await client.close();
142
+ }
143
+ } catch (error) {
144
+ const errorMessage = error instanceof Error ? error.message : String(error);
145
+ return {
146
+ formatted: `Error invoking space '${spaceName}': ${errorMessage}`,
147
+ totalResults: 0,
148
+ resultsShared: 0,
149
+ isError: true,
150
+ };
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Fetches space metadata from HuggingFace API
156
+ */
157
+ async function fetchSpaceMetadata(
158
+ spaceName: string,
159
+ hfToken?: string
160
+ ): Promise<{ subdomain: string; private: boolean }> {
161
+ const url = `https://huggingface.co/api/spaces/${spaceName}`;
162
+ const headers: Record<string, string> = {};
163
+
164
+ if (hfToken) {
165
+ headers['Authorization'] = `Bearer ${hfToken}`;
166
+ }
167
+
168
+ const controller = new AbortController();
169
+ const timeoutId = setTimeout(() => controller.abort(), 10000);
170
+
171
+ try {
172
+ const response = await fetch(url, {
173
+ headers,
174
+ signal: controller.signal,
175
+ });
176
+
177
+ clearTimeout(timeoutId);
178
+
179
+ if (!response.ok) {
180
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
181
+ }
182
+
183
+ const info = (await response.json()) as {
184
+ subdomain?: string;
185
+ private?: boolean;
186
+ };
187
+
188
+ if (!info.subdomain) {
189
+ throw new Error('Space does not have a subdomain');
190
+ }
191
+
192
+ return {
193
+ subdomain: info.subdomain,
194
+ private: info.private || false,
195
+ };
196
+ } finally {
197
+ clearTimeout(timeoutId);
198
+ }
199
+ }
200
+
201
+ /**
202
+ * Fetches schema from Gradio endpoint
203
+ */
204
+ async function fetchGradioSchema(subdomain: string, isPrivate: boolean, hfToken?: string): Promise<Tool[]> {
205
+ const schemaUrl = `https://${subdomain}.hf.space/gradio_api/mcp/schema`;
206
+
207
+ const headers: Record<string, string> = {
208
+ 'Content-Type': 'application/json',
209
+ };
210
+
211
+ if (isPrivate && hfToken) {
212
+ headers['X-HF-Authorization'] = `Bearer ${hfToken}`;
213
+ }
214
+
215
+ const controller = new AbortController();
216
+ const timeoutId = setTimeout(() => controller.abort(), 10000);
217
+
218
+ try {
219
+ const response = await fetch(schemaUrl, {
220
+ method: 'GET',
221
+ headers,
222
+ signal: controller.signal,
223
+ });
224
+
225
+ clearTimeout(timeoutId);
226
+
227
+ if (!response.ok) {
228
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
229
+ }
230
+
231
+ const schemaResponse = (await response.json()) as unknown;
232
+
233
+ // Parse schema response (handle both array and object formats)
234
+ return parseSchemaResponse(schemaResponse);
235
+ } finally {
236
+ clearTimeout(timeoutId);
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Parses schema response and extracts tools
242
+ */
243
+ function parseSchemaResponse(schemaResponse: unknown): Tool[] {
244
+ const tools: Tool[] = [];
245
+
246
+ if (Array.isArray(schemaResponse)) {
247
+ // Array format: [{ name: "toolName", description: "...", inputSchema: {...} }, ...]
248
+ for (const item of schemaResponse) {
249
+ if (
250
+ typeof item === 'object' &&
251
+ item !== null &&
252
+ 'name' in item &&
253
+ 'inputSchema' in item
254
+ ) {
255
+ const itemRecord = item as Record<string, unknown>;
256
+ if (typeof itemRecord.name === 'string') {
257
+ const tool = itemRecord as { name: string; description?: string; inputSchema: unknown };
258
+ tools.push({
259
+ name: tool.name,
260
+ description: tool.description || `${tool.name} tool`,
261
+ inputSchema: {
262
+ type: 'object',
263
+ ...(tool.inputSchema as Record<string, unknown>),
264
+ },
265
+ });
266
+ }
267
+ }
268
+ }
269
+ } else if (typeof schemaResponse === 'object' && schemaResponse !== null) {
270
+ // Object format: { "toolName": { properties: {...}, required: [...] }, ... }
271
+ for (const [name, toolSchema] of Object.entries(schemaResponse)) {
272
+ if (typeof toolSchema === 'object' && toolSchema !== null) {
273
+ const schema = toolSchema as { description?: string };
274
+ tools.push({
275
+ name,
276
+ description: schema.description || `${name} tool`,
277
+ inputSchema: {
278
+ type: 'object',
279
+ ...(toolSchema as Record<string, unknown>),
280
+ },
281
+ });
282
+ }
283
+ }
284
+ }
285
+
286
+ return tools.filter((tool) => !tool.name.toLowerCase().includes('<lambda'));
287
+ }
288
+
289
+ /**
290
+ * Creates SSE connection to endpoint for tool execution
291
+ */
292
+ async function createLazyConnection(sseUrl: string, hfToken?: string): Promise<Client> {
293
+ // Create MCP client
294
+ const remoteClient = new Client(
295
+ {
296
+ name: 'hf-mcp-space-client',
297
+ version: '1.0.0',
298
+ },
299
+ {
300
+ capabilities: {},
301
+ }
302
+ );
303
+
304
+ // Create SSE transport with HF token if available
305
+ const transportOptions: SSEClientTransportOptions = {};
306
+ if (hfToken) {
307
+ const headerName = 'X-HF-Authorization';
308
+ const customHeaders = {
309
+ [headerName]: `Bearer ${hfToken}`,
310
+ };
311
+
312
+ // Headers for POST requests
313
+ transportOptions.requestInit = {
314
+ headers: customHeaders,
315
+ };
316
+
317
+ // Headers for SSE connection
318
+ transportOptions.eventSourceInit = {
319
+ fetch: (url, init) => {
320
+ const headers = new Headers(init.headers);
321
+ Object.entries(customHeaders).forEach(([key, value]) => {
322
+ headers.set(key, value);
323
+ });
324
+ return fetch(url.toString(), { ...init, headers });
325
+ },
326
+ };
327
+ }
328
+
329
+ const transport = new SSEClientTransport(new URL(sseUrl), transportOptions);
330
+
331
+ // Connect the client to the transport
332
+ await remoteClient.connect(transport);
333
+
334
+ return remoteClient;
335
+ }