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.
Files changed (82) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +417 -0
  3. package/dist/EasyMCP.d.ts +8 -0
  4. package/dist/EasyMCP.js +105 -0
  5. package/dist/EasyMCP.js.map +1 -0
  6. package/dist/app.controller.d.ts +6 -0
  7. package/dist/app.controller.js +35 -0
  8. package/dist/app.controller.js.map +1 -0
  9. package/dist/app.module.d.ts +2 -0
  10. package/dist/app.module.js +34 -0
  11. package/dist/app.module.js.map +1 -0
  12. package/dist/app.service.d.ts +3 -0
  13. package/dist/app.service.js +20 -0
  14. package/dist/app.service.js.map +1 -0
  15. package/dist/config/config-holder.service.d.ts +6 -0
  16. package/dist/config/config-holder.service.js +32 -0
  17. package/dist/config/config-holder.service.js.map +1 -0
  18. package/dist/config/config-validator.d.ts +5 -0
  19. package/dist/config/config-validator.js +78 -0
  20. package/dist/config/config-validator.js.map +1 -0
  21. package/dist/config/constants.d.ts +4 -0
  22. package/dist/config/constants.js +8 -0
  23. package/dist/config/constants.js.map +1 -0
  24. package/dist/config/mcp-config.interface.d.ts +18 -0
  25. package/dist/config/mcp-config.interface.js +3 -0
  26. package/dist/config/mcp-config.interface.js.map +1 -0
  27. package/dist/config/version.d.ts +4 -0
  28. package/dist/config/version.js +41 -0
  29. package/dist/config/version.js.map +1 -0
  30. package/dist/core/core.module.d.ts +2 -0
  31. package/dist/core/core.module.js +24 -0
  32. package/dist/core/core.module.js.map +1 -0
  33. package/dist/core/errors/easy-mcp-error.d.ts +14 -0
  34. package/dist/core/errors/easy-mcp-error.js +39 -0
  35. package/dist/core/errors/easy-mcp-error.js.map +1 -0
  36. package/dist/core/mcp-server/mcp-server.service.d.ts +22 -0
  37. package/dist/core/mcp-server/mcp-server.service.js +285 -0
  38. package/dist/core/mcp-server/mcp-server.service.js.map +1 -0
  39. package/dist/core/utils/logger.util.d.ts +26 -0
  40. package/dist/core/utils/logger.util.js +44 -0
  41. package/dist/core/utils/logger.util.js.map +1 -0
  42. package/dist/core/utils/nestjs-stderr-logger.d.ts +9 -0
  43. package/dist/core/utils/nestjs-stderr-logger.js +123 -0
  44. package/dist/core/utils/nestjs-stderr-logger.js.map +1 -0
  45. package/dist/core/utils/sanitize.util.d.ts +6 -0
  46. package/dist/core/utils/sanitize.util.js +111 -0
  47. package/dist/core/utils/sanitize.util.js.map +1 -0
  48. package/dist/core/utils/schema-validator.d.ts +2 -0
  49. package/dist/core/utils/schema-validator.js +62 -0
  50. package/dist/core/utils/schema-validator.js.map +1 -0
  51. package/dist/index.d.ts +11 -0
  52. package/dist/index.js +22 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/interface/interface.interface.d.ts +4 -0
  55. package/dist/interface/interface.interface.js +3 -0
  56. package/dist/interface/interface.interface.js.map +1 -0
  57. package/dist/interface/interface.module.d.ts +2 -0
  58. package/dist/interface/interface.module.js +29 -0
  59. package/dist/interface/interface.module.js.map +1 -0
  60. package/dist/interface/jsonrpc.interface.d.ts +27 -0
  61. package/dist/interface/jsonrpc.interface.js +42 -0
  62. package/dist/interface/jsonrpc.interface.js.map +1 -0
  63. package/dist/interface/mcp-protocol.interface.d.ts +58 -0
  64. package/dist/interface/mcp-protocol.interface.js +13 -0
  65. package/dist/interface/mcp-protocol.interface.js.map +1 -0
  66. package/dist/interface/mcp.interface.d.ts +44 -0
  67. package/dist/interface/mcp.interface.js +3 -0
  68. package/dist/interface/mcp.interface.js.map +1 -0
  69. package/dist/interface/stdio-gateway.service.d.ts +20 -0
  70. package/dist/interface/stdio-gateway.service.js +373 -0
  71. package/dist/interface/stdio-gateway.service.js.map +1 -0
  72. package/dist/main.d.ts +1 -0
  73. package/dist/main.js +17 -0
  74. package/dist/main.js.map +1 -0
  75. package/dist/tooling/tool-registry/tool-registry.service.d.ts +23 -0
  76. package/dist/tooling/tool-registry/tool-registry.service.js +122 -0
  77. package/dist/tooling/tool-registry/tool-registry.service.js.map +1 -0
  78. package/dist/tooling/tool.interface.d.ts +13 -0
  79. package/dist/tooling/tool.interface.js +3 -0
  80. package/dist/tooling/tool.interface.js.map +1 -0
  81. package/dist/tsconfig.build.tsbuildinfo +1 -0
  82. 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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=tool.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.interface.js","sourceRoot":"","sources":["../../src/tooling/tool.interface.ts"],"names":[],"mappings":""}