@llmindset/hf-mcp-server 0.1.16

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 (147) hide show
  1. package/LICENSE +21 -0
  2. package/components.json +21 -0
  3. package/dist/server/application.d.ts +30 -0
  4. package/dist/server/application.d.ts.map +1 -0
  5. package/dist/server/application.js +131 -0
  6. package/dist/server/application.js.map +1 -0
  7. package/dist/server/gradio-endpoint-connector.d.ts +46 -0
  8. package/dist/server/gradio-endpoint-connector.d.ts.map +1 -0
  9. package/dist/server/gradio-endpoint-connector.js +348 -0
  10. package/dist/server/gradio-endpoint-connector.js.map +1 -0
  11. package/dist/server/gradio-endpoint-connector.test.d.ts +2 -0
  12. package/dist/server/gradio-endpoint-connector.test.d.ts.map +1 -0
  13. package/dist/server/gradio-endpoint-connector.test.js +313 -0
  14. package/dist/server/gradio-endpoint-connector.test.js.map +1 -0
  15. package/dist/server/lib/logger.d.ts +5 -0
  16. package/dist/server/lib/logger.d.ts.map +1 -0
  17. package/dist/server/lib/logger.js +45 -0
  18. package/dist/server/lib/logger.js.map +1 -0
  19. package/dist/server/lib/mcp-api-client.d.ts +42 -0
  20. package/dist/server/lib/mcp-api-client.d.ts.map +1 -0
  21. package/dist/server/lib/mcp-api-client.js +188 -0
  22. package/dist/server/lib/mcp-api-client.js.map +1 -0
  23. package/dist/server/lib/tool-selection-strategy.d.ts +29 -0
  24. package/dist/server/lib/tool-selection-strategy.d.ts.map +1 -0
  25. package/dist/server/lib/tool-selection-strategy.js +113 -0
  26. package/dist/server/lib/tool-selection-strategy.js.map +1 -0
  27. package/dist/server/lib/tool-selection-strategy.test.d.ts +2 -0
  28. package/dist/server/lib/tool-selection-strategy.test.d.ts.map +1 -0
  29. package/dist/server/lib/tool-selection-strategy.test.js +407 -0
  30. package/dist/server/lib/tool-selection-strategy.test.js.map +1 -0
  31. package/dist/server/mcp-proxy.d.ts +5 -0
  32. package/dist/server/mcp-proxy.d.ts.map +1 -0
  33. package/dist/server/mcp-proxy.js +66 -0
  34. package/dist/server/mcp-proxy.js.map +1 -0
  35. package/dist/server/mcp-server.d.ts +8 -0
  36. package/dist/server/mcp-server.d.ts.map +1 -0
  37. package/dist/server/mcp-server.js +219 -0
  38. package/dist/server/mcp-server.js.map +1 -0
  39. package/dist/server/sse.d.ts +3 -0
  40. package/dist/server/sse.d.ts.map +1 -0
  41. package/dist/server/sse.js +47 -0
  42. package/dist/server/sse.js.map +1 -0
  43. package/dist/server/stdio.d.ts +3 -0
  44. package/dist/server/stdio.d.ts.map +1 -0
  45. package/dist/server/stdio.js +49 -0
  46. package/dist/server/stdio.js.map +1 -0
  47. package/dist/server/streamableHttp.d.ts +3 -0
  48. package/dist/server/streamableHttp.d.ts.map +1 -0
  49. package/dist/server/streamableHttp.js +53 -0
  50. package/dist/server/streamableHttp.js.map +1 -0
  51. package/dist/server/transport/base-transport.d.ts +132 -0
  52. package/dist/server/transport/base-transport.d.ts.map +1 -0
  53. package/dist/server/transport/base-transport.js +390 -0
  54. package/dist/server/transport/base-transport.js.map +1 -0
  55. package/dist/server/transport/json-rpc-errors.d.ts +36 -0
  56. package/dist/server/transport/json-rpc-errors.d.ts.map +1 -0
  57. package/dist/server/transport/json-rpc-errors.js +53 -0
  58. package/dist/server/transport/json-rpc-errors.js.map +1 -0
  59. package/dist/server/transport/sse-transport.d.ts +17 -0
  60. package/dist/server/transport/sse-transport.d.ts.map +1 -0
  61. package/dist/server/transport/sse-transport.js +170 -0
  62. package/dist/server/transport/sse-transport.js.map +1 -0
  63. package/dist/server/transport/stateless-http-transport.d.ts +11 -0
  64. package/dist/server/transport/stateless-http-transport.d.ts.map +1 -0
  65. package/dist/server/transport/stateless-http-transport.js +172 -0
  66. package/dist/server/transport/stateless-http-transport.js.map +1 -0
  67. package/dist/server/transport/stateless-http-transport.test.d.ts +2 -0
  68. package/dist/server/transport/stateless-http-transport.test.d.ts.map +1 -0
  69. package/dist/server/transport/stateless-http-transport.test.js +58 -0
  70. package/dist/server/transport/stateless-http-transport.test.js.map +1 -0
  71. package/dist/server/transport/stdio-transport.d.ts +12 -0
  72. package/dist/server/transport/stdio-transport.d.ts.map +1 -0
  73. package/dist/server/transport/stdio-transport.js +78 -0
  74. package/dist/server/transport/stdio-transport.js.map +1 -0
  75. package/dist/server/transport/streamable-http-transport.d.ts +21 -0
  76. package/dist/server/transport/streamable-http-transport.d.ts.map +1 -0
  77. package/dist/server/transport/streamable-http-transport.js +220 -0
  78. package/dist/server/transport/streamable-http-transport.js.map +1 -0
  79. package/dist/server/transport/transport-factory.d.ts +5 -0
  80. package/dist/server/transport/transport-factory.d.ts.map +1 -0
  81. package/dist/server/transport/transport-factory.js +21 -0
  82. package/dist/server/transport/transport-factory.js.map +1 -0
  83. package/dist/server/utils/api-metrics.d.ts +15 -0
  84. package/dist/server/utils/api-metrics.d.ts.map +1 -0
  85. package/dist/server/utils/api-metrics.js +39 -0
  86. package/dist/server/utils/api-metrics.js.map +1 -0
  87. package/dist/server/utils/auth-utils.d.ts +6 -0
  88. package/dist/server/utils/auth-utils.d.ts.map +1 -0
  89. package/dist/server/utils/auth-utils.js +25 -0
  90. package/dist/server/utils/auth-utils.js.map +1 -0
  91. package/dist/server/utils/browser-detection.d.ts +2 -0
  92. package/dist/server/utils/browser-detection.d.ts.map +1 -0
  93. package/dist/server/utils/browser-detection.js +15 -0
  94. package/dist/server/utils/browser-detection.js.map +1 -0
  95. package/dist/server/utils/browser-detection.test.d.ts +2 -0
  96. package/dist/server/utils/browser-detection.test.d.ts.map +1 -0
  97. package/dist/server/utils/browser-detection.test.js +50 -0
  98. package/dist/server/utils/browser-detection.test.js.map +1 -0
  99. package/dist/server/utils/gradio-metrics.d.ts +22 -0
  100. package/dist/server/utils/gradio-metrics.d.ts.map +1 -0
  101. package/dist/server/utils/gradio-metrics.js +60 -0
  102. package/dist/server/utils/gradio-metrics.js.map +1 -0
  103. package/dist/server/utils/query-params.d.ts +3 -0
  104. package/dist/server/utils/query-params.d.ts.map +1 -0
  105. package/dist/server/utils/query-params.js +17 -0
  106. package/dist/server/utils/query-params.js.map +1 -0
  107. package/dist/server/utils/query-params.test.d.ts +2 -0
  108. package/dist/server/utils/query-params.test.d.ts.map +1 -0
  109. package/dist/server/utils/query-params.test.js +75 -0
  110. package/dist/server/utils/query-params.test.js.map +1 -0
  111. package/dist/server/web-server.d.ts +29 -0
  112. package/dist/server/web-server.d.ts.map +1 -0
  113. package/dist/server/web-server.js +273 -0
  114. package/dist/server/web-server.js.map +1 -0
  115. package/dist/shared/constants.d.ts +5 -0
  116. package/dist/shared/constants.d.ts.map +1 -0
  117. package/dist/shared/constants.js +4 -0
  118. package/dist/shared/constants.js.map +1 -0
  119. package/dist/shared/settings.d.ts +19 -0
  120. package/dist/shared/settings.d.ts.map +1 -0
  121. package/dist/shared/settings.js +47 -0
  122. package/dist/shared/settings.js.map +1 -0
  123. package/dist/shared/transport-info.d.ts +18 -0
  124. package/dist/shared/transport-info.d.ts.map +1 -0
  125. package/dist/shared/transport-info.js +22 -0
  126. package/dist/shared/transport-info.js.map +1 -0
  127. package/dist/shared/transport-info.test.d.ts +2 -0
  128. package/dist/shared/transport-info.test.d.ts.map +1 -0
  129. package/dist/shared/transport-info.test.js +90 -0
  130. package/dist/shared/transport-info.test.js.map +1 -0
  131. package/dist/shared/transport-metrics.d.ts +180 -0
  132. package/dist/shared/transport-metrics.d.ts.map +1 -0
  133. package/dist/shared/transport-metrics.js +247 -0
  134. package/dist/shared/transport-metrics.js.map +1 -0
  135. package/dist/shared/transport-metrics.test.d.ts +2 -0
  136. package/dist/shared/transport-metrics.test.d.ts.map +1 -0
  137. package/dist/shared/transport-metrics.test.js +10 -0
  138. package/dist/shared/transport-metrics.test.js.map +1 -0
  139. package/dist/web/assets/button-C4Q2P8Ns.css +1 -0
  140. package/dist/web/assets/button-DOWMQOme.js +79 -0
  141. package/dist/web/assets/hf-logo-DbjPOSLw.svg +21 -0
  142. package/dist/web/assets/main-CB77vUha.js +115 -0
  143. package/dist/web/assets/mcpWelcome-Cpw1-KJi.js +1 -0
  144. package/dist/web/hf-logo-DbjPOSLw.svg +21 -0
  145. package/dist/web/index.html +15 -0
  146. package/dist/web/mcp-welcome.html +92 -0
  147. package/package.json +100 -0
