easy-mcp-nest 0.3.0 → 0.5.0

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 (96) hide show
  1. package/README.md +280 -29
  2. package/dist/EasyMCP.js +0 -3
  3. package/dist/EasyMCP.js.map +1 -1
  4. package/dist/adapters/express/express-adapter.js +10 -0
  5. package/dist/adapters/express/express-adapter.js.map +1 -1
  6. package/dist/config/config-validator.js +36 -14
  7. package/dist/config/config-validator.js.map +1 -1
  8. package/dist/config/mcp-config.interface.d.ts +9 -4
  9. package/dist/core/batch/batch-executor.service.d.ts +21 -0
  10. package/dist/core/batch/batch-executor.service.js +101 -0
  11. package/dist/core/batch/batch-executor.service.js.map +1 -0
  12. package/dist/core/documentation/openapi-generator.service.d.ts +13 -0
  13. package/dist/core/documentation/openapi-generator.service.js +116 -0
  14. package/dist/core/documentation/openapi-generator.service.js.map +1 -0
  15. package/dist/core/errors/error-handler.interface.d.ts +11 -0
  16. package/dist/core/errors/error-handler.interface.js +3 -0
  17. package/dist/core/errors/error-handler.interface.js.map +1 -0
  18. package/dist/core/health/health-check.service.d.ts +33 -0
  19. package/dist/core/health/health-check.service.js +71 -0
  20. package/dist/core/health/health-check.service.js.map +1 -0
  21. package/dist/core/mcp-server/mcp-server.service.d.ts +14 -1
  22. package/dist/core/mcp-server/mcp-server.service.js +198 -4
  23. package/dist/core/mcp-server/mcp-server.service.js.map +1 -1
  24. package/dist/core/middleware/middleware-executor.service.d.ts +8 -0
  25. package/dist/core/middleware/middleware-executor.service.js +46 -0
  26. package/dist/core/middleware/middleware-executor.service.js.map +1 -0
  27. package/dist/core/middleware/middleware.interface.d.ts +6 -0
  28. package/dist/core/middleware/middleware.interface.js +3 -0
  29. package/dist/core/middleware/middleware.interface.js.map +1 -0
  30. package/dist/core/observability/metrics.service.d.ts +29 -0
  31. package/dist/core/observability/metrics.service.js +124 -0
  32. package/dist/core/observability/metrics.service.js.map +1 -0
  33. package/dist/core/observability/tracing.service.d.ts +12 -0
  34. package/dist/core/observability/tracing.service.js +88 -0
  35. package/dist/core/observability/tracing.service.js.map +1 -0
  36. package/dist/core/progress/progress-notifier.service.d.ts +16 -0
  37. package/dist/core/progress/progress-notifier.service.js +96 -0
  38. package/dist/core/progress/progress-notifier.service.js.map +1 -0
  39. package/dist/core/rate-limiting/rate-limit.interface.d.ts +11 -0
  40. package/dist/core/rate-limiting/rate-limit.interface.js +3 -0
  41. package/dist/core/rate-limiting/rate-limit.interface.js.map +1 -0
  42. package/dist/core/rate-limiting/rate-limiter.service.d.ts +13 -0
  43. package/dist/core/rate-limiting/rate-limiter.service.js +147 -0
  44. package/dist/core/rate-limiting/rate-limiter.service.js.map +1 -0
  45. package/dist/core/resilience/circuit-breaker.interface.d.ts +15 -0
  46. package/dist/core/resilience/circuit-breaker.interface.js +3 -0
  47. package/dist/core/resilience/circuit-breaker.interface.js.map +1 -0
  48. package/dist/core/resilience/circuit-breaker.service.d.ts +11 -0
  49. package/dist/core/resilience/circuit-breaker.service.js +117 -0
  50. package/dist/core/resilience/circuit-breaker.service.js.map +1 -0
  51. package/dist/core/resilience/retry.service.d.ts +6 -0
  52. package/dist/core/resilience/retry.service.js +66 -0
  53. package/dist/core/resilience/retry.service.js.map +1 -0
  54. package/dist/core/utils/decorator-scanner.d.ts +4 -0
  55. package/dist/core/utils/decorator-scanner.js +112 -0
  56. package/dist/core/utils/decorator-scanner.js.map +1 -0
  57. package/dist/core/utils/sanitize.util.d.ts +1 -0
  58. package/dist/core/utils/sanitize.util.js +19 -0
  59. package/dist/core/utils/sanitize.util.js.map +1 -1
  60. package/dist/decorators/index.d.ts +3 -0
  61. package/dist/decorators/index.js +12 -1
  62. package/dist/decorators/index.js.map +1 -1
  63. package/dist/decorators/mcp-error-handler.decorator.d.ts +4 -0
  64. package/dist/decorators/mcp-error-handler.decorator.js +15 -0
  65. package/dist/decorators/mcp-error-handler.decorator.js.map +1 -0
  66. package/dist/decorators/mcp-middleware.decorator.d.ts +4 -0
  67. package/dist/decorators/mcp-middleware.decorator.js +17 -0
  68. package/dist/decorators/mcp-middleware.decorator.js.map +1 -0
  69. package/dist/decorators/mcp-tool.decorator.d.ts +28 -0
  70. package/dist/decorators/mcp-tool.decorator.js +36 -0
  71. package/dist/decorators/mcp-tool.decorator.js.map +1 -0
  72. package/dist/index.d.ts +4 -4
  73. package/dist/index.js +5 -1
  74. package/dist/index.js.map +1 -1
  75. package/dist/interface/interface.interface.d.ts +2 -0
  76. package/dist/interface/mcp-protocol.interface.d.ts +14 -0
  77. package/dist/interface/mcp-protocol.interface.js.map +1 -1
  78. package/dist/resources/resource-registry.service.d.ts +3 -2
  79. package/dist/resources/resource-registry.service.js +7 -3
  80. package/dist/resources/resource-registry.service.js.map +1 -1
  81. package/dist/resources/resource.interface.d.ts +2 -1
  82. package/dist/standalone/core-services.d.ts +5 -0
  83. package/dist/standalone/core-services.js +18 -2
  84. package/dist/standalone/core-services.js.map +1 -1
  85. package/dist/tooling/tool-registry/tool-registry.service.d.ts +7 -1
  86. package/dist/tooling/tool-registry/tool-registry.service.js +54 -7
  87. package/dist/tooling/tool-registry/tool-registry.service.js.map +1 -1
  88. package/dist/tooling/tool.interface.d.ts +7 -1
  89. package/dist/tsconfig.build.tsbuildinfo +1 -1
  90. package/dist/validation/index.d.ts +1 -1
  91. package/dist/validation/index.js +2 -1
  92. package/dist/validation/index.js.map +1 -1
  93. package/dist/validation/zod-integration.d.ts +1 -0
  94. package/dist/validation/zod-integration.js +14 -0
  95. package/dist/validation/zod-integration.js.map +1 -1
  96. package/package.json +1 -1
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var BatchExecutorService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.BatchExecutorService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const tool_registry_service_1 = require("../../tooling/tool-registry/tool-registry.service");
16
+ const logger_util_1 = require("../utils/logger.util");
17
+ const sanitize_util_1 = require("../utils/sanitize.util");
18
+ let BatchExecutorService = class BatchExecutorService {
19
+ static { BatchExecutorService_1 = this; }
20
+ toolRegistry;
21
+ static MAX_BATCH_SIZE = 100;
22
+ static MAX_CONCURRENCY = 10;
23
+ constructor(toolRegistry) {
24
+ this.toolRegistry = toolRegistry;
25
+ }
26
+ async executeBatch(requests, cancellationToken, context, progress) {
27
+ if (requests.length === 0) {
28
+ return [];
29
+ }
30
+ if (requests.length > BatchExecutorService_1.MAX_BATCH_SIZE) {
31
+ logger_util_1.logger.warn("BatchExecutorService", `Batch size ${requests.length} exceeds maximum ${BatchExecutorService_1.MAX_BATCH_SIZE}`, {
32
+ component: "Batch",
33
+ batchSize: requests.length,
34
+ maxBatchSize: BatchExecutorService_1.MAX_BATCH_SIZE,
35
+ });
36
+ return requests.slice(0, BatchExecutorService_1.MAX_BATCH_SIZE).map((request) => ({
37
+ tool: request.tool,
38
+ success: false,
39
+ error: "Batch size limit exceeded",
40
+ }));
41
+ }
42
+ progress?.({ progress: 0, message: `Executing ${requests.length} tools...` });
43
+ const results = [];
44
+ const concurrency = Math.min(BatchExecutorService_1.MAX_CONCURRENCY, requests.length);
45
+ for (let i = 0; i < requests.length; i += concurrency) {
46
+ const batch = requests.slice(i, i + concurrency);
47
+ const batchPromises = batch.map(async (request, batchIndex) => {
48
+ const index = i + batchIndex;
49
+ if (cancellationToken?.isCancelled) {
50
+ return {
51
+ tool: request.tool,
52
+ success: false,
53
+ error: "Batch cancelled",
54
+ };
55
+ }
56
+ try {
57
+ const result = await this.toolRegistry.executeTool(request.tool, request.args, cancellationToken, context, progress
58
+ ? (p) => {
59
+ const baseProgress = index / requests.length;
60
+ const toolProgress = p.progress / requests.length;
61
+ progress({
62
+ progress: baseProgress + toolProgress,
63
+ message: p.message || `Executing ${request.tool}...`,
64
+ });
65
+ }
66
+ : undefined);
67
+ return {
68
+ tool: request.tool,
69
+ success: true,
70
+ result,
71
+ };
72
+ }
73
+ catch (error) {
74
+ const sanitizedError = (0, sanitize_util_1.sanitizeErrorMessage)(error);
75
+ logger_util_1.logger.error("BatchExecutorService", `Batch tool execution failed: ${request.tool}`, {
76
+ component: "Batch",
77
+ tool: request.tool,
78
+ error: sanitizedError,
79
+ });
80
+ return {
81
+ tool: request.tool,
82
+ success: false,
83
+ error: "Tool execution failed",
84
+ };
85
+ }
86
+ });
87
+ const batchResults = await Promise.all(batchPromises);
88
+ results.push(...batchResults);
89
+ const currentProgress = Math.min((i + batch.length) / requests.length, 1);
90
+ progress?.({ progress: currentProgress, message: `Executing ${requests.length} tools...` });
91
+ }
92
+ progress?.({ progress: 1, message: `Completed ${requests.length} tools` });
93
+ return results;
94
+ }
95
+ };
96
+ exports.BatchExecutorService = BatchExecutorService;
97
+ exports.BatchExecutorService = BatchExecutorService = BatchExecutorService_1 = __decorate([
98
+ (0, common_1.Injectable)(),
99
+ __metadata("design:paramtypes", [tool_registry_service_1.ToolRegistryService])
100
+ ], BatchExecutorService);
101
+ //# sourceMappingURL=batch-executor.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-executor.service.js","sourceRoot":"","sources":["../../../src/core/batch/batch-executor.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { ToolRegistryService } from "../../tooling/tool-registry/tool-registry.service";
2
+ export declare class OpenApiGeneratorService {
3
+ private readonly toolRegistry;
4
+ constructor(toolRegistry: ToolRegistryService);
5
+ generateOpenApiSpec(info: {
6
+ title: string;
7
+ version: string;
8
+ }): any;
9
+ generateMarkdownDocs(info: {
10
+ title: string;
11
+ version: string;
12
+ }): string;
13
+ }
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OpenApiGeneratorService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const tool_registry_service_1 = require("../../tooling/tool-registry/tool-registry.service");
15
+ let OpenApiGeneratorService = class OpenApiGeneratorService {
16
+ toolRegistry;
17
+ constructor(toolRegistry) {
18
+ this.toolRegistry = toolRegistry;
19
+ }
20
+ generateOpenApiSpec(info) {
21
+ const tools = this.toolRegistry.getToolSchemasForLLM();
22
+ const spec = {
23
+ openapi: "3.0.0",
24
+ info: {
25
+ title: info.title,
26
+ version: info.version,
27
+ description: "MCP Server API - Auto-generated from tool definitions",
28
+ },
29
+ paths: {},
30
+ components: {
31
+ schemas: {},
32
+ },
33
+ };
34
+ for (const tool of tools) {
35
+ const path = `/tools/${encodeURIComponent(tool.function.name)}`;
36
+ spec.paths[path] = {
37
+ post: {
38
+ summary: tool.function.description,
39
+ operationId: tool.function.name,
40
+ requestBody: {
41
+ required: true,
42
+ content: {
43
+ "application/json": {
44
+ schema: tool.function.parameters,
45
+ },
46
+ },
47
+ },
48
+ responses: {
49
+ "200": {
50
+ description: "Tool execution result",
51
+ content: {
52
+ "application/json": {
53
+ schema: {
54
+ type: "object",
55
+ properties: {
56
+ content: {
57
+ type: "array",
58
+ items: {
59
+ type: "object",
60
+ properties: {
61
+ type: { type: "string" },
62
+ text: { type: "string" },
63
+ },
64
+ },
65
+ },
66
+ },
67
+ },
68
+ },
69
+ },
70
+ },
71
+ "400": {
72
+ description: "Invalid request",
73
+ },
74
+ "500": {
75
+ description: "Tool execution error",
76
+ },
77
+ },
78
+ },
79
+ };
80
+ }
81
+ return spec;
82
+ }
83
+ generateMarkdownDocs(info) {
84
+ const tools = this.toolRegistry.getToolSchemasForLLM();
85
+ const escapeMarkdown = (text) => {
86
+ if (!text)
87
+ return "";
88
+ return text.replace(/([\\`*_{}[\]()#+-.!])/g, "\\$1");
89
+ };
90
+ let markdown = `# ${escapeMarkdown(info.title)} API Documentation\n\n`;
91
+ markdown += `Version: ${escapeMarkdown(info.version)}\n\n`;
92
+ markdown += `## Tools\n\n`;
93
+ for (const tool of tools) {
94
+ markdown += `### ${escapeMarkdown(tool.function.name)}\n\n`;
95
+ markdown += `${escapeMarkdown(tool.function.description)}\n\n`;
96
+ if (tool.function.parameters.properties) {
97
+ markdown += `#### Parameters\n\n`;
98
+ for (const [paramName, paramDef] of Object.entries(tool.function.parameters.properties)) {
99
+ markdown += `- **${escapeMarkdown(paramName)}** (${escapeMarkdown(String(paramDef.type || "any"))})`;
100
+ if (paramDef.description) {
101
+ markdown += `: ${escapeMarkdown(paramDef.description)}`;
102
+ }
103
+ markdown += `\n`;
104
+ }
105
+ markdown += `\n`;
106
+ }
107
+ }
108
+ return markdown;
109
+ }
110
+ };
111
+ exports.OpenApiGeneratorService = OpenApiGeneratorService;
112
+ exports.OpenApiGeneratorService = OpenApiGeneratorService = __decorate([
113
+ (0, common_1.Injectable)(),
114
+ __metadata("design:paramtypes", [tool_registry_service_1.ToolRegistryService])
115
+ ], OpenApiGeneratorService);
116
+ //# sourceMappingURL=openapi-generator.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-generator.service.js","sourceRoot":"","sources":["../../../src/core/documentation/openapi-generator.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { McpContext } from "../context/mcp-context.interface";
2
+ import { JsonRpcError } from "../../interface/jsonrpc.interface";
3
+ export type ErrorHandler = (error: Error, context: {
4
+ toolName?: string;
5
+ requestId?: string | number | null;
6
+ mcpContext?: McpContext;
7
+ }) => JsonRpcError | Error | null;
8
+ export interface ErrorHandlerConfig {
9
+ handler?: ErrorHandler;
10
+ logErrors?: boolean;
11
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=error-handler.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.interface.js","sourceRoot":"","sources":["../../../src/core/errors/error-handler.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { ToolRegistryService } from "../../tooling/tool-registry/tool-registry.service";
2
+ import { MetricsService } from "../observability/metrics.service";
3
+ export interface HealthCheckResult {
4
+ status: "healthy" | "unhealthy" | "degraded";
5
+ checks: {
6
+ server: {
7
+ status: string;
8
+ uptime: number;
9
+ };
10
+ tools: {
11
+ status: string;
12
+ count: number;
13
+ };
14
+ metrics?: {
15
+ status: string;
16
+ activeRequests: number;
17
+ };
18
+ };
19
+ timestamp: string;
20
+ }
21
+ export declare class HealthCheckService {
22
+ private readonly toolRegistry;
23
+ private readonly metricsService?;
24
+ constructor(toolRegistry: ToolRegistryService, metricsService?: MetricsService | undefined);
25
+ checkHealth(): Promise<HealthCheckResult>;
26
+ checkReadiness(): Promise<{
27
+ ready: boolean;
28
+ reason?: string;
29
+ }>;
30
+ checkLiveness(): Promise<{
31
+ alive: boolean;
32
+ }>;
33
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.HealthCheckService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const tool_registry_service_1 = require("../../tooling/tool-registry/tool-registry.service");
18
+ const metrics_service_1 = require("../observability/metrics.service");
19
+ let HealthCheckService = class HealthCheckService {
20
+ toolRegistry;
21
+ metricsService;
22
+ constructor(toolRegistry, metricsService) {
23
+ this.toolRegistry = toolRegistry;
24
+ this.metricsService = metricsService;
25
+ }
26
+ async checkHealth() {
27
+ const tools = this.toolRegistry.getToolSchemasForLLM();
28
+ const toolCount = tools.length;
29
+ const checks = {
30
+ server: {
31
+ status: "healthy",
32
+ uptime: process.uptime(),
33
+ },
34
+ tools: {
35
+ status: toolCount > 0 ? "healthy" : "unhealthy",
36
+ count: toolCount,
37
+ },
38
+ };
39
+ if (this.metricsService) {
40
+ const serverMetrics = this.metricsService.getServerMetrics();
41
+ checks.metrics = {
42
+ status: serverMetrics.activeRequests < 100 ? "healthy" : "degraded",
43
+ activeRequests: serverMetrics.activeRequests,
44
+ };
45
+ }
46
+ const allHealthy = Object.values(checks).every((check) => check.status === "healthy" || check.status === "degraded");
47
+ return {
48
+ status: allHealthy ? "healthy" : "unhealthy",
49
+ checks,
50
+ timestamp: new Date().toISOString(),
51
+ };
52
+ }
53
+ async checkReadiness() {
54
+ const tools = this.toolRegistry.getToolSchemasForLLM();
55
+ if (tools.length === 0) {
56
+ return { ready: false, reason: "No tools registered" };
57
+ }
58
+ return { ready: true };
59
+ }
60
+ async checkLiveness() {
61
+ return { alive: true };
62
+ }
63
+ };
64
+ exports.HealthCheckService = HealthCheckService;
65
+ exports.HealthCheckService = HealthCheckService = __decorate([
66
+ (0, common_1.Injectable)(),
67
+ __param(1, (0, common_1.Optional)()),
68
+ __metadata("design:paramtypes", [tool_registry_service_1.ToolRegistryService,
69
+ metrics_service_1.MetricsService])
70
+ ], HealthCheckService);
71
+ //# sourceMappingURL=health-check.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-check.service.js","sourceRoot":"","sources":["../../../src/core/health/health-check.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA8D;AAC9D,6FAAwF;AACxF,sEAAkE;AAmB3D,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAEV;IACY;IAF/B,YACmB,YAAiC,EACrB,cAA+B;QAD3C,iBAAY,GAAZ,YAAY,CAAqB;QACrB,mBAAc,GAAd,cAAc,CAAiB;IAC3D,CAAC;IAKJ,KAAK,CAAC,WAAW;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;QAE/B,MAAM,MAAM,GAAgC;YAC1C,MAAM,EAAE;gBACN,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;aACzB;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;gBAC/C,KAAK,EAAE,SAAS;aACjB;SACF,CAAC;QAEF,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;YAC7D,MAAM,CAAC,OAAO,GAAG;gBACf,MAAM,EAAE,aAAa,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;gBACnE,cAAc,EAAE,aAAa,CAAC,cAAc;aAC7C,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CACrE,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YAC5C,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAKD,KAAK,CAAC,cAAc;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAKD,KAAK,CAAC,aAAa;QACjB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AA5DY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,iBAAQ,GAAE,CAAA;qCADoB,2CAAmB;QACJ,gCAAc;GAHnD,kBAAkB,CA4D9B"}
@@ -7,6 +7,12 @@ import { ResourceRegistryService } from "../../resources/resource-registry.servi
7
7
  import { PromptRegistryService } from "../../prompts/prompt-registry.service";
8
8
  import { ConfigHolderService } from "../../config/config-holder.service";
9
9
  import { ContextProviderService } from "../context/context-provider.service";
10
+ import { ProgressNotifierService } from "../progress/progress-notifier.service";
11
+ import { MetricsService } from "../observability/metrics.service";
12
+ import { RateLimiterService } from "../rate-limiting/rate-limiter.service";
13
+ import { RetryService } from "../resilience/retry.service";
14
+ import { CircuitBreakerService } from "../resilience/circuit-breaker.service";
15
+ import { BatchExecutorService } from "../batch/batch-executor.service";
10
16
  export declare class McpServerService implements OnModuleInit {
11
17
  private readonly toolRegistry;
12
18
  private readonly resourceRegistry;
@@ -15,9 +21,15 @@ export declare class McpServerService implements OnModuleInit {
15
21
  private readonly stdioGatewayService;
16
22
  private readonly configHolder;
17
23
  private readonly contextProvider;
24
+ private readonly progressNotifier?;
25
+ private readonly metricsService?;
26
+ private readonly rateLimiter?;
27
+ private readonly retryService?;
28
+ private readonly circuitBreaker?;
29
+ private readonly batchExecutor?;
18
30
  private clientIdentifier;
19
31
  private readonly cancellationTokens;
20
- constructor(toolRegistry: ToolRegistryService, resourceRegistry: ResourceRegistryService, promptRegistry: PromptRegistryService, interfaceLayer: IInterfaceLayer, stdioGatewayService: StdioGatewayService, configHolder: ConfigHolderService, contextProvider: ContextProviderService);
32
+ constructor(toolRegistry: ToolRegistryService, resourceRegistry: ResourceRegistryService, promptRegistry: PromptRegistryService, interfaceLayer: IInterfaceLayer, stdioGatewayService: StdioGatewayService, configHolder: ConfigHolderService, contextProvider: ContextProviderService, progressNotifier?: ProgressNotifierService | undefined, metricsService?: MetricsService | undefined, rateLimiter?: RateLimiterService | undefined, retryService?: RetryService | undefined, circuitBreaker?: CircuitBreakerService | undefined, batchExecutor?: BatchExecutorService | undefined);
21
33
  private getServerInfo;
22
34
  private getActorIdentifier;
23
35
  onModuleInit(): void;
@@ -26,6 +38,7 @@ export declare class McpServerService implements OnModuleInit {
26
38
  private handleInitialize;
27
39
  private handleListTools;
28
40
  private handleCallTool;
41
+ private handleBatchTools;
29
42
  private handleCancelRequest;
30
43
  private handleListResources;
31
44
  private handleReadResource;