easy-mcp-nest 0.1.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/LICENSE +22 -0
- package/README.md +417 -0
- package/dist/EasyMCP.d.ts +8 -0
- package/dist/EasyMCP.js +105 -0
- package/dist/EasyMCP.js.map +1 -0
- package/dist/app.controller.d.ts +6 -0
- package/dist/app.controller.js +35 -0
- package/dist/app.controller.js.map +1 -0
- package/dist/app.module.d.ts +2 -0
- package/dist/app.module.js +34 -0
- package/dist/app.module.js.map +1 -0
- package/dist/app.service.d.ts +3 -0
- package/dist/app.service.js +20 -0
- package/dist/app.service.js.map +1 -0
- package/dist/config/config-holder.service.d.ts +6 -0
- package/dist/config/config-holder.service.js +32 -0
- package/dist/config/config-holder.service.js.map +1 -0
- package/dist/config/config-validator.d.ts +5 -0
- package/dist/config/config-validator.js +78 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/constants.d.ts +4 -0
- package/dist/config/constants.js +8 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/mcp-config.interface.d.ts +18 -0
- package/dist/config/mcp-config.interface.js +3 -0
- package/dist/config/mcp-config.interface.js.map +1 -0
- package/dist/config/version.d.ts +4 -0
- package/dist/config/version.js +41 -0
- package/dist/config/version.js.map +1 -0
- package/dist/core/core.module.d.ts +2 -0
- package/dist/core/core.module.js +24 -0
- package/dist/core/core.module.js.map +1 -0
- package/dist/core/errors/easy-mcp-error.d.ts +14 -0
- package/dist/core/errors/easy-mcp-error.js +39 -0
- package/dist/core/errors/easy-mcp-error.js.map +1 -0
- package/dist/core/mcp-server/mcp-server.service.d.ts +22 -0
- package/dist/core/mcp-server/mcp-server.service.js +285 -0
- package/dist/core/mcp-server/mcp-server.service.js.map +1 -0
- package/dist/core/utils/logger.util.d.ts +26 -0
- package/dist/core/utils/logger.util.js +44 -0
- package/dist/core/utils/logger.util.js.map +1 -0
- package/dist/core/utils/nestjs-stderr-logger.d.ts +9 -0
- package/dist/core/utils/nestjs-stderr-logger.js +123 -0
- package/dist/core/utils/nestjs-stderr-logger.js.map +1 -0
- package/dist/core/utils/sanitize.util.d.ts +6 -0
- package/dist/core/utils/sanitize.util.js +111 -0
- package/dist/core/utils/sanitize.util.js.map +1 -0
- package/dist/core/utils/schema-validator.d.ts +2 -0
- package/dist/core/utils/schema-validator.js +62 -0
- package/dist/core/utils/schema-validator.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/interface/interface.interface.d.ts +4 -0
- package/dist/interface/interface.interface.js +3 -0
- package/dist/interface/interface.interface.js.map +1 -0
- package/dist/interface/interface.module.d.ts +2 -0
- package/dist/interface/interface.module.js +29 -0
- package/dist/interface/interface.module.js.map +1 -0
- package/dist/interface/jsonrpc.interface.d.ts +27 -0
- package/dist/interface/jsonrpc.interface.js +42 -0
- package/dist/interface/jsonrpc.interface.js.map +1 -0
- package/dist/interface/mcp-protocol.interface.d.ts +58 -0
- package/dist/interface/mcp-protocol.interface.js +13 -0
- package/dist/interface/mcp-protocol.interface.js.map +1 -0
- package/dist/interface/mcp.interface.d.ts +44 -0
- package/dist/interface/mcp.interface.js +3 -0
- package/dist/interface/mcp.interface.js.map +1 -0
- package/dist/interface/stdio-gateway.service.d.ts +20 -0
- package/dist/interface/stdio-gateway.service.js +373 -0
- package/dist/interface/stdio-gateway.service.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +17 -0
- package/dist/main.js.map +1 -0
- package/dist/tooling/tool-registry/tool-registry.service.d.ts +23 -0
- package/dist/tooling/tool-registry/tool-registry.service.js +122 -0
- package/dist/tooling/tool-registry/tool-registry.service.js.map +1 -0
- package/dist/tooling/tool.interface.d.ts +13 -0
- package/dist/tooling/tool.interface.js +3 -0
- package/dist/tooling/tool.interface.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,122 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ToolRegistryService = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const easy_mcp_error_1 = require("../../core/errors/easy-mcp-error");
|
|
12
|
+
const logger_util_1 = require("../../core/utils/logger.util");
|
|
13
|
+
let ToolRegistryService = class ToolRegistryService {
|
|
14
|
+
registry = new Map();
|
|
15
|
+
registerTool(definition) {
|
|
16
|
+
if (this.registry.has(definition.name)) {
|
|
17
|
+
throw new Error(`Tool name '${definition.name}' already registered.`);
|
|
18
|
+
}
|
|
19
|
+
this.registry.set(definition.name, definition);
|
|
20
|
+
logger_util_1.logger.info("ToolRegistryService", `Tool registered: ${definition.name}`, {
|
|
21
|
+
component: "ToolRegistry",
|
|
22
|
+
toolName: definition.name,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
getTool(name) {
|
|
26
|
+
return this.registry.get(name);
|
|
27
|
+
}
|
|
28
|
+
async executeTool(name, args) {
|
|
29
|
+
const tool = this.getTool(name);
|
|
30
|
+
if (!tool) {
|
|
31
|
+
throw new easy_mcp_error_1.ToolNotFoundError(name);
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const result = await tool.execute(args);
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
39
|
+
throw new easy_mcp_error_1.ToolExecutionError(`Tool '${name}' execution failed: ${errorMessage}`, name, error instanceof Error ? error : undefined);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
registerToolFromConfig(toolInput) {
|
|
43
|
+
const parameters = {};
|
|
44
|
+
for (const [key, prop] of Object.entries(toolInput.inputSchema.properties)) {
|
|
45
|
+
const typeMap = {
|
|
46
|
+
'STRING': 'string',
|
|
47
|
+
'NUMBER': 'number',
|
|
48
|
+
'INTEGER': 'integer',
|
|
49
|
+
'BOOLEAN': 'boolean',
|
|
50
|
+
'ARRAY': 'array',
|
|
51
|
+
'OBJECT': 'object',
|
|
52
|
+
};
|
|
53
|
+
const lowerType = typeMap[prop.type];
|
|
54
|
+
if (!lowerType) {
|
|
55
|
+
throw new Error(`Tool '${toolInput.name}': Unsupported property type '${prop.type}' for property '${key}'. Must be one of: STRING, NUMBER, INTEGER, BOOLEAN, ARRAY, OBJECT`);
|
|
56
|
+
}
|
|
57
|
+
parameters[key] = {
|
|
58
|
+
type: lowerType,
|
|
59
|
+
description: prop.description || '',
|
|
60
|
+
...(prop.enum && { enum: prop.enum }),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const required = toolInput.inputSchema.required || [];
|
|
64
|
+
const toolDefinition = {
|
|
65
|
+
name: toolInput.name,
|
|
66
|
+
description: toolInput.description,
|
|
67
|
+
execute: toolInput.function,
|
|
68
|
+
parameters,
|
|
69
|
+
required,
|
|
70
|
+
};
|
|
71
|
+
this.registerTool(toolDefinition);
|
|
72
|
+
}
|
|
73
|
+
getToolSchemasForLLM() {
|
|
74
|
+
return Array.from(this.registry.values()).map((tool) => ({
|
|
75
|
+
type: "function",
|
|
76
|
+
function: {
|
|
77
|
+
name: tool.name,
|
|
78
|
+
description: tool.description,
|
|
79
|
+
parameters: {
|
|
80
|
+
type: "object",
|
|
81
|
+
properties: tool.parameters,
|
|
82
|
+
required: tool.required,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
getToolsAsRegistrationInput() {
|
|
88
|
+
return Array.from(this.registry.values()).map((tool) => {
|
|
89
|
+
const properties = {};
|
|
90
|
+
for (const [key, param] of Object.entries(tool.parameters)) {
|
|
91
|
+
const typeMap = {
|
|
92
|
+
'string': 'STRING',
|
|
93
|
+
'number': 'NUMBER',
|
|
94
|
+
'integer': 'INTEGER',
|
|
95
|
+
'boolean': 'BOOLEAN',
|
|
96
|
+
'array': 'ARRAY',
|
|
97
|
+
'object': 'OBJECT',
|
|
98
|
+
};
|
|
99
|
+
properties[key] = {
|
|
100
|
+
type: typeMap[param.type] || 'STRING',
|
|
101
|
+
description: param.description,
|
|
102
|
+
...(param.enum && { enum: param.enum }),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
name: tool.name,
|
|
107
|
+
description: tool.description,
|
|
108
|
+
function: tool.execute,
|
|
109
|
+
inputSchema: {
|
|
110
|
+
type: 'OBJECT',
|
|
111
|
+
properties,
|
|
112
|
+
required: tool.required,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
exports.ToolRegistryService = ToolRegistryService;
|
|
119
|
+
exports.ToolRegistryService = ToolRegistryService = __decorate([
|
|
120
|
+
(0, common_1.Injectable)()
|
|
121
|
+
], ToolRegistryService);
|
|
122
|
+
//# sourceMappingURL=tool-registry.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.service.js","sourceRoot":"","sources":["../../../src/tooling/tool-registry/tool-registry.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ToolParameter {
|
|
2
|
+
type: "string" | "number" | "integer" | "boolean" | "array" | "object";
|
|
3
|
+
description: string;
|
|
4
|
+
enum?: string[];
|
|
5
|
+
}
|
|
6
|
+
export type ToolFunction = (args: Record<string, any>) => Promise<any>;
|
|
7
|
+
export interface ToolDefinition {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
execute: ToolFunction;
|
|
11
|
+
parameters: Record<string, ToolParameter>;
|
|
12
|
+
required: string[];
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.interface.js","sourceRoot":"","sources":["../../src/tooling/tool.interface.ts"],"names":[],"mappings":""}
|