@llmindset/hf-mcp-server 0.3.2 → 0.3.4

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 (92) hide show
  1. package/dist/server/application.d.ts +2 -2
  2. package/dist/server/application.d.ts.map +1 -1
  3. package/dist/server/application.js +1 -1
  4. package/dist/server/application.js.map +1 -1
  5. package/dist/server/gradio-endpoint-connector.d.ts.map +1 -1
  6. package/dist/server/gradio-endpoint-connector.js +18 -11
  7. package/dist/server/gradio-endpoint-connector.js.map +1 -1
  8. package/dist/server/mcp-proxy.d.ts.map +1 -1
  9. package/dist/server/mcp-proxy.js +36 -3
  10. package/dist/server/mcp-proxy.js.map +1 -1
  11. package/dist/server/mcp-server.d.ts.map +1 -1
  12. package/dist/server/mcp-server.js +14 -2
  13. package/dist/server/mcp-server.js.map +1 -1
  14. package/dist/server/resources/gradio-widget-content.d.ts +1 -1
  15. package/dist/server/resources/gradio-widget-content.d.ts.map +1 -1
  16. package/dist/server/resources/gradio-widget-content.js +1 -1
  17. package/dist/server/resources/gradio-widget-resource.d.ts +1 -1
  18. package/dist/server/resources/gradio-widget-resource.d.ts.map +1 -1
  19. package/dist/server/run-application.d.ts +7 -0
  20. package/dist/server/run-application.d.ts.map +1 -0
  21. package/dist/server/run-application.js +42 -0
  22. package/dist/server/run-application.js.map +1 -0
  23. package/dist/server/stdio.js +3 -32
  24. package/dist/server/stdio.js.map +1 -1
  25. package/dist/server/streamableHttp.js +3 -32
  26. package/dist/server/streamableHttp.js.map +1 -1
  27. package/dist/server/transport/json-rpc-errors.d.ts +4 -4
  28. package/dist/server/transport/json-rpc-errors.d.ts.map +1 -1
  29. package/dist/server/transport/json-rpc-errors.js +2 -2
  30. package/dist/server/transport/json-rpc-errors.js.map +1 -1
  31. package/dist/server/utils/api-metrics.d.ts +1 -1
  32. package/dist/server/utils/api-metrics.d.ts.map +1 -1
  33. package/dist/server/utils/capability-utils.d.ts +2 -1
  34. package/dist/server/utils/capability-utils.d.ts.map +1 -1
  35. package/dist/server/utils/gradio-cache.d.ts +1 -1
  36. package/dist/server/utils/gradio-cache.d.ts.map +1 -1
  37. package/dist/server/utils/gradio-discovery.d.ts +3 -2
  38. package/dist/server/utils/gradio-discovery.d.ts.map +1 -1
  39. package/dist/server/utils/gradio-discovery.js +87 -97
  40. package/dist/server/utils/gradio-discovery.js.map +1 -1
  41. package/dist/server/utils/gradio-metrics.d.ts +3 -2
  42. package/dist/server/utils/gradio-metrics.d.ts.map +1 -1
  43. package/dist/server/utils/gradio-metrics.js +1 -1
  44. package/dist/server/utils/gradio-metrics.js.map +1 -1
  45. package/dist/server/utils/gradio-result-processor.d.ts +2 -1
  46. package/dist/server/utils/gradio-result-processor.d.ts.map +1 -1
  47. package/dist/server/utils/gradio-utils.d.ts +3 -3
  48. package/dist/server/utils/gradio-utils.d.ts.map +1 -1
  49. package/dist/server/utils/gradio-utils.js +1 -1
  50. package/dist/server/utils/gradio-utils.js.map +1 -1
  51. package/dist/server/utils/hf-dataset-transport.d.ts +2 -1
  52. package/dist/server/utils/hf-dataset-transport.d.ts.map +1 -1
  53. package/dist/server/utils/mcp-api-client.d.ts +2 -1
  54. package/dist/server/utils/mcp-api-client.d.ts.map +1 -1
  55. package/dist/server/utils/mcp-api-client.js +29 -8
  56. package/dist/server/utils/mcp-api-client.js.map +1 -1
  57. package/dist/server/utils/proxy-tools-config.d.ts +0 -5
  58. package/dist/server/utils/proxy-tools-config.d.ts.map +1 -1
  59. package/dist/server/utils/proxy-tools-config.js +8 -10
  60. package/dist/server/utils/proxy-tools-config.js.map +1 -1
  61. package/dist/server/utils/query-logger.d.ts +0 -21
  62. package/dist/server/utils/query-logger.d.ts.map +1 -1
  63. package/dist/server/utils/query-logger.js +6 -29
  64. package/dist/server/utils/query-logger.js.map +1 -1
  65. package/dist/server/utils/streamable-http-tool-caller.d.ts.map +1 -1
  66. package/dist/server/utils/streamable-http-tool-caller.js +10 -1
  67. package/dist/server/utils/streamable-http-tool-caller.js.map +1 -1
  68. package/dist/server/utils/tool-selection-strategy.d.ts +2 -1
  69. package/dist/server/utils/tool-selection-strategy.d.ts.map +1 -1
  70. package/dist/server/utils/ui/audio-player.d.ts +2 -2
  71. package/dist/server/utils/ui/audio-player.d.ts.map +1 -1
  72. package/dist/server/utils/ui/audio-player.js +1 -1
  73. package/dist/server/utils/ui/audio-player.js.map +1 -1
  74. package/dist/shared/bouquet-presets.d.ts +6 -5
  75. package/dist/shared/bouquet-presets.d.ts.map +1 -1
  76. package/dist/shared/constants.d.ts.map +1 -1
  77. package/dist/shared/constants.js.map +1 -1
  78. package/dist/shared/transport-metrics.d.ts +2 -3
  79. package/dist/shared/transport-metrics.d.ts.map +1 -1
  80. package/dist/shared/transport-metrics.js +2 -2
  81. package/dist/shared/transport-metrics.js.map +1 -1
  82. package/dist/web/assets/{gradioWidgetDev-BTbDFx4A.js → gradioWidgetDev-DKjSxsth.js} +1 -1
  83. package/dist/web/assets/index-C82JscI3.css +1 -0
  84. package/dist/web/assets/main-VwOEai0c.js +145 -0
  85. package/dist/web/gradio-widget-dev.html +3 -3
  86. package/dist/web/gradio-widget.html +1 -1
  87. package/dist/web/index.html +3 -3
  88. package/dist/web/mcp-welcome.html +44 -128
  89. package/package.json +2 -3
  90. package/dist/web/assets/index-DA_tuFd-.css +0 -1
  91. package/dist/web/assets/main-CdA2xGil.js +0 -229
  92. /package/dist/web/assets/{index-BVX5KR1A.js → index-CZS9IJ_2.js} +0 -0