@@ -0,0 +1,29 @@
1
+ import type { AppSettings } from '../../shared/settings.js';
2
+ import type { McpApiClient } from './mcp-api-client.js';
3
+ export declare enum ToolSelectionMode {
4
+ BOUQUET_OVERRIDE = "bouquet_override",
5
+ MIX = "mix",
6
+ EXTERNAL_API = "external_api",
7
+ INTERNAL_API = "internal_api",
8
+ FALLBACK = "fallback"
9
+ }
10
+ export interface ToolSelectionContext {
11
+ headers: Record<string, string> | null;
12
+ userSettings?: AppSettings;
13
+ hfToken?: string;
14
+ }
15
+ export interface ToolSelectionResult {
16
+ mode: ToolSelectionMode;
17
+ enabledToolIds: string[];
18
+ reason: string;
19
+ baseSettings?: AppSettings;
20
+ mixedBouquet?: string;
21
+ }
22
+ export declare const BOUQUETS: Record<string, AppSettings>;
23
+ export declare class ToolSelectionStrategy {
24
+ private apiClient;
25
+ constructor(apiClient: McpApiClient);
26
+ selectTools(context: ToolSelectionContext): Promise<ToolSelectionResult>;
27
+ private getUserSettings;
28
+ }
29
+ //# sourceMappingURL=tool-selection-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-selection-strategy.d.ts","sourceRoot":"","sources":["../../../src/server/lib/tool-selection-strategy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,oBAAY,iBAAiB;IAC5B,gBAAgB,qBAAqB;IACrC,GAAG,QAAQ;IACX,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;CACrB;AAED,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,iBAAiB,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAiBhD,CAAC;AAKF,qBAAa,qBAAqB;IACjC,OAAO,CAAC,SAAS,CAAe;gBAEpB,SAAS,EAAE,YAAY;IAW7B,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;YA0EhE,eAAe;CAiC7B"}
@@ -0,0 +1,113 @@
1
+ import { logger } from './logger.js';
2
+ import { ALL_BUILTIN_TOOL_IDS, TOOL_ID_GROUPS } from '@llmindset/hf-mcp';
3
+ import { extractAuthBouquetAndMix } from '../utils/auth-utils.js';
4
+ export var ToolSelectionMode;
5
+ (function (ToolSelectionMode) {
6
+ ToolSelectionMode["BOUQUET_OVERRIDE"] = "bouquet_override";
7
+ ToolSelectionMode["MIX"] = "mix";
8
+ ToolSelectionMode["EXTERNAL_API"] = "external_api";
9
+ ToolSelectionMode["INTERNAL_API"] = "internal_api";
10
+ ToolSelectionMode["FALLBACK"] = "fallback";
11
+ })(ToolSelectionMode || (ToolSelectionMode = {}));
12
+ export const BOUQUETS = {
13
+ hf_api: {
14
+ builtInTools: [...TOOL_ID_GROUPS.hf_api],
15
+ spaceTools: [],
16
+ },
17
+ spaces: {
18
+ builtInTools: [...TOOL_ID_GROUPS.spaces],
19
+ spaceTools: [],
20
+ },
21
+ search: {
22
+ builtInTools: [...TOOL_ID_GROUPS.search],
23
+ spaceTools: [],
24
+ },
25
+ all: {
26
+ builtInTools: [...ALL_BUILTIN_TOOL_IDS],
27
+ spaceTools: [],
28
+ },
29
+ };
30
+ export class ToolSelectionStrategy {
31
+ apiClient;
32
+ constructor(apiClient) {
33
+ this.apiClient = apiClient;
34
+ }
35
+ async selectTools(context) {
36
+ const { bouquet, mix } = extractAuthBouquetAndMix(context.headers);
37
+ if (bouquet && BOUQUETS[bouquet]) {
38
+ logger.debug({ bouquet, enabledToolIds: BOUQUETS[bouquet].builtInTools }, 'Using bouquet override');
39
+ return {
40
+ mode: ToolSelectionMode.BOUQUET_OVERRIDE,
41
+ enabledToolIds: BOUQUETS[bouquet].builtInTools,
42
+ reason: `Bouquet override: ${bouquet}`,
43
+ };
44
+ }
45
+ const baseSettings = await this.getUserSettings(context);
46
+ if (mix && BOUQUETS[mix] && baseSettings) {
47
+ const mixedTools = [...baseSettings.builtInTools, ...BOUQUETS[mix].builtInTools];
48
+ const enabledToolIds = [...new Set(mixedTools)];
49
+ logger.debug({
50
+ mix,
51
+ baseToolCount: baseSettings.builtInTools.length,
52
+ mixToolCount: BOUQUETS[mix].builtInTools.length,
53
+ finalToolCount: enabledToolIds.length,
54
+ }, 'Applying mix to user settings');
55
+ return {
56
+ mode: ToolSelectionMode.MIX,
57
+ enabledToolIds,
58
+ reason: `User settings + mix(${mix})`,
59
+ baseSettings,
60
+ mixedBouquet: mix,
61
+ };
62
+ }
63
+ if (baseSettings) {
64
+ const mode = this.apiClient.getTransportInfo()?.externalApiMode
65
+ ? ToolSelectionMode.EXTERNAL_API
66
+ : ToolSelectionMode.INTERNAL_API;
67
+ logger.debug({
68
+ mode,
69
+ enabledToolIds: baseSettings.builtInTools,
70
+ }, 'Using user settings');
71
+ return {
72
+ mode,
73
+ enabledToolIds: baseSettings.builtInTools,
74
+ reason: mode === ToolSelectionMode.EXTERNAL_API ? 'External API user settings' : 'Internal API user settings',
75
+ baseSettings,
76
+ };
77
+ }
78
+ logger.warn('No settings available, using fallback (all tools enabled)');
79
+ return {
80
+ mode: ToolSelectionMode.FALLBACK,
81
+ enabledToolIds: [...ALL_BUILTIN_TOOL_IDS],
82
+ reason: 'Fallback - no settings available',
83
+ };
84
+ }
85
+ async getUserSettings(context) {
86
+ if (context.userSettings) {
87
+ logger.debug('Using provided user settings');
88
+ return context.userSettings;
89
+ }
90
+ if (process.env.NODE_ENV === 'test' || process.env.VITEST) {
91
+ logger.debug('Skipping API client fetch in test environment');
92
+ return null;
93
+ }
94
+ try {
95
+ const toolStates = await this.apiClient.getToolStates(context.hfToken);
96
+ if (toolStates) {
97
+ const builtInTools = Object.keys(toolStates).filter((id) => toolStates[id]);
98
+ const spaceTools = this.apiClient.getGradioEndpoints().map((endpoint) => ({
99
+ name: endpoint.name,
100
+ subdomain: endpoint.subdomain,
101
+ _id: endpoint.id || endpoint.name,
102
+ emoji: endpoint.emoji || '🛠️',
103
+ }));
104
+ return { builtInTools, spaceTools };
105
+ }
106
+ }
107
+ catch (error) {
108
+ logger.warn({ error }, 'Failed to fetch user settings from API client');
109
+ }
110
+ return null;
111
+ }
112
+ }
113
+ //# sourceMappingURL=tool-selection-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-selection-strategy.js","sourceRoot":"","sources":["../../../src/server/lib/tool-selection-strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tool-selection-strategy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-selection-strategy.test.d.ts","sourceRoot":"","sources":["../../../src/server/lib/tool-selection-strategy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,407 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { ToolSelectionStrategy, ToolSelectionMode, BOUQUETS, } from './tool-selection-strategy.js';
3
+ import { McpApiClient } from './mcp-api-client.js';
4
+ import { ALL_BUILTIN_TOOL_IDS, TOOL_ID_GROUPS } from '@llmindset/hf-mcp';
5
+ import { extractAuthBouquetAndMix } from '../utils/auth-utils.js';
6
+ describe('extractBouquetAndMix', () => {
7
+ it('should extract bouquet from headers', () => {
8
+ const headers = { 'x-mcp-bouquet': 'search' };
9
+ const { bouquet, mix } = extractAuthBouquetAndMix(headers);
10
+ expect(bouquet).toBe('search');
11
+ expect(mix).toBeUndefined();
12
+ });
13
+ it('should extract mix from headers', () => {
14
+ const headers = { 'x-mcp-mix': 'hf_api' };
15
+ const result = extractAuthBouquetAndMix(headers);
16
+ expect(result.bouquet).toBeUndefined();
17
+ expect(result.mix).toBe('hf_api');
18
+ });
19
+ it('should extract both bouquet and mix from headers', () => {
20
+ const headers = {
21
+ 'x-mcp-bouquet': 'search',
22
+ 'x-mcp-mix': 'hf_api',
23
+ };
24
+ const result = extractAuthBouquetAndMix(headers);
25
+ expect(result.bouquet).toBe('search');
26
+ expect(result.mix).toBe('hf_api');
27
+ });
28
+ it('should handle null headers', () => {
29
+ const result = extractAuthBouquetAndMix(null);
30
+ expect(result.bouquet).toBeUndefined();
31
+ expect(result.mix).toBeUndefined();
32
+ });
33
+ it('should handle empty headers', () => {
34
+ const result = extractAuthBouquetAndMix({});
35
+ expect(result.bouquet).toBeUndefined();
36
+ expect(result.mix).toBeUndefined();
37
+ });
38
+ });
39
+ describe('BOUQUETS configuration', () => {
40
+ it('should have correct hf_api bouquet', () => {
41
+ const bouquet = BOUQUETS.hf_api;
42
+ expect(bouquet).toBeDefined();
43
+ if (bouquet) {
44
+ expect(bouquet.builtInTools).toEqual(TOOL_ID_GROUPS.hf_api);
45
+ expect(bouquet.spaceTools).toEqual([]);
46
+ }
47
+ });
48
+ it('should have correct spaces bouquet', () => {
49
+ const bouquet = BOUQUETS.spaces;
50
+ expect(bouquet).toBeDefined();
51
+ if (bouquet) {
52
+ expect(bouquet.builtInTools).toEqual(TOOL_ID_GROUPS.spaces);
53
+ expect(bouquet.spaceTools).toEqual([]);
54
+ }
55
+ });
56
+ it('should have correct search bouquet', () => {
57
+ const bouquet = BOUQUETS.search;
58
+ expect(bouquet).toBeDefined();
59
+ if (bouquet) {
60
+ expect(bouquet.builtInTools).toEqual(TOOL_ID_GROUPS.search);
61
+ expect(bouquet.spaceTools).toEqual([]);
62
+ }
63
+ });
64
+ it('should have correct all bouquet', () => {
65
+ const bouquet = BOUQUETS.all;
66
+ expect(bouquet).toBeDefined();
67
+ if (bouquet) {
68
+ expect(bouquet.builtInTools).toEqual(ALL_BUILTIN_TOOL_IDS);
69
+ expect(bouquet.spaceTools).toEqual([]);
70
+ }
71
+ });
72
+ });
73
+ describe('ToolSelectionStrategy', () => {
74
+ let strategy;
75
+ let mockApiClient;
76
+ beforeEach(() => {
77
+ const config = {
78
+ type: 'polling',
79
+ baseUrl: 'http://localhost:3000',
80
+ pollInterval: 5000,
81
+ staticGradioEndpoints: [],
82
+ };
83
+ const transportInfo = {
84
+ transport: 'streamableHttpJson',
85
+ port: 3000,
86
+ defaultHfTokenSet: false,
87
+ jsonResponseEnabled: true,
88
+ externalApiMode: false,
89
+ stdioClient: null,
90
+ };
91
+ mockApiClient = new McpApiClient(config, transportInfo);
92
+ strategy = new ToolSelectionStrategy(mockApiClient);
93
+ });
94
+ describe('Bouquet Override (Highest Precedence)', () => {
95
+ it('should use bouquet override for search bouquet', async () => {
96
+ const context = {
97
+ headers: { 'x-mcp-bouquet': 'search' },
98
+ hfToken: 'test-token',
99
+ };
100
+ const result = await strategy.selectTools(context);
101
+ expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
102
+ expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.search);
103
+ expect(result.reason).toBe('Bouquet override: search');
104
+ expect(result.baseSettings).toBeUndefined();
105
+ expect(result.mixedBouquet).toBeUndefined();
106
+ });
107
+ it('should use bouquet override for hf_api bouquet', async () => {
108
+ const context = {
109
+ headers: { 'x-mcp-bouquet': 'hf_api' },
110
+ hfToken: 'test-token',
111
+ };
112
+ const result = await strategy.selectTools(context);
113
+ expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
114
+ expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.hf_api);
115
+ expect(result.reason).toBe('Bouquet override: hf_api');
116
+ });
117
+ it('should use bouquet override for spaces bouquet', async () => {
118
+ const context = {
119
+ headers: { 'x-mcp-bouquet': 'spaces' },
120
+ hfToken: 'test-token',
121
+ };
122
+ const result = await strategy.selectTools(context);
123
+ expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
124
+ expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.spaces);
125
+ expect(result.reason).toBe('Bouquet override: spaces');
126
+ });
127
+ it('should use bouquet override for all bouquet', async () => {
128
+ const context = {
129
+ headers: { 'x-mcp-bouquet': 'all' },
130
+ hfToken: 'test-token',
131
+ };
132
+ const result = await strategy.selectTools(context);
133
+ expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
134
+ expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
135
+ expect(result.reason).toBe('Bouquet override: all');
136
+ });
137
+ it('should ignore invalid bouquet names', async () => {
138
+ const context = {
139
+ headers: { 'x-mcp-bouquet': 'invalid_bouquet' },
140
+ hfToken: 'test-token',
141
+ };
142
+ const result = await strategy.selectTools(context);
143
+ expect(result.mode).toBe(ToolSelectionMode.FALLBACK);
144
+ expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
145
+ });
146
+ it('should prefer bouquet over mix when both are present', async () => {
147
+ const userSettings = {
148
+ builtInTools: ['hf_semantic_search'],
149
+ spaceTools: [],
150
+ };
151
+ const context = {
152
+ headers: {
153
+ 'x-mcp-bouquet': 'search',
154
+ 'x-mcp-mix': 'hf_api',
155
+ },
156
+ userSettings,
157
+ hfToken: 'test-token',
158
+ };
159
+ const result = await strategy.selectTools(context);
160
+ expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
161
+ expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.search);
162
+ expect(result.reason).toBe('Bouquet override: search');
163
+ });
164
+ });
165
+ describe('Mix Mode (Second Precedence)', () => {
166
+ it('should mix hf_api tools with user settings', async () => {
167
+ const userSettings = {
168
+ builtInTools: ['hf_semantic_search', 'hf_dataset_search'],
169
+ spaceTools: [],
170
+ };
171
+ const context = {
172
+ headers: { 'x-mcp-mix': 'hf_api' },
173
+ userSettings,
174
+ hfToken: 'test-token',
175
+ };
176
+ const result = await strategy.selectTools(context);
177
+ expect(result.mode).toBe(ToolSelectionMode.MIX);
178
+ expect(result.reason).toBe('User settings + mix(hf_api)');
179
+ expect(result.baseSettings).toEqual(userSettings);
180
+ expect(result.mixedBouquet).toBe('hf_api');
181
+ const expectedTools = [...new Set([...userSettings.builtInTools, ...TOOL_ID_GROUPS.hf_api])];
182
+ expect(result.enabledToolIds).toEqual(expectedTools);
183
+ });
184
+ it('should mix search tools with user settings', async () => {
185
+ const userSettings = {
186
+ builtInTools: ['hf_whoami', 'hf_duplicate_space'],
187
+ spaceTools: [],
188
+ };
189
+ const context = {
190
+ headers: { 'x-mcp-mix': 'search' },
191
+ userSettings,
192
+ hfToken: 'test-token',
193
+ };
194
+ const result = await strategy.selectTools(context);
195
+ expect(result.mode).toBe(ToolSelectionMode.MIX);
196
+ expect(result.reason).toBe('User settings + mix(search)');
197
+ const expectedTools = [...new Set([...userSettings.builtInTools, ...TOOL_ID_GROUPS.search])];
198
+ expect(result.enabledToolIds).toEqual(expectedTools);
199
+ });
200
+ it('should deduplicate tools when mixing', async () => {
201
+ const userSettings = {
202
+ builtInTools: ['hf_semantic_search', 'hf_model_search'],
203
+ spaceTools: [],
204
+ };
205
+ const context = {
206
+ headers: { 'x-mcp-mix': 'search' },
207
+ userSettings,
208
+ hfToken: 'test-token',
209
+ };
210
+ const result = await strategy.selectTools(context);
211
+ expect(result.mode).toBe(ToolSelectionMode.MIX);
212
+ const uniqueTools = [...new Set(result.enabledToolIds)];
213
+ expect(result.enabledToolIds).toEqual(uniqueTools);
214
+ expect(result.enabledToolIds.length).toBe(uniqueTools.length);
215
+ });
216
+ it('should ignore mix when no user settings available', async () => {
217
+ const context = {
218
+ headers: { 'x-mcp-mix': 'hf_api' },
219
+ hfToken: 'test-token',
220
+ };
221
+ const result = await strategy.selectTools(context);
222
+ expect(result.mode).toBe(ToolSelectionMode.FALLBACK);
223
+ expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
224
+ });
225
+ it('should ignore invalid mix bouquet names', async () => {
226
+ const userSettings = {
227
+ builtInTools: ['hf_semantic_search'],
228
+ spaceTools: [],
229
+ };
230
+ const context = {
231
+ headers: { 'x-mcp-mix': 'invalid_mix' },
232
+ userSettings,
233
+ hfToken: 'test-token',
234
+ };
235
+ const result = await strategy.selectTools(context);
236
+ expect(result.mode).toBe(ToolSelectionMode.INTERNAL_API);
237
+ expect(result.enabledToolIds).toEqual(userSettings.builtInTools);
238
+ });
239
+ });
240
+ describe('User Settings Mode (Third Precedence)', () => {
241
+ it('should use provided user settings in internal API mode', async () => {
242
+ const userSettings = {
243
+ builtInTools: ['hf_semantic_search', 'hf_model_search'],
244
+ spaceTools: [],
245
+ };
246
+ const context = {
247
+ headers: {},
248
+ userSettings,
249
+ hfToken: 'test-token',
250
+ };
251
+ const result = await strategy.selectTools(context);
252
+ expect(result.mode).toBe(ToolSelectionMode.INTERNAL_API);
253
+ expect(result.enabledToolIds).toEqual(userSettings.builtInTools);
254
+ expect(result.reason).toBe('Internal API user settings');
255
+ expect(result.baseSettings).toEqual(userSettings);
256
+ });
257
+ it('should use provided user settings in external API mode', async () => {
258
+ const externalConfig = {
259
+ type: 'external',
260
+ externalUrl: 'https://api.example.com/settings',
261
+ hfToken: 'test-token',
262
+ };
263
+ const externalTransportInfo = {
264
+ transport: 'streamableHttpJson',
265
+ port: 3000,
266
+ defaultHfTokenSet: false,
267
+ jsonResponseEnabled: true,
268
+ externalApiMode: true,
269
+ stdioClient: null,
270
+ };
271
+ const externalApiClient = new McpApiClient(externalConfig, externalTransportInfo);
272
+ const externalStrategy = new ToolSelectionStrategy(externalApiClient);
273
+ const userSettings = {
274
+ builtInTools: ['hf_paper_search'],
275
+ spaceTools: [],
276
+ };
277
+ const context = {
278
+ headers: {},
279
+ userSettings,
280
+ hfToken: 'test-token',
281
+ };
282
+ const result = await externalStrategy.selectTools(context);
283
+ expect(result.mode).toBe(ToolSelectionMode.EXTERNAL_API);
284
+ expect(result.enabledToolIds).toEqual(userSettings.builtInTools);
285
+ expect(result.reason).toBe('External API user settings');
286
+ });
287
+ });
288
+ describe('Fallback Mode (Lowest Precedence)', () => {
289
+ it('should use fallback when no configuration is available', async () => {
290
+ const context = {
291
+ headers: {},
292
+ hfToken: 'test-token',
293
+ };
294
+ const result = await strategy.selectTools(context);
295
+ expect(result.mode).toBe(ToolSelectionMode.FALLBACK);
296
+ expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
297
+ expect(result.reason).toBe('Fallback - no settings available');
298
+ expect(result.baseSettings).toBeUndefined();
299
+ });
300
+ it('should use fallback when headers are null', async () => {
301
+ const context = {
302
+ headers: null,
303
+ hfToken: 'test-token',
304
+ };
305
+ const result = await strategy.selectTools(context);
306
+ expect(result.mode).toBe(ToolSelectionMode.FALLBACK);
307
+ expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
308
+ });
309
+ });
310
+ describe('Complex Scenarios', () => {
311
+ it('should handle empty user settings', async () => {
312
+ const userSettings = {
313
+ builtInTools: [],
314
+ spaceTools: [],
315
+ };
316
+ const context = {
317
+ headers: {},
318
+ userSettings,
319
+ hfToken: 'test-token',
320
+ };
321
+ const result = await strategy.selectTools(context);
322
+ expect(result.mode).toBe(ToolSelectionMode.INTERNAL_API);
323
+ expect(result.enabledToolIds).toEqual([]);
324
+ expect(result.baseSettings).toEqual(userSettings);
325
+ });
326
+ it('should handle mix with empty user settings', async () => {
327
+ const userSettings = {
328
+ builtInTools: [],
329
+ spaceTools: [],
330
+ };
331
+ const context = {
332
+ headers: { 'x-mcp-mix': 'search' },
333
+ userSettings,
334
+ hfToken: 'test-token',
335
+ };
336
+ const result = await strategy.selectTools(context);
337
+ expect(result.mode).toBe(ToolSelectionMode.MIX);
338
+ expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.search);
339
+ expect(result.mixedBouquet).toBe('search');
340
+ });
341
+ it('should handle all possible tool types in mix', async () => {
342
+ const userSettings = {
343
+ builtInTools: ['hf_whoami'],
344
+ spaceTools: [],
345
+ };
346
+ for (const [bouquetName, bouquetConfig] of Object.entries(BOUQUETS)) {
347
+ const context = {
348
+ headers: { 'x-mcp-mix': bouquetName },
349
+ userSettings,
350
+ hfToken: 'test-token',
351
+ };
352
+ const result = await strategy.selectTools(context);
353
+ expect(result.mode).toBe(ToolSelectionMode.MIX);
354
+ expect(result.mixedBouquet).toBe(bouquetName);
355
+ const expectedTools = [...new Set([...userSettings.builtInTools, ...bouquetConfig.builtInTools])];
356
+ expect(result.enabledToolIds).toEqual(expectedTools);
357
+ }
358
+ });
359
+ it('should preserve gradio endpoints when mixing with all bouquet in internal API mode', async () => {
360
+ const userSettings = {
361
+ builtInTools: ['hf_whoami'],
362
+ spaceTools: [
363
+ {
364
+ name: 'My Custom GPT',
365
+ subdomain: 'user123-my-custom-gpt',
366
+ _id: 'custom-1',
367
+ emoji: '🤖',
368
+ },
369
+ {
370
+ name: 'Company Analytics',
371
+ subdomain: 'corp-analytics-tool',
372
+ _id: 'custom-2',
373
+ emoji: '📊',
374
+ },
375
+ ],
376
+ };
377
+ const context = {
378
+ headers: { 'x-mcp-mix': 'all' },
379
+ userSettings,
380
+ hfToken: 'test-token',
381
+ };
382
+ const result = await strategy.selectTools(context);
383
+ expect(result.mode).toBe(ToolSelectionMode.MIX);
384
+ expect(result.mixedBouquet).toBe('all');
385
+ expect(result.reason).toBe('User settings + mix(all)');
386
+ const expectedBuiltInTools = [...new Set([...userSettings.builtInTools, ...ALL_BUILTIN_TOOL_IDS])];
387
+ expect(result.enabledToolIds).toEqual(expectedBuiltInTools);
388
+ expect(result.baseSettings).toEqual(userSettings);
389
+ expect(result.baseSettings?.spaceTools).toHaveLength(2);
390
+ expect(result.baseSettings?.spaceTools).toEqual([
391
+ {
392
+ name: 'My Custom GPT',
393
+ subdomain: 'user123-my-custom-gpt',
394
+ _id: 'custom-1',
395
+ emoji: '🤖',
396
+ },
397
+ {
398
+ name: 'Company Analytics',
399
+ subdomain: 'corp-analytics-tool',
400
+ _id: 'custom-2',
401
+ emoji: '📊',
402
+ },
403
+ ]);
404
+ });
405
+ });
406
+ });
407
+ //# sourceMappingURL=tool-selection-strategy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-selection-strategy.test.js","sourceRoot":"","sources":["../../../src/server/lib/tool-selection-strategy.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ServerFactory } from './transport/base-transport.js';
2
+ import type { McpApiClient } from './lib/mcp-api-client.js';
3
+ import type { WebServer } from './web-server.js';
4
+ export declare const createProxyServerFactory: (_webServerInstance: WebServer, sharedApiClient: McpApiClient, originalServerFactory: ServerFactory) => ServerFactory;
5
+ //# sourceMappingURL=mcp-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-proxy.d.ts","sourceRoot":"","sources":["../../src/server/mcp-proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AASjD,eAAO,MAAM,wBAAwB,GACpC,oBAAoB,SAAS,EAC7B,iBAAiB,YAAY,EAC7B,uBAAuB,aAAa,KAClC,aAiGF,CAAC"}