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.
- package/README.md +280 -29
- package/dist/EasyMCP.js +0 -3
- package/dist/EasyMCP.js.map +1 -1
- package/dist/adapters/express/express-adapter.js +10 -0
- package/dist/adapters/express/express-adapter.js.map +1 -1
- package/dist/config/config-validator.js +36 -14
- package/dist/config/config-validator.js.map +1 -1
- package/dist/config/mcp-config.interface.d.ts +9 -4
- package/dist/core/batch/batch-executor.service.d.ts +21 -0
- package/dist/core/batch/batch-executor.service.js +101 -0
- package/dist/core/batch/batch-executor.service.js.map +1 -0
- package/dist/core/documentation/openapi-generator.service.d.ts +13 -0
- package/dist/core/documentation/openapi-generator.service.js +116 -0
- package/dist/core/documentation/openapi-generator.service.js.map +1 -0
- package/dist/core/errors/error-handler.interface.d.ts +11 -0
- package/dist/core/errors/error-handler.interface.js +3 -0
- package/dist/core/errors/error-handler.interface.js.map +1 -0
- package/dist/core/health/health-check.service.d.ts +33 -0
- package/dist/core/health/health-check.service.js +71 -0
- package/dist/core/health/health-check.service.js.map +1 -0
- package/dist/core/mcp-server/mcp-server.service.d.ts +14 -1
- package/dist/core/mcp-server/mcp-server.service.js +198 -4
- package/dist/core/mcp-server/mcp-server.service.js.map +1 -1
- package/dist/core/middleware/middleware-executor.service.d.ts +8 -0
- package/dist/core/middleware/middleware-executor.service.js +46 -0
- package/dist/core/middleware/middleware-executor.service.js.map +1 -0
- package/dist/core/middleware/middleware.interface.d.ts +6 -0
- package/dist/core/middleware/middleware.interface.js +3 -0
- package/dist/core/middleware/middleware.interface.js.map +1 -0
- package/dist/core/observability/metrics.service.d.ts +29 -0
- package/dist/core/observability/metrics.service.js +124 -0
- package/dist/core/observability/metrics.service.js.map +1 -0
- package/dist/core/observability/tracing.service.d.ts +12 -0
- package/dist/core/observability/tracing.service.js +88 -0
- package/dist/core/observability/tracing.service.js.map +1 -0
- package/dist/core/progress/progress-notifier.service.d.ts +16 -0
- package/dist/core/progress/progress-notifier.service.js +96 -0
- package/dist/core/progress/progress-notifier.service.js.map +1 -0
- package/dist/core/rate-limiting/rate-limit.interface.d.ts +11 -0
- package/dist/core/rate-limiting/rate-limit.interface.js +3 -0
- package/dist/core/rate-limiting/rate-limit.interface.js.map +1 -0
- package/dist/core/rate-limiting/rate-limiter.service.d.ts +13 -0
- package/dist/core/rate-limiting/rate-limiter.service.js +147 -0
- package/dist/core/rate-limiting/rate-limiter.service.js.map +1 -0
- package/dist/core/resilience/circuit-breaker.interface.d.ts +15 -0
- package/dist/core/resilience/circuit-breaker.interface.js +3 -0
- package/dist/core/resilience/circuit-breaker.interface.js.map +1 -0
- package/dist/core/resilience/circuit-breaker.service.d.ts +11 -0
- package/dist/core/resilience/circuit-breaker.service.js +117 -0
- package/dist/core/resilience/circuit-breaker.service.js.map +1 -0
- package/dist/core/resilience/retry.service.d.ts +6 -0
- package/dist/core/resilience/retry.service.js +66 -0
- package/dist/core/resilience/retry.service.js.map +1 -0
- package/dist/core/utils/decorator-scanner.d.ts +4 -0
- package/dist/core/utils/decorator-scanner.js +112 -0
- package/dist/core/utils/decorator-scanner.js.map +1 -0
- package/dist/core/utils/sanitize.util.d.ts +1 -0
- package/dist/core/utils/sanitize.util.js +19 -0
- package/dist/core/utils/sanitize.util.js.map +1 -1
- package/dist/decorators/index.d.ts +3 -0
- package/dist/decorators/index.js +12 -1
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/mcp-error-handler.decorator.d.ts +4 -0
- package/dist/decorators/mcp-error-handler.decorator.js +15 -0
- package/dist/decorators/mcp-error-handler.decorator.js.map +1 -0
- package/dist/decorators/mcp-middleware.decorator.d.ts +4 -0
- package/dist/decorators/mcp-middleware.decorator.js +17 -0
- package/dist/decorators/mcp-middleware.decorator.js.map +1 -0
- package/dist/decorators/mcp-tool.decorator.d.ts +28 -0
- package/dist/decorators/mcp-tool.decorator.js +36 -0
- package/dist/decorators/mcp-tool.decorator.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/interface/interface.interface.d.ts +2 -0
- package/dist/interface/mcp-protocol.interface.d.ts +14 -0
- package/dist/interface/mcp-protocol.interface.js.map +1 -1
- package/dist/resources/resource-registry.service.d.ts +3 -2
- package/dist/resources/resource-registry.service.js +7 -3
- package/dist/resources/resource-registry.service.js.map +1 -1
- package/dist/resources/resource.interface.d.ts +2 -1
- package/dist/standalone/core-services.d.ts +5 -0
- package/dist/standalone/core-services.js +18 -2
- package/dist/standalone/core-services.js.map +1 -1
- package/dist/tooling/tool-registry/tool-registry.service.d.ts +7 -1
- package/dist/tooling/tool-registry/tool-registry.service.js +54 -7
- package/dist/tooling/tool-registry/tool-registry.service.js.map +1 -1
- package/dist/tooling/tool.interface.d.ts +7 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.js +2 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/zod-integration.d.ts +1 -0
- package/dist/validation/zod-integration.js +14 -0
- package/dist/validation/zod-integration.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,21 +4,30 @@ exports.StandalonePromptRegistry = exports.StandaloneResourceRegistry = exports.
|
|
|
4
4
|
const easy_mcp_error_1 = require("../core/errors/easy-mcp-error");
|
|
5
5
|
const schema_validator_1 = require("../core/utils/schema-validator");
|
|
6
6
|
const logger_util_1 = require("../core/utils/logger.util");
|
|
7
|
+
const zod_integration_1 = require("../validation/zod-integration");
|
|
7
8
|
class StandaloneToolRegistry {
|
|
8
9
|
registry = new Map();
|
|
9
10
|
registerTool(toolInput) {
|
|
10
11
|
if (this.registry.has(toolInput.name)) {
|
|
11
12
|
throw new Error(`Tool name '${toolInput.name}' already registered.`);
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
+
let normalizedSchema;
|
|
15
|
+
try {
|
|
16
|
+
normalizedSchema = (0, zod_integration_1.normalizeInputSchema)(toolInput.inputSchema);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
throw new Error(`Tool '${toolInput.name}': invalid inputSchema: ${err instanceof Error ? err.message : String(err)}`);
|
|
20
|
+
}
|
|
21
|
+
if (normalizedSchema.type !== "object") {
|
|
14
22
|
throw new Error(`Tool '${toolInput.name}': inputSchema.type must be "object" for tool definitions`);
|
|
15
23
|
}
|
|
16
24
|
const toolDefinition = {
|
|
17
25
|
name: toolInput.name,
|
|
18
26
|
description: toolInput.description,
|
|
19
27
|
execute: toolInput.function,
|
|
20
|
-
inputSchema:
|
|
28
|
+
inputSchema: normalizedSchema,
|
|
21
29
|
icon: toolInput.icon,
|
|
30
|
+
requiredScopes: toolInput.requiredScopes,
|
|
22
31
|
};
|
|
23
32
|
this.registry.set(toolInput.name, toolDefinition);
|
|
24
33
|
logger_util_1.logger.info("StandaloneToolRegistry", `Tool registered: ${toolInput.name}`, {
|
|
@@ -73,6 +82,13 @@ class StandaloneResourceRegistry {
|
|
|
73
82
|
getAllResources() {
|
|
74
83
|
return Array.from(this.registry.values());
|
|
75
84
|
}
|
|
85
|
+
async getResourceContent(uri, context) {
|
|
86
|
+
const resource = this.registry.get(uri);
|
|
87
|
+
if (!resource) {
|
|
88
|
+
throw new Error("Resource not found");
|
|
89
|
+
}
|
|
90
|
+
return await resource.getContent(context);
|
|
91
|
+
}
|
|
76
92
|
}
|
|
77
93
|
exports.StandaloneResourceRegistry = StandaloneResourceRegistry;
|
|
78
94
|
class StandalonePromptRegistry {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-services.js","sourceRoot":"","sources":["../../src/standalone/core-services.ts"],"names":[],"mappings":";;;AAEA,kEAAsF;AAEtF,qEAAuE;AACvE,2DAAmD;
|
|
1
|
+
{"version":3,"file":"core-services.js","sourceRoot":"","sources":["../../src/standalone/core-services.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { ToolDefinition, ToolParameter } from "../tool.interface";
|
|
2
2
|
import { ToolRegistrationInput } from "../../config/mcp-config.interface";
|
|
3
|
+
import { McpContext } from "../../core/context/mcp-context.interface";
|
|
4
|
+
import { ProgressCallback } from "../../core/progress/progress-notifier.service";
|
|
5
|
+
import { MetricsService } from "../../core/observability/metrics.service";
|
|
3
6
|
export interface LlmToolSchema {
|
|
4
7
|
type: "function";
|
|
5
8
|
function: {
|
|
@@ -14,10 +17,13 @@ export interface LlmToolSchema {
|
|
|
14
17
|
};
|
|
15
18
|
}
|
|
16
19
|
export declare class ToolRegistryService {
|
|
20
|
+
private metricsService?;
|
|
17
21
|
private readonly registry;
|
|
22
|
+
constructor(metricsService?: MetricsService | undefined);
|
|
18
23
|
registerTool(definition: ToolDefinition): void;
|
|
19
24
|
getTool(name: string): ToolDefinition | undefined;
|
|
20
|
-
executeTool(name: string, args: Record<string, any>, cancellationToken?: import("../tool.interface").CancellationToken, context?:
|
|
25
|
+
executeTool(name: string, args: Record<string, any>, cancellationToken?: import("../tool.interface").CancellationToken, context?: McpContext, progress?: ProgressCallback): Promise<any>;
|
|
26
|
+
registerToolsFromDecorators(classes: Array<new (...args: any[]) => any>, instances?: Map<new (...args: any[]) => any, any>): void;
|
|
21
27
|
registerToolFromConfig(toolInput: ToolRegistrationInput): void;
|
|
22
28
|
getToolSchemasForLLM(): LlmToolSchema[];
|
|
23
29
|
private convertToolParameterToJsonSchema;
|
|
@@ -5,14 +5,27 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
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
|
+
};
|
|
8
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
15
|
exports.ToolRegistryService = void 0;
|
|
10
16
|
const common_1 = require("@nestjs/common");
|
|
11
17
|
const easy_mcp_error_1 = require("../../core/errors/easy-mcp-error");
|
|
12
18
|
const logger_util_1 = require("../../core/utils/logger.util");
|
|
13
19
|
const sanitize_util_1 = require("../../core/utils/sanitize.util");
|
|
20
|
+
const decorator_scanner_1 = require("../../core/utils/decorator-scanner");
|
|
21
|
+
const metrics_service_1 = require("../../core/observability/metrics.service");
|
|
22
|
+
const zod_integration_1 = require("../../validation/zod-integration");
|
|
14
23
|
let ToolRegistryService = class ToolRegistryService {
|
|
24
|
+
metricsService;
|
|
15
25
|
registry = new Map();
|
|
26
|
+
constructor(metricsService) {
|
|
27
|
+
this.metricsService = metricsService;
|
|
28
|
+
}
|
|
16
29
|
registerTool(definition) {
|
|
17
30
|
if (this.registry.has(definition.name)) {
|
|
18
31
|
throw new Error(`Tool name '${definition.name}' already registered.`);
|
|
@@ -26,22 +39,52 @@ let ToolRegistryService = class ToolRegistryService {
|
|
|
26
39
|
getTool(name) {
|
|
27
40
|
return this.registry.get(name);
|
|
28
41
|
}
|
|
29
|
-
async executeTool(name, args, cancellationToken, context) {
|
|
42
|
+
async executeTool(name, args, cancellationToken, context, progress) {
|
|
30
43
|
const tool = this.getTool(name);
|
|
31
44
|
if (!tool) {
|
|
32
45
|
throw new easy_mcp_error_1.ToolNotFoundError(name);
|
|
33
46
|
}
|
|
47
|
+
if (tool.requiredScopes && tool.requiredScopes.length > 0) {
|
|
48
|
+
if (!context || !context.scopes || context.scopes.length === 0) {
|
|
49
|
+
throw new easy_mcp_error_1.ToolExecutionError(`Tool '${name}' requires additional permissions`, name);
|
|
50
|
+
}
|
|
51
|
+
const hasAllScopes = tool.requiredScopes.every((scope) => context.scopes.includes(scope));
|
|
52
|
+
if (!hasAllScopes) {
|
|
53
|
+
throw new easy_mcp_error_1.ToolExecutionError(`Tool '${name}' requires additional permissions`, name);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const recordEnd = this.metricsService?.recordToolStart(name);
|
|
34
57
|
try {
|
|
35
|
-
const result = await tool.execute(args, cancellationToken, context);
|
|
58
|
+
const result = await tool.execute(args, cancellationToken, context, progress);
|
|
59
|
+
recordEnd?.();
|
|
36
60
|
return result;
|
|
37
61
|
}
|
|
38
62
|
catch (error) {
|
|
63
|
+
recordEnd?.();
|
|
64
|
+
this.metricsService?.recordToolError(name);
|
|
39
65
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
40
66
|
throw new easy_mcp_error_1.ToolExecutionError(`Tool '${name}' execution failed: ${errorMessage}`, name, error instanceof Error ? error : undefined);
|
|
41
67
|
}
|
|
42
68
|
}
|
|
69
|
+
registerToolsFromDecorators(classes, instances) {
|
|
70
|
+
const tools = (0, decorator_scanner_1.scanClassesForTools)(classes, instances);
|
|
71
|
+
for (const tool of tools) {
|
|
72
|
+
this.registerTool(tool);
|
|
73
|
+
}
|
|
74
|
+
logger_util_1.logger.info("ToolRegistryService", `Registered ${tools.length} tool(s) from decorators`, {
|
|
75
|
+
component: "ToolRegistry",
|
|
76
|
+
toolCount: tools.length,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
43
79
|
registerToolFromConfig(toolInput) {
|
|
44
|
-
|
|
80
|
+
let normalizedSchema;
|
|
81
|
+
try {
|
|
82
|
+
normalizedSchema = (0, zod_integration_1.normalizeInputSchema)(toolInput.inputSchema);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
throw new Error(`Tool '${toolInput.name}': invalid inputSchema: ${err instanceof Error ? err.message : String(err)}`);
|
|
86
|
+
}
|
|
87
|
+
if (normalizedSchema.type !== "object") {
|
|
45
88
|
throw new Error(`Tool '${toolInput.name}': inputSchema.type must be "object" for tool definitions`);
|
|
46
89
|
}
|
|
47
90
|
const toolDefinition = {
|
|
@@ -50,11 +93,12 @@ let ToolRegistryService = class ToolRegistryService {
|
|
|
50
93
|
execute: toolInput.function,
|
|
51
94
|
inputSchema: {
|
|
52
95
|
type: "object",
|
|
53
|
-
properties:
|
|
54
|
-
required:
|
|
55
|
-
...Object.fromEntries(Object.entries(
|
|
96
|
+
properties: normalizedSchema.properties || {},
|
|
97
|
+
required: normalizedSchema.required || [],
|
|
98
|
+
...Object.fromEntries(Object.entries(normalizedSchema).filter(([key]) => !["type", "properties", "required"].includes(key) && (0, sanitize_util_1.isSafeObjectKey)(key))),
|
|
56
99
|
},
|
|
57
100
|
icon: toolInput.icon,
|
|
101
|
+
requiredScopes: toolInput.requiredScopes,
|
|
58
102
|
};
|
|
59
103
|
this.registerTool(toolDefinition);
|
|
60
104
|
}
|
|
@@ -144,12 +188,15 @@ let ToolRegistryService = class ToolRegistryService {
|
|
|
144
188
|
function: tool.execute,
|
|
145
189
|
inputSchema: convertedSchema,
|
|
146
190
|
icon: tool.icon,
|
|
191
|
+
requiredScopes: tool.requiredScopes,
|
|
147
192
|
};
|
|
148
193
|
});
|
|
149
194
|
}
|
|
150
195
|
};
|
|
151
196
|
exports.ToolRegistryService = ToolRegistryService;
|
|
152
197
|
exports.ToolRegistryService = ToolRegistryService = __decorate([
|
|
153
|
-
(0, common_1.Injectable)()
|
|
198
|
+
(0, common_1.Injectable)(),
|
|
199
|
+
__param(0, (0, common_1.Optional)()),
|
|
200
|
+
__metadata("design:paramtypes", [metrics_service_1.MetricsService])
|
|
154
201
|
], ToolRegistryService);
|
|
155
202
|
//# sourceMappingURL=tool-registry.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-registry.service.js","sourceRoot":"","sources":["../../../src/tooling/tool-registry/tool-registry.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-registry.service.js","sourceRoot":"","sources":["../../../src/tooling/tool-registry/tool-registry.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,9 @@ export interface CancellationToken {
|
|
|
19
19
|
cancel: () => void;
|
|
20
20
|
}
|
|
21
21
|
import { McpContext } from "../core/context/mcp-context.interface";
|
|
22
|
-
|
|
22
|
+
import { RateLimitConfig, RetryConfig } from "../decorators/mcp-tool.decorator";
|
|
23
|
+
import { ProgressCallback } from "../core/progress/progress-notifier.service";
|
|
24
|
+
export type ToolFunction = (args: Record<string, any>, cancellationToken?: CancellationToken, context?: McpContext, progress?: ProgressCallback) => Promise<any>;
|
|
23
25
|
export interface ToolDefinition {
|
|
24
26
|
name: string;
|
|
25
27
|
description: string;
|
|
@@ -31,4 +33,8 @@ export interface ToolDefinition {
|
|
|
31
33
|
[key: string]: any;
|
|
32
34
|
};
|
|
33
35
|
icon?: string;
|
|
36
|
+
requiredScopes?: string[];
|
|
37
|
+
rateLimit?: RateLimitConfig;
|
|
38
|
+
retry?: RetryConfig;
|
|
39
|
+
version?: string;
|
|
34
40
|
}
|