@@ -3,7 +3,7 @@ declare const CSP_DOMAINS: {
3
3
  resource_domains: string[];
4
4
  frame_domains: string[];
5
5
  };
6
- export interface GradioWidgetResourceConfig {
6
+ interface GradioWidgetResourceConfig {
7
7
  name: string;
8
8
  version: string;
9
9
  uri: string;
@@ -1 +1 @@
1
- {"version":3,"file":"gradio-widget-resource.d.ts","sourceRoot":"","sources":["../../../src/server/resources/gradio-widget-resource.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,WAAW;;;;CAwBhB,CAAC;AAEF,MAAM,WAAW,0BAA0B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QACT,kBAAkB,EAAE,OAAO,WAAW,CAAC;QACvC,eAAe,EAAE;YAChB,GAAG,EAAE,OAAO,WAAW,CAAC;SACxB,CAAC;KACF,CAAC;CACF;AAOD,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,MAAM,GAAG,0BAA0B,CAgB5F"}
1
+ {"version":3,"file":"gradio-widget-resource.d.ts","sourceRoot":"","sources":["../../../src/server/resources/gradio-widget-resource.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,WAAW;;;;CAwBhB,CAAC;AAEF,UAAU,0BAA0B;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QACT,kBAAkB,EAAE,OAAO,WAAW,CAAC;QACvC,eAAe,EAAE;YAChB,GAAG,EAAE,OAAO,WAAW,CAAC;SACxB,CAAC;KACF,CAAC;CACF;AAOD,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,MAAM,GAAG,0BAA0B,CAgB5F"}
@@ -0,0 +1,7 @@
1
+ import { type TransportType } from '../shared/constants.js';
2
+ export interface RunApplicationOptions {
3
+ transportType: Exclude<TransportType, 'unknown'>;
4
+ port: number;
5
+ }
6
+ export declare function runApplication(options: RunApplicationOptions): Promise<void>;
7
+ //# sourceMappingURL=run-application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-application.d.ts","sourceRoot":"","sources":["../../src/server/run-application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAK5D,MAAM,WAAW,qBAAqB;IACrC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;CACb;AAkCD,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlF"}
@@ -0,0 +1,42 @@
1
+ import {} from '../shared/constants.js';
2
+ import { Application } from './application.js';
3
+ import { logger } from './utils/logger.js';
4
+ import { WebServer } from './web-server.js';
5
+ function attachShutdownHandlers(app) {
6
+ let shutdownInProgress = false;
7
+ const shutdown = async () => {
8
+ logger.info('Shutting down server...');
9
+ shutdownInProgress = true;
10
+ try {
11
+ await app.stop();
12
+ logger.info('Server shutdown complete');
13
+ }
14
+ catch (error) {
15
+ logger.error({ error }, 'Error during shutdown');
16
+ process.exit(1);
17
+ }
18
+ };
19
+ process.once('SIGINT', () => {
20
+ void shutdown();
21
+ process.once('SIGINT', () => {
22
+ if (shutdownInProgress) {
23
+ logger.warn('Force exit requested, terminating immediately...');
24
+ process.exit(1);
25
+ }
26
+ });
27
+ });
28
+ process.once('SIGTERM', () => {
29
+ void shutdown();
30
+ });
31
+ }
32
+ export async function runApplication(options) {
33
+ const webServer = new WebServer();
34
+ const app = new Application({
35
+ transportType: options.transportType,
36
+ webAppPort: options.port,
37
+ webServerInstance: webServer,
38
+ });
39
+ await app.start();
40
+ attachShutdownHandlers(app);
41
+ }
42
+ //# sourceMappingURL=run-application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-application.js","sourceRoot":"","sources":["../../src/server/run-application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,SAAS,sBAAsB,CAAC,GAAgB;IAC/C,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACvC,kBAAkB,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC;YACJ,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC3B,KAAK,QAAQ,EAAE,CAAC;QAGhB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,IAAI,kBAAkB,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;QAC5B,KAAK,QAAQ,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA8B;IAClE,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC;QAC3B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,OAAO,CAAC,IAAI;QACxB,iBAAiB,EAAE,SAAS;KAC5B,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IAClB,sBAAsB,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
@@ -1,11 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  process.env.NODE_ENV = process.env.NODE_ENV || 'production';
3
3
  process.env.TRANSPORT = process.env.TRANSPORT || 'STDIO';
4
- import { Application } from './application.js';
5
- import { WebServer } from './web-server.js';
6
4
  import { DEFAULT_WEB_APP_PORT } from '../shared/constants.js';
7
5
  import { parseArgs } from 'node:util';
8
6
  import { logger, forceLoggerToStderr } from './utils/logger.js';
7
+ import { runApplication } from './run-application.js';
9
8
  forceLoggerToStderr();
10
9
  const { values } = parseArgs({
11
10
  options: {
@@ -16,37 +15,9 @@ const { values } = parseArgs({
16
15
  logger.info('Starting (STDIO) server...');
17
16
  const port = parseInt(values.port || process.env.WEB_APP_PORT || DEFAULT_WEB_APP_PORT.toString());
18
17
  async function main() {
19
- const webServer = new WebServer();
20
- const app = new Application({
18
+ await runApplication({
21
19
  transportType: 'stdio',
22
- webAppPort: port,
23
- webServerInstance: webServer,
24
- });
25
- await app.start();
26
- let shutdownInProgress = false;
27
- const shutdown = async () => {
28
- logger.info('Shutting down server...');
29
- shutdownInProgress = true;
30
- try {
31
- await app.stop();
32
- logger.info('Server shutdown complete');
33
- }
34
- catch (error) {
35
- logger.error({ error }, 'Error during shutdown');
36
- process.exit(1);
37
- }
38
- };
39
- process.once('SIGINT', () => {
40
- void shutdown();
41
- process.once('SIGINT', () => {
42
- if (shutdownInProgress) {
43
- logger.warn('Force exit requested, terminating immediately...');
44
- process.exit(1);
45
- }
46
- });
47
- });
48
- process.once('SIGTERM', () => {
49
- void shutdown();
20
+ port,
50
21
  });
51
22
  }
52
23
  main().catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/server/stdio.ts"],"names":[],"mappings":";AAGA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC;AAC5D,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGhE,mBAAmB,EAAE,CAAC;AAGtB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE;QACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;KACpC;IACD,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAE1C,MAAM,IAAI,GAAG,QAAQ,CAAE,MAAM,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC;AAE9G,KAAK,UAAU,IAAI;IAElB,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAGlC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC;QAC3B,aAAa,EAAE,OAAO;QACtB,UAAU,EAAE,IAAI;QAChB,iBAAiB,EAAE,SAAS;KAC5B,CAAC,CAAC;IAGH,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IAGlB,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACvC,kBAAkB,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC;YACJ,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC3B,KAAK,QAAQ,EAAE,CAAC;QAEhB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,IAAI,kBAAkB,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;QAC5B,KAAK,QAAQ,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC/B,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/server/stdio.ts"],"names":[],"mappings":";AAGA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC;AAC5D,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,mBAAmB,EAAE,CAAC;AAGtB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE;QACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;KACpC;IACD,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAE1C,MAAM,IAAI,GAAG,QAAQ,CAAE,MAAM,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC;AAE9G,KAAK,UAAU,IAAI;IAClB,MAAM,cAAc,CAAC;QACpB,aAAa,EAAE,OAAO;QACtB,IAAI;KACJ,CAAC,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC/B,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { Application } from './application.js';
3
- import { WebServer } from './web-server.js';
4
2
  import { DEFAULT_WEB_APP_PORT } from '../shared/constants.js';
5
3
  import { parseArgs } from 'node:util';
6
4
  import { logger } from './utils/logger.js';
5
+ import { runApplication } from './run-application.js';
7
6
  const { values } = parseArgs({
8
7
  options: {
9
8
  port: { type: 'string', short: 'p' },
@@ -20,37 +19,9 @@ const port = parseInt(values.port || process.env.WEB_APP_PORT || DEFAULT_WEB_APP
20
19
  async function start() {
21
20
  const useJsonMode = values.json || false;
22
21
  const transportType = useJsonMode ? 'streamableHttpJson' : 'streamableHttp';
23
- const webServer = new WebServer();
24
- const app = new Application({
22
+ await runApplication({
25
23
  transportType,
26
- webAppPort: port,
27
- webServerInstance: webServer,
28
- });
29
- await app.start();
30
- let shutdownInProgress = false;
31
- const shutdown = async () => {
32
- logger.info('Shutting down server...');
33
- shutdownInProgress = true;
34
- try {
35
- await app.stop();
36
- logger.info('Server shutdown complete');
37
- }
38
- catch (error) {
39
- logger.error({ error }, 'Error during shutdown');
40
- process.exit(1);
41
- }
42
- };
43
- process.once('SIGINT', () => {
44
- void shutdown();
45
- process.once('SIGINT', () => {
46
- if (shutdownInProgress) {
47
- logger.warn('Force exit requested, terminating immediately...');
48
- process.exit(1);
49
- }
50
- });
51
- });
52
- process.once('SIGTERM', () => {
53
- void shutdown();
24
+ port,
54
25
  });
55
26
  }
56
27
  start().catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"streamableHttp.js","sourceRoot":"","sources":["../../src/server/streamableHttp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamableHttp.js","sourceRoot":"","sources":["../../src/server/streamableHttp.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE;QACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;QACpC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;KACrC;IACD,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;AAClD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAC3C,CAAC;AAGD,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC;AAG5D,MAAM,IAAI,GAAG,QAAQ,CAAE,MAAM,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC;AAE9G,KAAK,UAAU,KAAK;IACnB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC;IAGzC,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAE5E,MAAM,cAAc,CAAC;QACpB,aAAa;QACb,IAAI;KACJ,CAAC,CAAC;AACJ,CAAC;AAGD,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAChC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- export declare const JSON_RPC_ERROR_CODES: {
1
+ declare const JSON_RPC_ERROR_CODES: {
2
2
  readonly PARSE_ERROR: -32700;
3
3
  readonly INVALID_REQUEST: -32600;
4
4
  readonly METHOD_NOT_FOUND: -32601;
@@ -11,8 +11,8 @@ export declare const JSON_RPC_ERROR_CODES: {
11
11
  readonly STALE_CONNECTION: -32004;
12
12
  readonly AUTHENTICATION_FAILED: -32005;
13
13
  };
14
- export type JsonRpcErrorCode = (typeof JSON_RPC_ERROR_CODES)[keyof typeof JSON_RPC_ERROR_CODES];
15
- export interface JsonRpcError {
14
+ type JsonRpcErrorCode = (typeof JSON_RPC_ERROR_CODES)[keyof typeof JSON_RPC_ERROR_CODES];
15
+ interface JsonRpcError {
16
16
  jsonrpc: '2.0';
17
17
  error: {
18
18
  code: JsonRpcErrorCode;
@@ -21,7 +21,6 @@ export interface JsonRpcError {
21
21
  };
22
22
  id: string | number | null;
23
23
  }
24
- export declare function createJsonRpcError(code: JsonRpcErrorCode, message: string, id?: string | number | null, data?: unknown): JsonRpcError;
25
24
  export declare function extractJsonRpcId(body: unknown): string | number | null;
26
25
  export declare const JsonRpcErrors: {
27
26
  readonly internalError: (id?: string | number | null, details?: string) => JsonRpcError;
@@ -33,4 +32,5 @@ export declare const JsonRpcErrors: {
33
32
  readonly invalidRequest: (id?: string | number | null, message?: string) => JsonRpcError;
34
33
  readonly authenticationFailed: (id?: string | number | null, message?: string) => JsonRpcError;
35
34
  };
35
+ export {};
36
36
  //# sourceMappingURL=json-rpc-errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-rpc-errors.d.ts","sourceRoot":"","sources":["../../../src/server/transport/json-rpc-errors.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;CAevB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEhG,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACN,IAAI,EAAE,gBAAgB,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;IACF,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC3B;AAKD,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,EACf,EAAE,GAAE,MAAM,GAAG,MAAM,GAAG,IAAW,EACjC,IAAI,CAAC,EAAE,OAAO,GACZ,YAAY,CAed;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CActE;AAKD,eAAO,MAAM,aAAa;kCACL,MAAM,GAAG,MAAM,GAAG,IAAI,YAAmB,MAAM;sCAG1C,MAAM,OAAM,MAAM,GAAG,MAAM,GAAG,IAAI;0CAG9B,MAAM,OAAM,MAAM,GAAG,MAAM,GAAG,IAAI;uCAGtC,MAAM,GAAG,MAAM,GAAG,IAAI;+CAGb,MAAM,OAAM,MAAM,GAAG,MAAM,GAAG,IAAI;qCAG7C,MAAM,GAAG,MAAM,GAAG,IAAI,YAAkB,MAAM;mCAGhD,MAAM,GAAG,MAAM,GAAG,IAAI,YAAkB,MAAM;yCAGxC,MAAM,GAAG,MAAM,GAAG,IAAI,YAAkB,MAAM;CAEhE,CAAC"}
1
+ {"version":3,"file":"json-rpc-errors.d.ts","sourceRoot":"","sources":["../../../src/server/transport/json-rpc-errors.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,oBAAoB;;;;;;;;;;;;CAehB,CAAC;AAEX,KAAK,gBAAgB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEzF,UAAU,YAAY;IACrB,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACN,IAAI,EAAE,gBAAgB,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;IACF,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC3B;AA8BD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CActE;AAKD,eAAO,MAAM,aAAa;kCACL,MAAM,GAAG,MAAM,GAAG,IAAI,YAAmB,MAAM;sCAG1C,MAAM,OAAM,MAAM,GAAG,MAAM,GAAG,IAAI;0CAG9B,MAAM,OAAM,MAAM,GAAG,MAAM,GAAG,IAAI;uCAGtC,MAAM,GAAG,MAAM,GAAG,IAAI;+CAGb,MAAM,OAAM,MAAM,GAAG,MAAM,GAAG,IAAI;qCAG7C,MAAM,GAAG,MAAM,GAAG,IAAI,YAAkB,MAAM;mCAGhD,MAAM,GAAG,MAAM,GAAG,IAAI,YAAkB,MAAM;yCAGxC,MAAM,GAAG,MAAM,GAAG,IAAI,YAAkB,MAAM;CAEhE,CAAC"}
@@ -1,4 +1,4 @@
1
- export const JSON_RPC_ERROR_CODES = {
1
+ const JSON_RPC_ERROR_CODES = {
2
2
  PARSE_ERROR: -32700,
3
3
  INVALID_REQUEST: -32600,
4
4
  METHOD_NOT_FOUND: -32601,
@@ -11,7 +11,7 @@ export const JSON_RPC_ERROR_CODES = {
11
11
  STALE_CONNECTION: -32004,
12
12
  AUTHENTICATION_FAILED: -32005,
13
13
  };
14
- export function createJsonRpcError(code, message, id = null, data) {
14
+ function createJsonRpcError(code, message, id = null, data) {
15
15
  const error = {
16
16
  jsonrpc: '2.0',
17
17
  error: {
@@ -1 +1 @@
1
- {"version":3,"file":"json-rpc-errors.js","sourceRoot":"","sources":["../../../src/server/transport/json-rpc-errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-rpc-errors.js","sourceRoot":"","sources":["../../../src/server/transport/json-rpc-errors.ts"],"names":[],"mappings":"AACA,MAAM,oBAAoB,GAAG;IAE5B,WAAW,EAAE,CAAC,KAAK;IACnB,eAAe,EAAE,CAAC,KAAK;IACvB,gBAAgB,EAAE,CAAC,KAAK;IACxB,cAAc,EAAE,CAAC,KAAK;IACtB,cAAc,EAAE,CAAC,KAAK;IAGtB,YAAY,EAAE,CAAC,KAAK;IACpB,iBAAiB,EAAE,CAAC,KAAK;IACzB,oBAAoB,EAAE,CAAC,KAAK;IAC5B,sBAAsB,EAAE,CAAC,KAAK;IAC9B,gBAAgB,EAAE,CAAC,KAAK;IACxB,qBAAqB,EAAE,CAAC,KAAK;CACpB,CAAC;AAiBX,SAAS,kBAAkB,CAC1B,IAAsB,EACtB,OAAe,EACf,KAA6B,IAAI,EACjC,IAAc;IAEd,MAAM,KAAK,GAAiB;QAC3B,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACN,IAAI;YACJ,OAAO;SACP;QACD,EAAE;KACF,CAAC;IAEF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC7C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACtD,MAAM,EAAE,GAAI,IAAwB,CAAC,EAAE,CAAC;QACxC,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACX,CAAC;QACD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAKD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,aAAa,EAAE,CAAC,KAA6B,IAAI,EAAE,OAAgB,EAAE,EAAE,CACtE,kBAAkB,CAAC,oBAAoB,CAAC,cAAc,EAAE,OAAO,IAAI,uBAAuB,EAAE,EAAE,CAAC;IAEhG,aAAa,EAAE,CAAC,OAAe,EAAE,KAA6B,IAAI,EAAE,EAAE,CACrE,kBAAkB,CAAC,oBAAoB,CAAC,cAAc,EAAE,mBAAmB,OAAO,EAAE,EAAE,EAAE,CAAC;IAE1F,eAAe,EAAE,CAAC,SAAiB,EAAE,KAA6B,IAAI,EAAE,EAAE,CACzE,kBAAkB,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;IAEnG,kBAAkB,EAAE,CAAC,KAA6B,IAAI,EAAE,EAAE,CACzD,kBAAkB,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,EAAE,CAAC;IAE7F,oBAAoB,EAAE,CAAC,SAAiB,EAAE,KAA6B,IAAI,EAAE,EAAE,CAC9E,kBAAkB,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;IAE7G,gBAAgB,EAAE,CAAC,KAA6B,IAAI,EAAE,UAAkB,oBAAoB,EAAE,EAAE,CAC/F,kBAAkB,CAAC,oBAAoB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;IAEnE,cAAc,EAAE,CAAC,KAA6B,IAAI,EAAE,UAAkB,iBAAiB,EAAE,EAAE,CAC1F,kBAAkB,CAAC,oBAAoB,CAAC,eAAe,EAAE,OAAO,EAAE,EAAE,CAAC;IAEtE,oBAAoB,EAAE,CAAC,KAA6B,IAAI,EAAE,UAAkB,uBAAuB,EAAE,EAAE,CACtG,kBAAkB,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC;CACnE,CAAC"}
@@ -1,4 +1,4 @@
1
- export interface ApiCallMetrics {
1
+ interface ApiCallMetrics {
2
2
  anonymous: number;
3
3
  authenticated: number;
4
4
  unauthorized: number;
@@ -1 +1 @@
1
- {"version":3,"file":"api-metrics.d.ts","sourceRoot":"","sources":["../../../src/server/utils/api-metrics.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,cAAM,mBAAmB;IACxB,OAAO,CAAC,OAAO,CAKb;IAOF,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBnD,UAAU,IAAI,cAAc;IAO5B,YAAY,IAAI,IAAI;CAQpB;AAGD,eAAO,MAAM,UAAU,qBAA4B,CAAC"}
1
+ {"version":3,"file":"api-metrics.d.ts","sourceRoot":"","sources":["../../../src/server/utils/api-metrics.ts"],"names":[],"mappings":"AAKA,UAAU,cAAc;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,cAAM,mBAAmB;IACxB,OAAO,CAAC,OAAO,CAKb;IAOF,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBnD,UAAU,IAAI,cAAc;IAO5B,YAAY,IAAI,IAAI;CAQpB;AAGD,eAAO,MAAM,UAAU,qBAA4B,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { McpApiClient } from './mcp-api-client.js';
3
- export interface RegisterCapabilitiesOptions {
3
+ interface RegisterCapabilitiesOptions {
4
4
  hasResources?: boolean;
5
5
  }
6
6
  export declare function registerCapabilities(server: McpServer, sharedApiClient: McpApiClient, options?: RegisterCapabilitiesOptions): void;
7
+ export {};
7
8
  //# sourceMappingURL=capability-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capability-utils.d.ts","sourceRoot":"","sources":["../../../src/server/utils/capability-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,WAAW,2BAA2B;IAK3C,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAcD,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,YAAY,EAC7B,OAAO,GAAE,2BAAgC,GACvC,IAAI,CA+BN"}
1
+ {"version":3,"file":"capability-utils.d.ts","sourceRoot":"","sources":["../../../src/server/utils/capability-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,UAAU,2BAA2B;IAKpC,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAcD,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,YAAY,EAC7B,OAAO,GAAE,2BAAgC,GACvC,IAAI,CA+BN"}
@@ -24,7 +24,7 @@ export interface CachedSchema {
24
24
  tools: Tool[];
25
25
  fetchedAt: number;
26
26
  }
27
- export interface CacheStats {
27
+ interface CacheStats {
28
28
  metadataHits: number;
29
29
  metadataMisses: number;
30
30
  metadataEtagRevalidations: number;
@@ -1 +1 @@
1
- {"version":3,"file":"gradio-cache.d.ts","sourceRoot":"","sources":["../../../src/server/utils/gradio-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gradio-cache.d.ts","sourceRoot":"","sources":["../../../src/server/utils/gradio-cache.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAK/D,eAAO,MAAM,YAAY;;;;;;CAexB,CAAC;AAQF,MAAM,WAAW,mBAAmB;IAEnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IAGZ,OAAO,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAGF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AAQD,MAAM,WAAW,YAAY;IAE5B,KAAK,EAAE,IAAI,EAAE,CAAC;IAGd,SAAS,EAAE,MAAM,CAAC;CAClB;AAKD,UAAU,UAAU;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB,EAAE,MAAM,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACxB;AAKD,cAAM,kBAAkB;IACvB,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,KAAK,CAIX;IAQF,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IA2BlD,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAOjE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAQ3D,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYxC,KAAK,IAAI,IAAI;IAWb,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAQrF;AAKD,cAAM,WAAW;IAChB,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,KAAK,CAGX;IAQF,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IA2B3C,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAQlD,KAAK,IAAI,IAAI;IAUb,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAO1D;AAKD,eAAO,MAAM,kBAAkB,oBAA2B,CAAC;AAC3D,eAAO,MAAM,WAAW,aAAoB,CAAC;AAK7C,wBAAgB,aAAa,IAAI,UAAU,CAa1C;AAKD,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAKD,wBAAgB,aAAa,IAAI,IAAI,CA+BpC;AAKD,wBAAgB,wBAAwB,IAAI;IAC3C,aAAa,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACvB,CAsCA"}
@@ -1,5 +1,5 @@
1
1
  import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
- export interface GradioSpaceInfo {
2
+ interface GradioSpaceInfo {
3
3
  name: string;
4
4
  subdomain: string;
5
5
  _id: string;
@@ -13,11 +13,12 @@ export interface GradioSpaceInfo {
13
13
  };
14
14
  cached: boolean;
15
15
  }
16
- export interface GetGradioSpacesOptions {
16
+ interface GetGradioSpacesOptions {
17
17
  skipSchemas?: boolean;
18
18
  includeRuntime?: boolean;
19
19
  timeout?: number;
20
20
  }
21
21
  export declare function getGradioSpaces(spaceNames: string[], hfToken?: string, options?: GetGradioSpacesOptions): Promise<GradioSpaceInfo[]>;
22
22
  export declare function getGradioSpace(spaceName: string, hfToken?: string, options?: GetGradioSpacesOptions): Promise<GradioSpaceInfo | null>;
23
+ export {};
23
24
  //# sourceMappingURL=gradio-discovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gradio-discovery.d.ts","sourceRoot":"","sources":["../../../src/server/utils/gradio-discovery.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAgB/D,MAAM,WAAW,eAAe;IAE/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IAGd,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IAGZ,KAAK,EAAE,IAAI,EAAE,CAAC;IAGd,OAAO,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAGF,MAAM,EAAE,OAAO,CAAC;CAChB;AAKD,MAAM,WAAW,sBAAsB;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AA4ZD,wBAAsB,eAAe,CACpC,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAAC,eAAe,EAAE,CAAC,CAyD5B;AAkBD,wBAAsB,cAAc,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAGjC"}
1
+ {"version":3,"file":"gradio-discovery.d.ts","sourceRoot":"","sources":["../../../src/server/utils/gradio-discovery.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAmB/D,UAAU,eAAe;IAExB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IAGd,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IAGZ,KAAK,EAAE,IAAI,EAAE,CAAC;IAGd,OAAO,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAGF,MAAM,EAAE,OAAO,CAAC;CAChB;AAKD,UAAU,sBAAsB;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AA+ZD,wBAAsB,eAAe,CACpC,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAAC,eAAe,EAAE,CAAC,CAgE5B;AAmBD,wBAAsB,cAAc,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAGjC"}
@@ -2,6 +2,8 @@ import { logger } from './logger.js';
2
2
  import { gradioMetrics } from './gradio-metrics.js';
3
3
  import { spaceMetadataCache, schemaCache, CACHE_CONFIG, logCacheStats, } from './gradio-cache.js';
4
4
  import { parseSchemaResponse } from '../gradio-endpoint-connector.js';
5
+ import { fetchWithProfile, NETWORK_FETCH_PROFILES } from '@llmindset/hf-mcp/network';
6
+ const HF_HUB_PROFILE = NETWORK_FETCH_PROFILES.hfHub();
5
7
  async function fetchSpaceMetadata(spaceName, hfToken, options) {
6
8
  const timeout = options?.timeout || CACHE_CONFIG.SPACE_INFO_TIMEOUT;
7
9
  try {
@@ -13,62 +15,56 @@ async function fetchSpaceMetadata(spaceName, hfToken, options) {
13
15
  const stale = spaceMetadataCache.getForRevalidation(spaceName);
14
16
  const etag = stale?.etag;
15
17
  logger.debug({ spaceName, hasEtag: !!etag }, 'Fetching space metadata from HuggingFace API');
16
- const controller = new AbortController();
17
- const timeoutId = setTimeout(() => controller.abort(), timeout);
18
- try {
19
- const additionalFields = ['subdomain', 'private', 'sdk'];
20
- if (options?.includeRuntime) {
21
- additionalFields.push('runtime');
22
- }
23
- const url = `https://huggingface.co/api/spaces/${spaceName}`;
24
- const headers = {};
25
- if (hfToken) {
26
- headers['Authorization'] = `Bearer ${hfToken}`;
27
- }
28
- if (etag) {
29
- headers['If-None-Match'] = etag;
30
- }
31
- const response = await fetch(url, {
18
+ const additionalFields = ['subdomain', 'private', 'sdk'];
19
+ if (options?.includeRuntime) {
20
+ additionalFields.push('runtime');
21
+ }
22
+ const url = `https://huggingface.co/api/spaces/${spaceName}`;
23
+ const headers = {};
24
+ if (hfToken) {
25
+ headers['Authorization'] = `Bearer ${hfToken}`;
26
+ }
27
+ if (etag) {
28
+ headers['If-None-Match'] = etag;
29
+ }
30
+ const { response } = await fetchWithProfile(url, HF_HUB_PROFILE, {
31
+ timeoutMs: timeout,
32
+ requestInit: {
32
33
  headers,
33
- signal: controller.signal,
34
- });
35
- clearTimeout(timeoutId);
36
- if (response.status === 304 && stale) {
37
- logger.debug({ spaceName }, 'Space metadata not modified (304), using cached data');
38
- spaceMetadataCache.updateTimestamp(spaceName);
39
- return { success: true, metadata: stale, cached: true };
40
- }
41
- if (!response.ok) {
42
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
43
- }
44
- const info = await response.json();
45
- const newEtag = response.headers.get('etag') || undefined;
46
- if (!info.subdomain) {
47
- throw new Error('Space does not have a subdomain');
48
- }
49
- const metadata = {
50
- _id: info._id || `gradio_${info.subdomain}`,
51
- name: spaceName,
52
- subdomain: info.subdomain,
53
- emoji: '🔧',
54
- private: info.private || false,
55
- sdk: info.sdk || 'gradio',
56
- runtime: info.runtime,
57
- etag: newEtag,
58
- fetchedAt: Date.now(),
59
- };
60
- if (!metadata.private) {
61
- spaceMetadataCache.set(spaceName, metadata);
62
- logger.debug({ spaceName, subdomain: metadata.subdomain, hasEtag: !!newEtag }, 'Space metadata fetched and cached');
63
- }
64
- else {
65
- logger.debug({ spaceName, subdomain: metadata.subdomain }, 'Private space metadata fetched (not cached)');
66
- }
67
- return { success: true, metadata, cached: false };
34
+ },
35
+ });
36
+ if (response.status === 304 && stale) {
37
+ logger.debug({ spaceName }, 'Space metadata not modified (304), using cached data');
38
+ spaceMetadataCache.updateTimestamp(spaceName);
39
+ return { success: true, metadata: stale, cached: true };
40
+ }
41
+ if (!response.ok) {
42
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
43
+ }
44
+ const info = (await response.json());
45
+ const newEtag = response.headers.get('etag') || undefined;
46
+ if (!info.subdomain) {
47
+ throw new Error('Space does not have a subdomain');
68
48
  }
69
- finally {
70
- clearTimeout(timeoutId);
49
+ const metadata = {
50
+ _id: info._id || `gradio_${info.subdomain}`,
51
+ name: spaceName,
52
+ subdomain: info.subdomain,
53
+ emoji: '🔧',
54
+ private: info.private || false,
55
+ sdk: info.sdk || 'gradio',
56
+ runtime: info.runtime,
57
+ etag: newEtag,
58
+ fetchedAt: Date.now(),
59
+ };
60
+ if (!metadata.private) {
61
+ spaceMetadataCache.set(spaceName, metadata);
62
+ logger.debug({ spaceName, subdomain: metadata.subdomain, hasEtag: !!newEtag }, 'Space metadata fetched and cached');
63
+ }
64
+ else {
65
+ logger.debug({ spaceName, subdomain: metadata.subdomain }, 'Private space metadata fetched (not cached)');
71
66
  }
67
+ return { success: true, metadata, cached: false };
72
68
  }
73
69
  catch (error) {
74
70
  logger.warn({
@@ -95,7 +91,7 @@ async function fetchSpaceMetadataWithCache(spaceNames, hfToken, options) {
95
91
  batchSize: concurrency,
96
92
  }, 'Fetching space metadata in parallel batches');
97
93
  for (const batch of batches) {
98
- const batchPromises = batch.map(spaceName => fetchSpaceMetadata(spaceName, hfToken, options));
94
+ const batchPromises = batch.map((spaceName) => fetchSpaceMetadata(spaceName, hfToken, options));
99
95
  const batchResults = await Promise.all(batchPromises);
100
96
  for (const result of batchResults) {
101
97
  if (result.success) {
@@ -127,52 +123,46 @@ async function fetchSchema(metadata, hfToken, options) {
127
123
  if (metadata.private && hfToken) {
128
124
  headers['X-HF-Authorization'] = `Bearer ${hfToken}`;
129
125
  }
130
- const controller = new AbortController();
131
- const timeoutId = setTimeout(() => controller.abort(), timeout);
132
- try {
133
- const response = await fetch(schemaUrl, {
126
+ const { response } = await fetchWithProfile(schemaUrl, NETWORK_FETCH_PROFILES.gradioSchemaHost(`${metadata.subdomain}.hf.space`), {
127
+ timeoutMs: timeout,
128
+ requestInit: {
134
129
  method: 'GET',
135
130
  headers,
136
- signal: controller.signal,
137
- });
138
- clearTimeout(timeoutId);
139
- if (!response.ok) {
140
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
141
- }
142
- const schemaResponse = await response.json();
143
- const endpointId = `gradio_${metadata.subdomain}`;
144
- const parsed = parseSchemaResponse(schemaResponse, endpointId, metadata.subdomain);
145
- const tools = parsed
146
- .filter((parsedTool) => !parsedTool.name.toLowerCase().includes('<lambda'))
147
- .map((parsedTool) => {
148
- const inputSchema = parsedTool.inputSchema;
149
- return {
150
- name: parsedTool.name,
151
- description: parsedTool.description || `${parsedTool.name} tool`,
152
- inputSchema: {
153
- type: 'object',
154
- properties: inputSchema.properties || {},
155
- required: inputSchema.required || [],
156
- description: inputSchema.description,
157
- },
158
- };
159
- });
160
- const schema = {
161
- tools,
162
- fetchedAt: Date.now(),
131
+ },
132
+ });
133
+ if (!response.ok) {
134
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
135
+ }
136
+ const schemaResponse = (await response.json());
137
+ const endpointId = `gradio_${metadata.subdomain}`;
138
+ const parsed = parseSchemaResponse(schemaResponse, endpointId, metadata.subdomain);
139
+ const tools = parsed
140
+ .filter((parsedTool) => !parsedTool.name.toLowerCase().includes('<lambda'))
141
+ .map((parsedTool) => {
142
+ const inputSchema = parsedTool.inputSchema;
143
+ return {
144
+ name: parsedTool.name,
145
+ description: parsedTool.description || `${parsedTool.name} tool`,
146
+ inputSchema: {
147
+ type: 'object',
148
+ properties: inputSchema.properties || {},
149
+ required: inputSchema.required || [],
150
+ description: inputSchema.description,
151
+ },
163
152
  };
164
- if (!metadata.private) {
165
- schemaCache.set(spaceName, schema);
166
- logger.debug({ spaceName, toolCount: tools.length }, 'Schema fetched and cached');
167
- }
168
- else {
169
- logger.debug({ spaceName, toolCount: tools.length }, 'Private space schema fetched (not cached)');
170
- }
171
- return { success: true, spaceName, schema, cached: false };
153
+ });
154
+ const schema = {
155
+ tools,
156
+ fetchedAt: Date.now(),
157
+ };
158
+ if (!metadata.private) {
159
+ schemaCache.set(spaceName, schema);
160
+ logger.debug({ spaceName, toolCount: tools.length }, 'Schema fetched and cached');
172
161
  }
173
- finally {
174
- clearTimeout(timeoutId);
162
+ else {
163
+ logger.debug({ spaceName, toolCount: tools.length }, 'Private space schema fetched (not cached)');
175
164
  }
165
+ return { success: true, spaceName, schema, cached: false };
176
166
  }
177
167
  catch (error) {
178
168
  const isFirstError = gradioMetrics.schemaFetchError(spaceName);
@@ -195,7 +185,7 @@ async function fetchSchemasWithCache(metadataList, hfToken, options) {
195
185
  return results;
196
186
  }
197
187
  logger.debug({ count: metadataList.length }, 'Fetching schemas in parallel');
198
- const schemaPromises = metadataList.map(metadata => fetchSchema(metadata, hfToken, options));
188
+ const schemaPromises = metadataList.map((metadata) => fetchSchema(metadata, hfToken, options));
199
189
  const schemaResults = await Promise.all(schemaPromises);
200
190
  for (const result of schemaResults) {
201
191
  if (result.success) {
@@ -248,7 +238,7 @@ export async function getGradioSpaces(spaceNames, hfToken, options) {
248
238
  timeout: options?.timeout,
249
239
  concurrency: CACHE_CONFIG.DISCOVERY_CONCURRENCY,
250
240
  });
251
- const gradioMetadata = Array.from(metadataMap.values()).filter(m => m.sdk === 'gradio' && m.subdomain);
241
+ const gradioMetadata = Array.from(metadataMap.values()).filter((m) => m.sdk === 'gradio' && m.subdomain);
252
242
  logger.debug({
253
243
  total: metadataMap.size,
254
244
  gradio: gradioMetadata.length,